Update FSFW from upstream #71
@ -68,13 +68,6 @@ class SerializeIF {
|
|||||||
size_t maxSize) const {
|
size_t maxSize) const {
|
||||||
return serialize(buffer, size, maxSize, SerializeIF::Endianness::NETWORK);
|
return serialize(buffer, size, maxSize, SerializeIF::Endianness::NETWORK);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* If endianness is not explicitly specified, use machine endianness
|
|
||||||
*/
|
|
||||||
[[nodiscard]] virtual ReturnValue_t serialize(uint8_t **buffer, size_t *size,
|
|
||||||
size_t maxSize) const {
|
|
||||||
return serialize(buffer, size, maxSize, SerializeIF::Endianness::MACHINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the size of a object if it would be serialized in a buffer
|
* Gets the size of a object if it would be serialized in a buffer
|
||||||
@ -110,12 +103,6 @@ class SerializeIF {
|
|||||||
virtual ReturnValue_t deSerializeBe(const uint8_t **buffer, size_t *size) {
|
virtual ReturnValue_t deSerializeBe(const uint8_t **buffer, size_t *size) {
|
||||||
return deSerialize(buffer, size, SerializeIF::Endianness::NETWORK);
|
return deSerialize(buffer, size, SerializeIF::Endianness::NETWORK);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* If endianness is not explicitly specified, use machine endianness
|
|
||||||
*/
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t **buffer, size_t *size) {
|
|
||||||
return deSerialize(buffer, size, SerializeIF::Endianness::MACHINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper method which can be used if serialization should be performed without any additional
|
* Helper method which can be used if serialization should be performed without any additional
|
||||||
@ -139,13 +126,6 @@ class SerializeIF {
|
|||||||
size_t maxSize) const {
|
size_t maxSize) const {
|
||||||
return serialize(buffer, serLen, maxSize, SerializeIF::Endianness::NETWORK);
|
return serialize(buffer, serLen, maxSize, SerializeIF::Endianness::NETWORK);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* If endianness is not explicitly specified, use machine endianness
|
|
||||||
*/
|
|
||||||
[[nodiscard]] virtual ReturnValue_t serialize(uint8_t *buffer, size_t &serLen,
|
|
||||||
size_t maxSize) const {
|
|
||||||
return serialize(buffer, serLen, maxSize, SerializeIF::Endianness::MACHINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper methods which can be used if deserialization should be performed without any additional
|
* Helper methods which can be used if deserialization should be performed without any additional
|
||||||
@ -168,12 +148,6 @@ class SerializeIF {
|
|||||||
virtual ReturnValue_t deSerializeBe(const uint8_t *buffer, size_t &deserSize, size_t maxSize) {
|
virtual ReturnValue_t deSerializeBe(const uint8_t *buffer, size_t &deserSize, size_t maxSize) {
|
||||||
return deSerialize(buffer, deserSize, maxSize, SerializeIF::Endianness::NETWORK);
|
return deSerialize(buffer, deserSize, maxSize, SerializeIF::Endianness::NETWORK);
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* If endianness is not explicitly specified, use machine endianness
|
|
||||||
*/
|
|
||||||
virtual ReturnValue_t deSerialize(const uint8_t *buffer, size_t &deserSize, size_t maxSize) {
|
|
||||||
return deSerialize(buffer, deserSize, maxSize, SerializeIF::Endianness::MACHINE);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* FSFW_SERIALIZE_SERIALIZEIF_H_ */
|
#endif /* FSFW_SERIALIZE_SERIALIZEIF_H_ */
|
||||||
|
@ -286,26 +286,22 @@ ReturnValue_t MgmLIS3MDLHandler::interpretDeviceReply(DeviceCommandId_t id, cons
|
|||||||
|
|
||||||
PoolReadGuard readHelper(&dataset);
|
PoolReadGuard readHelper(&dataset);
|
||||||
if (readHelper.getReadResult() == HasReturnvaluesIF::RETURN_OK) {
|
if (readHelper.getReadResult() == HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
if (std::abs(mgmX) > absLimitX or std::abs(mgmY) > absLimitY or
|
||||||
|
std::abs(mgmZ) > absLimitZ) {
|
||||||
|
dataset.fieldStrengths.setValid(false);
|
||||||
|
}
|
||||||
if (std::abs(mgmX) < absLimitX) {
|
if (std::abs(mgmX) < absLimitX) {
|
||||||
dataset.fieldStrengthX = mgmX;
|
dataset.fieldStrengths[0] = mgmX;
|
||||||
dataset.fieldStrengthX.setValid(true);
|
|
||||||
} else {
|
|
||||||
dataset.fieldStrengthX.setValid(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (std::abs(mgmY) < absLimitY) {
|
if (std::abs(mgmY) < absLimitY) {
|
||||||
dataset.fieldStrengthY = mgmY;
|
dataset.fieldStrengths[1] = mgmY;
|
||||||
dataset.fieldStrengthY.setValid(true);
|
|
||||||
} else {
|
|
||||||
dataset.fieldStrengthY.setValid(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (std::abs(mgmZ) < absLimitZ) {
|
if (std::abs(mgmZ) < absLimitZ) {
|
||||||
dataset.fieldStrengthZ = mgmZ;
|
dataset.fieldStrengths[2] = mgmZ;
|
||||||
dataset.fieldStrengthZ.setValid(true);
|
|
||||||
} else {
|
|
||||||
dataset.fieldStrengthZ.setValid(false);
|
|
||||||
}
|
}
|
||||||
|
dataset.fieldStrengths.setValid(true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -468,10 +464,9 @@ void MgmLIS3MDLHandler::modeChanged(void) { internalState = InternalState::STATE
|
|||||||
|
|
||||||
ReturnValue_t MgmLIS3MDLHandler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
ReturnValue_t MgmLIS3MDLHandler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
||||||
LocalDataPoolManager &poolManager) {
|
LocalDataPoolManager &poolManager) {
|
||||||
localDataPoolMap.emplace(MGMLIS3MDL::FIELD_STRENGTH_X, new PoolEntry<float>({0.0}));
|
localDataPoolMap.emplace(MGMLIS3MDL::FIELD_STRENGTHS, &mgmXYZ);
|
||||||
localDataPoolMap.emplace(MGMLIS3MDL::FIELD_STRENGTH_Y, new PoolEntry<float>({0.0}));
|
localDataPoolMap.emplace(MGMLIS3MDL::TEMPERATURE_CELCIUS, &temperature);
|
||||||
localDataPoolMap.emplace(MGMLIS3MDL::FIELD_STRENGTH_Z, new PoolEntry<float>({0.0}));
|
poolManager.subscribeForPeriodicPacket(dataset.getSid(), false, 10.0, false);
|
||||||
localDataPoolMap.emplace(MGMLIS3MDL::TEMPERATURE_CELCIUS, new PoolEntry<float>({0.0}));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,6 +103,8 @@ class MgmLIS3MDLHandler : public DeviceHandlerBase {
|
|||||||
CommunicationStep communicationStep = CommunicationStep::DATA;
|
CommunicationStep communicationStep = CommunicationStep::DATA;
|
||||||
bool commandExecuted = false;
|
bool commandExecuted = false;
|
||||||
|
|
||||||
|
PoolEntry<float> mgmXYZ = PoolEntry<float>(3);
|
||||||
|
PoolEntry<float> temperature = PoolEntry<float>();
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
/* Device specific commands and variables */
|
/* Device specific commands and variables */
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
@ -309,9 +309,8 @@ void MgmRM3100Handler::modeChanged(void) { internalState = InternalState::NONE;
|
|||||||
|
|
||||||
ReturnValue_t MgmRM3100Handler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
ReturnValue_t MgmRM3100Handler::initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
|
||||||
LocalDataPoolManager &poolManager) {
|
LocalDataPoolManager &poolManager) {
|
||||||
localDataPoolMap.emplace(RM3100::FIELD_STRENGTH_X, new PoolEntry<float>({0.0}));
|
localDataPoolMap.emplace(RM3100::FIELD_STRENGTHS, &mgmXYZ);
|
||||||
localDataPoolMap.emplace(RM3100::FIELD_STRENGTH_Y, new PoolEntry<float>({0.0}));
|
poolManager.subscribeForPeriodicPacket(primaryDataset.getSid(), false, 10.0, false);
|
||||||
localDataPoolMap.emplace(RM3100::FIELD_STRENGTH_Z, new PoolEntry<float>({0.0}));
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,9 +353,9 @@ ReturnValue_t MgmRM3100Handler::handleDataReadout(const uint8_t *packet) {
|
|||||||
// TODO: Sanity check on values?
|
// TODO: Sanity check on values?
|
||||||
PoolReadGuard readGuard(&primaryDataset);
|
PoolReadGuard readGuard(&primaryDataset);
|
||||||
if (readGuard.getReadResult() == HasReturnvaluesIF::RETURN_OK) {
|
if (readGuard.getReadResult() == HasReturnvaluesIF::RETURN_OK) {
|
||||||
primaryDataset.fieldStrengthX = fieldStrengthX;
|
primaryDataset.fieldStrengths[0] = fieldStrengthX;
|
||||||
primaryDataset.fieldStrengthY = fieldStrengthY;
|
primaryDataset.fieldStrengths[1] = fieldStrengthY;
|
||||||
primaryDataset.fieldStrengthZ = fieldStrengthZ;
|
primaryDataset.fieldStrengths[2] = fieldStrengthZ;
|
||||||
primaryDataset.setValidity(true, true);
|
primaryDataset.setValidity(true, true);
|
||||||
}
|
}
|
||||||
return RETURN_OK;
|
return RETURN_OK;
|
||||||
|
@ -85,6 +85,7 @@ class MgmRM3100Handler : public DeviceHandlerBase {
|
|||||||
|
|
||||||
bool goToNormalModeAtStartup = false;
|
bool goToNormalModeAtStartup = false;
|
||||||
uint32_t transitionDelay;
|
uint32_t transitionDelay;
|
||||||
|
PoolEntry<float> mgmXYZ = PoolEntry<float>(3);
|
||||||
|
|
||||||
ReturnValue_t handleCycleCountConfigCommand(DeviceCommandId_t deviceCommand,
|
ReturnValue_t handleCycleCountConfigCommand(DeviceCommandId_t deviceCommand,
|
||||||
const uint8_t *commandData, size_t commandDataLen);
|
const uint8_t *commandData, size_t commandDataLen);
|
||||||
|
@ -139,12 +139,7 @@ static const uint8_t CTRL_REG5_DEFAULT = 0;
|
|||||||
|
|
||||||
static const uint32_t MGM_DATA_SET_ID = READ_CONFIG_AND_DATA;
|
static const uint32_t MGM_DATA_SET_ID = READ_CONFIG_AND_DATA;
|
||||||
|
|
||||||
enum MgmPoolIds : lp_id_t {
|
enum MgmPoolIds : lp_id_t { FIELD_STRENGTHS, TEMPERATURE_CELCIUS };
|
||||||
FIELD_STRENGTH_X,
|
|
||||||
FIELD_STRENGTH_Y,
|
|
||||||
FIELD_STRENGTH_Z,
|
|
||||||
TEMPERATURE_CELCIUS
|
|
||||||
};
|
|
||||||
|
|
||||||
class MgmPrimaryDataset : public StaticLocalDataSet<4> {
|
class MgmPrimaryDataset : public StaticLocalDataSet<4> {
|
||||||
public:
|
public:
|
||||||
@ -152,9 +147,10 @@ class MgmPrimaryDataset : public StaticLocalDataSet<4> {
|
|||||||
|
|
||||||
MgmPrimaryDataset(object_id_t mgmId) : StaticLocalDataSet(sid_t(mgmId, MGM_DATA_SET_ID)) {}
|
MgmPrimaryDataset(object_id_t mgmId) : StaticLocalDataSet(sid_t(mgmId, MGM_DATA_SET_ID)) {}
|
||||||
|
|
||||||
lp_var_t<float> fieldStrengthX = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_X, this);
|
/**
|
||||||
lp_var_t<float> fieldStrengthY = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_Y, this);
|
* Field strenghts in uT
|
||||||
lp_var_t<float> fieldStrengthZ = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_Z, this);
|
*/
|
||||||
|
lp_vec_t<float, 3> fieldStrengths = lp_vec_t<float, 3>(sid.objectId, FIELD_STRENGTHS, this);
|
||||||
lp_var_t<float> temperature = lp_var_t<float>(sid.objectId, TEMPERATURE_CELCIUS, this);
|
lp_var_t<float> temperature = lp_var_t<float>(sid.objectId, TEMPERATURE_CELCIUS, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -101,11 +101,7 @@ class CycleCountCommand : public SerialLinkedListAdapter<SerializeIF> {
|
|||||||
|
|
||||||
static constexpr uint32_t MGM_DATASET_ID = READ_DATA;
|
static constexpr uint32_t MGM_DATASET_ID = READ_DATA;
|
||||||
|
|
||||||
enum MgmPoolIds : lp_id_t {
|
enum MgmPoolIds : lp_id_t { FIELD_STRENGTHS };
|
||||||
FIELD_STRENGTH_X,
|
|
||||||
FIELD_STRENGTH_Y,
|
|
||||||
FIELD_STRENGTH_Z,
|
|
||||||
};
|
|
||||||
|
|
||||||
class Rm3100PrimaryDataset : public StaticLocalDataSet<3> {
|
class Rm3100PrimaryDataset : public StaticLocalDataSet<3> {
|
||||||
public:
|
public:
|
||||||
@ -113,10 +109,10 @@ class Rm3100PrimaryDataset : public StaticLocalDataSet<3> {
|
|||||||
|
|
||||||
Rm3100PrimaryDataset(object_id_t mgmId) : StaticLocalDataSet(sid_t(mgmId, MGM_DATASET_ID)) {}
|
Rm3100PrimaryDataset(object_id_t mgmId) : StaticLocalDataSet(sid_t(mgmId, MGM_DATASET_ID)) {}
|
||||||
|
|
||||||
// Field strengths in micro Tesla.
|
/**
|
||||||
lp_var_t<float> fieldStrengthX = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_X, this);
|
* Field strenghts in uT
|
||||||
lp_var_t<float> fieldStrengthY = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_Y, this);
|
*/
|
||||||
lp_var_t<float> fieldStrengthZ = lp_var_t<float>(sid.objectId, FIELD_STRENGTH_Z, this);
|
lp_vec_t<float, 3> fieldStrengths = lp_vec_t<float, 3>(sid.objectId, FIELD_STRENGTHS, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace RM3100
|
} // namespace RM3100
|
||||||
|
@ -76,37 +76,6 @@ TEST_CASE("Serialize IF Serialize", "[serialize-if-ser]") {
|
|||||||
CHECK(buf[2] == 3);
|
CHECK(buf[2] == 3);
|
||||||
CHECK(serLen == 3);
|
CHECK(serLen == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Machine Endian Implicit") {
|
|
||||||
REQUIRE(simpleSer.SerializeIF::serialize(&ptr, &len, buf.size()) ==
|
|
||||||
HasReturnvaluesIF::RETURN_OK);
|
|
||||||
CHECK(buf[0] == 1);
|
|
||||||
#if BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
CHECK(buf[1] == 3);
|
|
||||||
CHECK(buf[2] == 2);
|
|
||||||
#else
|
|
||||||
CHECK(buf[1] == 2);
|
|
||||||
CHECK(buf[2] == 3);
|
|
||||||
#endif
|
|
||||||
// Verify pointer arithmetic and size increment
|
|
||||||
CHECK(ptr == buf.data() + 3);
|
|
||||||
CHECK(len == 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Machine Endian Simple Implicit") {
|
|
||||||
size_t serLen = 0xff;
|
|
||||||
REQUIRE(simpleSer.SerializeIF::serialize(buf.data(), serLen, buf.size()) ==
|
|
||||||
HasReturnvaluesIF::RETURN_OK);
|
|
||||||
CHECK(buf[0] == 1);
|
|
||||||
#if BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
CHECK(buf[1] == 3);
|
|
||||||
CHECK(buf[2] == 2);
|
|
||||||
#else
|
|
||||||
CHECK(buf[1] == 2);
|
|
||||||
CHECK(buf[2] == 3);
|
|
||||||
#endif
|
|
||||||
CHECK(serLen == 3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("SerializeIF Deserialize", "[serialize-if-de]") {
|
TEST_CASE("SerializeIF Deserialize", "[serialize-if-de]") {
|
||||||
@ -172,30 +141,4 @@ TEST_CASE("SerializeIF Deserialize", "[serialize-if-de]") {
|
|||||||
CHECK(simpleSer.getU16() == 1);
|
CHECK(simpleSer.getU16() == 1);
|
||||||
CHECK(deserLen == 3);
|
CHECK(deserLen == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Machine Endian Implicit") {
|
|
||||||
REQUIRE(simpleSer.SerializeIF::deSerialize(&ptr, &len) == HasReturnvaluesIF::RETURN_OK);
|
|
||||||
CHECK(simpleSer.getU8() == 5);
|
|
||||||
#if BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
CHECK(simpleSer.getU16() == 0x0100);
|
|
||||||
#else
|
|
||||||
CHECK(simpleSer.getU16() == 1);
|
|
||||||
#endif
|
|
||||||
// Verify pointer arithmetic and size increment
|
|
||||||
CHECK(ptr == buf.data() + 3);
|
|
||||||
CHECK(len == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Machine Endian Simple Implicit") {
|
|
||||||
size_t deserLen = 0xff;
|
|
||||||
REQUIRE(simpleSer.SerializeIF::deSerialize(buf.data(), deserLen, buf.size()) ==
|
|
||||||
HasReturnvaluesIF::RETURN_OK);
|
|
||||||
CHECK(simpleSer.getU8() == 5);
|
|
||||||
#if BYTE_ORDER_SYSTEM == LITTLE_ENDIAN
|
|
||||||
CHECK(simpleSer.getU16() == 0x0100);
|
|
||||||
#else
|
|
||||||
CHECK(simpleSer.getU16() == 1);
|
|
||||||
#endif
|
|
||||||
CHECK(deserLen == 3);
|
|
||||||
}
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user