eive-obsw/mission/acs/susMax1227Helpers.h

86 lines
3.3 KiB
C
Raw Normal View History

2021-05-03 11:59:33 +02:00
#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_
#define MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_
2021-05-17 19:39:35 +02:00
#include <fsfw/datapoollocal/StaticLocalDataSet.h>
#include <fsfw/devicehandlers/DeviceHandlerIF.h>
2022-01-17 15:58:27 +01:00
#include <cstdint>
2021-05-17 19:39:35 +02:00
2023-02-28 19:14:15 +01:00
namespace susMax1227 {
2021-05-03 11:59:33 +02:00
2023-09-07 16:03:36 +02:00
// This is 16 seconds for a polling frequency of 0.4 seconds.
static constexpr uint32_t MAX_INVALID_MSG_COUNT = 40;
// Using a decrement time of 32 seconds should cause faulty device incrementation to best faster
// the decrementation, so that FDIR reactions will eventuall be triggered.
// NOTE: Not used currently, we perform the strange reply check logic in the handler and trigger
// a reboot directly using the appropriate event.
static constexpr uint32_t FAULTY_COM_DECREMENT_TIME_MS = 32000;
2022-01-17 15:58:27 +01:00
static const DeviceCommandId_t NONE = 0x0; // Set when no command is pending
2022-02-22 20:34:25 +01:00
static const DeviceCommandId_t WRITE_SETUP = 1;
2022-01-17 15:58:27 +01:00
/**
* This command initiates the ADC conversion for all channels including the internal
* temperature sensor.
*/
2022-02-22 20:34:25 +01:00
static const DeviceCommandId_t START_INT_TIMED_CONVERSIONS = 2;
2022-01-17 15:58:27 +01:00
/**
* This command reads the internal fifo which holds the temperature and the channel
* conversions.
*/
2022-02-22 20:34:25 +01:00
static constexpr DeviceCommandId_t READ_INT_TIMED_CONVERSIONS = 3;
static constexpr DeviceCommandId_t READ_EXT_TIMED_CONVERSIONS = 4;
static constexpr DeviceCommandId_t READ_EXT_TIMED_TEMPS = 5;
2022-01-17 15:58:27 +01:00
/**
* @brief This is the configuration byte which will be written to the setup register after
* power on.
*
* @note Bit1 (DIFFSEL1) - Bit0 (DIFFSEL0): 0b00, No byte is following the setup byte
* Bit3 (REFSEL1) - Bit2 (REFSEL0): 0b10, Internal reference, no wake-up delay
* Bit5 (CLKSEL1) - Bit4 (CLKSEL0): 0b10, Internally clocked
* Bit7 - Bit6: 0b01, Tells MAX1227 that this byte should be
* written to the setup register
*
*/
2022-02-22 20:34:25 +01:00
static constexpr uint8_t SETUP_INT_CLOKED = 0b01101000;
static constexpr uint8_t SETUP_EXT_CLOCKED = 0b01111000;
2022-01-17 15:58:27 +01:00
/**
* @brief This values will always be written to the ADC conversion register to specify the
* conversions to perform.
* @details Bit0: 1 - Enables temperature conversion
* Bit2 (SCAN1) and Bit1 (SCAN0): 0b00, Scans channels 0 through N
* Bit6 - Bit3 defines N: 0b0101 (N = 5)
* Bit7: Always 1. Tells the ADC that this is the conversion register.
*/
static const uint8_t CONVERSION = 0b10101001;
2022-02-22 20:34:25 +01:00
static const uint8_t SUS_DATA_SET_ID = READ_INT_TIMED_CONVERSIONS;
2022-01-17 15:58:27 +01:00
/** Size of data replies. Temperature and 6 channel convesions (AIN0 - AIN5) */
2022-02-22 20:34:25 +01:00
static const uint8_t SIZE_READ_INT_CONVERSIONS = 14;
// 6 * conv byte, 6 * 0 and one trailing zero
static constexpr uint8_t SIZE_READ_EXT_CONVERSIONS = 13;
2022-01-17 15:58:27 +01:00
2022-02-22 20:34:25 +01:00
static const uint8_t MAX_CMD_SIZE = 32;
2022-01-17 15:58:27 +01:00
static const uint8_t POOL_ENTRIES = 7;
enum SusPoolIds : lp_id_t { TEMPERATURE_C, CHANNEL_VEC };
2021-05-03 11:59:33 +02:00
2022-01-17 15:58:27 +01:00
class SusDataset : public StaticLocalDataSet<POOL_ENTRIES> {
public:
SusDataset(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, SUS_DATA_SET_ID) {}
SusDataset(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, SUS_DATA_SET_ID)) {}
2023-03-01 16:36:21 +01:00
lp_var_t<float> tempC = lp_var_t<float>(sid.objectId, TEMPERATURE_C, this);
2022-02-22 20:34:25 +01:00
lp_vec_t<uint16_t, 6> channels = lp_vec_t<uint16_t, 6>(sid.objectId, CHANNEL_VEC, this);
2022-01-17 15:58:27 +01:00
};
2023-02-28 19:14:15 +01:00
} // namespace susMax1227
2021-05-03 11:59:33 +02:00
#endif /* MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_ */