Skip to content
This repository was archived by the owner on Aug 5, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 31 additions & 3 deletions parameter/EnumParameterType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
#include "ParameterAccessContext.h"
#include "convert.hpp"

#include <iomanip>

#define base CParameterType

using std::string;
Expand Down Expand Up @@ -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<int32_t>(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<int>(getSize() * 2)) << std::setfill('0')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pretty sure this static cast is not useful. Or maybe only to go from unsigned to signed ?

<< 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 &parameterAccessContext) const
{
// Take care of format
if (parameterAccessContext.valueSpaceIsRaw()) {
signExtend(userValue);
}

if (!checkValueAgainstSpace(userValue)) {

parameterAccessContext.setError(std::to_string(userValue) +
Expand Down
4 changes: 2 additions & 2 deletions test/functional-tests/Handle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -384,8 +384,8 @@ static const char *testRawHexBasicSettingsXML = R"(
<IntegerParameter Name="integer_array">0xFFFFFFF6 0x00000000 0x00000008 0x0000000A</IntegerParameter>
<FixedPointParameter ValueSpace="Raw" Name="fix_point">0x24000000</FixedPointParameter>
<FixedPointParameter ValueSpace="Raw" Name="fix_point_array">0x72000000 0x0B000000 0xF0000000</FixedPointParameter>
<EnumParameter Name="enum">five</EnumParameter>
<EnumParameter Name="enum_array">eight min eight min</EnumParameter>
<EnumParameter Name="enum">0x05</EnumParameter>
<EnumParameter Name="enum_array">0x0008 0x8001 0x0008 0x8001</EnumParameter>
<StringParameter Name="string">A string of 32 character.@@@@@@@</StringParameter>
<BitParameterBlock Name="bit_block">
<BitParameter Name="one">0x1</BitParameter>
Expand Down