140 lines
4.0 KiB
C++
140 lines
4.0 KiB
C++
#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_RWDEFINITIONS_H_
|
|
#define MISSION_DEVICES_DEVICEDEFINITIONS_RWDEFINITIONS_H_
|
|
|
|
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
|
|
#include <fsfw/datapoollocal/LocalPoolVariable.h>
|
|
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
|
|
#include "objects/systemObjectList.h"
|
|
|
|
namespace RwDefinitions {
|
|
|
|
static const uint32_t SPI_REPLY_DELAY = 70000; //us
|
|
|
|
enum PoolIds: lp_id_t {
|
|
TEMPERATURE_C,
|
|
CURR_SPEED,
|
|
REFERENCE_SPEED,
|
|
STATE,
|
|
CLC_MODE,
|
|
LAST_RESET_STATUS,
|
|
CURRRENT_RESET_STATUS
|
|
};
|
|
|
|
enum States: uint8_t {
|
|
ERROR,
|
|
IDLE,
|
|
COASTING,
|
|
RUNNING_SPEED_STABLE,
|
|
RUNNING_SPEED_CHANGING
|
|
};
|
|
|
|
enum LastResetStatus: uint8_t {
|
|
CLEARED = 0,
|
|
PIN_RESET = 1,
|
|
POR_PDR_BOR_RESET = 2,
|
|
SOFTWARE_RESET = 4,
|
|
INDEPENDENT_WATCHDOG_RESET = 8,
|
|
WINDOW_WATCHDOG_RESET = 16,
|
|
LOW_POWER_RESET = 32
|
|
};
|
|
|
|
static const DeviceCommandId_t RESET_MCU = 1;
|
|
static const DeviceCommandId_t GET_LAST_RESET_STATUS = 2;
|
|
static const DeviceCommandId_t CLEAR_LAST_RESET_STATUS = 3;
|
|
static const DeviceCommandId_t GET_RW_STATUS = 4;
|
|
/** This command is needed to recover from error state */
|
|
static const DeviceCommandId_t INIT_RW_CONTROLLER = 5;
|
|
static const DeviceCommandId_t SET_SPEED = 6;
|
|
static const DeviceCommandId_t GET_TEMPERATURE = 8;
|
|
|
|
static const uint32_t TEMPERATURE_SET_ID = GET_TEMPERATURE;
|
|
static const uint32_t STATUS_SET_ID = GET_RW_STATUS;
|
|
static const uint32_t LAST_RESET_ID = GET_LAST_RESET_STATUS;
|
|
|
|
static const size_t SIZE_GET_RESET_STATUS = 5;
|
|
static const size_t SIZE_CLEAR_RESET_STATUS = 4;
|
|
static const size_t SIZE_INIT_RW = 4;
|
|
static const size_t SIZE_GET_RW_STATUS = 14;
|
|
static const size_t SIZE_SET_SPEED_REPLY = 4;
|
|
static const size_t SIZE_GET_TEMPERATURE_REPLY = 8;
|
|
/** Max size when requesting telemetry */
|
|
static const size_t SIZE_GET_TELEMETRY_REPLY = 83;
|
|
|
|
/** Set speed command has maximum size */
|
|
static const size_t MAX_CMD_SIZE = 9;
|
|
static const size_t MAX_REPLY_SIZE = SIZE_GET_TELEMETRY_REPLY;
|
|
|
|
static const uint8_t LAST_RESET_ENTRIES = 2;
|
|
static const uint8_t TEMPERATURE_SET_ENTRIES = 1;
|
|
static const uint8_t STATUS_SET_ENTRIES = 4;
|
|
|
|
/**
|
|
* @brief This dataset can be used to store the temperature of a reaction wheel.
|
|
*/
|
|
class TemperatureSet:
|
|
public StaticLocalDataSet<TEMPERATURE_SET_ENTRIES> {
|
|
public:
|
|
|
|
TemperatureSet(HasLocalDataPoolIF* owner):
|
|
StaticLocalDataSet(owner, TEMPERATURE_SET_ID) {
|
|
}
|
|
|
|
TemperatureSet(object_id_t objectId):
|
|
StaticLocalDataSet(sid_t(objectId, TEMPERATURE_SET_ID)) {
|
|
}
|
|
|
|
lp_var_t<int32_t> temperatureCelcius = lp_var_t<int32_t>(sid.objectId,
|
|
PoolIds::TEMPERATURE_C, this);
|
|
};
|
|
|
|
/**
|
|
* @brief This dataset can be used to store the reaction wheel status.
|
|
*/
|
|
class StatusSet:
|
|
public StaticLocalDataSet<STATUS_SET_ENTRIES> {
|
|
public:
|
|
|
|
StatusSet(HasLocalDataPoolIF* owner):
|
|
StaticLocalDataSet(owner, STATUS_SET_ID) {
|
|
}
|
|
|
|
StatusSet(object_id_t objectId):
|
|
StaticLocalDataSet(sid_t(objectId, STATUS_SET_ID)) {
|
|
}
|
|
|
|
lp_var_t<int32_t> currSpeed = lp_var_t<int32_t>(sid.objectId,
|
|
PoolIds::CURR_SPEED, this);
|
|
lp_var_t<int32_t> referenceSpeed = lp_var_t<int32_t>(sid.objectId,
|
|
PoolIds::REFERENCE_SPEED, this);
|
|
lp_var_t<uint8_t> state = lp_var_t<uint8_t>(sid.objectId,
|
|
PoolIds::STATE, this);
|
|
lp_var_t<uint8_t> clcMode = lp_var_t<uint8_t>(sid.objectId,
|
|
PoolIds::CLC_MODE, this);
|
|
};
|
|
|
|
/**
|
|
* @brief This dataset stores the last reset status.
|
|
*/
|
|
class LastResetSatus:
|
|
public StaticLocalDataSet<LAST_RESET_ENTRIES> {
|
|
public:
|
|
|
|
LastResetSatus(HasLocalDataPoolIF* owner):
|
|
StaticLocalDataSet(owner, LAST_RESET_ID) {
|
|
}
|
|
|
|
LastResetSatus(object_id_t objectId):
|
|
StaticLocalDataSet(sid_t(objectId, LAST_RESET_ID)) {
|
|
}
|
|
|
|
lp_var_t<uint8_t> lastResetStatus = lp_var_t<uint8_t>(sid.objectId,
|
|
PoolIds::LAST_RESET_STATUS, this);
|
|
lp_var_t<uint8_t> currentResetStatus = lp_var_t<uint8_t>(sid.objectId,
|
|
PoolIds::CURRRENT_RESET_STATUS, this);
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* MISSION_DEVICES_DEVICEDEFINITIONS_RWDEFINITIONS_H_ */
|
|
|