diff --git a/CHANGELOG.md b/CHANGELOG.md index 739067cc..54edd113 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,10 @@ will consitute of a breaking change warranting a new major release: - Moved polling of all SPI parts to the same PST. +## Fixed + +- IMTQ: Sets were filled with wrong data, e.g. Raw MTM was filled with calibrated MTM measurements. + # [v1.33.0] eive-tmtc: v2.16.2 diff --git a/mission/controller/AcsController.cpp b/mission/controller/AcsController.cpp index f3269285..c0853695 100644 --- a/mission/controller/AcsController.cpp +++ b/mission/controller/AcsController.cpp @@ -661,7 +661,6 @@ void AcsController::announceMode(bool recursive) { } void AcsController::copyMgmData() { - ACS::SensorValues sensorValues; { PoolReadGuard pg(&sensorValues.mgm0Lis3Set); if (pg.getReadResult() == returnvalue::OK) { @@ -806,7 +805,6 @@ void AcsController::copySusData() { } void AcsController::copyGyrData() { - ACS::SensorValues sensorValues; { PoolReadGuard pg(&sensorValues.gyr0AdisSet); if (pg.getReadResult() == returnvalue::OK) { diff --git a/mission/devices/ImtqHandler.cpp b/mission/devices/ImtqHandler.cpp index aa935ce5..5c5bdb61 100644 --- a/mission/devices/ImtqHandler.cpp +++ b/mission/devices/ImtqHandler.cpp @@ -312,7 +312,7 @@ ReturnValue_t ImtqHandler::interpretDeviceReply(DeviceCommandId_t id, const uint uint8_t* rawMgmMeasurement = replies.getRawMgmMeasurement(); result = parseStatusByte(imtq::CC::GET_RAW_MTM_MEASUREMENT, rawMgmMeasurement); if (result == returnvalue::OK) { - fillRawMtmDataset(rawMgmMeasurement); + fillRawMtmDataset(rawMtmNoTorque, rawMgmMeasurement); } else { status = result; } @@ -323,7 +323,7 @@ ReturnValue_t ImtqHandler::interpretDeviceReply(DeviceCommandId_t id, const uint uint8_t* calibMgmMeasurement = replies.getCalibMgmMeasurement(); result = parseStatusByte(imtq::CC::GET_CAL_MTM_MEASUREMENT, calibMgmMeasurement); if (result == returnvalue::OK) { - fillRawMtmDataset(calibMgmMeasurement); + fillCalibratedMtmDataset(calibMgmMeasurement); } else { status = result; } @@ -345,7 +345,7 @@ ReturnValue_t ImtqHandler::interpretDeviceReply(DeviceCommandId_t id, const uint uint8_t* rawMgmMeasurement = replies.getRawMgmMeasurement(); result = parseStatusByte(imtq::CC::GET_RAW_MTM_MEASUREMENT, rawMgmMeasurement); if (result == returnvalue::OK) { - fillRawMtmDataset(rawMgmMeasurement); + fillRawMtmDataset(rawMtmWithTorque, rawMgmMeasurement); } else { status = result; } @@ -361,7 +361,7 @@ ReturnValue_t ImtqHandler::interpretDeviceReply(DeviceCommandId_t id, const uint } else { status = result; } - fillEngHkDataset(hkDatasetNoTorque, engHkReply); + fillEngHkDataset(hkDatasetWithTorque, engHkReply); if (firstReplyCycle) { firstReplyCycle = false; } @@ -847,8 +847,11 @@ void ImtqHandler::fillCalibratedMtmDataset(const uint8_t* packet) { } } -void ImtqHandler::fillRawMtmDataset(const uint8_t* packet) { - PoolReadGuard rg(&rawMtmNoTorque); +void ImtqHandler::fillRawMtmDataset(imtq::RawMtmMeasurementSet& set, const uint8_t* packet) { + PoolReadGuard rg(&set); + if(rg.getReadResult() != returnvalue::OK) { + sif::error << "ImtqHandler::fillRawMtmDataset: Lock failure" << std::endl; + } unsigned int offset = 2; size_t deSerLen = 16; const uint8_t* dataStart = packet + offset; @@ -876,18 +879,18 @@ void ImtqHandler::fillRawMtmDataset(const uint8_t* packet) { if (res != returnvalue::OK) { return; } - rawMtmNoTorque.mtmRawNt[0] = xRaw * 7.5; - rawMtmNoTorque.mtmRawNt[1] = yRaw * 7.5; - rawMtmNoTorque.mtmRawNt[2] = zRaw * 7.5; - rawMtmNoTorque.coilActuationStatus = static_cast(coilActStatus); - rawMtmNoTorque.setValidity(true, true); + set.mtmRawNt[0] = static_cast(xRaw) * 7.5; + set.mtmRawNt[1] = static_cast(yRaw) * 7.5; + set.mtmRawNt[2] = static_cast(zRaw) * 7.5; + set.coilActuationStatus = static_cast(coilActStatus); + set.setValidity(true, true); if (debugMode) { #if OBSW_VERBOSE_LEVEL >= 1 - sif::info << "IMTQ raw MTM measurement X: " << rawMtmNoTorque.mtmRawNt[0] << " nT" << std::endl; - sif::info << "IMTQ raw MTM measurement Y: " << rawMtmNoTorque.mtmRawNt[1] << " nT" << std::endl; - sif::info << "IMTQ raw MTM measurement Z: " << rawMtmNoTorque.mtmRawNt[2] << " nT" << std::endl; + sif::info << "IMTQ raw MTM measurement X: " << set.mtmRawNt[0] << " nT" << std::endl; + sif::info << "IMTQ raw MTM measurement Y: " << set.mtmRawNt[1] << " nT" << std::endl; + sif::info << "IMTQ raw MTM measurement Z: " << set.mtmRawNt[2] << " nT" << std::endl; sif::info << "IMTQ coil actuation status during MTM measurement: " - << (unsigned int)rawMtmNoTorque.coilActuationStatus.value << std::endl; + << (unsigned int)set.coilActuationStatus.value << std::endl; #endif } } diff --git a/mission/devices/ImtqHandler.h b/mission/devices/ImtqHandler.h index a674f85b..419fad33 100644 --- a/mission/devices/ImtqHandler.h +++ b/mission/devices/ImtqHandler.h @@ -159,7 +159,7 @@ class ImtqHandler : public DeviceHandlerBase { * @param packet Pointer to the reply data requested with the GET_RAW_MTM_MEASUREMENTS * command. */ - void fillRawMtmDataset(const uint8_t* packet); + void fillRawMtmDataset(imtq::RawMtmMeasurementSet& set, const uint8_t* packet); /** * @brief This function handles all self test results. This comprises parsing the error byte diff --git a/mission/devices/MgmRm3100CustomHandler.cpp b/mission/devices/MgmRm3100CustomHandler.cpp index 685de23d..90fe58e2 100644 --- a/mission/devices/MgmRm3100CustomHandler.cpp +++ b/mission/devices/MgmRm3100CustomHandler.cpp @@ -91,6 +91,7 @@ ReturnValue_t MgmRm3100CustomHandler::interpretDeviceReply(DeviceCommandId_t id, } PoolReadGuard pg(&primaryDataset); + primaryDataset.setValidity(true, true); for (uint8_t idx = 0; idx < 3; idx++) { primaryDataset.fieldStrengths[idx] = reply->mgmValuesRaw[idx] * reply->scaleFactors[idx]; } diff --git a/tmtc b/tmtc index 350ffda6..e5eb2e47 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 350ffda6c61b76dc9a6bbf08cec168c29c08136f +Subproject commit e5eb2e479c6d2ec71e440c0e72cef75a6f43f441