eive-obsw/mission/payload/RadiationSensorHandler.h

61 lines
2.5 KiB
C
Raw Normal View History

2023-03-26 16:42:00 +02:00
#ifndef MISSION_PAYLOAD_RADIATIONSENSORHANDLER_H_
#define MISSION_PAYLOAD_RADIATIONSENSORHANDLER_H_
2021-04-29 10:40:11 +02:00
#include <fsfw/devicehandlers/DeviceHandlerBase.h>
2022-03-02 17:04:58 +01:00
#include <fsfw_hal/common/gpio/GpioIF.h>
2023-03-26 16:42:00 +02:00
#include <mission/payload/radSensorDefinitions.h>
2022-12-21 14:11:31 +01:00
#include <mission/system/objects/Stack5VHandler.h>
2022-02-24 11:47:32 +01:00
2021-04-29 10:40:11 +02:00
/**
2022-01-17 15:58:27 +01:00
* @brief This is the device handler class for radiation sensor on the OBC IF Board. The
* sensor is based on the MAX1227 ADC converter.
2021-04-29 10:40:11 +02:00
*
2021-05-02 13:48:39 +02:00
* @details Datasheet of MAX1227: https://datasheets.maximintegrated.com/en/ds/MAX1227-MAX1231.pdf
2021-04-29 10:40:11 +02:00
*
* @author J. Meier
*/
2022-01-17 15:58:27 +01:00
class RadiationSensorHandler : public DeviceHandlerBase {
public:
2022-02-24 11:47:32 +01:00
RadiationSensorHandler(object_id_t objectId, object_id_t comIF, CookieIF *comCookie,
2022-12-21 14:11:31 +01:00
GpioIF *gpioIF, Stack5VHandler &handler);
2022-01-17 15:58:27 +01:00
virtual ~RadiationSensorHandler();
2022-02-22 20:20:14 +01:00
void setToGoToNormalModeImmediately();
2022-03-17 10:48:35 +01:00
void enablePeriodicDataPrint(bool enable);
2022-01-17 15:58:27 +01:00
protected:
void doStartUp() override;
void doShutDown() override;
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t *id) override;
ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t *id) override;
void fillCommandAndReplyMap() override;
ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t *commandData,
size_t commandDataLen) override;
ReturnValue_t scanForReply(const uint8_t *start, size_t remainingSize, DeviceCommandId_t *foundId,
size_t *foundLen) override;
ReturnValue_t interpretDeviceReply(DeviceCommandId_t id, const uint8_t *packet) override;
uint32_t getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) override;
ReturnValue_t initializeLocalDataPool(localpool::DataPool &localDataPoolMap,
LocalDataPoolManager &poolManager) override;
private:
2023-07-18 11:01:53 +02:00
static constexpr uint32_t DEFAULT_MEASUREMENT_CD_MS = 30 * 60 * 1000;
2022-01-17 15:58:27 +01:00
enum class CommunicationStep { START_CONVERSION, READ_CONVERSIONS };
2022-12-22 11:00:04 +01:00
enum class InternalState { OFF, POWER_SWITCHING, SETUP, CONFIGURED };
2022-01-17 15:58:27 +01:00
2022-03-17 10:48:35 +01:00
bool printPeriodicData = false;
2023-07-18 09:44:44 +02:00
radSens::RadSensorDataset dataset;
2023-07-18 11:01:53 +02:00
Countdown measurementCd = Countdown(DEFAULT_MEASUREMENT_CD_MS);
2023-07-18 09:44:44 +02:00
static const uint8_t MAX_CMD_LEN = radSens::READ_SIZE;
2022-02-24 11:47:32 +01:00
GpioIF *gpioIF = nullptr;
2022-12-22 11:00:04 +01:00
Stack5VHandler &stackHandler;
2022-01-17 15:58:27 +01:00
2022-02-22 20:20:14 +01:00
bool goToNormalMode = false;
2022-01-17 15:58:27 +01:00
uint8_t cmdBuffer[MAX_CMD_LEN];
2022-12-22 11:00:04 +01:00
InternalState internalState = InternalState::OFF;
2022-01-17 15:58:27 +01:00
CommunicationStep communicationStep = CommunicationStep::START_CONVERSION;
2021-04-29 10:40:11 +02:00
};
2023-03-26 16:42:00 +02:00
#endif /* MISSION_PAYLOAD_RADIATIONSENSORHANDLER_H_ */