|
|
|
@@ -14,7 +14,7 @@
|
|
|
|
|
GyroADIS16507Handler::GyroADIS16507Handler(object_id_t objectId,
|
|
|
|
|
object_id_t deviceCommunication, CookieIF * comCookie):
|
|
|
|
|
DeviceHandlerBase(objectId, deviceCommunication, comCookie), primaryDataset(this),
|
|
|
|
|
configDataset(this) {
|
|
|
|
|
configDataset(this), breakCountdown(0) {
|
|
|
|
|
#if ADIS16507_DEBUG == 1
|
|
|
|
|
debugDivider = new PeriodicOperationDivider(5);
|
|
|
|
|
#endif
|
|
|
|
@@ -87,6 +87,37 @@ ReturnValue_t GyroADIS16507Handler::buildCommandFromCommand(DeviceCommandId_t de
|
|
|
|
|
this->rawPacket = commandBuffer.data();
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::SELF_TEST_SENSORS): {
|
|
|
|
|
prepareWriteCommand(ADIS16507::GLOB_CMD, ADIS16507::GlobCmds::SENSOR_SELF_TEST, 0x00);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::SELF_TEST_MEMORY): {
|
|
|
|
|
prepareWriteCommand(ADIS16507::GLOB_CMD, ADIS16507::GlobCmds::FLASH_MEMORY_TEST, 0x00);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::UPDATE_NV_CONFIGURATION): {
|
|
|
|
|
prepareWriteCommand(ADIS16507::GLOB_CMD, ADIS16507::GlobCmds::FLASH_MEMORY_UPDATE, 0x00);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::RESET_SENSOR_CONFIGURATION): {
|
|
|
|
|
prepareWriteCommand(ADIS16507::GLOB_CMD, ADIS16507::GlobCmds::FACTORY_CALIBRATION, 0x00);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::SW_RESET): {
|
|
|
|
|
prepareWriteCommand(ADIS16507::GLOB_CMD, ADIS16507::GlobCmds::SOFTWARE_RESET, 0x00);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case(ADIS16507::PRINT_CURRENT_CONFIGURATION): {
|
|
|
|
|
#if OBSW_VERBOSE_LEVEL >= 1
|
|
|
|
|
PoolReadGuard pg(&configDataset);
|
|
|
|
|
sif::info << "ADIS16507 Sensor configuration: DIAG_STAT: 0x" << std::hex << std::setw(4) <<
|
|
|
|
|
std::setfill('0') << "0x" << configDataset.diagStatReg.value << std::endl;
|
|
|
|
|
sif::info << "MSC_CTRL: " << std::hex << std::setw(4) << "0x" <<
|
|
|
|
|
configDataset.mscCtrlReg.value << " | FILT_CTRL: 0x" <<
|
|
|
|
|
configDataset.filterSetting.value << " | DEC_RATE: 0x" <<
|
|
|
|
|
configDataset.decRateReg.value << std::setfill(' ') << std::endl;
|
|
|
|
|
#endif /* OBSW_VERBOSE_LEVEL >= 1 */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return HasReturnvaluesIF::RETURN_OK;
|
|
|
|
|
}
|
|
|
|
@@ -94,6 +125,8 @@ ReturnValue_t GyroADIS16507Handler::buildCommandFromCommand(DeviceCommandId_t de
|
|
|
|
|
void GyroADIS16507Handler::fillCommandAndReplyMap() {
|
|
|
|
|
insertInCommandAndReplyMap(ADIS16507::READ_SENSOR_DATA, 1, &primaryDataset);
|
|
|
|
|
insertInCommandAndReplyMap(ADIS16507::READ_OUT_CONFIG, 1, &configDataset);
|
|
|
|
|
insertInCommandAndReplyMap(ADIS16507::SELF_TEST_SENSORS, 1);
|
|
|
|
|
insertInCommandAndReplyMap(ADIS16507::SELF_TEST_MEMORY, 1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ReturnValue_t GyroADIS16507Handler::scanForReply(const uint8_t *start, size_t remainingSize,
|
|
|
|
@@ -223,6 +256,17 @@ uint32_t GyroADIS16507Handler::getTransitionDelayMs(Mode_t modeFrom, Mode_t mode
|
|
|
|
|
return 5000;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GyroADIS16507Handler::prepareWriteCommand(uint8_t startReg, uint8_t valueOne,
|
|
|
|
|
uint8_t valueTwo) {
|
|
|
|
|
uint8_t secondReg = startReg + 1;
|
|
|
|
|
startReg |= ADIS16507::WRITE_MASK;
|
|
|
|
|
secondReg |= ADIS16507::WRITE_MASK;
|
|
|
|
|
commandBuffer[0] = startReg;
|
|
|
|
|
commandBuffer[1] = valueOne;
|
|
|
|
|
commandBuffer[2] = secondReg;
|
|
|
|
|
commandBuffer[3] = valueTwo;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void GyroADIS16507Handler::prepareReadCommand(uint8_t *regList, size_t len) {
|
|
|
|
|
for(size_t idx = 0; idx < len; idx++) {
|
|
|
|
|
commandBuffer[idx * 2] = regList[idx];
|
|
|
|
|