GPSHyperionController adapted
This commit is contained in:
parent
eeaef13916
commit
c8f4f0b03e
@ -4,11 +4,7 @@
|
|||||||
#include "fsfw/action/HasActionsIF.h"
|
#include "fsfw/action/HasActionsIF.h"
|
||||||
#include "fsfw/tasks/TaskFactory.h"
|
#include "fsfw/tasks/TaskFactory.h"
|
||||||
|
|
||||||
ReturnValue_t gps::triggerGpioResetPin(const uint8_t* actionData, size_t len, void* args) {
|
ReturnValue_t gps::triggerGpioResetPin(uint8_t gpsId, void* args) {
|
||||||
// At least one byte which denotes which GPS to reset is required
|
|
||||||
if (len < 1 or actionData == nullptr) {
|
|
||||||
return HasActionsIF::INVALID_PARAMETERS;
|
|
||||||
}
|
|
||||||
ResetArgs* resetArgs = reinterpret_cast<ResetArgs*>(args);
|
ResetArgs* resetArgs = reinterpret_cast<ResetArgs*>(args);
|
||||||
if (args == nullptr) {
|
if (args == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
@ -16,10 +12,8 @@ ReturnValue_t gps::triggerGpioResetPin(const uint8_t* actionData, size_t len, vo
|
|||||||
if (resetArgs->gpioComIF == nullptr) {
|
if (resetArgs->gpioComIF == nullptr) {
|
||||||
return HasReturnvaluesIF::RETURN_FAILED;
|
return HasReturnvaluesIF::RETURN_FAILED;
|
||||||
}
|
}
|
||||||
gpioId_t gpioId;
|
gpioId_t gpioId = gpioIds::GNSS_0_NRESET;
|
||||||
if (actionData[0] == 0) {
|
if (gpsId == 1) {
|
||||||
gpioId = gpioIds::GNSS_0_NRESET;
|
|
||||||
} else {
|
|
||||||
gpioId = gpioIds::GNSS_1_NRESET;
|
gpioId = gpioIds::GNSS_1_NRESET;
|
||||||
}
|
}
|
||||||
resetArgs->gpioComIF->pullLow(gpioId);
|
resetArgs->gpioComIF->pullLow(gpioId);
|
||||||
|
@ -11,7 +11,7 @@ struct ResetArgs {
|
|||||||
|
|
||||||
namespace gps {
|
namespace gps {
|
||||||
|
|
||||||
ReturnValue_t triggerGpioResetPin(const uint8_t* actionData, size_t len, void* args);
|
ReturnValue_t triggerGpioResetPin(uint8_t gpsId, void* args);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,22 +53,19 @@ ReturnValue_t GPSHyperionLinuxController::checkModeCommand(Mode_t mode, Submode_
|
|||||||
return HasReturnvaluesIF::RETURN_OK;
|
return HasReturnvaluesIF::RETURN_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t GPSHyperionLinuxController::executeAction(ActionId_t actionId,
|
ReturnValue_t GPSHyperionLinuxController::executeAction(Action *action) {
|
||||||
MessageQueueId_t commandedBy,
|
return action->handle();
|
||||||
const uint8_t *data, size_t size) {
|
}
|
||||||
switch (actionId) {
|
|
||||||
case (GpsHyperion::TRIGGER_RESET_PIN_GNSS): {
|
ReturnValue_t GPSHyperionLinuxController::handleAction(GPSHyperionLinuxAction * action) {
|
||||||
if (resetCallback != nullptr) {
|
if (resetCallback != nullptr) {
|
||||||
PoolReadGuard pg(&gpsSet);
|
PoolReadGuard pg(&gpsSet);
|
||||||
// Set HK entries invalid
|
// Set HK entries invalid
|
||||||
gpsSet.setValidity(false, true);
|
gpsSet.setValidity(false, true);
|
||||||
resetCallback(data, size, resetCallbackArgs);
|
resetCallback(static_cast<uint8_t>(action->gpsId.value), resetCallbackArgs);
|
||||||
return HasActionsIF::EXECUTION_FINISHED;
|
return HasActionsIF::EXECUTION_FINISHED;
|
||||||
}
|
}
|
||||||
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
return DeviceHandlerIF::COMMAND_NOT_IMPLEMENTED;
|
||||||
}
|
|
||||||
}
|
|
||||||
return HasReturnvaluesIF::RETURN_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t GPSHyperionLinuxController::initializeLocalDataPool(
|
ReturnValue_t GPSHyperionLinuxController::initializeLocalDataPool(
|
||||||
|
@ -2,10 +2,11 @@
|
|||||||
#define MISSION_DEVICES_GPSHYPERIONHANDLER_H_
|
#define MISSION_DEVICES_GPSHYPERIONHANDLER_H_
|
||||||
|
|
||||||
#include "commonSubsystemIds.h"
|
#include "commonSubsystemIds.h"
|
||||||
|
#include "devicedefinitions/GPSHyperionLinuxDefinitions.h"
|
||||||
#include "fsfw/FSFW.h"
|
#include "fsfw/FSFW.h"
|
||||||
#include "fsfw/controller/ExtendedControllerBase.h"
|
#include "fsfw/controller/ExtendedControllerBase.h"
|
||||||
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
|
#include "fsfw/devicehandlers/DeviceHandlerBase.h"
|
||||||
#include "mission/devices/devicedefinitions/GPSDefinitions.h"
|
|
||||||
|
|
||||||
#ifdef FSFW_OSAL_LINUX
|
#ifdef FSFW_OSAL_LINUX
|
||||||
#include <gps.h>
|
#include <gps.h>
|
||||||
@ -30,7 +31,7 @@ class GPSHyperionLinuxController : public ExtendedControllerBase {
|
|||||||
bool debugHyperionGps = false);
|
bool debugHyperionGps = false);
|
||||||
virtual ~GPSHyperionLinuxController();
|
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);
|
void setResetPinTriggerFunction(gpioResetFunction_t resetCallback, void* args);
|
||||||
ReturnValue_t handleCommandMessage(CommandMessage* message) override;
|
ReturnValue_t handleCommandMessage(CommandMessage* message) override;
|
||||||
@ -38,8 +39,8 @@ class GPSHyperionLinuxController : public ExtendedControllerBase {
|
|||||||
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
LocalPoolDataSetBase* getDataSetHandle(sid_t sid) override;
|
||||||
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
ReturnValue_t checkModeCommand(Mode_t mode, Submode_t submode,
|
||||||
uint32_t* msToReachTheMode) override;
|
uint32_t* msToReachTheMode) override;
|
||||||
ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy,
|
ReturnValue_t executeAction(Action* action) override;
|
||||||
const uint8_t* data, size_t size) override;
|
ReturnValue_t handleAction(GPSHyperionLinuxAction * action);
|
||||||
ReturnValue_t initialize() override;
|
ReturnValue_t initialize() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -65,6 +66,7 @@ class GPSHyperionLinuxController : public ExtendedControllerBase {
|
|||||||
int32_t noModeSetCntr = 0;
|
int32_t noModeSetCntr = 0;
|
||||||
uint32_t timeIsConstantCounter = 0;
|
uint32_t timeIsConstantCounter = 0;
|
||||||
Countdown timeUpdateCd = Countdown(60);
|
Countdown timeUpdateCd = Countdown(60);
|
||||||
|
GPSHyperionLinuxAction action = GPSHyperionLinuxAction(this);
|
||||||
|
|
||||||
void readGpsDataFromGpsd();
|
void readGpsDataFromGpsd();
|
||||||
};
|
};
|
||||||
|
@ -0,0 +1,21 @@
|
|||||||
|
#include <fsfw/action/MinMaxParameter.h>
|
||||||
|
#include <fsfw/action/TemplateAction.h>
|
||||||
|
#include <fsfw/introspection/Enum.h>
|
||||||
|
|
||||||
|
#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<GPSHyperionLinuxController, GPSHyperionLinuxAction,
|
||||||
|
GPSHyperionLinuxCommands> {
|
||||||
|
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<GpsIDs> gpsId = Parameter<GpsIDs>::createParameter(this, "GPS ID");
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user