AmbiMate Sensor Module

Committer:
mcm
Date:
Thu Jun 03 17:07:59 2021 +0000
Revision:
1:f0711d344f71
Parent:
0:8d9328d3ff35
Child:
2:6c5fac3dfd44
The header file is ready to be tested.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 0:8d9328d3ff35 1 /**
mcm 0:8d9328d3ff35 2 * @brief AMBIMATE_MS4.h
mcm 0:8d9328d3ff35 3 * @details AmbiMate Sensor Module.
mcm 0:8d9328d3ff35 4 * Header file.
mcm 0:8d9328d3ff35 5 *
mcm 0:8d9328d3ff35 6 *
mcm 1:f0711d344f71 7 * @return N/A
mcm 0:8d9328d3ff35 8 *
mcm 0:8d9328d3ff35 9 * @author Manuel Caballero
mcm 0:8d9328d3ff35 10 * @date 03/June/2021
mcm 0:8d9328d3ff35 11 * @version 03/June/2021 The ORIGIN
mcm 0:8d9328d3ff35 12 * @pre N/A.
mcm 0:8d9328d3ff35 13 * @warning N/A
mcm 0:8d9328d3ff35 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ).
mcm 0:8d9328d3ff35 15 */
mcm 0:8d9328d3ff35 16 #ifndef AMBIMATE_MS4_H
mcm 0:8d9328d3ff35 17 #define AMBIMATE_MS4_H
mcm 0:8d9328d3ff35 18
mcm 0:8d9328d3ff35 19 #include "mbed.h"
mcm 0:8d9328d3ff35 20
mcm 0:8d9328d3ff35 21
mcm 0:8d9328d3ff35 22 /**
mcm 0:8d9328d3ff35 23 Example:
mcm 0:8d9328d3ff35 24 @code
mcm 0:8d9328d3ff35 25
mcm 0:8d9328d3ff35 26 @endcode
mcm 0:8d9328d3ff35 27 */
mcm 0:8d9328d3ff35 28
mcm 0:8d9328d3ff35 29
mcm 0:8d9328d3ff35 30 /*!
mcm 1:f0711d344f71 31 Library for the AMBIMATE_MS4 AmbiMate Sensor Module.
mcm 0:8d9328d3ff35 32 */
mcm 0:8d9328d3ff35 33 class AMBIMATE_MS4
mcm 0:8d9328d3ff35 34 {
mcm 0:8d9328d3ff35 35 public:
mcm 0:8d9328d3ff35 36 /**
mcm 1:f0711d344f71 37 * @brief DEFAULT ADDRESS
mcm 1:f0711d344f71 38 */
mcm 1:f0711d344f71 39 typedef enum {
mcm 1:f0711d344f71 40 AMBIMATE_MS4_ADDRESS = ( 0x2A << 1U ) /*!< AMBIMATE_MS4 ADDR */
mcm 1:f0711d344f71 41 } AMBIMATE_MS4_address_t;
mcm 1:f0711d344f71 42
mcm 1:f0711d344f71 43
mcm 1:f0711d344f71 44
mcm 1:f0711d344f71 45 /**
mcm 1:f0711d344f71 46 * @brief COMMAND REGISTERS
mcm 0:8d9328d3ff35 47 */
mcm 0:8d9328d3ff35 48 typedef enum {
mcm 1:f0711d344f71 49 AMBIMATE_MS4_STATUS_HIGH_BYTE = 0x00, /*!< Status register */
mcm 1:f0711d344f71 50 AMBIMATE_MS4_TEMPERATURE_HIGH_BYTE = 0x01, /*!< Temperature register. High byte */
mcm 1:f0711d344f71 51 AMBIMATE_MS4_TEMPERATURE_LOW_BYTE = 0x02, /*!< Temperature register. Low byte */
mcm 1:f0711d344f71 52 AMBIMATE_MS4_HUMIDITY_HIGH_BYTE = 0x03, /*!< Humidity register. High byte */
mcm 1:f0711d344f71 53 AMBIMATE_MS4_HUMIDITY_LOW_BYTE = 0x04, /*!< Humidity register. Low byte */
mcm 1:f0711d344f71 54 AMBIMATE_MS4_LIGHT_HIGH_BYTE = 0x05, /*!< Light register. High byte */
mcm 1:f0711d344f71 55 AMBIMATE_MS4_LIGHT_LOW_BYTE = 0x06, /*!< Light register. Low byte */
mcm 1:f0711d344f71 56 AMBIMATE_MS4_AUDIO_HIGH_BYTE = 0x07, /*!< Audio register. High byte */
mcm 1:f0711d344f71 57 AMBIMATE_MS4_AUDIO_LOW_BYTE = 0x08, /*!< Audio register. Low byte */
mcm 1:f0711d344f71 58 AMBIMATE_MS4_BATTERY_VOLTS_HIGH_BYTE = 0x09, /*!< Battery voltage register. High byte */
mcm 1:f0711d344f71 59 AMBIMATE_MS4_BATTERY_VOLTS_LOW_BYTE = 0x0A, /*!< Battery voltage register. Low byte */
mcm 1:f0711d344f71 60 AMBIMATE_MS4_ECO2_HIGH_BYTE = 0x0B, /*!< eCO2 register. High byte */
mcm 1:f0711d344f71 61 AMBIMATE_MS4_ECO2_LOW_BYTE = 0x0C, /*!< eCO2 register. Low byte */
mcm 1:f0711d344f71 62 AMBIMATE_MS4_VOC_HIGH_BYTE = 0x0D, /*!< VOC register. High byte */
mcm 1:f0711d344f71 63 AMBIMATE_MS4_VOC_LOW_BYTE = 0x0E /*!< VOC register. Low byte */
mcm 1:f0711d344f71 64 } AMBIMATE_MS4_sensor_data_registers_t;
mcm 1:f0711d344f71 65
mcm 1:f0711d344f71 66
mcm 1:f0711d344f71 67 typedef enum {
mcm 1:f0711d344f71 68 AMBIMATE_MS4_8BIT_STATUS_HIGH_BYTE = 0x40, /*!< Status register */
mcm 1:f0711d344f71 69 AMBIMATE_MS4_8BIT_TEMPERATURE_HIGH_BYTE = 0x41, /*!< Temperature register. High byte */
mcm 1:f0711d344f71 70 AMBIMATE_MS4_8BIT_HUMIDITY_HIGH_BYTE = 0x42, /*!< Humidity register. High byte */
mcm 1:f0711d344f71 71 AMBIMATE_MS4_8BIT_LIGHT_HIGH_BYTE = 0x43, /*!< Light register. High byte */
mcm 1:f0711d344f71 72 AMBIMATE_MS4_8BIT_AUDIO_HIGH_BYTE = 0x44, /*!< Audio register. High byte */
mcm 1:f0711d344f71 73 AMBIMATE_MS4_8BIT_BATTERY_VOLTS_HIGH_BYTE = 0x45, /*!< Battery voltage register. High byte */
mcm 1:f0711d344f71 74 AMBIMATE_MS4_8BIT_ECO2_HIGH_BYTE = 0x46, /*!< eCO2 register. High byte */
mcm 1:f0711d344f71 75 AMBIMATE_MS4_8BIT_VOC_HIGH_BYTE = 0x47 /*!< VOC register. High byte */
mcm 1:f0711d344f71 76 } AMBIMATE_MS4_8bit_sensor_data_registers_t;
mcm 1:f0711d344f71 77
mcm 1:f0711d344f71 78
mcm 1:f0711d344f71 79 typedef enum {
mcm 1:f0711d344f71 80 AMBIMATE_MS4_FIRMWARE_VERSION = 0x80, /*!< Firmware version */
mcm 1:f0711d344f71 81 AMBIMATE_MS4_FIRMWARE_SUB_VERSION = 0x81, /*!< Firmware sub-version */
mcm 1:f0711d344f71 82 AMBIMATE_MS4_OPTIONAL_SENSORS = 0x82 /*!< Optional sensors */
mcm 1:f0711d344f71 83 } AMBIMATE_MS4_other_registers_t;
mcm 1:f0711d344f71 84
mcm 1:f0711d344f71 85
mcm 1:f0711d344f71 86 typedef enum {
mcm 1:f0711d344f71 87 AMBIMATE_MS4_SCAN_START_BYTE = 0xC0, /*!< Scan start byte */
mcm 1:f0711d344f71 88 AMBIMATE_MS4_AUDIO_EVENT_LEVEL = 0xC1, /*!< Audio level event */
mcm 1:f0711d344f71 89 AMBIMATE_MS4_PROCESSOR_RESET = 0xF0 /*!< Initiates a processor reset */
mcm 1:f0711d344f71 90 } AMBIMATE_MS4_writable_registers_t;
mcm 1:f0711d344f71 91
mcm 1:f0711d344f71 92
mcm 1:f0711d344f71 93
mcm 1:f0711d344f71 94
mcm 1:f0711d344f71 95 /**
mcm 1:f0711d344f71 96 * @brief OPTIONAL SENSORS BYTE REGISTER.
mcm 1:f0711d344f71 97 * NOTE: N/A.
mcm 1:f0711d344f71 98 */
mcm 1:f0711d344f71 99 /* CO2 <0>
mcm 1:f0711d344f71 100 * NOTE: N/A.
mcm 1:f0711d344f71 101 */
mcm 1:f0711d344f71 102 typedef enum {
mcm 1:f0711d344f71 103 OPTIONAL_SENSORS_BYTE_CO2_MASK = ( 1U << 0U ), /*!< CO2 mask */
mcm 1:f0711d344f71 104 OPTIONAL_SENSORS_BYTE_CO2_SENSOR_NOT_INSTALLED = ( 0U << 0U ), /*!< CO2 sensor is not installed */
mcm 1:f0711d344f71 105 OPTIONAL_SENSORS_BYTE_CO2_SENSOR_INSTALLED = ( 1U << 0U ) /*!< CO2 sensor is installed */
mcm 1:f0711d344f71 106 } AMBIMATE_MS4_optional_sensors_byte_co2_t;
mcm 1:f0711d344f71 107
mcm 1:f0711d344f71 108
mcm 1:f0711d344f71 109 /* MIC <2>
mcm 1:f0711d344f71 110 * NOTE: N/A.
mcm 1:f0711d344f71 111 */
mcm 1:f0711d344f71 112 typedef enum {
mcm 1:f0711d344f71 113 OPTIONAL_SENSORS_BYTE_MIC_MASK = ( 1U << 2U ), /*!< MIC mask */
mcm 1:f0711d344f71 114 OPTIONAL_SENSORS_BYTE_MIC_SENSOR_NOT_INSTALLED = ( 0U << 2U ), /*!< MIC sensor is not installed */
mcm 1:f0711d344f71 115 OPTIONAL_SENSORS_BYTE_MIC_SENSOR_INSTALLED = ( 1U << 2U ) /*!< MIC sensor is installed */
mcm 1:f0711d344f71 116 } AMBIMATE_MS4_optional_sensors_byte_mic_t;
mcm 1:f0711d344f71 117
mcm 0:8d9328d3ff35 118
mcm 0:8d9328d3ff35 119
mcm 0:8d9328d3ff35 120 /**
mcm 1:f0711d344f71 121 * @brief WRITEABLE REGISTERS.
mcm 1:f0711d344f71 122 * NOTE: N/A.
mcm 1:f0711d344f71 123 */
mcm 1:f0711d344f71 124 /* GAS <6>
mcm 1:f0711d344f71 125 * NOTE: N/A.
mcm 1:f0711d344f71 126 */
mcm 1:f0711d344f71 127 typedef enum {
mcm 1:f0711d344f71 128 WRITEABLE_REGISTERS_GAS_MASK = ( 1U << 6U ), /*!< GAS mask */
mcm 1:f0711d344f71 129 WRITEABLE_REGISTERS_GAS_MEASUREMENT_COMPLETED = ( 0U << 6U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 130 WRITEABLE_REGISTERS_GAS_INITIATE_NEW_MEASUREMENT = ( 1U << 6U ) /*!< Initiates a measurement of the VOC sensor if installed */
mcm 1:f0711d344f71 131 } AMBIMATE_MS4_writeable_reg_gas_t;
mcm 1:f0711d344f71 132
mcm 1:f0711d344f71 133
mcm 1:f0711d344f71 134 /* BATT <5>
mcm 1:f0711d344f71 135 * NOTE: N/A.
mcm 0:8d9328d3ff35 136 */
mcm 1:f0711d344f71 137 typedef enum {
mcm 1:f0711d344f71 138 WRITEABLE_REGISTERS_BATT_MASK = ( 1U << 5U ), /*!< BATT mask */
mcm 1:f0711d344f71 139 WRITEABLE_REGISTERS_BATT_MEASUREMENT_COMPLETED = ( 0U << 5U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 140 WRITEABLE_REGISTERS_BATT_INITIATE_NEW_MEASUREMENT = ( 1U << 5U ) /*!< Initiates a measurement of the BATTERY voltage */
mcm 1:f0711d344f71 141 } AMBIMATE_MS4_writeable_reg_batt_t;
mcm 1:f0711d344f71 142
mcm 1:f0711d344f71 143
mcm 1:f0711d344f71 144 /* AUD <4>
mcm 1:f0711d344f71 145 * NOTE: N/A.
mcm 1:f0711d344f71 146 */
mcm 1:f0711d344f71 147 typedef enum {
mcm 1:f0711d344f71 148 WRITEABLE_REGISTERS_AUD_MASK = ( 1U << 4U ), /*!< AUD mask */
mcm 1:f0711d344f71 149 WRITEABLE_REGISTERS_AUD_MEASUREMENT_COMPLETED = ( 0U << 4U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 150 WRITEABLE_REGISTERS_AUD_INITIATE_NEW_MEASUREMENT = ( 1U << 4U ) /*!< Initiates a measurement of the AUDIO sensor if installed */
mcm 1:f0711d344f71 151 } AMBIMATE_MS4_writeable_reg_aud_t;
mcm 1:f0711d344f71 152
mcm 1:f0711d344f71 153
mcm 1:f0711d344f71 154 /* LIGHT <3>
mcm 1:f0711d344f71 155 * NOTE: N/A.
mcm 1:f0711d344f71 156 */
mcm 1:f0711d344f71 157 typedef enum {
mcm 1:f0711d344f71 158 WRITEABLE_REGISTERS_LIGHT_MASK = ( 1U << 3U ), /*!< LIGHT mask */
mcm 1:f0711d344f71 159 WRITEABLE_REGISTERS_LIGHT_MEASUREMENT_COMPLETED = ( 0U << 3U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 160 WRITEABLE_REGISTERS_LIGHT_INITIATE_NEW_MEASUREMENT = ( 1U << 3U ) /*!< Initiates a measurement of the LIGHT sensor */
mcm 1:f0711d344f71 161 } AMBIMATE_MS4_writeable_reg_light_t;
mcm 0:8d9328d3ff35 162
mcm 0:8d9328d3ff35 163
mcm 1:f0711d344f71 164 /* HUM <2>
mcm 1:f0711d344f71 165 * NOTE: N/A.
mcm 1:f0711d344f71 166 */
mcm 1:f0711d344f71 167 typedef enum {
mcm 1:f0711d344f71 168 WRITEABLE_REGISTERS_HUM_MASK = ( 1U << 2U ), /*!< HUM mask */
mcm 1:f0711d344f71 169 WRITEABLE_REGISTERS_HUM_MEASUREMENT_COMPLETED = ( 0U << 2U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 170 WRITEABLE_REGISTERS_HUM_INITIATE_NEW_MEASUREMENT = ( 1U << 2U ) /*!< Initiates a measurement of the HUMIDITY sensor */
mcm 1:f0711d344f71 171 } AMBIMATE_MS4_writeable_reg_hum_t;
mcm 1:f0711d344f71 172
mcm 1:f0711d344f71 173
mcm 1:f0711d344f71 174 /* TEMP <1>
mcm 1:f0711d344f71 175 * NOTE: N/A.
mcm 1:f0711d344f71 176 */
mcm 1:f0711d344f71 177 typedef enum {
mcm 1:f0711d344f71 178 WRITEABLE_REGISTERS_TEMP_MASK = ( 1U << 1U ), /*!< TEMP mask */
mcm 1:f0711d344f71 179 WRITEABLE_REGISTERS_TEMP_MEASUREMENT_COMPLETED = ( 0U << 1U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 180 WRITEABLE_REGISTERS_TEMP_INITIATE_NEW_MEASUREMENT = ( 1U << 1U ) /*!< Initiates a measurement of the TEMPERATURE sensor */
mcm 1:f0711d344f71 181 } AMBIMATE_MS4_writeable_reg_temp_t;
mcm 1:f0711d344f71 182
mcm 1:f0711d344f71 183
mcm 1:f0711d344f71 184 /* STATUS <0>
mcm 1:f0711d344f71 185 * NOTE: N/A.
mcm 1:f0711d344f71 186 */
mcm 0:8d9328d3ff35 187 typedef enum {
mcm 1:f0711d344f71 188 WRITEABLE_REGISTERS_STATUS_MASK = ( 1U << 0U ), /*!< STATUS mask */
mcm 1:f0711d344f71 189 WRITEABLE_REGISTERS_STATUS_MEASUREMENT_COMPLETED = ( 0U << 0U ), /*!< Measurement is completed */
mcm 1:f0711d344f71 190 WRITEABLE_REGISTERS_STATUS_INITIATE_NEW_MEASUREMENT = ( 1U << 0U ) /*!< Initiates a measurement of the STATUS */
mcm 1:f0711d344f71 191 } AMBIMATE_MS4_writeable_reg_status_t;
mcm 1:f0711d344f71 192
mcm 1:f0711d344f71 193
mcm 1:f0711d344f71 194
mcm 1:f0711d344f71 195
mcm 0:8d9328d3ff35 196 /**
mcm 1:f0711d344f71 197 * @brief RESET REGISTER.
mcm 1:f0711d344f71 198 * NOTE: N/A.
mcm 1:f0711d344f71 199 */
mcm 1:f0711d344f71 200 /* PROCESSOR_RESET <7:0>
mcm 1:f0711d344f71 201 * NOTE: N/A.
mcm 1:f0711d344f71 202 */
mcm 1:f0711d344f71 203 typedef enum {
mcm 1:f0711d344f71 204 RESET_REGISTER_PROCESSOR_RESET = 0xA5 /*!< It initiates an AmbiMate processor reset */
mcm 1:f0711d344f71 205 } AMBIMATE_MS4_reset_t;
mcm 1:f0711d344f71 206
mcm 1:f0711d344f71 207
mcm 1:f0711d344f71 208
mcm 1:f0711d344f71 209
mcm 1:f0711d344f71 210 /**
mcm 1:f0711d344f71 211 * @brief OPTIONAL SENSORS BYTE.
mcm 1:f0711d344f71 212 * NOTE: N/A.
mcm 0:8d9328d3ff35 213 */
mcm 0:8d9328d3ff35 214 typedef enum {
mcm 1:f0711d344f71 215 OPTIONAL_SENSORS_NONE = 0, /*!< No optional sensors on board */
mcm 1:f0711d344f71 216 OPTIONAL_SENSORS_CO2 = 1, /*!< Optional sensors: C02 only */
mcm 1:f0711d344f71 217 OPTIONAL_SENSORS_MIC = 3, /*!< Optional sensors: MIC only */
mcm 1:f0711d344f71 218 OPTIONAL_SENSORS_CO2_AND_MIC = 4 /*!< Optional sensors: CO2 and MIC */
mcm 1:f0711d344f71 219 } AMBIMATE_MS4_op_sensors_byte_t;
mcm 0:8d9328d3ff35 220
mcm 0:8d9328d3ff35 221
mcm 0:8d9328d3ff35 222
mcm 0:8d9328d3ff35 223
mcm 0:8d9328d3ff35 224
mcm 1:f0711d344f71 225
mcm 1:f0711d344f71 226 #ifndef AMBIMATE_MS4_VECTOR_STRUCT_H
mcm 1:f0711d344f71 227 #define AMBIMATE_MS4_VECTOR_STRUCT_H
mcm 1:f0711d344f71 228 /* OTHER REGISTERS */
mcm 0:8d9328d3ff35 229 typedef struct {
mcm 1:f0711d344f71 230 uint8_t firmware_version; /*< Firmware version */
mcm 1:f0711d344f71 231 uint8_t firmware_sub_version; /*< Firmware sub-version */
mcm 1:f0711d344f71 232 AMBIMATE_MS4_op_sensors_byte_t optional_sensors; /*< Optional sensors */
mcm 1:f0711d344f71 233 } AMBIMATE_MS4_other_reg_param_t;
mcm 1:f0711d344f71 234
mcm 0:8d9328d3ff35 235
mcm 1:f0711d344f71 236 /* RAW DATA VALUES: 16-bit */
mcm 1:f0711d344f71 237 typedef struct {
mcm 1:f0711d344f71 238 uint16_t raw_temperature; /*< Raw temperature value */
mcm 1:f0711d344f71 239 uint16_t raw_humidity; /*< Raw humidity value */
mcm 1:f0711d344f71 240 uint16_t raw_light; /*< Raw light value */
mcm 1:f0711d344f71 241 uint16_t raw_audio; /*< Raw audio value */
mcm 1:f0711d344f71 242 uint16_t raw_battery_volts; /*< Raw battery volts value */
mcm 1:f0711d344f71 243 uint16_t raw_eco2; /*< Raw eCO2 value */
mcm 1:f0711d344f71 244 uint16_t raw_voc; /*< Raw VOC value */
mcm 1:f0711d344f71 245 } AMBIMATE_MS4_raw_data_values_t;
mcm 1:f0711d344f71 246
mcm 1:f0711d344f71 247
mcm 1:f0711d344f71 248 /* RAW DATA VALUES: 8-bit */
mcm 0:8d9328d3ff35 249 typedef struct {
mcm 1:f0711d344f71 250 uint16_t raw_8bit_temperature; /*< Raw temperature value */
mcm 1:f0711d344f71 251 uint16_t raw_8bit_humidity; /*< Raw humidity value */
mcm 1:f0711d344f71 252 uint16_t raw_8bit_light; /*< Raw light value */
mcm 1:f0711d344f71 253 uint16_t raw_8bit_audio; /*< Raw audio value */
mcm 1:f0711d344f71 254 uint16_t raw_8bit_battery_volts; /*< Raw battery volts value */
mcm 1:f0711d344f71 255 uint16_t raw_8bit_eco2; /*< Raw eCO2 value */
mcm 1:f0711d344f71 256 uint16_t raw_8bit_voc; /*< Raw VOC value */
mcm 1:f0711d344f71 257 } AMBIMATE_MS4_raw_8bit_data_values_t;
mcm 1:f0711d344f71 258
mcm 1:f0711d344f71 259
mcm 1:f0711d344f71 260 /* DATA VALUES: 16-bit resolution */
mcm 0:8d9328d3ff35 261 typedef struct {
mcm 1:f0711d344f71 262 double temperature; /*< Temperature value */
mcm 1:f0711d344f71 263 double humidity; /*< Humidity value */
mcm 1:f0711d344f71 264 uint16_t light; /*< Light value */
mcm 1:f0711d344f71 265 uint16_t audio; /*< Audio value */
mcm 1:f0711d344f71 266 double battery_volts; /*< Battery volts value */
mcm 1:f0711d344f71 267 uint16_t eco2; /*< eCO2 value */
mcm 1:f0711d344f71 268 uint16_t voc; /*< VOC value */
mcm 1:f0711d344f71 269 } AMBIMATE_MS4_data_values_t;
mcm 1:f0711d344f71 270
mcm 1:f0711d344f71 271
mcm 1:f0711d344f71 272
mcm 0:8d9328d3ff35 273
mcm 1:f0711d344f71 274 /* USER: User's variables */
mcm 0:8d9328d3ff35 275 typedef struct {
mcm 1:f0711d344f71 276 uint8_t status; /*< Status register */
mcm 1:f0711d344f71 277
mcm 1:f0711d344f71 278 uint8_t start_scan_byte; /*< StartScanByte register */
mcm 1:f0711d344f71 279
mcm 1:f0711d344f71 280 AMBIMATE_MS4_raw_data_values_t raw_data; /*< Raw data values */
mcm 1:f0711d344f71 281 AMBIMATE_MS4_raw_8bit_data_values_t raw_data8bit; /*< 8-bit Raw data values */
mcm 1:f0711d344f71 282
mcm 1:f0711d344f71 283 AMBIMATE_MS4_data_values_t data; /*< Data values */
mcm 1:f0711d344f71 284
mcm 1:f0711d344f71 285 AMBIMATE_MS4_other_reg_param_t info; /*< Other registers: Info regarding the device */
mcm 1:f0711d344f71 286 } AMBIMATE_MS4_data_t;
mcm 0:8d9328d3ff35 287 #endif
mcm 0:8d9328d3ff35 288
mcm 0:8d9328d3ff35 289
mcm 0:8d9328d3ff35 290 /**
mcm 0:8d9328d3ff35 291 * @brief INTERNAL CONSTANTS
mcm 0:8d9328d3ff35 292 */
mcm 0:8d9328d3ff35 293 typedef enum {
mcm 1:f0711d344f71 294 AMBIMATE_MS4_SUCCESS = 0,
mcm 1:f0711d344f71 295 AMBIMATE_MS4_FAILURE = 1,
mcm 1:f0711d344f71 296 AMBIMATE_MS4_DATA_CORRUPTED = 2,
mcm 1:f0711d344f71 297 I2C_SUCCESS = 0 /*!< I2C communication was fine */
mcm 0:8d9328d3ff35 298 } AMBIMATE_MS4_status_t;
mcm 0:8d9328d3ff35 299
mcm 0:8d9328d3ff35 300
mcm 0:8d9328d3ff35 301
mcm 0:8d9328d3ff35 302
mcm 0:8d9328d3ff35 303 /** Create an AMBIMATE_MS4 object connected to the specified I2C pins.
mcm 0:8d9328d3ff35 304 *
mcm 0:8d9328d3ff35 305 * @param sda I2C data pin
mcm 0:8d9328d3ff35 306 * @param scl I2C clock pin
mcm 0:8d9328d3ff35 307 * @param addr I2C slave address
mcm 0:8d9328d3ff35 308 * @param freq I2C frequency in Hz.
mcm 0:8d9328d3ff35 309 */
mcm 0:8d9328d3ff35 310 AMBIMATE_MS4 ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 0:8d9328d3ff35 311
mcm 0:8d9328d3ff35 312 /** Delete AMBIMATE_MS4 object.
mcm 0:8d9328d3ff35 313 */
mcm 0:8d9328d3ff35 314 ~AMBIMATE_MS4();
mcm 0:8d9328d3ff35 315
mcm 1:f0711d344f71 316 /** It initiates a new measurements of the chosen sensors.
mcm 1:f0711d344f71 317 */
mcm 1:f0711d344f71 318 AMBIMATE_MS4_status_t AMBIMATE_MS4_ScanStartByte ( AMBIMATE_MS4_writeable_reg_gas_t gas, AMBIMATE_MS4_writeable_reg_batt_t batt, AMBIMATE_MS4_writeable_reg_aud_t aud, AMBIMATE_MS4_writeable_reg_light_t light, AMBIMATE_MS4_writeable_reg_hum_t hum, AMBIMATE_MS4_writeable_reg_temp_t temp, AMBIMATE_MS4_writeable_reg_status_t status );
mcm 1:f0711d344f71 319
mcm 1:f0711d344f71 320 /** It gets the scan byte values.
mcm 1:f0711d344f71 321 */
mcm 1:f0711d344f71 322 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetScanStartByte ( uint8_t* scan_byte );
mcm 1:f0711d344f71 323
mcm 1:f0711d344f71 324 /** It gets the firmware version.
mcm 1:f0711d344f71 325 */
mcm 1:f0711d344f71 326 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetFirmwareVersion ( uint8_t* fw_version );
mcm 1:f0711d344f71 327
mcm 1:f0711d344f71 328 /** It gets the firmware sub-version.
mcm 1:f0711d344f71 329 */
mcm 1:f0711d344f71 330 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetFirmwareSubVersion ( uint8_t* fw_subversion );
mcm 1:f0711d344f71 331
mcm 1:f0711d344f71 332 /** It gets the optional sensors on board.
mcm 1:f0711d344f71 333 */
mcm 1:f0711d344f71 334 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetOptionalSensorsByte ( AMBIMATE_MS4_op_sensors_byte_t* op_sensors );
mcm 1:f0711d344f71 335
mcm 1:f0711d344f71 336 /** It performs a processor reset.
mcm 1:f0711d344f71 337 */
mcm 1:f0711d344f71 338 AMBIMATE_MS4_status_t AMBIMATE_MS4_ProcessorReset ( void );
mcm 0:8d9328d3ff35 339
mcm 1:f0711d344f71 340 /** It gets the Status value.
mcm 1:f0711d344f71 341 */
mcm 1:f0711d344f71 342 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetStatus ( uint8_t* status );
mcm 1:f0711d344f71 343
mcm 1:f0711d344f71 344 /** It gets the raw value for temperature.
mcm 1:f0711d344f71 345 */
mcm 1:f0711d344f71 346 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawTemperature ( uint16_t* raw_temp );
mcm 1:f0711d344f71 347
mcm 1:f0711d344f71 348 /** It gets the raw value for humidity.
mcm 1:f0711d344f71 349 */
mcm 1:f0711d344f71 350 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawHumidity ( uint16_t* raw_hum );
mcm 0:8d9328d3ff35 351
mcm 1:f0711d344f71 352 /** It gets the raw value for light.
mcm 1:f0711d344f71 353 */
mcm 1:f0711d344f71 354 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawLight ( uint16_t* raw_light );
mcm 1:f0711d344f71 355
mcm 1:f0711d344f71 356 /** It gets the raw value for audio.
mcm 1:f0711d344f71 357 */
mcm 1:f0711d344f71 358 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawAudio ( uint16_t* raw_audio );
mcm 1:f0711d344f71 359
mcm 1:f0711d344f71 360 /** It gets the raw value for battery volts.
mcm 1:f0711d344f71 361 */
mcm 1:f0711d344f71 362 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawBatteryVolts ( uint16_t* raw_batt );
mcm 0:8d9328d3ff35 363
mcm 1:f0711d344f71 364 /** It gets the raw value for eCO2.
mcm 1:f0711d344f71 365 */
mcm 1:f0711d344f71 366 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawECO2 ( uint16_t* raw_eco2 );
mcm 1:f0711d344f71 367
mcm 1:f0711d344f71 368 /** It gets the raw value for VOC.
mcm 1:f0711d344f71 369 */
mcm 1:f0711d344f71 370 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawVOC ( uint16_t* raw_voc );
mcm 1:f0711d344f71 371
mcm 1:f0711d344f71 372 /** It gets the raw value for all the sensors.
mcm 1:f0711d344f71 373 */
mcm 1:f0711d344f71 374 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRawAllSensors ( uint8_t* status, AMBIMATE_MS4_raw_data_values_t* raw_all );
mcm 0:8d9328d3ff35 375
mcm 1:f0711d344f71 376 /** It gets the 8bit raw value for temperature.
mcm 1:f0711d344f71 377 */
mcm 1:f0711d344f71 378 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawTemperature ( uint8_t* raw_8bit_temp );
mcm 1:f0711d344f71 379
mcm 1:f0711d344f71 380 /** It gets the 8bit raw value for humidity.
mcm 1:f0711d344f71 381 */
mcm 1:f0711d344f71 382 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawHumidity ( uint8_t* raw_8bit_hum );
mcm 1:f0711d344f71 383
mcm 1:f0711d344f71 384 /** It gets the 8bit raw value for light.
mcm 1:f0711d344f71 385 */
mcm 1:f0711d344f71 386 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawLight ( uint8_t* raw_8bit_light );
mcm 0:8d9328d3ff35 387
mcm 1:f0711d344f71 388 /** It gets the 8bit raw value for audio.
mcm 1:f0711d344f71 389 */
mcm 1:f0711d344f71 390 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawAudio ( uint8_t* raw_8bit_audio );
mcm 1:f0711d344f71 391
mcm 1:f0711d344f71 392 /** It gets the 8bit raw value for battery volts.
mcm 1:f0711d344f71 393 */
mcm 1:f0711d344f71 394 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawBatteryVolts ( uint8_t* raw_8bit_batt );
mcm 1:f0711d344f71 395
mcm 1:f0711d344f71 396 /** It gets the 8bit raw value for eCO2.
mcm 1:f0711d344f71 397 */
mcm 1:f0711d344f71 398 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawECO2 ( uint8_t* raw_8bit_eco2 );
mcm 0:8d9328d3ff35 399
mcm 1:f0711d344f71 400 /** It gets the 8bit raw value for VOC.
mcm 1:f0711d344f71 401 */
mcm 1:f0711d344f71 402 AMBIMATE_MS4_status_t AMBIMATE_MS4_Get8bitRawVOC ( uint8_t* raw_8bit_voc );
mcm 1:f0711d344f71 403
mcm 1:f0711d344f71 404 /** It gets the 8bit raw value for all the sensors.
mcm 1:f0711d344f71 405 */
mcm 1:f0711d344f71 406 AMBIMATE_MS4_status_t AMBIMATE_MS4_GetRaw8bitAllSensors ( uint8_t* status, AMBIMATE_MS4_raw_8bit_data_values_t* raw_8bit_all );
mcm 1:f0711d344f71 407
mcm 1:f0711d344f71 408 /** It process all the data to human readable values for all the sensors.
mcm 1:f0711d344f71 409 */
mcm 1:f0711d344f71 410 AMBIMATE_MS4_data_values_t AMBIMATE_MS4_ProcessAllData ( AMBIMATE_MS4_raw_data_values_t raw_all );
mcm 0:8d9328d3ff35 411
mcm 0:8d9328d3ff35 412 private:
mcm 0:8d9328d3ff35 413 I2C _i2c;
mcm 0:8d9328d3ff35 414 uint32_t _AMBIMATE_MS4_Addr;
mcm 0:8d9328d3ff35 415 };
mcm 0:8d9328d3ff35 416
mcm 0:8d9328d3ff35 417 #endif