From b75102f670e9d5b2ad9e136eead7020ee415f5fd Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Dec 2022 14:11:31 +0100 Subject: [PATCH] add 5V stack handler --- bsp_q7s/core/ObjectFactory.cpp | 5 +++-- bsp_q7s/core/ObjectFactory.h | 3 ++- bsp_q7s/fmObjectFactory.cpp | 4 +++- mission/devices/RadiationSensorHandler.cpp | 11 ++++++---- mission/devices/RadiationSensorHandler.h | 3 ++- mission/system/objects/CMakeLists.txt | 1 + mission/system/objects/Stack5VHandler.cpp | 9 ++++++++ mission/system/objects/Stack5VHandler.h | 24 ++++++++++++++++++++++ 8 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 mission/system/objects/Stack5VHandler.cpp create mode 100644 mission/system/objects/Stack5VHandler.h diff --git a/bsp_q7s/core/ObjectFactory.cpp b/bsp_q7s/core/ObjectFactory.cpp index 85157e66..bcd2a5a5 100644 --- a/bsp_q7s/core/ObjectFactory.cpp +++ b/bsp_q7s/core/ObjectFactory.cpp @@ -204,7 +204,8 @@ void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchI #endif } -ReturnValue_t ObjectFactory::createRadSensorComponent(LinuxLibgpioIF* gpioComIF) { +ReturnValue_t ObjectFactory::createRadSensorComponent(LinuxLibgpioIF* gpioComIF, + Stack5VHandler& stackHandler) { using namespace gpio; if (gpioComIF == nullptr) { return returnvalue::FAILED; @@ -225,7 +226,7 @@ ReturnValue_t ObjectFactory::createRadSensorComponent(LinuxLibgpioIF* gpioComIF) spi::DEFAULT_MAX_1227_MODE, spi::DEFAULT_MAX_1227_SPEED); spiCookieRadSensor->setMutexParams(MutexIF::TimeoutType::WAITING, spi::RAD_SENSOR_CS_TIMEOUT); auto radSensor = new RadiationSensorHandler(objects::RAD_SENSOR, objects::SPI_MAIN_COM_IF, - spiCookieRadSensor, gpioComIF); + spiCookieRadSensor, gpioComIF, stackHandler); static_cast(radSensor); // The radiation sensor ADC is powered by the 5V stack connector which should always be on radSensor->setStartUpImmediately(); diff --git a/bsp_q7s/core/ObjectFactory.h b/bsp_q7s/core/ObjectFactory.h index c67353c4..9daceabf 100644 --- a/bsp_q7s/core/ObjectFactory.h +++ b/bsp_q7s/core/ObjectFactory.h @@ -2,6 +2,7 @@ #define BSP_Q7S_OBJECTFACTORY_H_ #include +#include #include #include #include @@ -29,7 +30,7 @@ void createPcduComponents(LinuxLibgpioIF* gpioComIF, PowerSwitchIF** pwrSwitcher void createPlPcduComponents(LinuxLibgpioIF* gpioComIF, SpiComIF* spiComIF, PowerSwitchIF* pwrSwitcher); void createTmpComponents(); -ReturnValue_t createRadSensorComponent(LinuxLibgpioIF* gpioComIF); +ReturnValue_t createRadSensorComponent(LinuxLibgpioIF* gpioComIF, Stack5VHandler& handler); void createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, SerialComIF* uartComIF, PowerSwitchIF* pwrSwitcher); void createHeaterComponents(GpioIF* gpioIF, PowerSwitchIF* pwrSwitcher, HealthTableIF* healthTable); diff --git a/bsp_q7s/fmObjectFactory.cpp b/bsp_q7s/fmObjectFactory.cpp index 2814c3f9..527c639b 100644 --- a/bsp_q7s/fmObjectFactory.cpp +++ b/bsp_q7s/fmObjectFactory.cpp @@ -33,8 +33,10 @@ void ObjectFactory::produce(void* args) { new CoreController(objects::CORE_CONTROLLER); createPcduComponents(gpioComIF, &pwrSwitcher); + auto* stackHandler = new Stack5VHandler(*pwrSwitcher); + #if OBSW_ADD_RAD_SENSORS == 1 - createRadSensorComponent(gpioComIF); + createRadSensorComponent(gpioComIF, *stackHandler); #endif #if OBSW_ADD_SUN_SENSORS == 1 createSunSensorComponents(gpioComIF, spiMainComIF, pwrSwitcher, q7s::SPI_DEFAULT_DEV); diff --git a/mission/devices/RadiationSensorHandler.cpp b/mission/devices/RadiationSensorHandler.cpp index bc11bb45..f8e0df9e 100644 --- a/mission/devices/RadiationSensorHandler.cpp +++ b/mission/devices/RadiationSensorHandler.cpp @@ -2,10 +2,12 @@ #include #include #include +#include #include RadiationSensorHandler::RadiationSensorHandler(object_id_t objectId, object_id_t comIF, - CookieIF *comCookie, GpioIF *gpioIF) + CookieIF *comCookie, GpioIF *gpioIF, + Stack5VHandler &handler) : DeviceHandlerBase(objectId, comIF, comCookie), dataset(this), gpioIF(gpioIF) { if (comCookie == nullptr) { sif::error << "RadiationSensorHandler: Invalid com cookie" << std::endl; @@ -73,9 +75,10 @@ ReturnValue_t RadiationSensorHandler::buildCommandFromCommand(DeviceCommandId_t ReturnValue_t result = gpioIF->pullHigh(gpioIds::ENABLE_RADFET); if (result != returnvalue::OK) { #if OBSW_VERBOSE_LEVEL >= 1 - sif::warning << "RadiationSensorHandler::buildCommandFromCommand; Pulling RADFET Enale pin " - "high failed" - << std::endl; + sif::warning + << "RadiationSensorHandler::buildCommandFromCommand: Pulling RADFET Enable pin " + "high failed" + << std::endl; #endif } /* First the fifo will be reset here */ diff --git a/mission/devices/RadiationSensorHandler.h b/mission/devices/RadiationSensorHandler.h index d16cc624..dff273a0 100644 --- a/mission/devices/RadiationSensorHandler.h +++ b/mission/devices/RadiationSensorHandler.h @@ -4,6 +4,7 @@ #include #include #include +#include /** * @brief This is the device handler class for radiation sensor on the OBC IF Board. The @@ -16,7 +17,7 @@ class RadiationSensorHandler : public DeviceHandlerBase { public: RadiationSensorHandler(object_id_t objectId, object_id_t comIF, CookieIF *comCookie, - GpioIF *gpioIF); + GpioIF *gpioIF, Stack5VHandler &handler); virtual ~RadiationSensorHandler(); void setToGoToNormalModeImmediately(); void enablePeriodicDataPrint(bool enable); diff --git a/mission/system/objects/CMakeLists.txt b/mission/system/objects/CMakeLists.txt index 23e97047..75526486 100644 --- a/mission/system/objects/CMakeLists.txt +++ b/mission/system/objects/CMakeLists.txt @@ -6,6 +6,7 @@ target_sources( ComSubsystem.cpp PayloadSubsystem.cpp AcsBoardAssembly.cpp + Stack5VHandler.cpp SusAssembly.cpp RwAssembly.cpp DualLanePowerStateMachine.cpp diff --git a/mission/system/objects/Stack5VHandler.cpp b/mission/system/objects/Stack5VHandler.cpp new file mode 100644 index 00000000..5b81fb46 --- /dev/null +++ b/mission/system/objects/Stack5VHandler.cpp @@ -0,0 +1,9 @@ +#include "Stack5VHandler.h" + +Stack5VHandler::Stack5VHandler(PowerSwitchIF& switcher) : switcher(switcher) {} + +ReturnValue_t Stack5VHandler::commandSwitchOn() { return returnvalue::OK; } + +ReturnValue_t Stack5VHandler::commandSwitchOff() { return returnvalue::OK; } + +bool Stack5VHandler::isSwitchOn() { return false; } diff --git a/mission/system/objects/Stack5VHandler.h b/mission/system/objects/Stack5VHandler.h new file mode 100644 index 00000000..e88be0cd --- /dev/null +++ b/mission/system/objects/Stack5VHandler.h @@ -0,0 +1,24 @@ +#ifndef MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ +#define MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ + +#include + +#include "mission/devices/devicedefinitions/GomspaceDefinitions.h" + +class Stack5VHandler { + public: + Stack5VHandler(PowerSwitchIF& switcher); + + ReturnValue_t commandSwitchOn(); + ReturnValue_t commandSwitchOff(); + + bool isSwitchOn(); + + private: + PowerSwitchIF& switcher; + bool radSensorIsOn = false; + bool plPcduIsOn = false; + pcdu::Switches stackSwitch = pcdu::Switches::P60_DOCK_5V_STACK; +}; + +#endif /* MISSION_SYSTEM_OBJECTS_STACK5VHANDLER_H_ */