eive-obsw/bsp_q7s/em/emObjectFactory.cpp

118 lines
4.0 KiB
C++
Raw Normal View History

2022-10-26 17:11:57 +02:00
#include <bsp_q7s/callbacks/q7sGpioCallbacks.h>
2022-05-19 15:28:02 +02:00
#include <fsfw/health/HealthTableIF.h>
2022-09-15 13:15:39 +02:00
#include <fsfw/power/DummyPowerSwitcher.h>
2022-11-21 14:16:21 +01:00
#include <mission/devices/devicedefinitions/GomspaceDefinitions.h>
2022-05-23 18:37:04 +02:00
2021-05-17 16:53:06 +02:00
#include "OBSWConfig.h"
2022-01-17 13:48:55 +01:00
#include "bsp_q7s/core/CoreController.h"
2022-05-03 11:53:10 +02:00
#include "bsp_q7s/core/ObjectFactory.h"
2021-08-17 17:11:59 +02:00
#include "busConf.h"
2022-01-17 13:48:55 +01:00
#include "devConf.h"
#include "dummies/helpers.h"
2022-09-16 12:28:39 +02:00
#include "eive/objects.h"
#include "fsfw_hal/linux/gpio/LinuxLibgpioIF.h"
2022-03-26 16:38:42 +01:00
#include "linux/ObjectFactory.h"
#include "linux/callbacks/gpioCallbacks.h"
2021-07-19 12:44:43 +02:00
#include "mission/core/GenericFactory.h"
#include "mission/system/tree/comModeTree.h"
2020-09-30 17:17:01 +02:00
2021-09-20 17:47:29 +02:00
void ObjectFactory::produce(void* args) {
2022-01-17 13:48:55 +01:00
ObjectFactory::setStatics();
2022-05-19 15:28:02 +02:00
HealthTableIF* healthTable = nullptr;
PusTmFunnel* pusFunnel = nullptr;
CfdpTmFunnel* cfdpFunnel = nullptr;
ObjectFactory::produceGenericObjects(&healthTable, &pusFunnel, &cfdpFunnel);
2022-01-17 13:48:55 +01:00
LinuxLibgpioIF* gpioComIF = nullptr;
2022-11-10 18:07:59 +01:00
SerialComIF* uartComIF = nullptr;
SpiComIF* spiMainComIF = nullptr;
2022-02-02 17:36:40 +01:00
I2cComIF* i2cComIF = nullptr;
SpiComIF* spiRwComIF = nullptr;
createCommunicationInterfaces(&gpioComIF, &uartComIF, &spiMainComIF, &i2cComIF, &spiRwComIF);
2022-10-26 17:11:57 +02:00
/* Adding gpios for chip select decoding to the gpioComIf */
q7s::gpioCallbacks::initSpiCsDecoder(gpioComIF);
gpioCallbacks::disableAllDecoder(gpioComIF);
// Hardware is usually not connected to EM, so we need to create dummies which replace lower
// level components.
dummy::DummyCfg dummyCfg;
dummyCfg.addCoreCtrlCfg = false;
#if OBSW_ADD_SYRLINKS == 1
dummyCfg.addSyrlinksDummies = false;
#endif
2022-11-21 14:01:31 +01:00
#if OBSW_ADD_GOMSPACE_PCDU == 1
dummyCfg.addPowerDummies = false;
#endif
2023-02-08 16:45:19 +01:00
#if OBSW_ADD_ACS_BOARD == 1
dummyCfg.addAcsBoardDummies = false;
#endif
2022-11-21 14:01:31 +01:00
PowerSwitchIF* pwrSwitcher = nullptr;
#if OBSW_ADD_GOMSPACE_PCDU == 0
pwrSwitcher = new DummyPowerSwitcher(objects::PCDU_HANDLER, 18, 0);
#else
createPcduComponents(gpioComIF, &pwrSwitcher);
#endif
2021-07-19 12:44:43 +02:00
2022-11-21 14:01:31 +01:00
dummy::createDummies(dummyCfg, *pwrSwitcher);
new CoreController(objects::CORE_CONTROLLER);
2022-09-15 13:15:39 +02:00
// Regular FM code, does not work for EM if the hardware is not connected
// createPcduComponents(gpioComIF, &pwrSwitcher);
// createPlPcduComponents(gpioComIF, spiMainComIF, pwrSwitcher);
// createSyrlinksComponents(pwrSwitcher);
// createSunSensorComponents(gpioComIF, spiMainComIF, pwrSwitcher, q7s::SPI_DEFAULT_DEV);
2022-09-16 14:01:54 +02:00
// createRtdComponents(q7s::SPI_DEFAULT_DEV, gpioComIF, pwrSwitcher, spiMainComIF);
// createTmpComponents();
2022-10-20 17:16:37 +02:00
// createSolarArrayDeploymentComponents();
2022-10-26 15:30:04 +02:00
// createPayloadComponents(gpioComIF);
2022-10-26 15:31:04 +02:00
// createHeaterComponents(gpioComIF, pwrSwitcher, healthTable);
2022-10-26 17:11:57 +02:00
// TODO: Careful! Switching this on somehow messes with the communication with the ProASIC
2022-10-26 17:11:57 +02:00
// and will cause xsc_boot_copy commands to always boot to 0 0
// createRadSensorComponent(gpioComIF);
2021-09-13 18:07:07 +02:00
2021-07-19 12:44:43 +02:00
#if OBSW_ADD_ACS_BOARD == 1
2022-03-04 16:03:57 +01:00
createAcsBoardComponents(gpioComIF, uartComIF, pwrSwitcher);
2022-01-19 18:05:17 +01:00
#endif
2021-05-26 14:16:16 +02:00
2022-01-27 15:26:07 +01:00
#if OBSW_ADD_MGT == 1
createImtqComponents(pwrSwitcher);
2022-01-27 15:26:07 +01:00
#endif
2022-10-26 15:30:04 +02:00
#if OBSW_ADD_SYRLINKS == 1
createSyrlinksComponents(pwrSwitcher);
#endif /* OBSW_ADD_SYRLINKS == 1 */
2022-10-26 15:30:04 +02:00
#if OBSW_ADD_RW == 1
createReactionWheelComponents(gpioComIF, pwrSwitcher);
2022-10-26 15:30:04 +02:00
#endif
2020-09-30 17:17:01 +02:00
2022-02-02 17:36:40 +01:00
#if OBSW_ADD_BPX_BATTERY_HANDLER == 1
createBpxBatteryComponent();
2022-04-26 10:37:25 +02:00
#endif
2021-07-23 17:48:11 +02:00
2021-08-17 19:50:48 +02:00
#if OBSW_ADD_STAR_TRACKER == 1
createStrComponents(pwrSwitcher);
#endif /* OBSW_ADD_STAR_TRACKER == 1 */
#if OBSW_ADD_CCSDS_IP_CORES == 1
CcsdsIpCoreHandler* ipCoreHandler = nullptr;
createCcsdsComponents(gpioComIF, &ipCoreHandler);
#if OBSW_TM_TO_PTME == 1
ObjectFactory::addTmtcIpCoresToFunnels(*ipCoreHandler, *pusFunnel, *cfdpFunnel);
#endif
#endif /* OBSW_ADD_CCSDS_IP_CORES == 1 */
2022-01-17 13:48:55 +01:00
/* Test Task */
#if OBSW_ADD_TEST_CODE == 1
2022-01-17 13:48:55 +01:00
createTestComponents(gpioComIF);
#endif /* OBSW_ADD_TEST_CODE == 1 */
2022-10-20 17:16:37 +02:00
#if OBSW_ADD_SCEX_DEVICE == 1
2022-11-21 14:16:21 +01:00
createScexComponents(q7s::UART_SCEX_DEV, pwrSwitcher, *SdCardManager::instance(), false,
pcdu::Switches::PDU1_CH5_SOLAR_CELL_EXP_5V);
2022-10-20 17:16:37 +02:00
#endif
2022-11-02 15:22:05 +01:00
createAcsController(true);
2023-02-08 20:40:53 +01:00
createThermalController();
satsystem::com::init();
}