287 lines
16 KiB
C++
287 lines
16 KiB
C++
#include "ObjectFactory.h"
|
|
|
|
#include <fsfw/power/PowerSwitchIF.h>
|
|
#include <fsfw_hal/common/gpio/GpioCookie.h>
|
|
#include <fsfw_hal/common/gpio/GpioIF.h>
|
|
#include <fsfw_hal/common/gpio/gpioDefinitions.h>
|
|
#include <fsfw_hal/linux/spi/SpiComIF.h>
|
|
#include <fsfw_hal/linux/spi/SpiCookie.h>
|
|
#include <linux/callbacks/gpioCallbacks.h>
|
|
#include <mission/devices/Max31865PT1000Handler.h>
|
|
#include <mission/devices/SusHandler.h>
|
|
#include <mission/system/RtdFdir.h>
|
|
#include <mission/system/SusAssembly.h>
|
|
#include <mission/system/SusFdir.h>
|
|
#include <mission/system/TcsBoardAssembly.h>
|
|
|
|
#include "OBSWConfig.h"
|
|
#include "devConf.h"
|
|
#include "devices/addresses.h"
|
|
#include "devices/gpioIds.h"
|
|
|
|
void ObjectFactory::createSunSensorComponents(GpioIF* gpioComIF, SpiComIF* spiComIF,
|
|
PowerSwitchIF* pwrSwitcher, std::string spiDev) {
|
|
using namespace gpio;
|
|
GpioCookie* gpioCookieSus = new GpioCookie();
|
|
GpioCallback* susgpio = nullptr;
|
|
|
|
susgpio = new GpioCallback("Chip select SUS 0", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_0, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 1", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_1, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 2", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_2, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 3", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_3, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 4", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_4, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 5", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_5, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 6", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_6, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 7", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_7, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 8", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_8, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 9", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_9, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 10", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_10, susgpio);
|
|
susgpio = new GpioCallback("Chip select SUS 11", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
gpioCookieSus->addGpio(gpioIds::CS_SUS_11, susgpio);
|
|
|
|
gpioComIF->addGpios(gpioCookieSus);
|
|
|
|
#if OBSW_ADD_SUN_SENSORS == 1
|
|
SusFdir* fdir = nullptr;
|
|
std::array<SusHandler*, 12> susHandlers = {};
|
|
SpiCookie* spiCookie =
|
|
new SpiCookie(addresses::SUS_0, gpioIds::CS_SUS_0, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[0] = new SusHandler(objects::SUS_0, 0, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_0);
|
|
susHandlers[0]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[0]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_1, gpioIds::CS_SUS_1, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[1] = new SusHandler(objects::SUS_1, 1, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_1);
|
|
susHandlers[1]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[1]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_2, gpioIds::CS_SUS_2, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[2] = new SusHandler(objects::SUS_2, 2, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_2);
|
|
susHandlers[2]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[2]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_3, gpioIds::CS_SUS_3, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[3] = new SusHandler(objects::SUS_3, 3, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_3);
|
|
susHandlers[3]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[3]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_4, gpioIds::CS_SUS_4, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[4] = new SusHandler(objects::SUS_4, 4, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_4);
|
|
susHandlers[4]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[4]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_5, gpioIds::CS_SUS_5, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[5] = new SusHandler(objects::SUS_5, 5, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_5);
|
|
susHandlers[5]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[5]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_6, gpioIds::CS_SUS_6, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[6] = new SusHandler(objects::SUS_6, 6, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_6);
|
|
susHandlers[6]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[6]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_7, gpioIds::CS_SUS_7, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[7] = new SusHandler(objects::SUS_7, 7, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_7);
|
|
susHandlers[7]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[7]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_8, gpioIds::CS_SUS_8, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[8] = new SusHandler(objects::SUS_8, 8, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_8);
|
|
susHandlers[8]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[8]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_9, gpioIds::CS_SUS_9, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[9] = new SusHandler(objects::SUS_9, 9, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_9);
|
|
susHandlers[9]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[9]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_10, gpioIds::CS_SUS_10, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[10] = new SusHandler(objects::SUS_10, 10, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_10);
|
|
susHandlers[10]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[10]->setCustomFdir(fdir);
|
|
|
|
spiCookie = new SpiCookie(addresses::SUS_11, gpioIds::CS_SUS_11, spiDev, SUS::MAX_CMD_SIZE,
|
|
spi::SUS_MAX_1227_MODE, spi::SUS_MAX1227_SPI_FREQ);
|
|
susHandlers[11] = new SusHandler(objects::SUS_11, 11, objects::SPI_COM_IF, spiCookie);
|
|
fdir = new SusFdir(objects::SUS_11);
|
|
susHandlers[11]->setParent(objects::SUS_BOARD_ASS);
|
|
susHandlers[11]->setCustomFdir(fdir);
|
|
|
|
for (auto& sus : susHandlers) {
|
|
if (sus != nullptr) {
|
|
#if OBSW_TEST_SUS == 1
|
|
sus->setStartUpImmediately();
|
|
sus->setToGoToNormalMode(true);
|
|
#endif
|
|
#if OBSW_DEBUG_SUS == 1
|
|
sus->enablePeriodicPrintout(true, 3);
|
|
#endif
|
|
}
|
|
}
|
|
std::array<object_id_t, 12> susIds = {objects::SUS_0, objects::SUS_1, objects::SUS_2,
|
|
objects::SUS_3, objects::SUS_4, objects::SUS_5,
|
|
objects::SUS_6, objects::SUS_7, objects::SUS_8,
|
|
objects::SUS_9, objects::SUS_10, objects::SUS_11};
|
|
SusAssHelper susAssHelper = SusAssHelper(susIds);
|
|
auto susAss =
|
|
new SusAssembly(objects::SUS_BOARD_ASS, objects::NO_OBJECT, pwrSwitcher, susAssHelper);
|
|
static_cast<void>(susAss);
|
|
#endif /* OBSW_ADD_SUN_SENSORS == 1 */
|
|
}
|
|
|
|
void ObjectFactory::createRtdComponents(std::string spiDev, GpioIF* gpioComIF,
|
|
PowerSwitchIF* pwrSwitcher) {
|
|
using namespace gpio;
|
|
GpioCookie* rtdGpioCookie = new GpioCookie;
|
|
|
|
GpioCallback* gpioRtdIc0 = new GpioCallback("Chip select RTD IC0", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_3, gpioRtdIc0);
|
|
GpioCallback* gpioRtdIc1 = new GpioCallback("Chip select RTD IC1", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_4, gpioRtdIc1);
|
|
GpioCallback* gpioRtdIc2 = new GpioCallback("Chip select RTD IC2", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_5, gpioRtdIc2);
|
|
GpioCallback* gpioRtdIc3 = new GpioCallback("Chip select RTD IC3", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_6, gpioRtdIc3);
|
|
GpioCallback* gpioRtdIc4 = new GpioCallback("Chip select RTD IC4", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_7, gpioRtdIc4);
|
|
GpioCallback* gpioRtdIc5 = new GpioCallback("Chip select RTD IC5", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_8, gpioRtdIc5);
|
|
GpioCallback* gpioRtdIc6 = new GpioCallback("Chip select RTD IC6", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_9, gpioRtdIc6);
|
|
GpioCallback* gpioRtdIc7 = new GpioCallback("Chip select RTD IC7", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_10, gpioRtdIc7);
|
|
GpioCallback* gpioRtdIc8 = new GpioCallback("Chip select RTD IC8", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_11, gpioRtdIc8);
|
|
GpioCallback* gpioRtdIc9 = new GpioCallback("Chip select RTD IC9", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_12, gpioRtdIc9);
|
|
GpioCallback* gpioRtdIc10 = new GpioCallback("Chip select RTD IC10", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_13, gpioRtdIc10);
|
|
GpioCallback* gpioRtdIc11 = new GpioCallback("Chip select RTD IC11", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_14, gpioRtdIc11);
|
|
GpioCallback* gpioRtdIc12 = new GpioCallback("Chip select RTD IC12", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_15, gpioRtdIc12);
|
|
GpioCallback* gpioRtdIc13 = new GpioCallback("Chip select RTD IC13", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_16, gpioRtdIc13);
|
|
GpioCallback* gpioRtdIc14 = new GpioCallback("Chip select RTD IC14", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_17, gpioRtdIc14);
|
|
GpioCallback* gpioRtdIc15 = new GpioCallback("Chip select RTD IC15", Direction::OUT, Levels::HIGH,
|
|
&gpioCallbacks::spiCsDecoderCallback, gpioComIF);
|
|
rtdGpioCookie->addGpio(gpioIds::RTD_IC_18, gpioRtdIc15);
|
|
|
|
gpioComIF->addGpios(rtdGpioCookie);
|
|
|
|
#if OBSW_ADD_RTD_DEVICES == 1
|
|
static constexpr uint8_t NUMBER_RTDS = 16;
|
|
std::array<std::pair<address_t, gpioId_t>, NUMBER_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},
|
|
{addresses::RTD_IC_6, gpioIds::RTD_IC_6},
|
|
{addresses::RTD_IC_7, gpioIds::RTD_IC_7},
|
|
{addresses::RTD_IC_8, gpioIds::RTD_IC_8},
|
|
{addresses::RTD_IC_9, gpioIds::RTD_IC_9},
|
|
{addresses::RTD_IC_10, gpioIds::RTD_IC_10},
|
|
{addresses::RTD_IC_11, gpioIds::RTD_IC_11},
|
|
{addresses::RTD_IC_12, gpioIds::RTD_IC_12},
|
|
{addresses::RTD_IC_13, gpioIds::RTD_IC_13},
|
|
{addresses::RTD_IC_14, gpioIds::RTD_IC_14},
|
|
{addresses::RTD_IC_15, gpioIds::RTD_IC_15},
|
|
{addresses::RTD_IC_16, gpioIds::RTD_IC_16},
|
|
{addresses::RTD_IC_17, gpioIds::RTD_IC_17},
|
|
{addresses::RTD_IC_18, gpioIds::RTD_IC_18},
|
|
}};
|
|
std::array<object_id_t, NUMBER_RTDS> rtdIds = {
|
|
objects::RTD_IC_3, objects::RTD_IC_4, objects::RTD_IC_5, objects::RTD_IC_6,
|
|
objects::RTD_IC_7, objects::RTD_IC_8, objects::RTD_IC_9, objects::RTD_IC_10,
|
|
objects::RTD_IC_11, objects::RTD_IC_12, objects::RTD_IC_13, objects::RTD_IC_14,
|
|
objects::RTD_IC_15, objects::RTD_IC_16, objects::RTD_IC_17, objects::RTD_IC_18};
|
|
std::array<SpiCookie*, NUMBER_RTDS> rtdCookies = {};
|
|
std::array<Max31865PT1000Handler*, NUMBER_RTDS> rtds = {};
|
|
RtdFdir* rtdFdir = nullptr;
|
|
for (uint8_t idx = 0; idx < NUMBER_RTDS; idx++) {
|
|
rtdCookies[idx] =
|
|
new SpiCookie(cookieArgs[idx].first, cookieArgs[idx].second, spiDev,
|
|
Max31865Definitions::MAX_REPLY_SIZE, spi::RTD_MODE, spi::RTD_SPEED);
|
|
rtds[idx] = new Max31865PT1000Handler(rtdIds[idx], objects::SPI_COM_IF, rtdCookies[idx]);
|
|
rtds[idx]->setParent(objects::TCS_BOARD_ASS);
|
|
rtdFdir = new RtdFdir(rtdIds[idx]);
|
|
rtds[idx]->setCustomFdir(rtdFdir);
|
|
rtds[idx]->setDeviceIdx(idx + 3);
|
|
}
|
|
|
|
#if OBSW_TEST_RTD == 1
|
|
for (auto& rtd : rtds) {
|
|
if (rtd != nullptr) {
|
|
rtd->setStartUpImmediately();
|
|
rtd->setInstantNormal(true);
|
|
}
|
|
}
|
|
#endif // OBSW_TEST_RTD == 1
|
|
TcsBoardHelper helper(rtdIds);
|
|
TcsBoardAssembly* tcsBoardAss =
|
|
new TcsBoardAssembly(objects::TCS_BOARD_ASS, objects::NO_OBJECT, pwrSwitcher,
|
|
pcdu::Switches::PDU1_CH0_TCS_BOARD_3V3, helper);
|
|
static_cast<void>(tcsBoardAss);
|
|
#endif // OBSW_ADD_RTD_DEVICES == 1
|
|
}
|