#ifndef MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_ #define MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_ namespace SUS { /** * Some MAX1227 could not be reached with frequencies around 4 MHz. Maybe this is caused by * the decoder and buffer circuits. Thus frequency is here defined to 1 MHz. */ static const uint32_t MAX1227_SPI_FREQ = 1000000; static const DeviceCommandId_t NONE = 0x0; // Set when no command is pending static const DeviceCommandId_t WRITE_SETUP = 0x1; /** * This command initiates the ADC conversion for all channels including the internal * temperature sensor. */ static const DeviceCommandId_t START_CONVERSIONS = 0x2; /** * This command reads the internal fifo which holds the temperature and the channel * conversions. */ static const DeviceCommandId_t READ_CONVERSIONS = 0x3; /** * @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 * */ static const uint8_t SETUP = 0b01101000; /** * @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; static const uint8_t SUS_DATA_SET_ID = READ_CONVERSIONS; /** Size of data replies. Temperature and 6 channel convesions (AIN0 - AIN5) */ static const uint8_t SIZE_READ_CONVERSIONS = 14; static const uint8_t MAX_CMD_SIZE = SIZE_READ_CONVERSIONS; static const uint8_t POOL_ENTRIES = 7; enum Max1227PoolIds: lp_id_t { TEMPERATURE_C, AIN0, AIN1, AIN2, AIN3, AIN4, AIN5, }; class SusDataset: public StaticLocalDataSet { public: SusDataset(HasLocalDataPoolIF* owner) : StaticLocalDataSet(owner, SUS_DATA_SET_ID) { } SusDataset(object_id_t objectId) : StaticLocalDataSet(sid_t(objectId, SUS_DATA_SET_ID)) { } lp_var_t temperatureCelcius = lp_var_t(sid.objectId, TEMPERATURE_C, this); lp_var_t ain0 = lp_var_t(sid.objectId, AIN0, this); lp_var_t ain1 = lp_var_t(sid.objectId, AIN1, this); lp_var_t ain2 = lp_var_t(sid.objectId, AIN2, this); lp_var_t ain3 = lp_var_t(sid.objectId, AIN3, this); lp_var_t ain4 = lp_var_t(sid.objectId, AIN4, this); lp_var_t ain5 = lp_var_t(sid.objectId, AIN5, this); }; } #endif /* MISSION_DEVICES_DEVICEDEFINITIONS_SUS_H_ */