diff --git a/parameter/EnumParameterType.cpp b/parameter/EnumParameterType.cpp index 6eea69453..468b6c609 100644 --- a/parameter/EnumParameterType.cpp +++ b/parameter/EnumParameterType.cpp @@ -32,6 +32,8 @@ #include "ParameterAccessContext.h" #include "convert.hpp" +#include + #define base CParameterType using std::string; @@ -129,20 +131,46 @@ int32_t CEnumParameterType::getMax() const } bool CEnumParameterType::fromBlackboard(string &userValue, const uint32_t &value, - CParameterAccessContext & /*ctx*/) const + CParameterAccessContext &ctx) const { // Convert the raw value from the blackboard int32_t signedValue = static_cast(value); signExtend(signedValue); - // Convert from numerical space to literal space - return getLiteral(signedValue, userValue); + // Take care of format + if (ctx.valueSpaceIsRaw()) { + + // Format + std::ostringstream sstream; + + // Numerical format requested + if (ctx.outputRawFormatIsHex()) { + + // Hexa display with unecessary bits cleared out + sstream << "0x" << std::hex << std::uppercase + << std::setw(static_cast(getSize() * 2)) << std::setfill('0') + << makeEncodable(value); + + userValue = sstream.str(); + } else { + userValue = std::to_string(value); + } + } else { + // Literal display requested (should succeed) + getLiteral(signedValue, userValue); + } + return true; } // Value access bool CEnumParameterType::toBlackboard(int32_t userValue, uint32_t &value, CParameterAccessContext ¶meterAccessContext) const { + // Take care of format + if (parameterAccessContext.valueSpaceIsRaw()) { + signExtend(userValue); + } + if (!checkValueAgainstSpace(userValue)) { parameterAccessContext.setError(std::to_string(userValue) + diff --git a/test/functional-tests/Handle.cpp b/test/functional-tests/Handle.cpp index d7aafb9ab..fd25da8d0 100644 --- a/test/functional-tests/Handle.cpp +++ b/test/functional-tests/Handle.cpp @@ -384,8 +384,8 @@ static const char *testRawHexBasicSettingsXML = R"( 0xFFFFFFF6 0x00000000 0x00000008 0x0000000A 0x24000000 0x72000000 0x0B000000 0xF0000000 - five - eight min eight min + 0x05 + 0x0008 0x8001 0x0008 0x8001 A string of 32 character.@@@@@@@ 0x1