diff --git a/bsp_q7s/callbacks/gnssCallback.cpp b/bsp_q7s/callbacks/gnssCallback.cpp index 7e854b6d..d735d352 100644 --- a/bsp_q7s/callbacks/gnssCallback.cpp +++ b/bsp_q7s/callbacks/gnssCallback.cpp @@ -4,11 +4,7 @@ #include "fsfw/action/HasActionsIF.h" #include "fsfw/tasks/TaskFactory.h" -ReturnValue_t gps::triggerGpioResetPin(const uint8_t* actionData, size_t len, void* args) { - // At least one byte which denotes which GPS to reset is required - if (len < 1 or actionData == nullptr) { - return HasActionsIF::INVALID_PARAMETERS; - } +ReturnValue_t gps::triggerGpioResetPin(uint8_t gpsId, void* args) { ResetArgs* resetArgs = reinterpret_cast(args); if (args == nullptr) { return HasReturnvaluesIF::RETURN_FAILED; @@ -16,10 +12,8 @@ ReturnValue_t gps::triggerGpioResetPin(const uint8_t* actionData, size_t len, vo if (resetArgs->gpioComIF == nullptr) { return HasReturnvaluesIF::RETURN_FAILED; } - gpioId_t gpioId; - if (actionData[0] == 0) { - gpioId = gpioIds::GNSS_0_NRESET; - } else { + gpioId_t gpioId = gpioIds::GNSS_0_NRESET; + if (gpsId == 1) { gpioId = gpioIds::GNSS_1_NRESET; } resetArgs->gpioComIF->pullLow(gpioId); diff --git a/bsp_q7s/callbacks/gnssCallback.h b/bsp_q7s/callbacks/gnssCallback.h index cd69f5a6..75e72a5b 100644 --- a/bsp_q7s/callbacks/gnssCallback.h +++ b/bsp_q7s/callbacks/gnssCallback.h @@ -11,7 +11,7 @@ struct ResetArgs { namespace gps { -ReturnValue_t triggerGpioResetPin(const uint8_t* actionData, size_t len, void* args); +ReturnValue_t triggerGpioResetPin(uint8_t gpsId, void* args); } diff --git a/linux/devices/GPSHyperionLinuxController.cpp b/linux/devices/GPSHyperionLinuxController.cpp index 5d97554a..d0f97566 100644 --- a/linux/devices/GPSHyperionLinuxController.cpp +++ b/linux/devices/GPSHyperionLinuxController.cpp @@ -53,22 +53,19 @@ ReturnValue_t GPSHyperionLinuxController::checkModeCommand(Mode_t mode, Submode_ return HasReturnvaluesIF::RETURN_OK; } -ReturnValue_t GPSHyperionLinuxController::executeAction(ActionId_t actionId, - MessageQueueId_t commandedBy, - const uint8_t *data, size_t size) { - switch (actionId) { - case (GpsHyperion::TRIGGER_RESET_PIN_GNSS): { - if (resetCallback != nullptr) { - PoolReadGuard pg(&gpsSet); - // Set HK entries invalid - gpsSet.setValidity(false, true); - resetCallback(data, size, resetCallbackArgs); - return HasActionsIF::EXECUTION_FINISHED; - } - return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED; - } +ReturnValue_t GPSHyperionLinuxController::executeAction(Action *action) { + return action->handle(); +} + +ReturnValue_t GPSHyperionLinuxController::handleAction(GPSHyperionLinuxAction * action) { + if (resetCallback != nullptr) { + PoolReadGuard pg(&gpsSet); + // Set HK entries invalid + gpsSet.setValidity(false, true); + resetCallback(static_cast(action->gpsId.value), resetCallbackArgs); + return HasActionsIF::EXECUTION_FINISHED; } - return HasReturnvaluesIF::RETURN_OK; + return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED; } ReturnValue_t GPSHyperionLinuxController::initializeLocalDataPool( diff --git a/linux/devices/GPSHyperionLinuxController.h b/linux/devices/GPSHyperionLinuxController.h index 35ce0a63..35b01a00 100644 --- a/linux/devices/GPSHyperionLinuxController.h +++ b/linux/devices/GPSHyperionLinuxController.h @@ -2,10 +2,11 @@ #define MISSION_DEVICES_GPSHYPERIONHANDLER_H_ #include "commonSubsystemIds.h" +#include "devicedefinitions/GPSHyperionLinuxDefinitions.h" #include "fsfw/FSFW.h" #include "fsfw/controller/ExtendedControllerBase.h" #include "fsfw/devicehandlers/DeviceHandlerBase.h" -#include "mission/devices/devicedefinitions/GPSDefinitions.h" + #ifdef FSFW_OSAL_LINUX #include @@ -30,7 +31,7 @@ class GPSHyperionLinuxController : public ExtendedControllerBase { bool debugHyperionGps = false); virtual ~GPSHyperionLinuxController(); - using gpioResetFunction_t = ReturnValue_t (*)(const uint8_t* actionData, size_t len, void* args); + using gpioResetFunction_t = ReturnValue_t (*)(uint8_t gpsId, void* args); void setResetPinTriggerFunction(gpioResetFunction_t resetCallback, void* args); ReturnValue_t handleCommandMessage(CommandMessage* message) override; @@ -38,8 +39,8 @@ class GPSHyperionLinuxController : public ExtendedControllerBase { LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override; ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode, uint32_t* msToReachTheMode) override; - ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, - const uint8_t* data, size_t size) override; + ReturnValue_t executeAction(Action* action) override; + ReturnValue_t handleAction(GPSHyperionLinuxAction * action); ReturnValue_t initialize() override; protected: @@ -65,6 +66,7 @@ class GPSHyperionLinuxController : public ExtendedControllerBase { int32_t noModeSetCntr = 0; uint32_t timeIsConstantCounter = 0; Countdown timeUpdateCd = Countdown(60); + GPSHyperionLinuxAction action = GPSHyperionLinuxAction(this); void readGpsDataFromGpsd(); }; diff --git a/linux/devices/devicedefinitions/GPSHyperionLinuxDefinitions.h b/linux/devices/devicedefinitions/GPSHyperionLinuxDefinitions.h new file mode 100644 index 00000000..d313dc82 --- /dev/null +++ b/linux/devices/devicedefinitions/GPSHyperionLinuxDefinitions.h @@ -0,0 +1,21 @@ +#include +#include +#include + +#include "mission/devices/devicedefinitions/GPSDefinitions.h" + +class GPSHyperionLinuxController; + +FSFW_ENUM(GPSHyperionLinuxCommands, DeviceCommandId_t, + ((TRIGGER_RESET_PIN_GNSS, GpsHyperion::TRIGGER_RESET_PIN_GNSS, "Trigger Reset Pin"))) + +class GPSHyperionLinuxAction + : public TemplateAction { + public: + FSFW_ENUM(GpsIDs, uint8_t, ((GPS_0, 0, "GPS 0"))((GPS_1, 1, "GPS 1"))) + GPSHyperionLinuxAction(GPSHyperionLinuxController *owner) + : TemplateAction(owner, GPSHyperionLinuxCommands::TRIGGER_RESET_PIN_GNSS){}; + + Parameter gpsId = Parameter::createParameter(this, "GPS ID"); +}; \ No newline at end of file