implemented first switch callback
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
This commit is contained in:
parent
3ab6494c28
commit
f948905aa2
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit 933da2f655717b66c1056e764c47a2eee473a137
|
Subproject commit 9b77060295c9c32ebfc2e7cf6517eb2e66216191
|
@ -273,7 +273,8 @@ ReturnValue_t ACUHandler::initializeLocalDataPool(localpool::DataPool &localData
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t ACUHandler::deviceSpecificCommand(DeviceCommandId_t cmd) {
|
ReturnValue_t ACUHandler::childCommandHook(DeviceCommandId_t cmd, const uint8_t *commandData,
|
||||||
|
size_t commandDataLen) {
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case PRINT_CHANNEL_STATS: {
|
case PRINT_CHANNEL_STATS: {
|
||||||
printChannelStats();
|
printChannelStats();
|
||||||
|
@ -28,7 +28,8 @@ class ACUHandler : public GomspaceDeviceHandler {
|
|||||||
|
|
||||||
virtual void fillCommandAndReplyMap() override;
|
virtual void fillCommandAndReplyMap() override;
|
||||||
|
|
||||||
virtual ReturnValue_t deviceSpecificCommand(DeviceCommandId_t cmd) override;
|
virtual ReturnValue_t childCommandHook(DeviceCommandId_t cmd, const uint8_t* commandData,
|
||||||
|
size_t commandDataLen) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static const DeviceCommandId_t PRINT_CHANNEL_STATS = 51;
|
static const DeviceCommandId_t PRINT_CHANNEL_STATS = 51;
|
||||||
|
@ -30,9 +30,7 @@ void GPSHyperionHandler::performControlOperation() {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
LocalPoolDataSetBase *GPSHyperionHandler::getDataSetHandle(sid_t sid) {
|
LocalPoolDataSetBase *GPSHyperionHandler::getDataSetHandle(sid_t sid) { return &gpsSet; }
|
||||||
return &gpsSet;
|
|
||||||
}
|
|
||||||
|
|
||||||
ReturnValue_t GPSHyperionHandler::checkModeCommand(Mode_t mode, Submode_t submode,
|
ReturnValue_t GPSHyperionHandler::checkModeCommand(Mode_t mode, Submode_t submode,
|
||||||
uint32_t *msToReachTheMode) {
|
uint32_t *msToReachTheMode) {
|
||||||
|
@ -36,7 +36,7 @@ ReturnValue_t GomspaceDeviceHandler::buildTransitionDeviceCommand(DeviceCommandI
|
|||||||
ReturnValue_t GomspaceDeviceHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
|
ReturnValue_t GomspaceDeviceHandler::buildCommandFromCommand(DeviceCommandId_t deviceCommand,
|
||||||
const uint8_t* commandData,
|
const uint8_t* commandData,
|
||||||
size_t commandDataLen) {
|
size_t commandDataLen) {
|
||||||
ReturnValue_t result;
|
ReturnValue_t result = childCommandHook(deviceCommand, commandData, commandDataLen);
|
||||||
switch (deviceCommand) {
|
switch (deviceCommand) {
|
||||||
case (GOMSPACE::PING): {
|
case (GOMSPACE::PING): {
|
||||||
result = generatePingCommand(commandData, commandDataLen);
|
result = generatePingCommand(commandData, commandDataLen);
|
||||||
@ -82,7 +82,7 @@ ReturnValue_t GomspaceDeviceHandler::buildCommandFromCommand(DeviceCommandId_t d
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return deviceSpecificCommand(deviceCommand);
|
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
@ -195,6 +195,10 @@ ReturnValue_t GomspaceDeviceHandler::generateSetParamCommand(const uint8_t* comm
|
|||||||
<< std::endl;
|
<< std::endl;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
result = setParamCallback(setParamMessageUnpacker);
|
||||||
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
/* Get and check address */
|
/* Get and check address */
|
||||||
uint16_t address = setParamMessageUnpacker.getAddress();
|
uint16_t address = setParamMessageUnpacker.getAddress();
|
||||||
if (address > maxConfigTableAddress) {
|
if (address > maxConfigTableAddress) {
|
||||||
@ -335,6 +339,16 @@ void GomspaceDeviceHandler::generateRebootCommand() {
|
|||||||
rawPacketLen = cspPacketLen;
|
rawPacketLen = cspPacketLen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t GomspaceDeviceHandler::childCommandHook(DeviceCommandId_t cmd,
|
||||||
|
const uint8_t* commandData,
|
||||||
|
size_t commandDataLen) {
|
||||||
|
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t GomspaceDeviceHandler::setParamCallback(SetParamMessageUnpacker& unpacker) {
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
ReturnValue_t GomspaceDeviceHandler::generateResetWatchdogCmd() {
|
ReturnValue_t GomspaceDeviceHandler::generateResetWatchdogCmd() {
|
||||||
WatchdogResetCommand watchdogResetCommand;
|
WatchdogResetCommand watchdogResetCommand;
|
||||||
size_t cspPacketLen = 0;
|
size_t cspPacketLen = 0;
|
||||||
@ -386,10 +400,6 @@ LocalPoolDataSetBase* GomspaceDeviceHandler::getDataSetHandle(sid_t sid) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t GomspaceDeviceHandler::deviceSpecificCommand(DeviceCommandId_t cmd) {
|
|
||||||
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GomspaceDeviceHandler::setModeNormal() { mode = MODE_NORMAL; }
|
void GomspaceDeviceHandler::setModeNormal() { mode = MODE_NORMAL; }
|
||||||
|
|
||||||
ReturnValue_t GomspaceDeviceHandler::printStatus(DeviceCommandId_t cmd) {
|
ReturnValue_t GomspaceDeviceHandler::printStatus(DeviceCommandId_t cmd) {
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef MISSION_DEVICES_GOMSPACEDEVICEHANDLER_H_
|
#ifndef MISSION_DEVICES_GOMSPACEDEVICEHANDLER_H_
|
||||||
#define MISSION_DEVICES_GOMSPACEDEVICEHANDLER_H_
|
#define MISSION_DEVICES_GOMSPACEDEVICEHANDLER_H_
|
||||||
|
|
||||||
|
#include <mission/devices/devicedefinitions/GomSpacePackets.h>
|
||||||
|
|
||||||
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
|
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
|
||||||
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
|
#include "mission/devices/devicedefinitions/GomspaceDefinitions.h"
|
||||||
#include "returnvalues/classIds.h"
|
#include "returnvalues/classIds.h"
|
||||||
@ -101,9 +103,12 @@ class GomspaceDeviceHandler : public DeviceHandlerBase {
|
|||||||
virtual LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
|
virtual LocalPoolDataSetBase *getDataSetHandle(sid_t sid) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Can be used by gomspace devices to implement device specific commands.
|
* @brief Can be overriden by child classes to implement device specific commands.
|
||||||
|
* @return Return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED to let this handler handle
|
||||||
|
* the command or RETURN_OK if the child handles the command
|
||||||
*/
|
*/
|
||||||
virtual ReturnValue_t deviceSpecificCommand(DeviceCommandId_t cmd);
|
virtual ReturnValue_t childCommandHook(DeviceCommandId_t cmd, const uint8_t *commandData,
|
||||||
|
size_t commandDataLen);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
@ -112,6 +117,8 @@ class GomspaceDeviceHandler : public DeviceHandlerBase {
|
|||||||
*/
|
*/
|
||||||
ReturnValue_t generateSetParamCommand(const uint8_t *commandData, size_t commandDataLen);
|
ReturnValue_t generateSetParamCommand(const uint8_t *commandData, size_t commandDataLen);
|
||||||
|
|
||||||
|
virtual ReturnValue_t setParamCallback(SetParamMessageUnpacker &unpacker);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Function to generate the command to get a parameter from a
|
* @brief Function to generate the command to get a parameter from a
|
||||||
* gomspace device. Command will be sent to the ComIF over the
|
* gomspace device. Command will be sent to the ComIF over the
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "PDU1Handler.h"
|
#include "PDU1Handler.h"
|
||||||
|
|
||||||
#include <fsfw/datapool/PoolReadGuard.h>
|
#include <fsfw/datapool/PoolReadGuard.h>
|
||||||
|
#include <mission/devices/devicedefinitions/GomSpacePackets.h>
|
||||||
|
|
||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
|
|
||||||
@ -67,6 +68,55 @@ void PDU1Handler::letChildHandleHkReply(DeviceCommandId_t id, const uint8_t *pac
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PDU1Handler::assignChannelHookFunction(ChannelSwitchHook hook) {
|
||||||
|
this->channelSwitchHook = hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t PDU1Handler::setParamCallback(SetParamMessageUnpacker &unpacker) {
|
||||||
|
using namespace PDU1;
|
||||||
|
if (channelSwitchHook != nullptr and unpacker.getParameterSize() == 1) {
|
||||||
|
switch (unpacker.getAddress()) {
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_TCS_BOARD_3V3): {
|
||||||
|
channelSwitchHook(0, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_SYRLINKS): {
|
||||||
|
channelSwitchHook(1, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_STAR_TRACKER): {
|
||||||
|
channelSwitchHook(2, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_MGT): {
|
||||||
|
channelSwitchHook(3, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_SUS_NOMINAL): {
|
||||||
|
channelSwitchHook(4, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_SOLAR_CELL_EXP): {
|
||||||
|
channelSwitchHook(5, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_PLOC): {
|
||||||
|
channelSwitchHook(6, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_ACS_BOARD_SIDE_A): {
|
||||||
|
channelSwitchHook(7, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (CONFIG_ADDRESS_OUT_EN_CHANNEL8): {
|
||||||
|
channelSwitchHook(8, unpacker.getParameter()[0]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void PDU1Handler::parseHkTableReply(const uint8_t *packet) {
|
void PDU1Handler::parseHkTableReply(const uint8_t *packet) {
|
||||||
uint16_t dataOffset = 0;
|
uint16_t dataOffset = 0;
|
||||||
PoolReadGuard pg(&pdu1HkTableDataset);
|
PoolReadGuard pg(&pdu1HkTableDataset);
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include "GomspaceDeviceHandler.h"
|
#include "GomspaceDeviceHandler.h"
|
||||||
#include "devicedefinitions/GomspaceDefinitions.h"
|
#include "devicedefinitions/GomspaceDefinitions.h"
|
||||||
|
|
||||||
|
using ChannelSwitchHook = void (*)(uint8_t channel, bool on);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This is the device handler for the PDU1.
|
* @brief This is the device handler for the PDU1.
|
||||||
*
|
*
|
||||||
@ -27,6 +29,8 @@ 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(ChannelSwitchHook hook);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* @brief In MODE_NORMAL, a command will be built periodically by this function.
|
* @brief In MODE_NORMAL, a command will be built periodically by this function.
|
||||||
@ -35,9 +39,12 @@ class PDU1Handler : public GomspaceDeviceHandler {
|
|||||||
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;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** Dataset for the housekeeping table of the PDU1 */
|
/** Dataset for the housekeeping table of the PDU1 */
|
||||||
PDU1::PDU1HkTableDataset pdu1HkTableDataset;
|
PDU1::PDU1HkTableDataset pdu1HkTableDataset;
|
||||||
|
ChannelSwitchHook channelSwitchHook = nullptr;
|
||||||
|
|
||||||
void printHkTable();
|
void printHkTable();
|
||||||
void parseHkTableReply(const uint8_t* packet);
|
void parseHkTableReply(const uint8_t* packet);
|
||||||
|
Loading…
Reference in New Issue
Block a user