IMTQ positive x dipole test

This commit is contained in:
2021-06-12 15:45:24 +02:00
parent 46d49e130b
commit ab8b3ae116
6 changed files with 162 additions and 124 deletions

View File

@ -3,6 +3,7 @@
#include <fsfw/globalfunctions/CRC.h>
#include <fsfw/datapool/PoolReadGuard.h>
#include <math.h>
IMTQHandler::IMTQHandler(object_id_t objectId, object_id_t comIF, CookieIF * comCookie) :
@ -255,6 +256,25 @@ void IMTQHandler::setNormalDatapoolEntriesInvalid(){
}
LocalPoolDataSetBase* IMTQHandler::getDataSetHandle(sid_t sid) {
if (sid == engHkDataset.getSid()) {
return &engHkDataset;
}
else if (sid== calMtmMeasurementSet.getSid()) {
return &calMtmMeasurementSet;
}
else if (sid== rawMtmMeasurementSet.getSid()) {
return &rawMtmMeasurementSet;
}
else if (sid== posXselfTestDataset.getSid()) {
return &posXselfTestDataset;
}
else {
sif::error << "IMTQHandler::getDataSetHandle: Invalid sid" << std::endl;
return nullptr;
}
}
uint32_t IMTQHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo){
return 5000;
}
@ -289,43 +309,43 @@ ReturnValue_t IMTQHandler::initializeLocalDataPool(localpool::DataPool& localDat
/** Entries of dataset for self test results of positive X axis test */
localDataPoolMap.emplace(IMTQ::INIT_POS_X_ERR, new PoolEntry<uint8_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_RAW_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_CAL_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_X_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Y_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Z_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_ERR, new PoolEntry<uint8_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_RAW_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_CAL_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_X_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Y_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Z_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::POS_X_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::INIT_POS_X_ERR, new PoolEntry<uint8_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_ERR, new PoolEntry<uint8_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_RAW_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_X, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_Y, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_CAL_MAG_Z, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_X_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Y_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Z_CURRENT, new PoolEntry<float>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
localDataPoolMap.emplace(IMTQ::FINA_POS_X_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
@ -611,14 +631,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
/** Init measurements */
posXselfTestDataset.initErr = *(packet + offset);
offset += 2; // STEP byte will not be stored
posXselfTestDataset.initRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initRawMagX = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.initRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initRawMagY = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.initRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initRawMagZ = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.initCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
@ -629,11 +649,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
posXselfTestDataset.initCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
offset += 4;
posXselfTestDataset.initCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initCoilXCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.initCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initCoilYCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.initCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.initCoilZCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.initCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
offset += 2;
@ -646,14 +669,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
checkErrorByte(*(packet + offset), *(packet + offset + 1));
posXselfTestDataset.err = *(packet + offset);
offset += 2; // STEP byte will not be stored
posXselfTestDataset.rawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.rawMagX = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.rawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.rawMagY = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.rawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.rawMagZ = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.calMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
@ -664,11 +687,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
posXselfTestDataset.calMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
offset += 4;
posXselfTestDataset.coilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.coilXCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.coilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.coilYCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.coilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.coilZCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.coilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
offset += 2;
@ -681,14 +707,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
checkErrorByte(*(packet + offset), *(packet + offset + 1));
posXselfTestDataset.finaErr = *(packet + offset);
offset += 2; // STEP byte will not be stored
posXselfTestDataset.finaRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaRawMagX = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.finaRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaRawMagY = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.finaRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaRawMagZ = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
offset += 4;
posXselfTestDataset.finaCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
@ -699,11 +725,14 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
posXselfTestDataset.finaCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
| *(packet + offset + 1) << 8 | *(packet + offset);
offset += 4;
posXselfTestDataset.finaCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaCoilXCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.finaCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaCoilYCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.finaCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
posXselfTestDataset.finaCoilZCurrent = (*(packet + offset + 1) << 8 | *(packet + offset))
* 0.1;
offset += 2;
posXselfTestDataset.finaCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
offset += 2;
@ -716,23 +745,23 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
sif::info << "IMTQ self test (INIT) err: "
<< static_cast<unsigned int>(posXselfTestDataset.initErr.value) << std::endl;
sif::info << "IMTQ self test (INIT) raw magnetic field X: " << posXselfTestDataset.initRawMagX
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) raw magnetic field Y: " << posXselfTestDataset.initRawMagY
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) raw magnetic field Z: " << posXselfTestDataset.initRawMagZ
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) calibrated magnetic field X: " << posXselfTestDataset.initCalMagX
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) calibrated magnetic field Y: " << posXselfTestDataset.initCalMagY
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) calibrated magnetic field Z: " << posXselfTestDataset.initCalMagZ
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (INIT) coil X current: " << posXselfTestDataset.initCoilXCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (INIT) coil Y current: " << posXselfTestDataset.initCoilYCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (INIT) coil Z current: " << posXselfTestDataset.initCoilZCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (INIT) coil X temperature: "
<< posXselfTestDataset.initCoilXTemperature << " °C" << std::endl;
sif::info << "IMTQ self test (INIT) coil Y temperature: "
@ -743,23 +772,23 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
sif::info << "IMTQ self test (+X) err: " <<
static_cast<unsigned int>(posXselfTestDataset.err.value) << std::endl;
sif::info << "IMTQ self test (+X) raw magnetic field X: " << posXselfTestDataset.rawMagX
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) raw magnetic field Y: " << posXselfTestDataset.rawMagY
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) raw magnetic field Z: " << posXselfTestDataset.rawMagZ
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) calibrated magnetic field X: " << posXselfTestDataset.calMagX
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) calibrated magnetic field Y: " << posXselfTestDataset.calMagY
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) calibrated magnetic field Z: " << posXselfTestDataset.calMagZ
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (+X) coil X current: " << posXselfTestDataset.coilXCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (+X) coil Y current: " << posXselfTestDataset.coilYCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (+X) coil Z current: " << posXselfTestDataset.coilZCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (+X) coil X temperature: "
<< posXselfTestDataset.coilXTemperature << " °C" << std::endl;
sif::info << "IMTQ self test (+X) coil Y temperature: "
@ -770,23 +799,23 @@ void IMTQHandler::handlePositiveXSelfTestReply(const uint8_t* packet) {
sif::info << "IMTQ self test (FINA) err: "
<< static_cast<unsigned int>(posXselfTestDataset.finaErr.value) << std::endl;
sif::info << "IMTQ self test (FINA) raw magnetic field X: " << posXselfTestDataset.finaRawMagX
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) raw magnetic field Y: " << posXselfTestDataset.finaRawMagY
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) raw magnetic field Z: " << posXselfTestDataset.finaRawMagZ
<< " 7.5 * 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) calibrated magnetic field X: " << posXselfTestDataset.finaCalMagX
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) calibrated magnetic field Y: " << posXselfTestDataset.finaCalMagY
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) calibrated magnetic field Z: " << posXselfTestDataset.finaCalMagZ
<< " 10^-9 T" << std::endl;
<< " nT" << std::endl;
sif::info << "IMTQ self test (FINA) coil X current: " << posXselfTestDataset.finaCoilXCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (FINA) coil Y current: " << posXselfTestDataset.finaCoilYCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (FINA) coil Z current: " << posXselfTestDataset.finaCoilZCurrent
<< " * 10^-4 A" << std::endl;
<< " mA" << std::endl;
sif::info << "IMTQ self test (FINA) coil X temperature: "
<< posXselfTestDataset.finaCoilXTemperature << " °C" << std::endl;
sif::info << "IMTQ self test (FINA) coil Y temperature: "