From a173ef43082b88de21a63cec982cf901ff7a0645 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 12 May 2022 12:12:47 +0200 Subject: [PATCH] create low level rtd handler in obj factory --- linux/ObjectFactory.cpp | 49 ++++++++++++++-------- linux/devices/Max31865RtdLowlevelHandler.h | 2 +- misc/eclipse/.cproject | 22 +++++----- mission/devices/Max31865EiveHandler.cpp | 9 ++++ mission/devices/Max31865EiveHandler.h | 4 ++ mission/devices/Max31865PT1000Handler.cpp | 4 +- mission/devices/Max31865PT1000Handler.h | 2 +- 7 files changed, 60 insertions(+), 32 deletions(-) diff --git a/linux/ObjectFactory.cpp b/linux/ObjectFactory.cpp index 35d1cff9..3e760c1f 100644 --- a/linux/ObjectFactory.cpp +++ b/linux/ObjectFactory.cpp @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include #include #include @@ -245,8 +247,8 @@ void ObjectFactory::createRtdComponents(std::string spiDev, GpioIF* gpioComIF, gpioChecker(gpioComIF->addGpios(rtdGpioCookie), "RTDs"); #if OBSW_ADD_RTD_DEVICES == 1 - static constexpr uint8_t NUMBER_RTDS = 16; - std::array, NUMBER_RTDS> cookieArgs = {{ + using namespace EiveMax31855; + std::array, NUM_RTDS> cookieArgs = {{ {addresses::RTD_IC_3, gpioIds::RTD_IC_3}, {addresses::RTD_IC_4, gpioIds::RTD_IC_4}, {addresses::RTD_IC_5, gpioIds::RTD_IC_5}, @@ -264,7 +266,7 @@ void ObjectFactory::createRtdComponents(std::string spiDev, GpioIF* gpioComIF, {addresses::RTD_IC_17, gpioIds::RTD_IC_17}, {addresses::RTD_IC_18, gpioIds::RTD_IC_18}, }}; - std::array, NUMBER_RTDS> rtdInfos = {{ + std::array, NUM_RTDS> rtdInfos = {{ {objects::RTD_0_IC3_PLOC_HEATSPREADER, "RTD_0_PLOC_HEATSPREADER"}, {objects::RTD_1_IC4_PLOC_MISSIONBOARD, "RTD_1_PLOC_MISSIONBOARD"}, {objects::RTD_2_IC5_4K_CAMERA, "RTD_2_4K_CAMERA"}, @@ -282,31 +284,44 @@ void ObjectFactory::createRtdComponents(std::string spiDev, GpioIF* gpioComIF, {objects::RTD_14_IC17_TCS_BOARD, "RTD_14_TCS_BOARD"}, {objects::RTD_15_IC18_IMTQ, "RTD_15_IMTQ"}, }}; - std::array rtdCookies = {}; - std::array rtds = {}; + std::array rtdCookies = {}; + std::array rtds = {}; RtdFdir* rtdFdir = nullptr; - for (uint8_t idx = 0; idx < NUMBER_RTDS; idx++) { + bool useDirectHandler = false; + auto directRtdsCreator = [&](uint8_t idx) { + auto typedHandler = + new Max31865PT1000Handler(rtdInfos[idx].first, objects::SPI_MAIN_COM_IF, rtdCookies[idx]); + rtds[idx] = typedHandler; + typedHandler->setDeviceInfo(idx + 3, rtdInfos[idx].second); + }; + auto lowLevelRtdsCreator = [&](uint8_t idx) { + Max31865ReaderCookie* rtdLowLevelCookie = + new Max31865ReaderCookie(rtdInfos[idx].first, idx, rtdInfos[idx].second, rtdCookies[idx]); + auto typedHandler = + new Max31865EiveHandler(rtdInfos[idx].first, objects::SPI_MAIN_COM_IF, rtdLowLevelCookie); + rtds[idx] = typedHandler; + typedHandler->setDeviceInfo(idx, rtdInfos[idx].second); + }; + for (uint8_t idx = 0; idx < NUM_RTDS; idx++) { rtdCookies[idx] = new SpiCookie(cookieArgs[idx].first, cookieArgs[idx].second, MAX31865::MAX_REPLY_SIZE, spi::RTD_MODE, spi::RTD_SPEED); - rtds[idx] = - new Max31865PT1000Handler(rtdInfos[idx].first, objects::SPI_MAIN_COM_IF, rtdCookies[idx]); + if (useDirectHandler) { + directRtdsCreator(idx); + } else { + lowLevelRtdsCreator(idx); + } rtds[idx]->setParent(objects::TCS_BOARD_ASS); rtdFdir = new RtdFdir(rtdInfos[idx].first); rtds[idx]->setCustomFdir(rtdFdir); - rtds[idx]->setDeviceInfo(idx + 3, rtdInfos[idx].second); #if OBSW_DEBUG_RTD == 1 rtds[idx]->setDebugMode(true); #endif +#if OBSW_TEST_RTD == 1 + rtds[idx]->setStartUpImmediately(); + rtds[idx]->setInstantNormal(true); +#endif // OBSW_TEST_RTD == 1 } -#if OBSW_TEST_RTD == 1 - for (auto& rtd : rtds) { - if (rtd != nullptr) { - rtd->setStartUpImmediately(); - rtd->setInstantNormal(true); - } - } -#endif // OBSW_TEST_RTD == 1 TcsBoardHelper helper(rtdInfos); TcsBoardAssembly* tcsBoardAss = new TcsBoardAssembly(objects::TCS_BOARD_ASS, objects::NO_OBJECT, pwrSwitcher, diff --git a/linux/devices/Max31865RtdLowlevelHandler.h b/linux/devices/Max31865RtdLowlevelHandler.h index 5e9a7c26..8194b1a8 100644 --- a/linux/devices/Max31865RtdLowlevelHandler.h +++ b/linux/devices/Max31865RtdLowlevelHandler.h @@ -9,7 +9,7 @@ #include "fsfw/devicehandlers/DeviceCommunicationIF.h" #include "mission/devices/devicedefinitions/Max31865Definitions.h" -struct Max31865ReaderCookie { +struct Max31865ReaderCookie : public CookieIF { Max31865ReaderCookie(){}; Max31865ReaderCookie(object_id_t handlerId_, uint8_t idx_, const std::string& locString_, SpiCookie* spiCookie_) diff --git a/misc/eclipse/.cproject b/misc/eclipse/.cproject index f40535b7..d30ef1ec 100644 --- a/misc/eclipse/.cproject +++ b/misc/eclipse/.cproject @@ -57,7 +57,7 @@ - + @@ -119,7 +119,7 @@ - + @@ -187,7 +187,7 @@ - + @@ -255,7 +255,7 @@ - + @@ -750,7 +750,7 @@ - + @@ -851,7 +851,7 @@