This commit is contained in:
parent
79fac2adcb
commit
1eb6017a9d
@ -1,4 +1,5 @@
|
|||||||
target_sources(${TARGET_NAME} PRIVATE
|
target_sources(${TARGET_NAME} PRIVATE
|
||||||
rwSpiCallback.cpp
|
rwSpiCallback.cpp
|
||||||
gnssCallback.cpp
|
gnssCallback.cpp
|
||||||
|
pcduSwitchCb.cpp
|
||||||
)
|
)
|
||||||
|
32
bsp_q7s/callbacks/pcduSwitchCb.cpp
Normal file
32
bsp_q7s/callbacks/pcduSwitchCb.cpp
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
#include "pcduSwitchCb.h"
|
||||||
|
|
||||||
|
#include <fsfw_hal/linux/gpio/LinuxLibgpioIF.h>
|
||||||
|
|
||||||
|
#include "devices/gpioIds.h"
|
||||||
|
|
||||||
|
void pcdu::switchCallback(GOMSPACE::Pdu pdu, uint8_t channel, bool state, void* args) {
|
||||||
|
LinuxLibgpioIF* gpioComIF = reinterpret_cast<LinuxLibgpioIF*>(args);
|
||||||
|
if (gpioComIF == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (pdu == GOMSPACE::Pdu::PDU1) {
|
||||||
|
PDU1::SwitchChannels typedChannel = static_cast<PDU1::SwitchChannels>(channel);
|
||||||
|
if (typedChannel == PDU1::SwitchChannels::ACS_A_SIDE) {
|
||||||
|
if (state) {
|
||||||
|
gpioComIF->pullHigh(gpioIds::GNSS_0_NRESET);
|
||||||
|
} else {
|
||||||
|
gpioComIF->pullLow(gpioIds::GNSS_0_NRESET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (pdu == GOMSPACE::Pdu::PDU2) {
|
||||||
|
PDU2::SwitchChannels typedChannel = static_cast<PDU2::SwitchChannels>(channel);
|
||||||
|
if (typedChannel == PDU2::SwitchChannels::ACS_B_SIDE) {
|
||||||
|
if (state) {
|
||||||
|
gpioComIF->pullHigh(gpioIds::GNSS_1_NRESET);
|
||||||
|
} else {
|
||||||
|
gpioComIF->pullLow(gpioIds::GNSS_1_NRESET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
bsp_q7s/callbacks/pcduSwitchCb.h
Normal file
14
bsp_q7s/callbacks/pcduSwitchCb.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef BSP_Q7S_CALLBACKS_PCDUSWITCHCB_H_
|
||||||
|
#define BSP_Q7S_CALLBACKS_PCDUSWITCHCB_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
|
||||||
|
|
||||||
|
namespace pcdu {
|
||||||
|
|
||||||
|
void switchCallback(GOMSPACE::Pdu pdu, uint8_t channel, bool state, void* args);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* BSP_Q7S_CALLBACKS_PCDUSWITCHCB_H_ */
|
@ -3,6 +3,7 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
|
#include "bsp_q7s/callbacks/pcduSwitchCb.h"
|
||||||
#include "bsp_q7s/boardtest/Q7STestTask.h"
|
#include "bsp_q7s/boardtest/Q7STestTask.h"
|
||||||
#include "bsp_q7s/callbacks/gnssCallback.h"
|
#include "bsp_q7s/callbacks/gnssCallback.h"
|
||||||
#include "bsp_q7s/callbacks/rwSpiCallback.h"
|
#include "bsp_q7s/callbacks/rwSpiCallback.h"
|
||||||
@ -122,13 +123,14 @@ void ObjectFactory::produce(void* args) {
|
|||||||
#if BOARD_TE0720 == 0
|
#if BOARD_TE0720 == 0
|
||||||
new CoreController(objects::CORE_CONTROLLER);
|
new CoreController(objects::CORE_CONTROLLER);
|
||||||
|
|
||||||
createPcduComponents();
|
createPcduComponents(gpioComIF);
|
||||||
createRadSensorComponent(gpioComIF);
|
createRadSensorComponent(gpioComIF);
|
||||||
createSunSensorComponents(gpioComIF, spiComIF);
|
createSunSensorComponents(gpioComIF, spiComIF);
|
||||||
|
|
||||||
#if OBSW_ADD_ACS_BOARD == 1
|
#if OBSW_ADD_ACS_BOARD == 1
|
||||||
createAcsBoardComponents(gpioComIF, uartComIF);
|
createAcsBoardComponents(gpioComIF, uartComIF);
|
||||||
#endif /* OBSW_ADD_ACS_BOARD == 1 */
|
#endif
|
||||||
|
|
||||||
createHeaterComponents();
|
createHeaterComponents();
|
||||||
createSolarArrayDeploymentComponents();
|
createSolarArrayDeploymentComponents();
|
||||||
#if OBSW_ADD_SYRLINKS == 1
|
#if OBSW_ADD_SYRLINKS == 1
|
||||||
@ -234,7 +236,7 @@ void ObjectFactory::createCommunicationInterfaces(LinuxLibgpioIF** gpioComIF, Ua
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectFactory::createPcduComponents() {
|
void ObjectFactory::createPcduComponents(LinuxLibgpioIF* gpioComIF) {
|
||||||
CspCookie* p60DockCspCookie = new CspCookie(P60Dock::MAX_REPLY_LENGTH, addresses::P60DOCK);
|
CspCookie* p60DockCspCookie = new CspCookie(P60Dock::MAX_REPLY_LENGTH, addresses::P60DOCK);
|
||||||
CspCookie* pdu1CspCookie = new CspCookie(PDU::MAX_REPLY_LENGTH, addresses::PDU1);
|
CspCookie* pdu1CspCookie = new CspCookie(PDU::MAX_REPLY_LENGTH, addresses::PDU1);
|
||||||
CspCookie* pdu2CspCookie = new CspCookie(PDU::MAX_REPLY_LENGTH, addresses::PDU2);
|
CspCookie* pdu2CspCookie = new CspCookie(PDU::MAX_REPLY_LENGTH, addresses::PDU2);
|
||||||
@ -244,8 +246,10 @@ void ObjectFactory::createPcduComponents() {
|
|||||||
new P60DockHandler(objects::P60DOCK_HANDLER, objects::CSP_COM_IF, p60DockCspCookie);
|
new P60DockHandler(objects::P60DOCK_HANDLER, objects::CSP_COM_IF, p60DockCspCookie);
|
||||||
PDU1Handler* pdu1handler =
|
PDU1Handler* pdu1handler =
|
||||||
new PDU1Handler(objects::PDU1_HANDLER, objects::CSP_COM_IF, pdu1CspCookie);
|
new PDU1Handler(objects::PDU1_HANDLER, objects::CSP_COM_IF, pdu1CspCookie);
|
||||||
|
pdu1handler->assignChannelHookFunction(&pcdu::switchCallback, gpioComIF);
|
||||||
PDU2Handler* pdu2handler =
|
PDU2Handler* pdu2handler =
|
||||||
new PDU2Handler(objects::PDU2_HANDLER, objects::CSP_COM_IF, pdu2CspCookie);
|
new PDU2Handler(objects::PDU2_HANDLER, objects::CSP_COM_IF, pdu2CspCookie);
|
||||||
|
pdu2handler->assignChannelHookFunction(&pcdu::switchCallback, gpioComIF);
|
||||||
ACUHandler* acuhandler = new ACUHandler(objects::ACU_HANDLER, objects::CSP_COM_IF, acuCspCookie);
|
ACUHandler* acuhandler = new ACUHandler(objects::ACU_HANDLER, objects::CSP_COM_IF, acuCspCookie);
|
||||||
new PCDUHandler(objects::PCDU_HANDLER, 50);
|
new PCDUHandler(objects::PCDU_HANDLER, 50);
|
||||||
|
|
||||||
@ -472,6 +476,7 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComI
|
|||||||
|
|
||||||
gpioComIF->addGpios(gpioCookieAcsBoard);
|
gpioComIF->addGpios(gpioCookieAcsBoard);
|
||||||
|
|
||||||
|
#if OBSW_ADD_ACS_HANDLERS == 1
|
||||||
std::string spiDev = q7s::SPI_DEFAULT_DEV;
|
std::string spiDev = q7s::SPI_DEFAULT_DEV;
|
||||||
SpiCookie* spiCookie =
|
SpiCookie* spiCookie =
|
||||||
new SpiCookie(addresses::MGM_0_LIS3, gpioIds::MGM_0_LIS3_CS, spiDev,
|
new SpiCookie(addresses::MGM_0_LIS3, gpioIds::MGM_0_LIS3_CS, spiDev,
|
||||||
@ -561,6 +566,7 @@ void ObjectFactory::createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComI
|
|||||||
resetArgsGnss0.waitPeriodMs = 100;
|
resetArgsGnss0.waitPeriodMs = 100;
|
||||||
auto gpsHandler0 = new GPSHyperionHandler(objects::GPS_CONTROLLER, objects::NO_OBJECT, debugGps);
|
auto gpsHandler0 = new GPSHyperionHandler(objects::GPS_CONTROLLER, objects::NO_OBJECT, debugGps);
|
||||||
gpsHandler0->setResetPinTriggerFunction(gps::triggerGpioResetPin, &resetArgsGnss0);
|
gpsHandler0->setResetPinTriggerFunction(gps::triggerGpioResetPin, &resetArgsGnss0);
|
||||||
|
#endif /* OBSW_ADD_ACS_HANDLERS == 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectFactory::createHeaterComponents() {
|
void ObjectFactory::createHeaterComponents() {
|
||||||
|
@ -13,7 +13,7 @@ void produce(void* args);
|
|||||||
void createCommunicationInterfaces(LinuxLibgpioIF** gpioComIF, UartComIF** uartComIF,
|
void createCommunicationInterfaces(LinuxLibgpioIF** gpioComIF, UartComIF** uartComIF,
|
||||||
SpiComIF** spiComIF);
|
SpiComIF** spiComIF);
|
||||||
void createTmpComponents();
|
void createTmpComponents();
|
||||||
void createPcduComponents();
|
void createPcduComponents(LinuxLibgpioIF* gpioComIF);
|
||||||
void createRadSensorComponent(LinuxLibgpioIF* gpioComIF);
|
void createRadSensorComponent(LinuxLibgpioIF* gpioComIF);
|
||||||
void createSunSensorComponents(LinuxLibgpioIF* gpioComIF, SpiComIF* spiComIF);
|
void createSunSensorComponents(LinuxLibgpioIF* gpioComIF, SpiComIF* spiComIF);
|
||||||
void createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComIF* uartComIF);
|
void createAcsBoardComponents(LinuxLibgpioIF* gpioComIF, UartComIF* uartComIF);
|
||||||
|
@ -46,7 +46,8 @@ debugging. */
|
|||||||
#define OBSW_ADD_PLOC_SUPERVISOR 0
|
#define OBSW_ADD_PLOC_SUPERVISOR 0
|
||||||
#define OBSW_ADD_PLOC_MPSOC 0
|
#define OBSW_ADD_PLOC_MPSOC 0
|
||||||
#define OBSW_ADD_SUN_SENSORS 0
|
#define OBSW_ADD_SUN_SENSORS 0
|
||||||
#define OBSW_ADD_ACS_BOARD 0
|
#define OBSW_ADD_ACS_BOARD 1
|
||||||
|
#define OBSW_ADD_ACS_HANDLERS 0
|
||||||
#define OBSW_ADD_RW 0
|
#define OBSW_ADD_RW 0
|
||||||
#define OBSW_ADD_RTD_DEVICES 0
|
#define OBSW_ADD_RTD_DEVICES 0
|
||||||
#define OBSW_ADD_TMP_DEVICES 0
|
#define OBSW_ADD_TMP_DEVICES 0
|
||||||
|
@ -435,7 +435,7 @@ ReturnValue_t pst::pstSpi(FixedTimeslotTaskIF *thisSequence) {
|
|||||||
thisSequence->addSlot(objects::RW4, length * 0.8, DeviceHandlerIF::GET_READ);
|
thisSequence->addSlot(objects::RW4, length * 0.8, DeviceHandlerIF::GET_READ);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if OBSW_ADD_ACS_BOARD == 1
|
#if OBSW_ADD_ACS_BOARD == 1 && OBSW_ADD_ACS_HANDLERS == 1
|
||||||
bool enableAside = true;
|
bool enableAside = true;
|
||||||
bool enableBside = false;
|
bool enableBside = false;
|
||||||
if (enableAside) {
|
if (enableAside) {
|
||||||
@ -501,7 +501,7 @@ ReturnValue_t pst::pstSpi(FixedTimeslotTaskIF *thisSequence) {
|
|||||||
thisSequence->addSlot(objects::GYRO_3_L3G_HANDLER, length * 0.75, DeviceHandlerIF::SEND_READ);
|
thisSequence->addSlot(objects::GYRO_3_L3G_HANDLER, length * 0.75, DeviceHandlerIF::SEND_READ);
|
||||||
thisSequence->addSlot(objects::GYRO_3_L3G_HANDLER, length * 0.85, DeviceHandlerIF::GET_READ);
|
thisSequence->addSlot(objects::GYRO_3_L3G_HANDLER, length * 0.85, DeviceHandlerIF::GET_READ);
|
||||||
}
|
}
|
||||||
#endif /* OBSW_ADD_ACS_BOARD == 1 */
|
#endif /* OBSW_ADD_ACS_BOARD == 1 && OBSW_ADD_ACS_HANDLERS == 1 */
|
||||||
|
|
||||||
ReturnValue_t seqCheck = thisSequence->checkSequence();
|
ReturnValue_t seqCheck = thisSequence->checkSequence();
|
||||||
if (seqCheck != HasReturnvaluesIF::RETURN_OK) {
|
if (seqCheck != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
@ -68,48 +68,50 @@ void PDU1Handler::letChildHandleHkReply(DeviceCommandId_t id, const uint8_t *pac
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDU1Handler::assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook) {
|
void PDU1Handler::assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook, void *args) {
|
||||||
this->channelSwitchHook = hook;
|
this->channelSwitchHook = hook;
|
||||||
|
this->hookArgs = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PDU1Handler::setParamCallback(SetParamMessageUnpacker &unpacker) {
|
ReturnValue_t PDU1Handler::setParamCallback(SetParamMessageUnpacker &unpacker) {
|
||||||
using namespace PDU1;
|
using namespace PDU1;
|
||||||
|
GOMSPACE::Pdu pdu = GOMSPACE::Pdu::PDU1;
|
||||||
if (channelSwitchHook != nullptr and unpacker.getParameterSize() == 1) {
|
if (channelSwitchHook != nullptr and unpacker.getParameterSize() == 1) {
|
||||||
switch (unpacker.getAddress()) {
|
switch (unpacker.getAddress()) {
|
||||||
case (CONFIG_ADDRESS_OUT_EN_TCS_BOARD_3V3): {
|
case (CONFIG_ADDRESS_OUT_EN_TCS_BOARD_3V3): {
|
||||||
channelSwitchHook(0, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 0, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_SYRLINKS): {
|
case (CONFIG_ADDRESS_OUT_EN_SYRLINKS): {
|
||||||
channelSwitchHook(1, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 1, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_STAR_TRACKER): {
|
case (CONFIG_ADDRESS_OUT_EN_STAR_TRACKER): {
|
||||||
channelSwitchHook(2, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 2, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_MGT): {
|
case (CONFIG_ADDRESS_OUT_EN_MGT): {
|
||||||
channelSwitchHook(3, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 3, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_SUS_NOMINAL): {
|
case (CONFIG_ADDRESS_OUT_EN_SUS_NOMINAL): {
|
||||||
channelSwitchHook(4, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 4, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_SOLAR_CELL_EXP): {
|
case (CONFIG_ADDRESS_OUT_EN_SOLAR_CELL_EXP): {
|
||||||
channelSwitchHook(5, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 5, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_PLOC): {
|
case (CONFIG_ADDRESS_OUT_EN_PLOC): {
|
||||||
channelSwitchHook(6, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 6, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_A): {
|
case (CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_A): {
|
||||||
channelSwitchHook(7, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 7, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_CHANNEL8): {
|
case (CONFIG_ADDRESS_OUT_EN_CHANNEL8): {
|
||||||
channelSwitchHook(8, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 8, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ class PDU1Handler : public GomspaceDeviceHandler {
|
|||||||
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
|
|
||||||
void assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook);
|
void assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook, void* args);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
@ -43,6 +43,7 @@ class PDU1Handler : public GomspaceDeviceHandler {
|
|||||||
/** Dataset for the housekeeping table of the PDU1 */
|
/** Dataset for the housekeeping table of the PDU1 */
|
||||||
PDU1::PDU1HkTableDataset pdu1HkTableDataset;
|
PDU1::PDU1HkTableDataset pdu1HkTableDataset;
|
||||||
GOMSPACE::ChannelSwitchHook channelSwitchHook = nullptr;
|
GOMSPACE::ChannelSwitchHook channelSwitchHook = nullptr;
|
||||||
|
void* hookArgs = nullptr;
|
||||||
|
|
||||||
void printHkTable();
|
void printHkTable();
|
||||||
void parseHkTableReply(const uint8_t* packet);
|
void parseHkTableReply(const uint8_t* packet);
|
||||||
|
@ -49,8 +49,9 @@ void PDU2Handler::letChildHandleHkReply(DeviceCommandId_t id, const uint8_t *pac
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDU2Handler::assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook) {
|
void PDU2Handler::assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook, void *args) {
|
||||||
this->channelSwitchHook = hook;
|
this->channelSwitchHook = hook;
|
||||||
|
this->hookArgs = args;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PDU2Handler::parseHkTableReply(const uint8_t *packet) {
|
void PDU2Handler::parseHkTableReply(const uint8_t *packet) {
|
||||||
@ -428,42 +429,43 @@ void PDU2Handler::printHkTable() {
|
|||||||
|
|
||||||
ReturnValue_t PDU2Handler::setParamCallback(SetParamMessageUnpacker &unpacker) {
|
ReturnValue_t PDU2Handler::setParamCallback(SetParamMessageUnpacker &unpacker) {
|
||||||
using namespace PDU2;
|
using namespace PDU2;
|
||||||
|
GOMSPACE::Pdu pdu = GOMSPACE::Pdu::PDU2;
|
||||||
if (channelSwitchHook != nullptr and unpacker.getParameterSize() == 1) {
|
if (channelSwitchHook != nullptr and unpacker.getParameterSize() == 1) {
|
||||||
switch (unpacker.getAddress()) {
|
switch (unpacker.getAddress()) {
|
||||||
case (CONFIG_ADDRESS_OUT_EN_Q7S): {
|
case (CONFIG_ADDRESS_OUT_EN_Q7S): {
|
||||||
channelSwitchHook(0, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 0, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_PCDU_CH1): {
|
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_PCDU_CH1): {
|
||||||
channelSwitchHook(1, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 1, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_RW): {
|
case (CONFIG_ADDRESS_OUT_EN_RW): {
|
||||||
channelSwitchHook(2, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 2, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_TCS_BOARD_HEATER_IN): {
|
case (CONFIG_ADDRESS_OUT_EN_TCS_BOARD_HEATER_IN): {
|
||||||
channelSwitchHook(3, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 3, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_SUS_REDUNDANT): {
|
case (CONFIG_ADDRESS_OUT_EN_SUS_REDUNDANT): {
|
||||||
channelSwitchHook(4, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 4, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_DEPLOYMENT_MECHANISM): {
|
case (CONFIG_ADDRESS_OUT_EN_DEPLOYMENT_MECHANISM): {
|
||||||
channelSwitchHook(5, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 5, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_PCDU_CH6PLOC): {
|
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_PCDU_CH6PLOC): {
|
||||||
channelSwitchHook(6, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 6, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_B): {
|
case (CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_B): {
|
||||||
channelSwitchHook(7, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 7, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_CAMERA): {
|
case (CONFIG_ADDRESS_OUT_EN_PAYLOAD_CAMERA): {
|
||||||
channelSwitchHook(8, unpacker.getParameter()[0]);
|
channelSwitchHook(pdu, 8, unpacker.getParameter()[0], hookArgs);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,8 @@ class PDU2Handler : public GomspaceDeviceHandler {
|
|||||||
|
|
||||||
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
virtual ReturnValue_t initializeLocalDataPool(localpool::DataPool& localDataPoolMap,
|
||||||
LocalDataPoolManager& poolManager) override;
|
LocalDataPoolManager& poolManager) override;
|
||||||
void assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook);
|
void assignChannelHookFunction(GOMSPACE::ChannelSwitchHook hook, void* args);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* @brief As soon as the device is in MODE_NORMAL, this function is executed periodically.
|
* @brief As soon as the device is in MODE_NORMAL, this function is executed periodically.
|
||||||
@ -34,11 +35,13 @@ class PDU2Handler : public GomspaceDeviceHandler {
|
|||||||
virtual ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override;
|
virtual ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override;
|
||||||
virtual void letChildHandleHkReply(DeviceCommandId_t id, const uint8_t* packet) override;
|
virtual void letChildHandleHkReply(DeviceCommandId_t id, const uint8_t* packet) override;
|
||||||
ReturnValue_t printStatus(DeviceCommandId_t cmd) override;
|
ReturnValue_t printStatus(DeviceCommandId_t cmd) override;
|
||||||
ReturnValue_t setParamCallback(SetParamMessageUnpacker &unpacker) override;
|
ReturnValue_t setParamCallback(SetParamMessageUnpacker& unpacker) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Dataset for the housekeeping table of the PDU2 */
|
/** Dataset for the housekeeping table of the PDU2 */
|
||||||
PDU2::PDU2HkTableDataset pdu2HkTableDataset;
|
PDU2::PDU2HkTableDataset pdu2HkTableDataset;
|
||||||
GOMSPACE::ChannelSwitchHook channelSwitchHook = nullptr;
|
GOMSPACE::ChannelSwitchHook channelSwitchHook = nullptr;
|
||||||
|
void* hookArgs = nullptr;
|
||||||
|
|
||||||
void printHkTable();
|
void printHkTable();
|
||||||
|
|
||||||
|
@ -1,11 +1,3 @@
|
|||||||
/*
|
|
||||||
* GomspaceDefinitions.h
|
|
||||||
*
|
|
||||||
* @brief This file holds all definitions specific for devices from gomspace.
|
|
||||||
* @date 20.12.2020
|
|
||||||
* @author J. Meier
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_GOMSPACEDEFINITIONS_H_
|
#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_GOMSPACEDEFINITIONS_H_
|
||||||
#define MISSION_DEVICES_DEVICEDEFINITIONS_GOMSPACEDEFINITIONS_H_
|
#define MISSION_DEVICES_DEVICEDEFINITIONS_GOMSPACEDEFINITIONS_H_
|
||||||
|
|
||||||
@ -17,7 +9,9 @@
|
|||||||
|
|
||||||
namespace GOMSPACE {
|
namespace GOMSPACE {
|
||||||
|
|
||||||
using ChannelSwitchHook = void (*)(uint8_t channel, bool on);
|
enum class Pdu { PDU1, PDU2 };
|
||||||
|
|
||||||
|
using ChannelSwitchHook = void (*)(Pdu pdu, uint8_t channel, bool on, void* args);
|
||||||
|
|
||||||
static const uint16_t IGNORE_CHECKSUM = 0xbb0;
|
static const uint16_t IGNORE_CHECKSUM = 0xbb0;
|
||||||
/** The size of the header of a gomspace CSP packet. */
|
/** The size of the header of a gomspace CSP packet. */
|
||||||
@ -614,19 +608,32 @@ static const uint8_t HK_TABLE_ENTRIES = 73;
|
|||||||
|
|
||||||
namespace PDU1 {
|
namespace PDU1 {
|
||||||
static const uint32_t HK_TABLE_DATA_SET_ID = 0x1; // hk table has table id 4
|
static const uint32_t HK_TABLE_DATA_SET_ID = 0x1; // hk table has table id 4
|
||||||
|
|
||||||
|
enum SwitchChannels : uint8_t {
|
||||||
|
TCS_BOARD_3V3 = 0,
|
||||||
|
SYRLINKS = 1,
|
||||||
|
STR = 2,
|
||||||
|
MGT = 3,
|
||||||
|
SUS_NOMINAL = 4,
|
||||||
|
SOL_CELL_EXPERIMENT = 5,
|
||||||
|
PLOC = 6,
|
||||||
|
ACS_A_SIDE = 7,
|
||||||
|
UNUSED = 8
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Addresses within configuration table to enable or disable output channels. Refer also to
|
* Addresses within configuration table to enable or disable output channels. Refer also to
|
||||||
* gs-man-nanopower-p60-pdu-200.pdf on page 16.
|
* gs-man-nanopower-p60-pdu-200.pdf on page 16.
|
||||||
*/
|
*/
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_TCS_BOARD_3V3 = 0x48;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_TCS_BOARD_3V3 = 0x48;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_SYRLINKS = 0x49;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_SYRLINKS = 0x49;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_STAR_TRACKER = 0x50;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_STAR_TRACKER = 0x4A;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_MGT = 0x51;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_MGT = 0x4B;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_SUS_NOMINAL = 0x52;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_SUS_NOMINAL = 0x4C;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_SOLAR_CELL_EXP = 0x53;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_SOLAR_CELL_EXP = 0x4D;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_PLOC = 0x54;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_PLOC = 0x4E;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_A = 0x55;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_A = 0x4F;
|
||||||
static const uint16_t CONFIG_ADDRESS_OUT_EN_CHANNEL8 = 0x56;
|
static const uint16_t CONFIG_ADDRESS_OUT_EN_CHANNEL8 = 0x50;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This class defines a dataset for the hk table of the PDU1.
|
* @brief This class defines a dataset for the hk table of the PDU1.
|
||||||
@ -802,6 +809,19 @@ class PDU1HkTableDataset : public StaticLocalDataSet<PDU::HK_TABLE_ENTRIES> {
|
|||||||
|
|
||||||
namespace PDU2 {
|
namespace PDU2 {
|
||||||
static const uint32_t HK_TABLE_DATA_SET_ID = 0x2;
|
static const uint32_t HK_TABLE_DATA_SET_ID = 0x2;
|
||||||
|
|
||||||
|
enum SwitchChannels : uint8_t {
|
||||||
|
Q7S = 0,
|
||||||
|
PAYLOAD_PCDU_CH1 = 1,
|
||||||
|
RW = 2,
|
||||||
|
TCS_HEATER_IN = 3,
|
||||||
|
SUS_REDUNDANT = 4,
|
||||||
|
DEPY_MECHANISM = 5,
|
||||||
|
PAYLOAD_PCDU_CH6 = 6,
|
||||||
|
ACS_B_SIDE = 7,
|
||||||
|
PAYLOAD_CAMERA = 8
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Addresses within configuration table to enable or disable output channels. Refer also to
|
* Addresses within configuration table to enable or disable output channels. Refer also to
|
||||||
* gs-man-nanopower-p60-pdu-200.pdf on page 16.
|
* gs-man-nanopower-p60-pdu-200.pdf on page 16.
|
||||||
|
Loading…
Reference in New Issue
Block a user