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:
|
|
|
|
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;
|
|
|
|
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_ */
|