fixes for gyro adis handler
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
EIVE/eive-obsw/pipeline/head This commit looks good

This commit is contained in:
Robin Müller 2021-12-15 10:15:06 +01:00
parent 774ffa8359
commit 5ae6a61ec0
No known key found for this signature in database
GPG Key ID: 71B58F8A3CDFA9AC
3 changed files with 15 additions and 15 deletions

View File

@ -115,8 +115,8 @@ debugging. */
/*******************************************************************/ /*******************************************************************/
/** Hardcoded */ /** Hardcoded */
/*******************************************************************/ /*******************************************************************/
// Leave at one as the BSP is linux. Used by the ADIS16507 device handler // Leave at one as the BSP is linux. Used by the ADIS1650X device handler
#define OBSW_ADIS16507_LINUX_COM_IF 1 #define OBSW_ADIS1650X_LINUX_COM_IF 1
#include "OBSWVersion.h" #include "OBSWVersion.h"

View File

@ -185,7 +185,7 @@ void GyroADIS1650XHandler::fillCommandAndReplyMap() {
ReturnValue_t GyroADIS1650XHandler::scanForReply(const uint8_t *start, size_t remainingSize, ReturnValue_t GyroADIS1650XHandler::scanForReply(const uint8_t *start, size_t remainingSize,
DeviceCommandId_t *foundId, size_t *foundLen) { DeviceCommandId_t *foundId, size_t *foundLen) {
/* For SPI, the ID will always be the one of the last sent command. */ // For SPI, the ID will always be the one of the last sent command
*foundId = this->getPendingCommand(); *foundId = this->getPendingCommand();
*foundLen = this->rawPacketLen; *foundLen = this->rawPacketLen;
@ -196,18 +196,19 @@ ReturnValue_t GyroADIS1650XHandler::interpretDeviceReply(DeviceCommandId_t id,
const uint8_t *packet) { const uint8_t *packet) {
switch(id) { switch(id) {
case(ADIS1650X::READ_OUT_CONFIG): { case(ADIS1650X::READ_OUT_CONFIG): {
PoolReadGuard rg(&configDataset);
uint16_t readProdId = packet[10] << 8 | packet[11]; uint16_t readProdId = packet[10] << 8 | packet[11];
if(((adisType == ADIS1650X::Type::ADIS16507) and if(((adisType == ADIS1650X::Type::ADIS16507) and
(readProdId != ADIS1650X::PROD_ID_16507)) or (readProdId != ADIS1650X::PROD_ID_16507)) or
((adisType == ADIS1650X::Type::ADIS16505) and ((adisType == ADIS1650X::Type::ADIS16505) and
(readProdId != ADIS1650X::PROD_ID_16505))) { (readProdId != ADIS1650X::PROD_ID_16505))) {
#if OBSW_VERBOSE_LEVEL >= 1 #if OBSW_VERBOSE_LEVEL >= 1
sif::warning << "GyroADIS16507Handler::interpretDeviceReply: Invalid product ID " sif::warning << "GyroADIS1650XHandler::interpretDeviceReply: Invalid product ID "
<< readProdId << std::endl; << readProdId << std::endl;
#endif #endif
return HasReturnvaluesIF::RETURN_FAILED; return HasReturnvaluesIF::RETURN_FAILED;
} }
PoolReadGuard rg(&configDataset);
configDataset.diagStatReg.value = packet[2] << 8 | packet[3]; configDataset.diagStatReg.value = packet[2] << 8 | packet[3];
configDataset.filterSetting.value = packet[4] << 8 | packet[5]; configDataset.filterSetting.value = packet[4] << 8 | packet[5];
configDataset.mscCtrlReg.value = packet[6] << 8 | packet[7]; configDataset.mscCtrlReg.value = packet[6] << 8 | packet[7];
@ -232,21 +233,20 @@ ReturnValue_t GyroADIS1650XHandler::handleSensorData(const uint8_t *packet) {
switch(burstMode) { switch(burstMode) {
case(BurstModes::BURST_16_BURST_SEL_1): case(BurstModes::BURST_16_BURST_SEL_1):
case(BurstModes::BURST_32_BURST_SEL_1): { case(BurstModes::BURST_32_BURST_SEL_1): {
sif::warning << "GyroADIS16507Handler::interpretDeviceReply: Analysis with BURST_SEL1" sif::warning << "GyroADIS1650XHandler::interpretDeviceReply: Analysis with BURST_SEL1"
" not implemented!" << std::endl; " not implemented!" << std::endl;
return HasReturnvaluesIF::RETURN_OK; return HasReturnvaluesIF::RETURN_OK;
} }
case(BurstModes::BURST_16_BURST_SEL_0): { case(BurstModes::BURST_16_BURST_SEL_0): {
uint16_t checksum = packet[20] << 8 | packet[21]; uint16_t checksum = packet[20] << 8 | packet[21];
/* Now verify the read checksum with the expected checksum // Now verify the read checksum with the expected checksum according to datasheet p. 20
according to datasheet p. 20 */
uint16_t calcChecksum = 0; uint16_t calcChecksum = 0;
for(size_t idx = 2; idx < 20; idx ++) { for(size_t idx = 2; idx < 20; idx ++) {
calcChecksum += packet[idx]; calcChecksum += packet[idx];
} }
if(checksum != calcChecksum) { if(checksum != calcChecksum) {
#if OBSW_VERBOSE_LEVEL >= 1 #if OBSW_VERBOSE_LEVEL >= 1
sif::warning << "GyroADIS16507Handler::interpretDeviceReply: " sif::warning << "GyroADIS1650XHandler::interpretDeviceReply: "
"Invalid checksum detected!" << std::endl; "Invalid checksum detected!" << std::endl;
#endif #endif
return HasReturnvaluesIF::RETURN_FAILED; return HasReturnvaluesIF::RETURN_FAILED;
@ -277,7 +277,7 @@ ReturnValue_t GyroADIS1650XHandler::handleSensorData(const uint8_t *packet) {
} else if(adisType == ADIS1650X::Type::ADIS16505) { } else if(adisType == ADIS1650X::Type::ADIS16505) {
accelScaling = ADIS1650X::ACCELEROMETER_RANGE_16505; accelScaling = ADIS1650X::ACCELEROMETER_RANGE_16505;
} else { } else {
sif::warning << "GyroADIS16507Handler::handleSensorData: " sif::warning << "GyroADIS1650XHandler::handleSensorData: "
"Unknown ADIS type" << std::endl; "Unknown ADIS type" << std::endl;
} }
int16_t accelXRaw = packet[10] << 8 | packet[11]; int16_t accelXRaw = packet[10] << 8 | packet[11];
@ -298,11 +298,11 @@ ReturnValue_t GyroADIS1650XHandler::handleSensorData(const uint8_t *packet) {
#if FSFW_HAL_ADIS1650X_GYRO_DEBUG == 1 #if FSFW_HAL_ADIS1650X_GYRO_DEBUG == 1
if(debugDivider->checkAndIncrement()) { if(debugDivider->checkAndIncrement()) {
sif::info << "GyroADIS16507Handler: Angular velocities in deg / s" << std::endl; sif::info << "GyroADIS1650XHandler: Angular velocities in deg / s" << std::endl;
sif::info << "X: " << primaryDataset.angVelocX.value << std::endl; sif::info << "X: " << primaryDataset.angVelocX.value << std::endl;
sif::info << "Y: " << primaryDataset.angVelocY.value << std::endl; sif::info << "Y: " << primaryDataset.angVelocY.value << std::endl;
sif::info << "Z: " << primaryDataset.angVelocZ.value << std::endl; sif::info << "Z: " << primaryDataset.angVelocZ.value << std::endl;
sif::info << "GyroADIS16507Handler: Accelerations in m / s^2: " << std::endl; sif::info << "GyroADIS1650XHandler: Accelerations in m / s^2: " << std::endl;
sif::info << "X: " << primaryDataset.accelX.value << std::endl; sif::info << "X: " << primaryDataset.accelX.value << std::endl;
sif::info << "Y: " << primaryDataset.accelY.value << std::endl; sif::info << "Y: " << primaryDataset.accelY.value << std::endl;
sif::info << "Z: " << primaryDataset.accelZ.value << std::endl; sif::info << "Z: " << primaryDataset.accelZ.value << std::endl;

View File

@ -8,7 +8,7 @@
#include "fsfw/globalfunctions/PeriodicOperationDivider.h" #include "fsfw/globalfunctions/PeriodicOperationDivider.h"
#include "fsfw/devicehandlers/DeviceHandlerBase.h" #include "fsfw/devicehandlers/DeviceHandlerBase.h"
#if OBSW_ADIS16507_LINUX_COM_IF == 1 #if OBSW_ADIS1650X_LINUX_COM_IF == 1
class SpiComIF; class SpiComIF;
class SpiCookie; class SpiCookie;
#endif #endif
@ -24,7 +24,7 @@ public:
GyroADIS1650XHandler(object_id_t objectId, object_id_t deviceCommunication, GyroADIS1650XHandler(object_id_t objectId, object_id_t deviceCommunication,
CookieIF* comCookie, ADIS1650X::Type type); CookieIF* comCookie, ADIS1650X::Type type);
/* DeviceHandlerBase abstract function implementation */ // DeviceHandlerBase abstract function implementation
void doStartUp() override; void doStartUp() override;
void doShutDown() override; void doShutDown() override;
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t * id) override; ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t * id) override;
@ -66,7 +66,7 @@ private:
BurstModes getBurstMode(); BurstModes getBurstMode();
#if OBSW_ADIS16507_LINUX_COM_IF == 1 #if OBSW_ADIS1650X_LINUX_COM_IF == 1
static ReturnValue_t spiSendCallback(SpiComIF* comIf, SpiCookie *cookie, static ReturnValue_t spiSendCallback(SpiComIF* comIf, SpiCookie *cookie,
const uint8_t *sendData, size_t sendLen, void* args); const uint8_t *sendData, size_t sendLen, void* args);
#endif #endif