2021-03-17 11:14:48 +01:00
|
|
|
#include "IMTQHandler.h"
|
2021-05-17 16:37:29 +02:00
|
|
|
#include "OBSWConfig.h"
|
2021-03-17 11:14:48 +01:00
|
|
|
|
|
|
|
#include <fsfw/globalfunctions/CRC.h>
|
2021-03-21 17:35:14 +01:00
|
|
|
#include <fsfw/datapool/PoolReadGuard.h>
|
2021-05-17 16:37:29 +02:00
|
|
|
|
2021-03-17 11:14:48 +01:00
|
|
|
|
|
|
|
IMTQHandler::IMTQHandler(object_id_t objectId, object_id_t comIF, CookieIF * comCookie) :
|
2021-04-26 07:56:02 +02:00
|
|
|
DeviceHandlerBase(objectId, comIF, comCookie), engHkDataset(this), calMtmMeasurementSet(
|
2021-06-04 16:45:54 +02:00
|
|
|
this), rawMtmMeasurementSet(this), selfTestDataset(this) {
|
2021-03-17 11:14:48 +01:00
|
|
|
if (comCookie == NULL) {
|
|
|
|
sif::error << "IMTQHandler: Invalid com cookie" << std::endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
IMTQHandler::~IMTQHandler() {
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void IMTQHandler::doStartUp(){
|
2021-06-04 16:45:54 +02:00
|
|
|
if(selfTestSuccess == true){
|
|
|
|
#if OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP == 1
|
|
|
|
setMode(MODE_NORMAL);
|
|
|
|
#else
|
|
|
|
setMode(_MODE_TO_ON);
|
|
|
|
#endif
|
|
|
|
selfTestSuccess = false;
|
2021-03-17 11:14:48 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::doShutDown(){
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::buildNormalDeviceCommand(
|
|
|
|
DeviceCommandId_t * id) {
|
2021-04-26 07:56:02 +02:00
|
|
|
switch (communicationStep) {
|
|
|
|
case CommunicationStep::GET_ENG_HK_DATA:
|
|
|
|
*id = IMTQ::GET_ENG_HK_DATA;
|
|
|
|
communicationStep = CommunicationStep::START_MTM_MEASUREMENT;
|
|
|
|
break;
|
|
|
|
case CommunicationStep::START_MTM_MEASUREMENT:
|
|
|
|
*id = IMTQ::START_MTM_MEASUREMENT;
|
|
|
|
communicationStep = CommunicationStep::GET_CAL_MTM_MEASUREMENT;
|
|
|
|
break;
|
|
|
|
case CommunicationStep::GET_CAL_MTM_MEASUREMENT:
|
|
|
|
*id = IMTQ::GET_CAL_MTM_MEASUREMENT;
|
|
|
|
communicationStep = CommunicationStep::GET_RAW_MTM_MEASUREMENT;
|
|
|
|
break;
|
|
|
|
case CommunicationStep::GET_RAW_MTM_MEASUREMENT:
|
|
|
|
*id = IMTQ::GET_RAW_MTM_MEASUREMENT;
|
|
|
|
communicationStep = CommunicationStep::GET_ENG_HK_DATA;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
sif::debug << "IMTQHandler::buildNormalDeviceCommand: Invalid communication step"
|
|
|
|
<< std::endl;
|
|
|
|
break;
|
|
|
|
}
|
2021-03-17 11:14:48 +01:00
|
|
|
return buildCommandFromCommand(*id, NULL, 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::buildTransitionDeviceCommand(
|
|
|
|
DeviceCommandId_t * id){
|
2021-06-04 16:45:54 +02:00
|
|
|
if (mode == _MODE_START_UP) {
|
|
|
|
switch (startupStep) {
|
|
|
|
case StartupStep::COMMAND_SELF_TEST:
|
|
|
|
*id = IMTQ::SELF_TEST_CMD;
|
|
|
|
break;
|
|
|
|
case StartupStep::GET_SELF_TEST_RESULT:
|
|
|
|
*id = IMTQ::GET_SELF_TEST_RESULT;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
sif::debug << "IMTQHandler::buildTransitionDeviceCommand: Unknown startup step"
|
|
|
|
<< std::endl;
|
|
|
|
}
|
|
|
|
}
|
2021-06-06 14:11:05 +02:00
|
|
|
return buildCommandFromCommand(*id, nullptr, 0);;
|
2021-03-17 11:14:48 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::buildCommandFromCommand(
|
|
|
|
DeviceCommandId_t deviceCommand, const uint8_t * commandData,
|
|
|
|
size_t commandDataLen) {
|
|
|
|
switch(deviceCommand) {
|
2021-06-04 16:45:54 +02:00
|
|
|
case(IMTQ::SELF_TEST_CMD): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::SELF_TEST_CMD;
|
|
|
|
commandBuffer[1] = IMTQ::SELF_TEST_AXIS::ALL;
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 2;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
|
|
|
case(IMTQ::GET_SELF_TEST_RESULT): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::GET_SELF_TEST_RESULT;
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 1;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
2021-04-25 15:53:44 +02:00
|
|
|
case(IMTQ::START_ACTUATION_DIPOLE): {
|
|
|
|
/* IMTQ expects low byte first */
|
|
|
|
commandBuffer[0] = IMTQ::CC::START_ACTUATION_DIPOLE;
|
|
|
|
commandBuffer[1] = *(commandData + 1);
|
|
|
|
commandBuffer[2] = *(commandData);
|
|
|
|
commandBuffer[3] = *(commandData + 3);
|
|
|
|
commandBuffer[4] = *(commandData + 2);
|
|
|
|
commandBuffer[5] = *(commandData + 5);
|
|
|
|
commandBuffer[6] = *(commandData + 4);
|
|
|
|
commandBuffer[7] = *(commandData + 7);
|
|
|
|
commandBuffer[8] = *(commandData + 6);
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 9;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
2021-03-17 11:14:48 +01:00
|
|
|
case(IMTQ::GET_ENG_HK_DATA): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::GET_ENG_HK_DATA;
|
|
|
|
rawPacket = commandBuffer;
|
2021-03-29 16:40:14 +02:00
|
|
|
rawPacketLen = 1;
|
2021-03-17 11:14:48 +01:00
|
|
|
return RETURN_OK;
|
|
|
|
}
|
2021-04-25 15:53:44 +02:00
|
|
|
case(IMTQ::GET_COMMANDED_DIPOLE): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::GET_COMMANDED_DIPOLE;
|
2021-03-17 11:14:48 +01:00
|
|
|
rawPacket = commandBuffer;
|
2021-04-25 15:53:44 +02:00
|
|
|
rawPacketLen = 1;
|
2021-03-17 11:14:48 +01:00
|
|
|
return RETURN_OK;
|
|
|
|
}
|
2021-04-26 07:56:02 +02:00
|
|
|
case(IMTQ::START_MTM_MEASUREMENT): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::START_MTM_MEASUREMENT;
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 1;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
|
|
|
case(IMTQ::GET_CAL_MTM_MEASUREMENT): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::GET_CAL_MTM_MEASUREMENT;
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 1;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
|
|
|
case(IMTQ::GET_RAW_MTM_MEASUREMENT): {
|
|
|
|
commandBuffer[0] = IMTQ::CC::GET_RAW_MTM_MEASUREMENT;
|
|
|
|
rawPacket = commandBuffer;
|
|
|
|
rawPacketLen = 1;
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
2021-03-17 11:14:48 +01:00
|
|
|
default:
|
|
|
|
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
|
|
|
}
|
|
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::fillCommandAndReplyMap() {
|
2021-06-04 16:45:54 +02:00
|
|
|
this->insertInCommandAndReplyMap(IMTQ::SELF_TEST_CMD, 1, nullptr,
|
|
|
|
IMTQ::SIZE_STATUS_REPLY);
|
2021-04-25 15:53:44 +02:00
|
|
|
this->insertInCommandAndReplyMap(IMTQ::START_ACTUATION_DIPOLE, 1, nullptr,
|
|
|
|
IMTQ::SIZE_STATUS_REPLY);
|
2021-03-17 11:14:48 +01:00
|
|
|
this->insertInCommandAndReplyMap(IMTQ::GET_ENG_HK_DATA, 1, &engHkDataset,
|
2021-04-25 15:53:44 +02:00
|
|
|
IMTQ::SIZE_ENG_HK_DATA_REPLY);
|
|
|
|
this->insertInCommandAndReplyMap(IMTQ::GET_COMMANDED_DIPOLE, 1, nullptr,
|
2021-04-26 07:56:02 +02:00
|
|
|
IMTQ::SIZE_GET_COMMANDED_DIPOLE_REPLY);
|
|
|
|
this->insertInCommandAndReplyMap(IMTQ::START_MTM_MEASUREMENT, 1, nullptr,
|
|
|
|
IMTQ::SIZE_STATUS_REPLY);
|
|
|
|
this->insertInCommandAndReplyMap(IMTQ::GET_CAL_MTM_MEASUREMENT, 1, &calMtmMeasurementSet,
|
|
|
|
IMTQ::SIZE_GET_CAL_MTM_MEASUREMENT);
|
|
|
|
this->insertInCommandAndReplyMap(IMTQ::GET_RAW_MTM_MEASUREMENT, 1, &rawMtmMeasurementSet,
|
|
|
|
IMTQ::SIZE_GET_RAW_MTM_MEASUREMENT);
|
2021-03-17 11:14:48 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::scanForReply(const uint8_t *start,
|
|
|
|
size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) {
|
|
|
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
|
|
|
|
switch(*start) {
|
2021-04-25 15:53:44 +02:00
|
|
|
case(IMTQ::CC::START_ACTUATION_DIPOLE):
|
|
|
|
*foundLen = IMTQ::SIZE_STATUS_REPLY;
|
|
|
|
*foundId = IMTQ::START_ACTUATION_DIPOLE;
|
|
|
|
break;
|
2021-04-26 07:56:02 +02:00
|
|
|
case(IMTQ::CC::START_MTM_MEASUREMENT):
|
|
|
|
*foundLen = IMTQ::SIZE_STATUS_REPLY;
|
|
|
|
*foundId = IMTQ::START_MTM_MEASUREMENT;
|
|
|
|
break;
|
2021-03-17 11:14:48 +01:00
|
|
|
case(IMTQ::CC::GET_ENG_HK_DATA):
|
|
|
|
*foundLen = IMTQ::SIZE_ENG_HK_DATA_REPLY;
|
|
|
|
*foundId = IMTQ::GET_ENG_HK_DATA;
|
|
|
|
break;
|
2021-04-25 15:53:44 +02:00
|
|
|
case(IMTQ::CC::GET_COMMANDED_DIPOLE):
|
|
|
|
*foundLen = IMTQ::SIZE_GET_COMMANDED_DIPOLE_REPLY;
|
|
|
|
*foundId = IMTQ::GET_COMMANDED_DIPOLE;
|
|
|
|
break;
|
2021-04-26 07:56:02 +02:00
|
|
|
case(IMTQ::CC::GET_CAL_MTM_MEASUREMENT):
|
|
|
|
*foundLen = IMTQ::SIZE_GET_CAL_MTM_MEASUREMENT;
|
|
|
|
*foundId = IMTQ::GET_CAL_MTM_MEASUREMENT;
|
|
|
|
break;
|
|
|
|
case(IMTQ::CC::GET_RAW_MTM_MEASUREMENT):
|
|
|
|
*foundLen = IMTQ::SIZE_GET_RAW_MTM_MEASUREMENT;
|
|
|
|
*foundId = IMTQ::GET_RAW_MTM_MEASUREMENT;
|
|
|
|
break;
|
2021-03-17 11:14:48 +01:00
|
|
|
default:
|
|
|
|
sif::debug << "IMTQHandler::scanForReply: Reply contains invalid command code" << std::endl;
|
|
|
|
result = IGNORE_REPLY_DATA;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::interpretDeviceReply(DeviceCommandId_t id,
|
|
|
|
const uint8_t *packet) {
|
|
|
|
|
|
|
|
ReturnValue_t result = RETURN_OK;
|
|
|
|
|
|
|
|
result = parseStatusByte(packet);
|
|
|
|
|
|
|
|
if (result != RETURN_OK) {
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (id) {
|
2021-06-04 16:45:54 +02:00
|
|
|
case (IMTQ::SELF_TEST_CMD):
|
2021-04-25 15:53:44 +02:00
|
|
|
case (IMTQ::START_ACTUATION_DIPOLE):
|
2021-04-26 07:56:02 +02:00
|
|
|
case (IMTQ::START_MTM_MEASUREMENT):
|
|
|
|
/* Replies only the status byte which is already handled with parseStatusByte */
|
2021-04-25 15:53:44 +02:00
|
|
|
break;
|
2021-03-17 11:14:48 +01:00
|
|
|
case (IMTQ::GET_ENG_HK_DATA):
|
|
|
|
fillEngHkDataset(packet);
|
|
|
|
break;
|
2021-04-25 15:53:44 +02:00
|
|
|
case (IMTQ::GET_COMMANDED_DIPOLE):
|
|
|
|
handleGetCommandedDipoleReply(packet);
|
|
|
|
break;
|
2021-04-26 07:56:02 +02:00
|
|
|
case (IMTQ::GET_CAL_MTM_MEASUREMENT):
|
|
|
|
fillCalibratedMtmDataset(packet);
|
|
|
|
break;
|
|
|
|
case (IMTQ::GET_RAW_MTM_MEASUREMENT):
|
|
|
|
fillRawMtmDataset(packet);
|
|
|
|
break;
|
2021-06-04 16:45:54 +02:00
|
|
|
case (IMTQ::GET_SELF_TEST_RESULT):
|
|
|
|
handleSelfTestReply(packet);
|
|
|
|
break;
|
2021-03-17 11:14:48 +01:00
|
|
|
default: {
|
|
|
|
sif::debug << "IMTQHandler::interpretDeviceReply: Unknown device reply id" << std::endl;
|
|
|
|
return DeviceHandlerIF::UNKNOWN_DEVICE_REPLY;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return RETURN_OK;
|
|
|
|
}
|
|
|
|
|
2021-04-25 12:47:41 +02:00
|
|
|
void IMTQHandler::setNormalDatapoolEntriesInvalid(){
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
uint32_t IMTQHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo){
|
2021-06-04 16:45:54 +02:00
|
|
|
return 1000;
|
2021-04-25 12:47:41 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t IMTQHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
|
|
|
LocalDataPoolManager& poolManager) {
|
|
|
|
|
2021-04-26 07:56:02 +02:00
|
|
|
/** Entries of engineering housekeeping dataset */
|
2021-04-25 12:47:41 +02:00
|
|
|
localDataPoolMap.emplace(IMTQ::DIGITAL_VOLTAGE_MV, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::ANALOG_VOLTAGE_MV, new PoolEntry<uint16_t>( { 0 }));
|
2021-04-26 07:56:02 +02:00
|
|
|
localDataPoolMap.emplace(IMTQ::DIGITAL_CURRENT, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::ANALOG_CURRENT, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_X_CURRENT, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_Y_CURRENT, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_Z_CURRENT, new PoolEntry<float>( { 0 }));
|
2021-04-25 12:47:41 +02:00
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::MCU_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
2021-04-26 07:56:02 +02:00
|
|
|
/** Entries of calibrated MTM measurement dataset */
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_CAL_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_CAL_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_CAL_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::ACTUATION_CAL_STATUS, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
|
|
|
|
/** Entries of raw MTM measurement dataset */
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_RAW_X, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_RAW_Y, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::MTM_RAW_Z, new PoolEntry<float>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::ACTUATION_RAW_STATUS, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
|
2021-06-04 16:45:54 +02:00
|
|
|
/** Entries of dataset for self test results */
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::INIT_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_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::NEG_X_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_X_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Y_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Y_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::POS_Z_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::NEG_Z_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_ERR, new PoolEntry<uint8_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_RAW_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_RAW_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_RAW_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_CAL_MAG_X, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_CAL_MAG_Y, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_CAL_MAG_Z, new PoolEntry<uint32_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_X_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_Y_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_Z_CURRENT, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_X_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_Y_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
localDataPoolMap.emplace(IMTQ::FINA_COIL_Z_TEMPERATURE, new PoolEntry<uint16_t>( { 0 }));
|
|
|
|
|
2021-04-25 12:47:41 +02:00
|
|
|
return HasReturnvaluesIF::RETURN_OK;
|
|
|
|
}
|
|
|
|
|
2021-03-17 11:14:48 +01:00
|
|
|
ReturnValue_t IMTQHandler::parseStatusByte(const uint8_t* packet) {
|
|
|
|
uint8_t cmdErrorField = *(packet + 1) & 0xF;
|
|
|
|
switch (cmdErrorField) {
|
|
|
|
case 0:
|
|
|
|
return RETURN_OK;
|
|
|
|
case 1:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: Command rejected without reason" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return REJECTED_WITHOUT_REASON;
|
|
|
|
case 2:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: Command has invalid command code" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return INVALID_COMMAND_CODE;
|
|
|
|
case 3:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: Command has missing parameter" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return PARAMETER_MISSING;
|
|
|
|
case 4:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: Command has invalid parameter" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return PARAMETER_INVALID;
|
|
|
|
case 5:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: CC unavailable" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return CC_UNAVAILABLE;
|
|
|
|
case 7:
|
2021-04-25 15:53:44 +02:00
|
|
|
sif::error << "IMTQHandler::parseStatusByte: IMQT replied internal processing error"
|
|
|
|
<< std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
return INTERNAL_PROCESSING_ERROR;
|
|
|
|
default:
|
|
|
|
sif::error << "IMTQHandler::parseStatusByte: CMD Error field contains unknown error code "
|
|
|
|
<< cmdErrorField << std::endl;
|
|
|
|
return CMD_ERR_UNKNOWN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::fillEngHkDataset(const uint8_t* packet) {
|
2021-06-04 16:45:54 +02:00
|
|
|
PoolReadGuard rg(&engHkDataset);
|
2021-03-17 11:14:48 +01:00
|
|
|
uint8_t offset = 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.digitalVoltageMv = *(packet + offset + 1) << 8 | *(packet + offset);
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.analogVoltageMv = *(packet + offset + 1) << 8 | *(packet + offset);
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.digitalCurrentmA = (*(packet + offset + 1) << 8 | *(packet + offset)) * 0.1;
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.analogCurrentmA = (*(packet + offset + 1) << 8 | *(packet + offset)) * 0.1;
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilXCurrentmA = (*(packet + offset + 1) << 8 | *(packet + offset)) * 0.1;
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilYCurrentmA = (*(packet + offset + 1) << 8 | *(packet + offset)) * 0.1;
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilZCurrentmA = (*(packet + offset + 1) << 8 | *(packet + offset)) * 0.1;
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilXTemperature = (*(packet + offset + 1) << 8 | *(packet + offset));
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilYTemperature = (*(packet + offset + 1) << 8 | *(packet + offset));
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.coilZTemperature = (*(packet + offset + 1) << 8 | *(packet + offset));
|
2021-03-17 11:14:48 +01:00
|
|
|
offset += 2;
|
2021-04-26 07:56:02 +02:00
|
|
|
engHkDataset.mcuTemperature = (*(packet + offset + 1) << 8 | *(packet + offset));
|
2021-03-17 11:14:48 +01:00
|
|
|
|
2021-06-04 16:45:54 +02:00
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && IMTQ_DEBUG == 1
|
2021-03-17 11:14:48 +01:00
|
|
|
sif::info << "IMTQ digital voltage: " << engHkDataset.digitalVoltageMv << " mV" << std::endl;
|
|
|
|
sif::info << "IMTQ analog voltage: " << engHkDataset.analogVoltageMv << " mV" << std::endl;
|
2021-04-26 07:56:02 +02:00
|
|
|
sif::info << "IMTQ digital current: " << engHkDataset.digitalCurrentmA << " mA" << std::endl;
|
|
|
|
sif::info << "IMTQ analog current: " << engHkDataset.analogCurrentmA << " mA" << std::endl;
|
|
|
|
sif::info << "IMTQ coil X current: " << engHkDataset.coilXCurrentmA << " mA" << std::endl;
|
|
|
|
sif::info << "IMTQ coil Y current: " << engHkDataset.coilYCurrentmA << " mA" << std::endl;
|
|
|
|
sif::info << "IMTQ coil Z current: " << engHkDataset.coilZCurrentmA << " mA" << std::endl;
|
2021-03-17 11:14:48 +01:00
|
|
|
sif::info << "IMTQ coil X temperature: " << engHkDataset.coilXTemperature << " °C"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ coil Y temperature: " << engHkDataset.coilYTemperature << " °C"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ coil Z temperature: " << engHkDataset.coilZTemperature << " °C"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ coil MCU temperature: " << engHkDataset.mcuTemperature << " °C"
|
|
|
|
<< std::endl;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::setModeNormal() {
|
|
|
|
mode = MODE_NORMAL;
|
|
|
|
}
|
|
|
|
|
2021-04-25 15:53:44 +02:00
|
|
|
void IMTQHandler::handleDeviceTM(const uint8_t* data, size_t dataSize, DeviceCommandId_t replyId) {
|
|
|
|
|
|
|
|
if (wiretappingMode == RAW) {
|
|
|
|
/* Data already sent in doGetRead() */
|
2021-04-26 07:56:02 +02:00
|
|
|
return;
|
2021-04-25 15:53:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
DeviceReplyMap::iterator iter = deviceReplyMap.find(replyId);
|
|
|
|
if (iter == deviceReplyMap.end()) {
|
|
|
|
sif::debug << "IMTQHandler::handleDeviceTM: Unknown reply id" << std::endl;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
MessageQueueId_t queueId = iter->second.command->second.sendReplyTo;
|
|
|
|
|
|
|
|
if (queueId == NO_COMMANDER) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-04-26 07:56:02 +02:00
|
|
|
ReturnValue_t result = actionHelper.reportData(queueId, replyId, data, dataSize);
|
2021-04-25 15:53:44 +02:00
|
|
|
if (result != RETURN_OK) {
|
|
|
|
sif::debug << "IMTQHandler::handleDeviceTM: Failed to report data" << std::endl;
|
2021-04-26 07:56:02 +02:00
|
|
|
return;
|
2021-04-25 15:53:44 +02:00
|
|
|
}
|
|
|
|
}
|
2021-04-26 07:56:02 +02:00
|
|
|
|
|
|
|
void IMTQHandler::handleGetCommandedDipoleReply(const uint8_t* packet) {
|
|
|
|
uint8_t tmData[6];
|
|
|
|
/* Switching endianess of received dipole values */
|
|
|
|
tmData[0] = *(packet + 3);
|
|
|
|
tmData[1] = *(packet + 2);
|
|
|
|
tmData[2] = *(packet + 5);
|
|
|
|
tmData[3] = *(packet + 4);
|
|
|
|
tmData[4] = *(packet + 7);
|
|
|
|
tmData[5] = *(packet + 6);
|
|
|
|
handleDeviceTM(tmData, sizeof(tmData), IMTQ::GET_COMMANDED_DIPOLE);
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::fillCalibratedMtmDataset(const uint8_t* packet) {
|
2021-06-04 16:45:54 +02:00
|
|
|
PoolReadGuard rg(&calMtmMeasurementSet);
|
2021-04-26 07:56:02 +02:00
|
|
|
int8_t offset = 2;
|
|
|
|
calMtmMeasurementSet.mtmXnT = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
calMtmMeasurementSet.mtmYnT = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
calMtmMeasurementSet.mtmZnT = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
calMtmMeasurementSet.coilActuationStatus = (*(packet + offset + 3) << 24)
|
|
|
|
| (*(packet + offset + 2) << 16) | (*(packet + offset + 1) << 8) | (*(packet + offset));
|
2021-06-04 16:45:54 +02:00
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && IMTQ_DEBUG == 1
|
2021-04-26 07:56:02 +02:00
|
|
|
sif::info << "IMTQ calibrated MTM measurement X: " << calMtmMeasurementSet.mtmXnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ calibrated MTM measurement Y: " << calMtmMeasurementSet.mtmYnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ calibrated MTM measurement Z: " << calMtmMeasurementSet.mtmZnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ coil actuation status during MTM measurement: "
|
|
|
|
<< (unsigned int) calMtmMeasurementSet.coilActuationStatus.value << std::endl;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::fillRawMtmDataset(const uint8_t* packet) {
|
2021-06-04 16:45:54 +02:00
|
|
|
PoolReadGuard rg(&rawMtmMeasurementSet);
|
2021-04-26 07:56:02 +02:00
|
|
|
int8_t offset = 2;
|
|
|
|
rawMtmMeasurementSet.mtmXnT = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
|
|
|
|
offset += 4;
|
|
|
|
rawMtmMeasurementSet.mtmYnT = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
|
|
|
|
offset += 4;
|
|
|
|
rawMtmMeasurementSet.mtmZnT = (*(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset)) * 7.5;
|
|
|
|
offset += 4;
|
|
|
|
rawMtmMeasurementSet.coilActuationStatus = (*(packet + offset + 3) << 24)
|
|
|
|
| (*(packet + offset + 2) << 16) | (*(packet + offset + 1) << 8) | (*(packet + offset));
|
2021-06-04 16:45:54 +02:00
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && IMTQ_DEBUG == 1
|
2021-04-26 07:56:02 +02:00
|
|
|
sif::info << "IMTQ raw MTM measurement X: " << rawMtmMeasurementSet.mtmXnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ raw MTM measurement Y: " << rawMtmMeasurementSet.mtmYnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ raw MTM measurement Z: " << rawMtmMeasurementSet.mtmZnT << " nT"
|
|
|
|
<< std::endl;
|
|
|
|
sif::info << "IMTQ coil actuation status during MTM measurement: "
|
|
|
|
<< (unsigned int) rawMtmMeasurementSet.coilActuationStatus.value << std::endl;
|
|
|
|
#endif
|
|
|
|
}
|
2021-06-04 16:45:54 +02:00
|
|
|
|
|
|
|
void IMTQHandler::handleSelfTestReply(const uint8_t* packet) {
|
|
|
|
PoolReadGuard rg(&selfTestDataset);
|
|
|
|
|
|
|
|
/** Init measurements */
|
|
|
|
int8_t offset = 2;
|
|
|
|
checkErrorByte(*(packet + offset), *(packet + offset + 1));
|
|
|
|
selfTestDataset.initErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.initRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.initCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.initCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.initCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.initCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.initCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.initCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** +X measurements */
|
|
|
|
checkErrorByte(*(packet + offset), *(packet + offset + 1));
|
|
|
|
selfTestDataset.posXErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.posXRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posXCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posXCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posXCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posXCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posXCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posXCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
|
|
|
|
/** -X measurements */
|
|
|
|
checkErrorByte(*(packet + offset), *(packet + offset + 1));
|
|
|
|
selfTestDataset.negXErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.negXRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negXCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negXCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negXCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negXCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negXCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negXCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** +Y measurements */
|
|
|
|
checkErrorByte(*(packet + offset), *(packet + offset + 1));
|
|
|
|
selfTestDataset.posYErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.posYRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posYCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posYCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posYCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posYCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posYCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posYCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** -Y measurements */
|
|
|
|
checkErrorByte(*(packet + offset), *(packet + offset + 1));
|
|
|
|
selfTestDataset.negYErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.negYRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negYCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negYCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negYCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negYCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negYCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negYCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** +Z measurements */
|
|
|
|
selfTestDataset.posZErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.posZRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.posZCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posZCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posZCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posZCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posZCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.posZCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** -Z measurements */
|
|
|
|
selfTestDataset.negZErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.negZRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.negZCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negZCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negZCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negZCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negZCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.negZCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
/** FINA measurements */
|
|
|
|
selfTestDataset.finaErr = *(packet + offset);
|
|
|
|
offset += 2; // STEP byte will not be stored
|
|
|
|
selfTestDataset.finaRawMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaRawMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaRawMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaCalMagX = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaCalMagY = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaCalMagZ = *(packet + offset + 3) << 24 | *(packet + offset + 2) << 16
|
|
|
|
| *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
selfTestDataset.finaCoilXCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.finaCoilYCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.finaCoilZCurrent = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.finaCoilXTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.finaCoilYTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 2;
|
|
|
|
selfTestDataset.finaCoilZTemperature = *(packet + offset + 1) << 8 | *(packet + offset);
|
|
|
|
offset += 4;
|
|
|
|
|
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1 && IMTQ_DEBUG == 1
|
|
|
|
sif::info << "IMTQ self test (INIT) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.initErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) raw magnetic field X: " << selfTestDataset.initRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) raw magnetic field Y: " << selfTestDataset.initRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) raw magnetic field Z: " << selfTestDataset.initRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) calibrated magnetic field X: " << selfTestDataset.initCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) calibrated magnetic field Y: " << selfTestDataset.initCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) calibrated magnetic field Z: " << selfTestDataset.initCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil X current: " << selfTestDataset.initCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil Y current: " << selfTestDataset.initCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil Z current: " << selfTestDataset.initCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil X temperature: "
|
|
|
|
<< selfTestDataset.initCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil Y temperature: "
|
|
|
|
<< selfTestDataset.initCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (INIT) coil Z temperature: "
|
|
|
|
<< selfTestDataset.initCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (+X) err: " <<
|
|
|
|
static_cast<unsigned int>(selfTestDataset.posXErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) raw magnetic field X: " << selfTestDataset.posXRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) raw magnetic field Y: " << selfTestDataset.posXRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) raw magnetic field Z: " << selfTestDataset.posXRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) calibrated magnetic field X: " << selfTestDataset.posXCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) calibrated magnetic field Y: " << selfTestDataset.posXCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) calibrated magnetic field Z: " << selfTestDataset.posXCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil X current: " << selfTestDataset.posXCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil Y current: " << selfTestDataset.posXCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil Z current: " << selfTestDataset.initCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil X temperature: "
|
|
|
|
<< selfTestDataset.posXCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil Y temperature: "
|
|
|
|
<< selfTestDataset.posXCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+X) coil Z temperature: "
|
|
|
|
<< selfTestDataset.posXCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (-X) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.negXErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) raw magnetic field X: " << selfTestDataset.negXRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) raw magnetic field Y: " << selfTestDataset.negXRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) raw magnetic field Z: " << selfTestDataset.negXRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) calibrated magnetic field X: " << selfTestDataset.negXCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) calibrated magnetic field Y: " << selfTestDataset.negXCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) calibrated magnetic field Z: " << selfTestDataset.negXCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil X current: " << selfTestDataset.negXCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil Y current: " << selfTestDataset.negXCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil Z current: " << selfTestDataset.negXCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil X temperature: "
|
|
|
|
<< selfTestDataset.negXCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil Y temperature: "
|
|
|
|
<< selfTestDataset.negXCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-X) coil Z temperature: "
|
|
|
|
<< selfTestDataset.negXCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (+Y) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.posYErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) raw magnetic field X: " << selfTestDataset.posYRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) raw magnetic field Y: " << selfTestDataset.posYRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) raw magnetic field Z: " << selfTestDataset.posYRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) calibrated magnetic field X: " << selfTestDataset.posYCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) calibrated magnetic field Y: " << selfTestDataset.posYCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) calibrated magnetic field Z: " << selfTestDataset.posYCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil X current: " << selfTestDataset.posYCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil Y current: " << selfTestDataset.posYCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil Z current: " << selfTestDataset.posYCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil X temperature: "
|
|
|
|
<< selfTestDataset.posYCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil Y temperature: "
|
|
|
|
<< selfTestDataset.posYCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Y) coil Z temperature: "
|
|
|
|
<< selfTestDataset.posYCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (-Y) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.negYErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) raw magnetic field X: " << selfTestDataset.negYRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) raw magnetic field Y: " << selfTestDataset.negYRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) raw magnetic field Z: " << selfTestDataset.negYRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) calibrated magnetic field X: " << selfTestDataset.negYCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) calibrated magnetic field Y: " << selfTestDataset.negYCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) calibrated magnetic field Z: " << selfTestDataset.negYCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil X current: " << selfTestDataset.negYCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil Y current: " << selfTestDataset.negYCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil Z current: " << selfTestDataset.negYCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil X temperature: "
|
|
|
|
<< selfTestDataset.negYCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil Y temperature: "
|
|
|
|
<< selfTestDataset.negYCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Y) coil Z temperature: "
|
|
|
|
<< selfTestDataset.negYCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (+Z) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.posZErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) raw magnetic field X: " << selfTestDataset.posZRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) raw magnetic field Y: " << selfTestDataset.posZRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) raw magnetic field Z: " << selfTestDataset.posZRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) calibrated magnetic field X: " << selfTestDataset.posZCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) calibrated magnetic field Y: " << selfTestDataset.posZCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) calibrated magnetic field Z: " << selfTestDataset.posZCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil X current: " << selfTestDataset.posZCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil Y current: " << selfTestDataset.posZCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil Z current: " << selfTestDataset.posZCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil X temperature: "
|
|
|
|
<< selfTestDataset.posZCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil Y temperature: "
|
|
|
|
<< selfTestDataset.posZCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (+Z) coil Z temperature: "
|
|
|
|
<< selfTestDataset.posZCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (-Z) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.negZErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) raw magnetic field X: " << selfTestDataset.negZRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) raw magnetic field Y: " << selfTestDataset.negZRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) raw magnetic field Z: " << selfTestDataset.negZRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) calibrated magnetic field X: " << selfTestDataset.negZCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) calibrated magnetic field Y: " << selfTestDataset.negZCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) calibrated magnetic field Z: " << selfTestDataset.negZCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil X current: " << selfTestDataset.negZCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil Y current: " << selfTestDataset.negZCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil Z current: " << selfTestDataset.negZCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil X temperature: "
|
|
|
|
<< selfTestDataset.negZCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil Y temperature: "
|
|
|
|
<< selfTestDataset.negZCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (-Z) coil Z temperature: "
|
|
|
|
<< selfTestDataset.negZCoilZTemperature << " °C" << std::endl;
|
|
|
|
|
|
|
|
sif::info << "IMTQ self test (FINA) err: "
|
|
|
|
<< static_cast<unsigned int>(selfTestDataset.finaErr.value) << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) raw magnetic field X: " << selfTestDataset.finaRawMagX
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) raw magnetic field Y: " << selfTestDataset.finaRawMagY
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) raw magnetic field Z: " << selfTestDataset.finaRawMagZ
|
|
|
|
<< " 7.5 * 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) calibrated magnetic field X: " << selfTestDataset.finaCalMagX
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) calibrated magnetic field Y: " << selfTestDataset.finaCalMagY
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) calibrated magnetic field Z: " << selfTestDataset.finaCalMagZ
|
|
|
|
<< " 10^-9 T" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil X current: " << selfTestDataset.finaCoilXCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil Y current: " << selfTestDataset.finaCoilYCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil Z current: " << selfTestDataset.finaCoilZCurrent
|
|
|
|
<< " 10^-4 A" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil X temperature: "
|
|
|
|
<< selfTestDataset.finaCoilXTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil Y temperature: "
|
|
|
|
<< selfTestDataset.finaCoilYTemperature << " °C" << std::endl;
|
|
|
|
sif::info << "IMTQ self test (FINA) coil Z temperature: "
|
|
|
|
<< selfTestDataset.finaCoilZTemperature << " °C" << std::endl;
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void IMTQHandler::checkErrorByte(const uint8_t errorByte, const uint8_t step) {
|
|
|
|
std::string stepString("");
|
|
|
|
if (step < 8) {
|
|
|
|
stepString = makeStepString(step);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
/** This should normally never happen */
|
|
|
|
sif::debug << "IMTQHandler::checkErrorByte: Invalid step" << std::endl;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (errorByte & IMTQ::I2C_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_I2C_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test I2C failure for step " << stepString
|
|
|
|
<< std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::SPI_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_SPI_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test SPI failure for step " << stepString
|
|
|
|
<< std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::ADC_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_ADC_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test ADC failure for step " << stepString
|
|
|
|
<< std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::PWM_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_PWM_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test PWM failure for step " << stepString
|
|
|
|
<< std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::TC_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_TC_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test TC failure (system failure) for step "
|
|
|
|
<< stepString << std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::MTM_RANGE_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_TC_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test MTM range failure for step "
|
|
|
|
<< stepString << std::endl;
|
|
|
|
}
|
|
|
|
if (errorByte & IMTQ::COIL_CURRENT_FAILURE_MASK) {
|
|
|
|
triggerEvent(SELF_TEST_COIL_CURRENT_FAILURE, step);
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Self test coil current outside of expected "
|
|
|
|
"range for step " << stepString << std::endl;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string IMTQHandler::makeStepString(const uint8_t step) {
|
|
|
|
std::string stepString("");
|
|
|
|
switch (step) {
|
|
|
|
case IMTQ::SELF_TEST_STEPS::INIT:
|
|
|
|
stepString = std::string("INIT");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::X_POSITIVE:
|
|
|
|
stepString = std::string("+X");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::X_NEGATIVE:
|
|
|
|
stepString = std::string("-X");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::Y_POSITIVE:
|
|
|
|
stepString = std::string("+Y");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::Y_NEGATIVE:
|
|
|
|
stepString = std::string("-Y");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::Z_POSITIVE:
|
|
|
|
stepString = std::string("+Z");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::Z_NEGATIVE:
|
|
|
|
stepString = std::string("-Z");
|
|
|
|
break;
|
|
|
|
case IMTQ::SELF_TEST_STEPS::FINA:
|
|
|
|
stepString = std::string("FINA");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
sif::error << "IMTQHandler::checkErrorByte: Received packet with invalid step information"
|
|
|
|
<< std::endl;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return stepString;
|
|
|
|
}
|
|
|
|
|