diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 44b27890..828f6d33 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -400,7 +400,8 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF *gpioComIF, UartComI std::stringstream consumer; GpiodRegularByLineName* gpio = nullptr; consumer << "0x" << std::hex << objects::GYRO_0_ADIS_HANDLER; - gpio = new GpiodRegularByLineName(q7s::gpioNames::GYRO_0_ADIS_CS, consumer.str(), gpio::OUT, gpio::HIGH); + gpio = new GpiodRegularByLineName(q7s::gpioNames::GYRO_0_ADIS_CS, consumer.str(), + gpio::OUT, gpio::HIGH); gpioCookieAcsBoard->addGpio(gpioIds::GYRO_0_ADIS_CS, gpio); consumer.str(""); @@ -856,19 +857,31 @@ void ObjectFactory::createReactionWheelComponents(LinuxLibgpioIF* gpioComIF) { auto rwHandler1 = new RwHandler(objects::RW1, objects::SPI_COM_IF, rw1SpiCookie, gpioComIF, gpioIds::EN_RW1); +#if OBSW_DEBUG_RW == 1 + rwHandler1->setStartUpImmediately(); +#endif rw1SpiCookie->setCallbackArgs(rwHandler1); rwHandler1->setStartUpImmediately(); auto rwHandler2 = new RwHandler(objects::RW2, objects::SPI_COM_IF, rw2SpiCookie, gpioComIF, gpioIds::EN_RW2); +#if OBSW_DEBUG_RW == 1 + rwHandler2->setStartUpImmediately(); +#endif rw2SpiCookie->setCallbackArgs(rwHandler2); auto rwHandler3 = new RwHandler(objects::RW3, objects::SPI_COM_IF, rw3SpiCookie, gpioComIF, gpioIds::EN_RW3); +#if OBSW_DEBUG_RW == 1 + rwHandler3->setStartUpImmediately(); +#endif rw3SpiCookie->setCallbackArgs(rwHandler3); auto rwHandler4 = new RwHandler(objects::RW4, objects::SPI_COM_IF, rw4SpiCookie, gpioComIF, gpioIds::EN_RW4); +#if OBSW_DEBUG_RW == 1 + rwHandler4->setStartUpImmediately(); +#endif rw4SpiCookie->setCallbackArgs(rwHandler4); } diff --git a/mission/devices/GPSHyperionHandler.cpp b/mission/devices/GPSHyperionHandler.cpp index 26b86a76..8944d17a 100644 --- a/mission/devices/GPSHyperionHandler.cpp +++ b/mission/devices/GPSHyperionHandler.cpp @@ -60,10 +60,8 @@ ReturnValue_t GPSHyperionHandler::buildCommandFromCommand( PoolReadGuard pg(&gpsSet); // Set HK entries invalid gpsSet.setValidity(false, true); - // The user needs to implement this. Don't touch states for now, the device should - // quickly reboot and send valid strings again. - actionHelper.finish(true, getCommanderQueueId(deviceCommand), deviceCommand); - return resetCallback(resetCallbackArgs); + resetCallback(resetCallbackArgs); + return HasActionsIF::EXECUTION_FINISHED; } return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED; } @@ -210,3 +208,7 @@ ReturnValue_t GPSHyperionHandler::initialize() { // Enable reply immediately for now return updatePeriodicReply(true, GpsHyperion::GPS_REPLY); } + +ReturnValue_t GPSHyperionHandler::acceptExternalDeviceCommands() { + return DeviceHandlerBase::acceptExternalDeviceCommands(); +} diff --git a/mission/devices/GPSHyperionHandler.h b/mission/devices/GPSHyperionHandler.h index 13591b44..e7c925be 100644 --- a/mission/devices/GPSHyperionHandler.h +++ b/mission/devices/GPSHyperionHandler.h @@ -22,6 +22,7 @@ public: using gpioResetFunction_t = ReturnValue_t (*) (void* args); void setResetPinTriggerFunction(gpioResetFunction_t resetCallback, void*args); + ReturnValue_t acceptExternalDeviceCommands() override; ReturnValue_t initialize() override; protected: diff --git a/mission/devices/RwHandler.cpp b/mission/devices/RwHandler.cpp index 571f7eca..91188d87 100644 --- a/mission/devices/RwHandler.cpp +++ b/mission/devices/RwHandler.cpp @@ -144,47 +144,48 @@ void RwHandler::fillCommandAndReplyMap() { ReturnValue_t RwHandler::scanForReply(const uint8_t *start, size_t remainingSize, DeviceCommandId_t *foundId, size_t *foundLen) { - - switch (*(start)) { - case (static_cast(RwDefinitions::GET_LAST_RESET_STATUS)): { + uint8_t replyByte = *start; + switch (replyByte) { + case (RwDefinitions::GET_LAST_RESET_STATUS): { *foundLen = RwDefinitions::SIZE_GET_RESET_STATUS; *foundId = RwDefinitions::GET_LAST_RESET_STATUS; break; } - case (static_cast(RwDefinitions::CLEAR_LAST_RESET_STATUS)): { + case (RwDefinitions::CLEAR_LAST_RESET_STATUS): { *foundLen = RwDefinitions::SIZE_CLEAR_RESET_STATUS; *foundId = RwDefinitions::CLEAR_LAST_RESET_STATUS; break; } - case (static_cast(RwDefinitions::GET_RW_STATUS)): { + case (RwDefinitions::GET_RW_STATUS): { *foundLen = RwDefinitions::SIZE_GET_RW_STATUS; *foundId = RwDefinitions::GET_RW_STATUS; break; } - case (static_cast(RwDefinitions::INIT_RW_CONTROLLER)): { + case (RwDefinitions::INIT_RW_CONTROLLER): { *foundLen = RwDefinitions::SIZE_INIT_RW; *foundId = RwDefinitions::INIT_RW_CONTROLLER; break; } - case (static_cast(RwDefinitions::SET_SPEED)): { + case (RwDefinitions::SET_SPEED): { *foundLen = RwDefinitions::SIZE_SET_SPEED_REPLY; *foundId = RwDefinitions::SET_SPEED; break; } - case (static_cast(RwDefinitions::GET_TEMPERATURE)): { + case (RwDefinitions::GET_TEMPERATURE): { *foundLen = RwDefinitions::SIZE_GET_TEMPERATURE_REPLY; *foundId = RwDefinitions::GET_TEMPERATURE; break; } - case (static_cast(RwDefinitions::GET_TM)): { + case (RwDefinitions::GET_TM): { *foundLen = RwDefinitions::SIZE_GET_TELEMETRY_REPLY; *foundId = RwDefinitions::GET_TM; break; } default: { - sif::debug << "RwHandler::scanForReply: Reply contains invalid command code" << std::endl; + sif::warning << "RwHandler::scanForReply: Reply contains invalid command code" << + std::endl; + *foundLen = remainingSize; return RETURN_FAILED; - break; } }