diff --git a/bsp_linux_board/ObjectFactory.cpp b/bsp_linux_board/ObjectFactory.cpp index 372fbf25..60ca5b6e 100644 --- a/bsp_linux_board/ObjectFactory.cpp +++ b/bsp_linux_board/ObjectFactory.cpp @@ -14,7 +14,8 @@ #include "mission/core/GenericFactory.h" #include "mission/utility/TmFunnel.h" #include -#include "mission/devices/MGMHandlerLIS3MDL.h" +#include + #include "mission/devices/MGMHandlerRM3100.h" #include "mission/devices/GyroADIS16507Handler.h" diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index de34ab7a..8f88a1c7 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -1,3 +1,4 @@ +#include #include "ObjectFactory.h" #include "OBSWConfig.h" #include "devConf.h" @@ -36,7 +37,6 @@ #include "mission/devices/GyroADIS16507Handler.h" #include "mission/devices/IMTQHandler.h" #include "mission/devices/SyrlinksHkHandler.h" -#include "mission/devices/MGMHandlerLIS3MDL.h" #include "mission/devices/PlocMPSoCHandler.h" #include "mission/devices/RadiationSensorHandler.h" #include "mission/devices/RwHandler.h" @@ -449,7 +449,7 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF *gpioComIF, UartComI SpiCookie* spiCookie = new SpiCookie(addresses::MGM_0_LIS3, gpioIds::MGM_0_LIS3_CS, spiDev, MGMLIS3MDL::MAX_BUFFER_SIZE, spi::DEFAULT_LIS3_MODE, spi::DEFAULT_LIS3_SPEED); auto mgmLis3Handler = new MGMHandlerLIS3MDL(objects::MGM_0_LIS3_HANDLER, - objects::SPI_COM_IF, spiCookie); + objects::SPI_COM_IF, spiCookie, 0); mgmLis3Handler->setStartUpImmediately(); spiCookie = new SpiCookie(addresses::MGM_1_RM3100, gpioIds::MGM_1_RM3100_CS, spiDev, @@ -462,7 +462,7 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF *gpioComIF, UartComI spiCookie = new SpiCookie(addresses::MGM_2_LIS3, gpioIds::MGM_2_LIS3_CS, spiDev, MGMLIS3MDL::MAX_BUFFER_SIZE, spi::DEFAULT_LIS3_MODE, spi::DEFAULT_LIS3_SPEED); auto mgmLis3Handler2 = new MGMHandlerLIS3MDL(objects::MGM_2_LIS3_HANDLER, - objects::SPI_COM_IF, spiCookie); + objects::SPI_COM_IF, spiCookie, 0); mgmLis3Handler2->setStartUpImmediately(); spiCookie = new SpiCookie(addresses::MGM_3_RM3100, gpioIds::MGM_3_RM3100_CS, spiDev, diff --git a/mission/devices/CMakeLists.txt b/mission/devices/CMakeLists.txt index b5a1e20f..356115d3 100644 --- a/mission/devices/CMakeLists.txt +++ b/mission/devices/CMakeLists.txt @@ -1,6 +1,6 @@ target_sources(${TARGET_NAME} PUBLIC GPSHyperionHandler.cpp - MGMHandlerLIS3MDL.cpp + MgmLIS3MDLHandler.cpp GomspaceDeviceHandler.cpp Tmp1075Handler.cpp PCDUHandler.cpp diff --git a/mission/devices/MGMHandlerLIS3MDL.cpp b/mission/devices/MgmLIS3MDLHandler.cpp similarity index 98% rename from mission/devices/MGMHandlerLIS3MDL.cpp rename to mission/devices/MgmLIS3MDLHandler.cpp index 0e1da93e..b5701e1e 100644 --- a/mission/devices/MGMHandlerLIS3MDL.cpp +++ b/mission/devices/MgmLIS3MDLHandler.cpp @@ -1,12 +1,11 @@ -#include "MGMHandlerLIS3MDL.h" - +#include #include "fsfw/datapool/PoolReadGuard.h" #if OBSW_VERBOSE_LEVEL >= 1 #include "fsfw/globalfunctions/PeriodicOperationDivider.h" #endif -MGMHandlerLIS3MDL::MGMHandlerLIS3MDL(object_id_t objectId, - object_id_t deviceCommunication, CookieIF* comCookie): +MGMHandlerLIS3MDL::MGMHandlerLIS3MDL(object_id_t objectId, object_id_t deviceCommunication, + CookieIF* comCookie, uint8_t switchId, uint32_t transitionDelay): DeviceHandlerBase(objectId, deviceCommunication, comCookie), dataset(this) { #if OBSW_VERBOSE_LEVEL >= 1 diff --git a/mission/devices/MGMHandlerLIS3MDL.h b/mission/devices/MgmLIS3MDLHandler.h similarity index 98% rename from mission/devices/MGMHandlerLIS3MDL.h rename to mission/devices/MgmLIS3MDLHandler.h index 1b7b9c9a..0e36b9d3 100644 --- a/mission/devices/MGMHandlerLIS3MDL.h +++ b/mission/devices/MgmLIS3MDLHandler.h @@ -30,8 +30,8 @@ public: //Notifies a command to change the setup parameters static const Event CHANGE_OF_SETUP_PARAMETER = MAKE_EVENT(0, severity::LOW); - MGMHandlerLIS3MDL(uint32_t objectId, object_id_t deviceCommunication, - CookieIF* comCookie); + MGMHandlerLIS3MDL(uint32_t objectId, object_id_t deviceCommunication, CookieIF* comCookie, + uint8_t switchId, uint32_t transitionDelay = 10000); virtual ~MGMHandlerLIS3MDL(); protected: @@ -59,6 +59,34 @@ protected: private: MGMLIS3MDL::MgmPrimaryDataset dataset; + //Length a sindgle command SPI answer + static const uint8_t SINGLE_COMMAND_ANSWER_LEN = 2; + + //Single SPIcommand has 2 bytes, first for adress, second for content + size_t singleComandSize = 2; + //has the size for all adresses of the lis3mdl + the continous write bit + uint8_t commandBuffer[MGMLIS3MDL::NR_OF_DATA_AND_CFG_REGISTERS + 1]; + + /** + * We want to save the registers we set, so we dont have to read the + * registers when we want to change something. + * --> everytime we change set a register we have to save it + */ + uint8_t registers[MGMLIS3MDL::NR_OF_CTRL_REGISTERS]; + + uint8_t statusRegister = 0; + + enum class InternalState { + STATE_NONE, + STATE_FIRST_CONTACT, + STATE_SETUP, + STATE_CHECK_REGISTERS, + STATE_NORMAL + }; + + InternalState internalState = InternalState::STATE_NONE; + CommunicationStep communicationStep = CommunicationStep::DATA; + bool commandExecuted = false; /*------------------------------------------------------------------------*/ /* Device specific commands and variables */ @@ -119,24 +147,6 @@ private: virtual ReturnValue_t setOperatingMode(const uint8_t *commandData, size_t commandDataLen); - - //Length a sindgle command SPI answer - static const uint8_t SINGLE_COMMAND_ANSWER_LEN = 2; - - //Single SPIcommand has 2 bytes, first for adress, second for content - size_t singleComandSize = 2; - //has the size for all adresses of the lis3mdl + the continous write bit - uint8_t commandBuffer[MGMLIS3MDL::NR_OF_DATA_AND_CFG_REGISTERS + 1]; - - /** - * We want to save the registers we set, so we dont have to read the - * registers when we want to change something. - * --> everytime we change set a register we have to save it - */ - uint8_t registers[MGMLIS3MDL::NR_OF_CTRL_REGISTERS]; - - uint8_t statusRegister = 0; - /** * We always update all registers together, so this method updates * the rawpacket and rawpacketLen, so we just manipulate the local @@ -145,18 +155,6 @@ private: */ ReturnValue_t prepareCtrlRegisterWrite(); - enum class InternalState { - STATE_NONE, - STATE_FIRST_CONTACT, - STATE_SETUP, - STATE_CHECK_REGISTERS, - STATE_NORMAL - }; - - InternalState internalState = InternalState::STATE_NONE; - CommunicationStep communicationStep = CommunicationStep::DATA; - bool commandExecuted = false; - #if OBSW_VERBOSE_LEVEL >= 1 PeriodicOperationDivider* debugDivider; #endif diff --git a/mission/devices/PDU2Handler.cpp b/mission/devices/PDU2Handler.cpp index 8789695e..bd760d77 100644 --- a/mission/devices/PDU2Handler.cpp +++ b/mission/devices/PDU2Handler.cpp @@ -312,6 +312,18 @@ ReturnValue_t PDU2Handler::initializeLocalDataPool( ReturnValue_t PDU2Handler::printStatus(DeviceCommandId_t cmd) { switch(cmd) { + case(GOMSPACE::PRINT_ALL): { + PoolReadGuard pg(&pdu2HkTableDataset); + ReturnValue_t readResult = pg.getReadResult(); + if(readResult != HasReturnvaluesIF::RETURN_OK) { + sif::warning << "Reading PDU2 HK table failed!" << std::endl; + return HasReturnvaluesIF::RETURN_FAILED; + } + printOutputSwitchStates(); + printOutputCurrents(); + printOutputVoltages(); + return HasReturnvaluesIF::RETURN_OK; + } case(GOMSPACE::PRINT_OUT_ENB_STATUS): { PoolReadGuard pg(&pdu2HkTableDataset); ReturnValue_t readResult = pg.getReadResult(); @@ -322,6 +334,26 @@ ReturnValue_t PDU2Handler::printStatus(DeviceCommandId_t cmd) { printOutputSwitchStates(); return HasReturnvaluesIF::RETURN_OK; } + case(GOMSPACE::PRINT_OUT_CURRENTS): { + PoolReadGuard pg(&pdu2HkTableDataset); + ReturnValue_t readResult = pg.getReadResult(); + if(readResult != HasReturnvaluesIF::RETURN_OK) { + sif::warning << "Reading PDU2 HK table failed!" << std::endl; + return HasReturnvaluesIF::RETURN_FAILED; + } + printOutputCurrents(); + return HasReturnvaluesIF::RETURN_OK; + } + case(GOMSPACE::PRINT_OUT_VOLTAGES): { + PoolReadGuard pg(&pdu2HkTableDataset); + ReturnValue_t readResult = pg.getReadResult(); + if(readResult != HasReturnvaluesIF::RETURN_OK) { + sif::warning << "Reading PDU2 HK table failed!" << std::endl; + return HasReturnvaluesIF::RETURN_FAILED; + } + printOutputVoltages(); + return HasReturnvaluesIF::RETURN_OK; + } default: { return HasReturnvaluesIF::RETURN_FAILED; } @@ -348,3 +380,45 @@ void PDU2Handler::printOutputSwitchStates() { sif::info << "PDU2 payload camera enable state: " << unsigned(pdu2HkTableDataset.outEnabledPayloadCamera.value) << std::endl; } + +void PDU2Handler::printOutputCurrents() { + sif::info << "PDU2 Q7S current: " << + pdu2HkTableDataset.currentOutQ7S.value << std::endl; + sif::info << "PDU2 Payload PCDU current: " << + pdu2HkTableDataset.currentOutPayloadPCDUCh1.value << std::endl; + sif::info << "PDU2 RW currents: " << + pdu2HkTableDataset.currentOutReactionWheels.value << std::endl; + sif::info << "PDU2 TCS Board Heater In Current: " << + pdu2HkTableDataset.currentOutTCSBoardHeaterIn.value << std::endl; + sif::info << "PDU2 SuS Redundant current: " << + pdu2HkTableDataset.currentOutSUSRedundant.value << std::endl; + sif::info << "PDU2 Depl-Mechanism current: " << + pdu2HkTableDataset.currentOutDeplMechanism.value << std::endl; + sif::info << "PDU2 Payload PCDU current: " << + pdu2HkTableDataset.currentOutPayloadPCDUCh6.value << std::endl; + sif::info << "PDU2 ACS Board current: " << + pdu2HkTableDataset.currentOutACSBoardSideB.value << std::endl; + sif::info << "PDU2 Payload Camera current: " << + pdu2HkTableDataset.currentOutPayloadCamera.value << std::endl; +} + +void PDU2Handler::printOutputVoltages() { + sif::info << "PDU2 Q7S voltage: " << + pdu2HkTableDataset.voltageOutQ7S.value << std::endl; + sif::info << "PDU2 Payload PCDU voltage: " << + pdu2HkTableDataset.voltageOutPayloadPCDUCh1.value << std::endl; + sif::info << "PDU2 RW voltage: " << + pdu2HkTableDataset.voltageOutReactionWheels.value << std::endl; + sif::info << "PDU2 TCS Board Heater In voltage: " << + pdu2HkTableDataset.voltageOutTCSBoardHeaterIn.value << std::endl; + sif::info << "PDU2 SuS Redundant voltage: " << + pdu2HkTableDataset.voltageOutSUSRedundant.value << std::endl; + sif::info << "PDU2 Depl-Mechanism voltage: " << + pdu2HkTableDataset.voltageOutDeplMechanism.value << std::endl; + sif::info << "PDU2 Payload PCDU voltage: " << + pdu2HkTableDataset.voltageOutPayloadPCDUCh6.value << std::endl; + sif::info << "PDU2 ACS Board voltage: " << + pdu2HkTableDataset.voltageOutACSBoardSideB.value << std::endl; + sif::info << "PDU2 Payload Camera voltage: " << + pdu2HkTableDataset.voltageOutPayloadCamera.value << std::endl; +} diff --git a/mission/devices/PDU2Handler.h b/mission/devices/PDU2Handler.h index 0aa7f0b5..93f9200e 100644 --- a/mission/devices/PDU2Handler.h +++ b/mission/devices/PDU2Handler.h @@ -40,6 +40,9 @@ private: PDU2::PDU2HkTableDataset pdu2HkTableDataset; void printOutputSwitchStates(); + void printOutputCurrents(); + void printOutputVoltages(); + void parseHkTableReply(const uint8_t *packet); }; diff --git a/mission/devices/devicedefinitions/GomspaceDefinitions.h b/mission/devices/devicedefinitions/GomspaceDefinitions.h index f4e50466..5f067bed 100644 --- a/mission/devices/devicedefinitions/GomspaceDefinitions.h +++ b/mission/devices/devicedefinitions/GomspaceDefinitions.h @@ -33,7 +33,11 @@ static const DeviceCommandId_t GNDWDT_RESET = 9; //!< [EXPORT] : [COMMAND] static const DeviceCommandId_t PARAM_GET = 0; //!< [EXPORT] : [COMMAND] static const DeviceCommandId_t PARAM_SET = 255; //!< [EXPORT] : [COMMAND] static const DeviceCommandId_t REQUEST_HK_TABLE = 16; //!< [EXPORT] : [COMMAND] -static const DeviceCommandId_t PRINT_OUT_ENB_STATUS = 17; //!< [EXPORT] : [COMMAND] +static const DeviceCommandId_t PRINT_ALL = 32; //!< [EXPORT] : [COMMAND] +static const DeviceCommandId_t PRINT_OUT_ENB_STATUS = 33; //!< [EXPORT] : [COMMAND] +static const DeviceCommandId_t PRINT_OUT_CURRENTS = 34; //!< [EXPORT] : [COMMAND] +static const DeviceCommandId_t PRINT_OUT_VOLTAGES = 35; //!< [EXPORT] : [COMMAND] + }