Manuel Caballero / BM1383AGLV
Committer:
mcm
Date:
Wed Oct 02 11:53:10 2019 +0000
Revision:
2:4aa16ca14915
Parent:
1:49d8e4da0b7c
Child:
3:24c3e7a9db4e
Functions don't need I2C parameters, the class is capable of handling such a thing automatically. ; ; Function and Header files are ready to be tested.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcm 1:49d8e4da0b7c 1 /**
mcm 1:49d8e4da0b7c 2 * @brief BM1383AGLV.h
mcm 1:49d8e4da0b7c 3 * @details Pressure Sensor IC.
mcm 1:49d8e4da0b7c 4 * Header file.
mcm 1:49d8e4da0b7c 5 *
mcm 1:49d8e4da0b7c 6 *
mcm 1:49d8e4da0b7c 7 * @return N/A
mcm 1:49d8e4da0b7c 8 *
mcm 1:49d8e4da0b7c 9 * @author Manuel Caballero
mcm 1:49d8e4da0b7c 10 * @date 02/October/2019
mcm 1:49d8e4da0b7c 11 * @version 02/October/2019 The ORIGIN
mcm 1:49d8e4da0b7c 12 * @pre N/A.
mcm 1:49d8e4da0b7c 13 * @warning N/A
mcm 1:49d8e4da0b7c 14 * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). All rights reserved.
mcm 1:49d8e4da0b7c 15 */
mcm 1:49d8e4da0b7c 16 #ifndef BM1383AGLV_H
mcm 1:49d8e4da0b7c 17 #define BM1383AGLV_H
mcm 1:49d8e4da0b7c 18
mcm 1:49d8e4da0b7c 19 #include "mbed.h"
mcm 1:49d8e4da0b7c 20
mcm 1:49d8e4da0b7c 21
mcm 1:49d8e4da0b7c 22 /**
mcm 1:49d8e4da0b7c 23 Example:
mcm 1:49d8e4da0b7c 24 @code
mcm 1:49d8e4da0b7c 25
mcm 1:49d8e4da0b7c 26 @endcode
mcm 1:49d8e4da0b7c 27 */
mcm 1:49d8e4da0b7c 28
mcm 1:49d8e4da0b7c 29
mcm 1:49d8e4da0b7c 30 /*!
mcm 1:49d8e4da0b7c 31 Library for the BM1383AGLV Pressure Sensor IC.
mcm 1:49d8e4da0b7c 32 */
mcm 1:49d8e4da0b7c 33 class BM1383AGLV
mcm 1:49d8e4da0b7c 34 {
mcm 1:49d8e4da0b7c 35 public:
mcm 1:49d8e4da0b7c 36 /**
mcm 1:49d8e4da0b7c 37 * @brief DEFAULT ADDRESS
mcm 1:49d8e4da0b7c 38 */
mcm 1:49d8e4da0b7c 39 typedef enum {
mcm 1:49d8e4da0b7c 40 BM1383AGLV_ADDRESS = 0b1011101 /*!< I2C slave address byte */
mcm 1:49d8e4da0b7c 41 } BM1383AGLV_address_t;
mcm 1:49d8e4da0b7c 42
mcm 1:49d8e4da0b7c 43
mcm 1:49d8e4da0b7c 44
mcm 1:49d8e4da0b7c 45 /**
mcm 1:49d8e4da0b7c 46 * @brief REGISTERS
mcm 1:49d8e4da0b7c 47 */
mcm 1:49d8e4da0b7c 48 typedef enum {
mcm 1:49d8e4da0b7c 49 BM1383AGLV_ID1 = 0x0F, /*!< Device ID1 */
mcm 1:49d8e4da0b7c 50 BM1383AGLV_ID2 = 0x10, /*!< Device ID2 */
mcm 1:49d8e4da0b7c 51 BM1383AGLV_POWER_DOWN = 0x12, /*!< Power down register */
mcm 1:49d8e4da0b7c 52 BM1383AGLV_RESET = 0x13, /*!< Reset register */
mcm 1:49d8e4da0b7c 53 BM1383AGLV_MODE_CONTROL = 0x14, /*!< Mode control register */
mcm 1:49d8e4da0b7c 54 BM1383AGLV_STATUS = 0x19, /*!< Status register */
mcm 1:49d8e4da0b7c 55 BM1383AGLV_PRESSURE_MSB = 0x1A, /*!< Pressure data (MSB) */
mcm 1:49d8e4da0b7c 56 BM1383AGLV_PRESSURE_LSB = 0x1B, /*!< Pressure data (LSB) */
mcm 1:49d8e4da0b7c 57 BM1383AGLV_PRESSURE_XLSB = 0x1C, /*!< Pressure data (XLSB) */
mcm 1:49d8e4da0b7c 58 BM1383AGLV_TEMPERATURE_MSB = 0x1D, /*!< Temperature data (MSB) */
mcm 1:49d8e4da0b7c 59 BM1383AGLV_TEMPERATURE_LSB = 0x1E /*!< Temperature data (LSB) */
mcm 1:49d8e4da0b7c 60 } BM1383AGLV_registers_t;
mcm 1:49d8e4da0b7c 61
mcm 1:49d8e4da0b7c 62
mcm 1:49d8e4da0b7c 63
mcm 1:49d8e4da0b7c 64 /**
mcm 1:49d8e4da0b7c 65 * @brief ID REGISTERS
mcm 1:49d8e4da0b7c 66 */
mcm 1:49d8e4da0b7c 67 typedef enum {
mcm 1:49d8e4da0b7c 68 ID_ID1 = 0xE0, /*!< ID1 value */
mcm 1:49d8e4da0b7c 69 ID_ID2 = 0x32 /*!< ID2 value */
mcm 1:49d8e4da0b7c 70 } BM1383AGLV_id_t;
mcm 1:49d8e4da0b7c 71
mcm 1:49d8e4da0b7c 72
mcm 1:49d8e4da0b7c 73
mcm 1:49d8e4da0b7c 74 /**
mcm 1:49d8e4da0b7c 75 * @brief POWER_DOWN REGISTER
mcm 1:49d8e4da0b7c 76 */
mcm 1:49d8e4da0b7c 77 /* PWR_DOWN <0>
mcm 1:49d8e4da0b7c 78 * NOTE: Power down or active mode.
mcm 1:49d8e4da0b7c 79 */
mcm 1:49d8e4da0b7c 80 typedef enum {
mcm 1:49d8e4da0b7c 81 POWER_DOWN_PWR_DOWN_MASK = ( 1U << 0U ), /*!< POWER_DOWN mask */
mcm 1:49d8e4da0b7c 82 POWER_DOWN_PWR_DOWN_POWER_DOWN = ( 0U << 0U ), /*!< Power down [ Default ] */
mcm 1:49d8e4da0b7c 83 POWER_DOWN_PWR_DOWN_ACTIVE = ( 1U << 0U ) /*!< Active */
mcm 1:49d8e4da0b7c 84 } BM1383AGLV_power_down_pwr_down_t;
mcm 1:49d8e4da0b7c 85
mcm 1:49d8e4da0b7c 86
mcm 1:49d8e4da0b7c 87 /**
mcm 1:49d8e4da0b7c 88 * @brief RESET REGISTER
mcm 1:49d8e4da0b7c 89 */
mcm 1:49d8e4da0b7c 90 /* RSTB <0>
mcm 1:49d8e4da0b7c 91 * NOTE: N/A.
mcm 1:49d8e4da0b7c 92 */
mcm 1:49d8e4da0b7c 93 typedef enum {
mcm 1:49d8e4da0b7c 94 RESET_RSTB_MASK = ( 1U << 0U ), /*!< RSTB mask */
mcm 1:49d8e4da0b7c 95 RESET_RSTB_RESET = ( 0U << 0U ), /*!< Measurement control block is reset [ Default ] */
mcm 1:49d8e4da0b7c 96 RESET_RSTB_ACTIVE = ( 1U << 0U ) /*!< Measurement control block is active */
mcm 1:49d8e4da0b7c 97 } BM1383AGLV_reset_rstb_t;
mcm 1:49d8e4da0b7c 98
mcm 1:49d8e4da0b7c 99
mcm 1:49d8e4da0b7c 100
mcm 1:49d8e4da0b7c 101 /**
mcm 1:49d8e4da0b7c 102 * @brief MODE_CONTROL REGISTER
mcm 1:49d8e4da0b7c 103 */
mcm 1:49d8e4da0b7c 104 /* AVE_NUM <7:5>
mcm 1:49d8e4da0b7c 105 * NOTE: Set the average number of measurement data.
mcm 1:49d8e4da0b7c 106 */
mcm 1:49d8e4da0b7c 107 typedef enum {
mcm 1:49d8e4da0b7c 108 MODE_CONTROL_AVE_NUM_MASK = ( 0b111 << 5U ), /*!< AVE_NUM mask */
mcm 1:49d8e4da0b7c 109 MODE_CONTROL_AVE_NUM_SINGLE = ( 0b000 << 5U ), /*!< AVE_NUM: Single */
mcm 1:49d8e4da0b7c 110 MODE_CONTROL_AVE_NUM_AVERAGE_2 = ( 0b001 << 5U ), /*!< AVE_NUM: Average of 2 times [ Default ] */
mcm 1:49d8e4da0b7c 111 MODE_CONTROL_AVE_NUM_AVERAGE_4 = ( 0b010 << 5U ), /*!< AVE_NUM: Average of 4 times */
mcm 1:49d8e4da0b7c 112 MODE_CONTROL_AVE_NUM_AVERAGE_8 = ( 0b011 << 5U ), /*!< AVE_NUM: Average of 8 times */
mcm 1:49d8e4da0b7c 113 MODE_CONTROL_AVE_NUM_AVERAGE_16 = ( 0b100 << 5U ), /*!< AVE_NUM: Average of 16 times */
mcm 1:49d8e4da0b7c 114 MODE_CONTROL_AVE_NUM_AVERAGE_32 = ( 0b101 << 5U ), /*!< AVE_NUM: Average of 32 times */
mcm 1:49d8e4da0b7c 115 MODE_CONTROL_AVE_NUM_AVERAGE_64 = ( 0b110 << 5U ) /*!< AVE_NUM: Average of 64 times */
mcm 1:49d8e4da0b7c 116 } BM1383AGLV_mode_control_ave_num_t;
mcm 1:49d8e4da0b7c 117
mcm 1:49d8e4da0b7c 118
mcm 1:49d8e4da0b7c 119 /* DREN <4>
mcm 1:49d8e4da0b7c 120 * NOTE: DRDY pin Enable.
mcm 1:49d8e4da0b7c 121 */
mcm 1:49d8e4da0b7c 122 typedef enum {
mcm 1:49d8e4da0b7c 123 MODE_CONTROL_DREN_MASK = ( 1U << 4U ), /*!< DREN mask */
mcm 1:49d8e4da0b7c 124 MODE_CONTROL_DREN_DRDY_DISABLE = ( 0U << 4U ), /*!< DRDY pin Disable [ Default ] */
mcm 1:49d8e4da0b7c 125 MODE_CONTROL_DREN_DRDY_ENABLE = ( 1U << 4U ) /*!< DRDY pin Enable */
mcm 1:49d8e4da0b7c 126 } BM1383AGLV_mode_control_dren_t;
mcm 1:49d8e4da0b7c 127
mcm 1:49d8e4da0b7c 128
mcm 1:49d8e4da0b7c 129 /* MODE <1:0>
mcm 1:49d8e4da0b7c 130 * NOTE: Set measurement mode.
mcm 1:49d8e4da0b7c 131 */
mcm 1:49d8e4da0b7c 132 typedef enum {
mcm 1:49d8e4da0b7c 133 MODE_CONTROL_MODE_MASK = ( 0b11 << 0U ), /*!< MODE mask */
mcm 1:49d8e4da0b7c 134 MODE_CONTROL_MODE_STAND_BY = ( 0b00 << 0U ), /*!< Stand by [ Default ] */
mcm 1:49d8e4da0b7c 135 MODE_CONTROL_MODE_ONE_SHOT = ( 0b01 << 0U ), /*!< One shot */
mcm 1:49d8e4da0b7c 136 MODE_CONTROL_MODE_CONTINUOUS = ( 0b10 << 0U ) /*!< Continuous */
mcm 1:49d8e4da0b7c 137 } BM1383AGLV_mode_control_mode_t;
mcm 1:49d8e4da0b7c 138
mcm 1:49d8e4da0b7c 139
mcm 1:49d8e4da0b7c 140 /**
mcm 1:49d8e4da0b7c 141 * @brief STATUS REGISTER
mcm 1:49d8e4da0b7c 142 */
mcm 1:49d8e4da0b7c 143 /* RD_DRDY <0>
mcm 1:49d8e4da0b7c 144 * NOTE: Pressure and temperature measurement data ready bit.
mcm 1:49d8e4da0b7c 145 */
mcm 1:49d8e4da0b7c 146 typedef enum {
mcm 1:49d8e4da0b7c 147 STATUS_RD_DRDY_MASK = ( 1U << 0U ), /*!< RD_DRDY mask */
mcm 1:49d8e4da0b7c 148 STATUS_RD_DRDY_DATA_MEASURING = ( 0U << 0U ), /*!< Measurement data output is not yet available (measuring) [ Default ] */
mcm 1:49d8e4da0b7c 149 STATUS_RD_DRDY_DATA_AVAILABLE = ( 1U << 0U ) /*!< Measurement data output is available */
mcm 1:49d8e4da0b7c 150 } BM1383AGLV_reset_rd_drdy_t;
mcm 1:49d8e4da0b7c 151
mcm 1:49d8e4da0b7c 152
mcm 1:49d8e4da0b7c 153
mcm 1:49d8e4da0b7c 154
mcm 1:49d8e4da0b7c 155
mcm 1:49d8e4da0b7c 156 #ifndef BM1383AGLV_VECTOR_STRUCT_H
mcm 1:49d8e4da0b7c 157 #define BM1383AGLV_VECTOR_STRUCT_H
mcm 1:49d8e4da0b7c 158 typedef struct {
mcm 1:49d8e4da0b7c 159 /* Output registers */
mcm 1:49d8e4da0b7c 160 int32_t rawPressure; /*!< Raw pressure */
mcm 1:49d8e4da0b7c 161 int16_t rawTemperature; /*!< Raw temperature */
mcm 1:49d8e4da0b7c 162
mcm 1:49d8e4da0b7c 163 float pressure; /*!< Pressure value */
mcm 1:49d8e4da0b7c 164 float temperature; /*!< Temperature value */
mcm 1:49d8e4da0b7c 165
mcm 1:49d8e4da0b7c 166 /* Mode control */
mcm 1:49d8e4da0b7c 167 BM1383AGLV_mode_control_ave_num_t ave_num; /*!< Average number of measurement */
mcm 1:49d8e4da0b7c 168 BM1383AGLV_mode_control_dren_t dren; /*!< DRDY pin Enable */
mcm 1:49d8e4da0b7c 169 BM1383AGLV_mode_control_mode_t mode; /*!< Set measurement mode */
mcm 1:49d8e4da0b7c 170
mcm 1:49d8e4da0b7c 171 /* Device status */
mcm 1:49d8e4da0b7c 172 BM1383AGLV_power_down_pwr_down_t pwr_down; /*!< Power mode */
mcm 1:49d8e4da0b7c 173 BM1383AGLV_reset_rstb_t rstb; /*!< Reset */
mcm 1:49d8e4da0b7c 174 BM1383AGLV_reset_rd_drdy_t rd_drdy; /*!< Status flag */
mcm 1:49d8e4da0b7c 175
mcm 1:49d8e4da0b7c 176 /* Device identification */
mcm 1:49d8e4da0b7c 177 uint8_t id1; /*!< Device ID1 */
mcm 1:49d8e4da0b7c 178 uint8_t id2; /*!< Device ID2 */
mcm 1:49d8e4da0b7c 179 } BM1383AGLV_data_t;
mcm 1:49d8e4da0b7c 180 #endif
mcm 1:49d8e4da0b7c 181
mcm 1:49d8e4da0b7c 182
mcm 1:49d8e4da0b7c 183 /**
mcm 1:49d8e4da0b7c 184 * @brief INTERNAL CONSTANTS
mcm 1:49d8e4da0b7c 185 */
mcm 1:49d8e4da0b7c 186 typedef enum {
mcm 1:49d8e4da0b7c 187 BM1383AGLV_SUCCESS = 0U, /*!< I2C communication success */
mcm 1:49d8e4da0b7c 188 BM1383AGLV_FAILURE = 1U, /*!< I2C communication failure */
mcm 1:49d8e4da0b7c 189 I2C_SUCCESS = 0U /*!< I2C communication was fine */
mcm 1:49d8e4da0b7c 190 } BM1383AGLV_status_t;
mcm 1:49d8e4da0b7c 191
mcm 1:49d8e4da0b7c 192
mcm 1:49d8e4da0b7c 193
mcm 1:49d8e4da0b7c 194
mcm 1:49d8e4da0b7c 195 /** Create an BM1383AGLV object connected to the specified I2C pins.
mcm 1:49d8e4da0b7c 196 *
mcm 1:49d8e4da0b7c 197 * @param sda I2C data pin
mcm 1:49d8e4da0b7c 198 * @param scl I2C clock pin
mcm 1:49d8e4da0b7c 199 * @param addr I2C slave address
mcm 1:49d8e4da0b7c 200 * @param freq I2C frequency
mcm 1:49d8e4da0b7c 201 */
mcm 1:49d8e4da0b7c 202 BM1383AGLV ( PinName sda, PinName scl, uint32_t addr, uint32_t freq );
mcm 1:49d8e4da0b7c 203
mcm 1:49d8e4da0b7c 204 /** Delete BM1383AGLV object.
mcm 1:49d8e4da0b7c 205 */
mcm 1:49d8e4da0b7c 206 ~BM1383AGLV();
mcm 1:49d8e4da0b7c 207
mcm 1:49d8e4da0b7c 208 /** It gets the device identifications.
mcm 1:49d8e4da0b7c 209 */
mcm 2:4aa16ca14915 210 BM1383AGLV_status_t BM1383AGLV_GetDeviceID ( BM1383AGLV_data_t* myDeviceID );
mcm 1:49d8e4da0b7c 211
mcm 1:49d8e4da0b7c 212 /** It sets the power-down mode.
mcm 1:49d8e4da0b7c 213 */
mcm 2:4aa16ca14915 214 BM1383AGLV_status_t BM1383AGLV_SetPowerDown ( BM1383AGLV_data_t myPwrDown );
mcm 1:49d8e4da0b7c 215
mcm 1:49d8e4da0b7c 216 /** It gets the power-down mode.
mcm 1:49d8e4da0b7c 217 */
mcm 2:4aa16ca14915 218 BM1383AGLV_status_t BM1383AGLV_GetPowerDown ( BM1383AGLV_data_t* myPwrDown );
mcm 1:49d8e4da0b7c 219
mcm 1:49d8e4da0b7c 220 /** It sets the soft-reset.
mcm 1:49d8e4da0b7c 221 */
mcm 2:4aa16ca14915 222 BM1383AGLV_status_t BM1383AGLV_SetSoftReset ( BM1383AGLV_data_t myRSTB );
mcm 1:49d8e4da0b7c 223
mcm 1:49d8e4da0b7c 224 /** It gets the reset flag.
mcm 1:49d8e4da0b7c 225 */
mcm 2:4aa16ca14915 226 BM1383AGLV_status_t BM1383AGLV_GetSoftResetFlag ( BM1383AGLV_data_t* myRSTB );
mcm 1:49d8e4da0b7c 227
mcm 1:49d8e4da0b7c 228 /** It sets the mode control.
mcm 1:49d8e4da0b7c 229 */
mcm 2:4aa16ca14915 230 BM1383AGLV_status_t BM1383AGLV_SetModeControl ( BM1383AGLV_data_t myModeCont );
mcm 1:49d8e4da0b7c 231
mcm 1:49d8e4da0b7c 232 /** It gets the mode control.
mcm 1:49d8e4da0b7c 233 */
mcm 2:4aa16ca14915 234 BM1383AGLV_status_t BM1383AGLV_GetModeControl ( BM1383AGLV_data_t* myModeCont );
mcm 1:49d8e4da0b7c 235
mcm 1:49d8e4da0b7c 236 /** It gets the status flag.
mcm 1:49d8e4da0b7c 237 */
mcm 2:4aa16ca14915 238 BM1383AGLV_status_t BM1383AGLV_GetStatus ( BM1383AGLV_data_t* myRD_DRDY );
mcm 1:49d8e4da0b7c 239
mcm 1:49d8e4da0b7c 240 /** It gets the raw pressure.
mcm 1:49d8e4da0b7c 241 */
mcm 2:4aa16ca14915 242 BM1383AGLV_status_t BM1383AGLV_GetRawPressure ( BM1383AGLV_data_t* myRawP );
mcm 1:49d8e4da0b7c 243
mcm 1:49d8e4da0b7c 244 /** It gets the raw temperature.
mcm 1:49d8e4da0b7c 245 */
mcm 2:4aa16ca14915 246 BM1383AGLV_status_t BM1383AGLV_GetRawTemperature ( BM1383AGLV_data_t* myRawT );
mcm 1:49d8e4da0b7c 247
mcm 1:49d8e4da0b7c 248 /** It gets the pressure.
mcm 1:49d8e4da0b7c 249 */
mcm 2:4aa16ca14915 250 BM1383AGLV_status_t BM1383AGLV_GetPressure ( BM1383AGLV_data_t* myP );
mcm 1:49d8e4da0b7c 251
mcm 1:49d8e4da0b7c 252 /** It gets the temperature.
mcm 1:49d8e4da0b7c 253 */
mcm 2:4aa16ca14915 254 BM1383AGLV_status_t BM1383AGLV_GetTemperature ( BM1383AGLV_data_t* myT );
mcm 1:49d8e4da0b7c 255
mcm 1:49d8e4da0b7c 256
mcm 1:49d8e4da0b7c 257
mcm 1:49d8e4da0b7c 258 private:
mcm 1:49d8e4da0b7c 259 I2C _i2c;
mcm 1:49d8e4da0b7c 260 uint32_t _BM1383AGLV_Addr;
mcm 1:49d8e4da0b7c 261 };
mcm 1:49d8e4da0b7c 262
mcm 1:49d8e4da0b7c 263 #endif