Optical Sensor for Heart Rate Monitor IC
BH1790GLC.h@3:11ba607ded8d, 2019-12-16 (annotated)
- Committer:
- mcm
- Date:
- Mon Dec 16 20:43:53 2019 +0000
- Revision:
- 3:11ba607ded8d
- Parent:
- 2:eb95a49c8a29
This driver was completed and tested ( NUCLEO-L476RG ), it works as expected.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mcm | 1:0eef8dbbf614 | 1 | /** |
mcm | 1:0eef8dbbf614 | 2 | * @brief BH1790GLC.h |
mcm | 1:0eef8dbbf614 | 3 | * @details Optical Sensor for Heart Rate Monitor IC. |
mcm | 1:0eef8dbbf614 | 4 | * Header file. |
mcm | 1:0eef8dbbf614 | 5 | * |
mcm | 1:0eef8dbbf614 | 6 | * |
mcm | 1:0eef8dbbf614 | 7 | * @return N/A |
mcm | 1:0eef8dbbf614 | 8 | * |
mcm | 1:0eef8dbbf614 | 9 | * @author Manuel Caballero |
mcm | 1:0eef8dbbf614 | 10 | * @date 07/December/2019 |
mcm | 1:0eef8dbbf614 | 11 | * @version 07/December/2019 The ORIGIN |
mcm | 1:0eef8dbbf614 | 12 | * @pre N/A. |
mcm | 1:0eef8dbbf614 | 13 | * @warning N/A |
mcm | 1:0eef8dbbf614 | 14 | * @pre This code belongs to AqueronteBlog ( http://unbarquero.blogspot.com ). |
mcm | 1:0eef8dbbf614 | 15 | */ |
mcm | 1:0eef8dbbf614 | 16 | #ifndef BH1790GLC_H |
mcm | 1:0eef8dbbf614 | 17 | #define BH1790GLC_H |
mcm | 1:0eef8dbbf614 | 18 | |
mcm | 1:0eef8dbbf614 | 19 | #include "mbed.h" |
mcm | 1:0eef8dbbf614 | 20 | |
mcm | 1:0eef8dbbf614 | 21 | |
mcm | 1:0eef8dbbf614 | 22 | /** |
mcm | 1:0eef8dbbf614 | 23 | Example: |
mcm | 1:0eef8dbbf614 | 24 | @code |
mcm | 3:11ba607ded8d | 25 | #include "mbed.h" |
mcm | 3:11ba607ded8d | 26 | #include "BH1790GLC.h" |
mcm | 1:0eef8dbbf614 | 27 | |
mcm | 3:11ba607ded8d | 28 | BH1790GLC myBH1790GLC ( I2C_SDA, I2C_SCL, BH1790GLC::BH1790GLC_ADDRESS, 400000 ); |
mcm | 3:11ba607ded8d | 29 | Serial pc ( USBTX, USBRX ); |
mcm | 3:11ba607ded8d | 30 | |
mcm | 3:11ba607ded8d | 31 | DigitalOut myled ( LED1 ); |
mcm | 3:11ba607ded8d | 32 | Ticker newReading; |
mcm | 3:11ba607ded8d | 33 | |
mcm | 3:11ba607ded8d | 34 | |
mcm | 3:11ba607ded8d | 35 | //@brief Variables. |
mcm | 3:11ba607ded8d | 36 | uint32_t myState = 0; |
mcm | 3:11ba607ded8d | 37 | |
mcm | 3:11ba607ded8d | 38 | //@brief FUNCTION PROTOTYPES |
mcm | 3:11ba607ded8d | 39 | void changeDATA ( void ); |
mcm | 3:11ba607ded8d | 40 | |
mcm | 3:11ba607ded8d | 41 | |
mcm | 3:11ba607ded8d | 42 | |
mcm | 3:11ba607ded8d | 43 | //@brief FUNCTION FOR APPLICATION MAIN ENTRY. |
mcm | 3:11ba607ded8d | 44 | int main() |
mcm | 3:11ba607ded8d | 45 | { |
mcm | 3:11ba607ded8d | 46 | BH1790GLC::BH1790GLC_data_t BH1790GLC_data; |
mcm | 3:11ba607ded8d | 47 | BH1790GLC::BH1790GLC_status_t aux; |
mcm | 3:11ba607ded8d | 48 | |
mcm | 3:11ba607ded8d | 49 | pc.baud ( 115200 ); |
mcm | 3:11ba607ded8d | 50 | |
mcm | 3:11ba607ded8d | 51 | myled = 1; |
mcm | 3:11ba607ded8d | 52 | wait(3); |
mcm | 3:11ba607ded8d | 53 | myled = 0; |
mcm | 3:11ba607ded8d | 54 | |
mcm | 3:11ba607ded8d | 55 | // Get Manufacturer IDs |
mcm | 3:11ba607ded8d | 56 | aux = myBH1790GLC.BH1790GLC_GetManufacturerID ( &BH1790GLC_data ); |
mcm | 3:11ba607ded8d | 57 | |
mcm | 3:11ba607ded8d | 58 | // Get part IDs |
mcm | 3:11ba607ded8d | 59 | aux = myBH1790GLC.BH1790GLC_GetPartID ( &BH1790GLC_data ); |
mcm | 3:11ba607ded8d | 60 | pc.printf( "Manufacturer ID: %x (0xE0) | Part ID: %x (0x0D)\r\n", BH1790GLC_data.manufacturer_id, BH1790GLC_data.part_id ); |
mcm | 3:11ba607ded8d | 61 | |
mcm | 3:11ba607ded8d | 62 | |
mcm | 3:11ba607ded8d | 63 | // Performs a software reset |
mcm | 3:11ba607ded8d | 64 | aux = myBH1790GLC.BH1790GLC_SoftReset (); |
mcm | 3:11ba607ded8d | 65 | |
mcm | 3:11ba607ded8d | 66 | // Configure the system control setting |
mcm | 3:11ba607ded8d | 67 | BH1790GLC_data.rdy = BH1790GLC::MEAS_CONTROL1_RDY_OSC_BLOCK_ACTIVE; |
mcm | 3:11ba607ded8d | 68 | BH1790GLC_data.led_lighting_freq = BH1790GLC::MEAS_CONTROL1_LED_LIGHTING_FREQ_64HZ_MODE; |
mcm | 3:11ba607ded8d | 69 | BH1790GLC_data.rcycle = BH1790GLC::MEAS_CONTROL1_RCYCLE_32HZ_MODE; |
mcm | 3:11ba607ded8d | 70 | |
mcm | 3:11ba607ded8d | 71 | // Configure the measurement control setting |
mcm | 3:11ba607ded8d | 72 | BH1790GLC_data.led_en = BH1790GLC::MEAS_CONTROL2_LED_EN_0; |
mcm | 3:11ba607ded8d | 73 | BH1790GLC_data.led_on_time = BH1790GLC::MEAS_CONTROL2_LED_ON_TIME_0_6_MS_MODE; |
mcm | 3:11ba607ded8d | 74 | BH1790GLC_data.led_current = BH1790GLC::MEAS_CONTROL2_LED_CURRENT_1_MA_MODE; |
mcm | 3:11ba607ded8d | 75 | |
mcm | 3:11ba607ded8d | 76 | // Start measurement |
mcm | 3:11ba607ded8d | 77 | aux = myBH1790GLC.BH1790GLC_StartMeasurement ( BH1790GLC_data ); |
mcm | 3:11ba607ded8d | 78 | |
mcm | 3:11ba607ded8d | 79 | newReading.attach( &changeDATA, 1 ); // the address of the function to be attached ( changeDATA ) and the interval ( 1s ) |
mcm | 3:11ba607ded8d | 80 | |
mcm | 3:11ba607ded8d | 81 | // Let the callbacks take care of everything |
mcm | 3:11ba607ded8d | 82 | while(1) { |
mcm | 3:11ba607ded8d | 83 | sleep(); |
mcm | 3:11ba607ded8d | 84 | |
mcm | 3:11ba607ded8d | 85 | myled = 1; |
mcm | 3:11ba607ded8d | 86 | |
mcm | 3:11ba607ded8d | 87 | if ( myState == 1 ) { |
mcm | 3:11ba607ded8d | 88 | // Get the raw DATAOUT values: DATAOUT_LEDOFF and DATAOUT_LEDON |
mcm | 3:11ba607ded8d | 89 | aux = myBH1790GLC.BH1790GLC_GetRawDataOut ( &BH1790GLC_data ); |
mcm | 3:11ba607ded8d | 90 | |
mcm | 3:11ba607ded8d | 91 | // Transmit result over the UART |
mcm | 3:11ba607ded8d | 92 | pc.printf( "LED OFF: %x | LED ON: %x\r\n", BH1790GLC_data.dataOut_LED_OFF, BH1790GLC_data.dataOut_LED_ON ); |
mcm | 3:11ba607ded8d | 93 | |
mcm | 3:11ba607ded8d | 94 | myState = 0; // Reset the variable |
mcm | 3:11ba607ded8d | 95 | } |
mcm | 3:11ba607ded8d | 96 | |
mcm | 3:11ba607ded8d | 97 | myled = 0; |
mcm | 3:11ba607ded8d | 98 | } |
mcm | 3:11ba607ded8d | 99 | } |
mcm | 3:11ba607ded8d | 100 | |
mcm | 3:11ba607ded8d | 101 | |
mcm | 3:11ba607ded8d | 102 | // @brief changeDATA ( void ) |
mcm | 3:11ba607ded8d | 103 | // |
mcm | 3:11ba607ded8d | 104 | // @details It changes myState variable |
mcm | 3:11ba607ded8d | 105 | // |
mcm | 3:11ba607ded8d | 106 | // @param[in] N/A |
mcm | 3:11ba607ded8d | 107 | // |
mcm | 3:11ba607ded8d | 108 | // @param[out] N/A. |
mcm | 3:11ba607ded8d | 109 | // |
mcm | 3:11ba607ded8d | 110 | // |
mcm | 3:11ba607ded8d | 111 | // @return N/A. |
mcm | 3:11ba607ded8d | 112 | // |
mcm | 3:11ba607ded8d | 113 | // |
mcm | 3:11ba607ded8d | 114 | // @author Manuel Caballero |
mcm | 3:11ba607ded8d | 115 | // @date 07/December/2019 |
mcm | 3:11ba607ded8d | 116 | // @version 07/December/2019 The ORIGIN |
mcm | 3:11ba607ded8d | 117 | // @pre N/A |
mcm | 3:11ba607ded8d | 118 | // @warning N/A. |
mcm | 3:11ba607ded8d | 119 | void changeDATA ( void ) |
mcm | 3:11ba607ded8d | 120 | { |
mcm | 3:11ba607ded8d | 121 | myState = 1; |
mcm | 3:11ba607ded8d | 122 | } |
mcm | 1:0eef8dbbf614 | 123 | @endcode |
mcm | 1:0eef8dbbf614 | 124 | */ |
mcm | 1:0eef8dbbf614 | 125 | |
mcm | 1:0eef8dbbf614 | 126 | |
mcm | 1:0eef8dbbf614 | 127 | /*! |
mcm | 1:0eef8dbbf614 | 128 | Library for the BH1790GLC Optical Sensor for Heart Rate Monitor IC. |
mcm | 1:0eef8dbbf614 | 129 | */ |
mcm | 1:0eef8dbbf614 | 130 | class BH1790GLC |
mcm | 1:0eef8dbbf614 | 131 | { |
mcm | 1:0eef8dbbf614 | 132 | public: |
mcm | 1:0eef8dbbf614 | 133 | /** |
mcm | 1:0eef8dbbf614 | 134 | * @brief DEFAULT ADDRESS |
mcm | 1:0eef8dbbf614 | 135 | */ |
mcm | 1:0eef8dbbf614 | 136 | typedef enum { |
mcm | 1:0eef8dbbf614 | 137 | BH1790GLC_ADDRESS = ( 0b1011011 << 1U ) /*!< ADDR */ |
mcm | 1:0eef8dbbf614 | 138 | } BH1790GLC_address_t; |
mcm | 1:0eef8dbbf614 | 139 | |
mcm | 1:0eef8dbbf614 | 140 | |
mcm | 1:0eef8dbbf614 | 141 | |
mcm | 1:0eef8dbbf614 | 142 | /** |
mcm | 1:0eef8dbbf614 | 143 | * @brief REGISTER MAP |
mcm | 1:0eef8dbbf614 | 144 | */ |
mcm | 1:0eef8dbbf614 | 145 | typedef enum { |
mcm | 1:0eef8dbbf614 | 146 | BH1790GLC_MANUFACTURER_ID = 0x0F, /*!< Manufacturer ID */ |
mcm | 1:0eef8dbbf614 | 147 | BH1790GLC_PART_ID = 0x10, /*!< Part ID */ |
mcm | 1:0eef8dbbf614 | 148 | BH1790GLC_RESET = 0x40, /*!< SWRESET */ |
mcm | 1:0eef8dbbf614 | 149 | BH1790GLC_MEAS_CONTROL1 = 0x41, /*!< Measurement setting Control */ |
mcm | 1:0eef8dbbf614 | 150 | BH1790GLC_MEAS_CONTROL2 = 0x42, /*!< Measurement setting Control */ |
mcm | 1:0eef8dbbf614 | 151 | BH1790GLC_MEAS_START = 0x43, /*!< Start Measurement */ |
mcm | 1:0eef8dbbf614 | 152 | BH1790GLC_DATAOUT_LEDOFF_LSB = 0x54, /*!< Measurement Data LSB (LED OFF) */ |
mcm | 1:0eef8dbbf614 | 153 | BH1790GLC_DATAOUT_LEDOFF_MSB = 0x55, /*!< Measurement Data MSB (LED OFF) */ |
mcm | 1:0eef8dbbf614 | 154 | BH1790GLC_DATAOUT_LEDON_LSB = 0x56, /*!< Measurement Data LSB (LED ON) */ |
mcm | 1:0eef8dbbf614 | 155 | BH1790GLC_DATAOUT_LEDON_MSB = 0x57 /*!< Measurement Data MSB (LED ON) */ |
mcm | 1:0eef8dbbf614 | 156 | } BH1790GLC_register_map_t; |
mcm | 1:0eef8dbbf614 | 157 | |
mcm | 1:0eef8dbbf614 | 158 | |
mcm | 1:0eef8dbbf614 | 159 | |
mcm | 1:0eef8dbbf614 | 160 | /** |
mcm | 1:0eef8dbbf614 | 161 | * @brief MANUFACTOR ID REGISTER |
mcm | 1:0eef8dbbf614 | 162 | */ |
mcm | 1:0eef8dbbf614 | 163 | typedef enum { |
mcm | 1:0eef8dbbf614 | 164 | MANUFACTOR_ID_MANUFACTURER_ID = 0xE0 /*!< Manufacturer ID */ |
mcm | 1:0eef8dbbf614 | 165 | } BH1790GLC_manufactor_id_manufacturer_id_t; |
mcm | 1:0eef8dbbf614 | 166 | |
mcm | 1:0eef8dbbf614 | 167 | |
mcm | 1:0eef8dbbf614 | 168 | /** |
mcm | 1:0eef8dbbf614 | 169 | * @brief PART ID REGISTER |
mcm | 1:0eef8dbbf614 | 170 | */ |
mcm | 1:0eef8dbbf614 | 171 | typedef enum { |
mcm | 1:0eef8dbbf614 | 172 | PART_ID_PART_ID = 0x0D /*!< Part ID */ |
mcm | 1:0eef8dbbf614 | 173 | } BH1790GLC_part_id_part_id_t; |
mcm | 1:0eef8dbbf614 | 174 | |
mcm | 1:0eef8dbbf614 | 175 | |
mcm | 1:0eef8dbbf614 | 176 | /** |
mcm | 1:0eef8dbbf614 | 177 | * @brief RESET REGISTER |
mcm | 1:0eef8dbbf614 | 178 | */ |
mcm | 1:0eef8dbbf614 | 179 | /* SWRESET <7> |
mcm | 1:0eef8dbbf614 | 180 | * NOTE: Software reset. |
mcm | 1:0eef8dbbf614 | 181 | */ |
mcm | 1:0eef8dbbf614 | 182 | typedef enum { |
mcm | 1:0eef8dbbf614 | 183 | RESET_SWRESET_MASK = ( 1U << 7U ), /*!< SWRESET mask */ |
mcm | 1:0eef8dbbf614 | 184 | RESET_SWRESET_ENABLED = ( 1U << 7U ), /*!< Software reset is performed */ |
mcm | 1:0eef8dbbf614 | 185 | RESET_SWRESET_DISABLED = ( 0U << 7U ) /*!< Software reset is completed */ |
mcm | 1:0eef8dbbf614 | 186 | } BH1790GLC_reset_swreset_t; |
mcm | 1:0eef8dbbf614 | 187 | |
mcm | 1:0eef8dbbf614 | 188 | |
mcm | 1:0eef8dbbf614 | 189 | /** |
mcm | 1:0eef8dbbf614 | 190 | * @brief MEAS_CONTROL1 REGISTER |
mcm | 1:0eef8dbbf614 | 191 | * |
mcm | 1:0eef8dbbf614 | 192 | */ |
mcm | 1:0eef8dbbf614 | 193 | /* RDY <7> |
mcm | 1:0eef8dbbf614 | 194 | * NOTE: OSC block. |
mcm | 1:0eef8dbbf614 | 195 | */ |
mcm | 1:0eef8dbbf614 | 196 | typedef enum { |
mcm | 1:0eef8dbbf614 | 197 | MEAS_CONTROL1_RDY_MASK = ( 1U << 7U ), /*!< RDY mask */ |
mcm | 1:0eef8dbbf614 | 198 | MEAS_CONTROL1_RDY_PROHIBITED = ( 0U << 7U ), /*!< Prohibited */ |
mcm | 1:0eef8dbbf614 | 199 | MEAS_CONTROL1_RDY_OSC_BLOCK_ACTIVE = ( 1U << 7U ) /*!< OSC block clock to internal block */ |
mcm | 1:0eef8dbbf614 | 200 | } BH1790GLC_meas_control1_rdy_t; |
mcm | 1:0eef8dbbf614 | 201 | |
mcm | 1:0eef8dbbf614 | 202 | |
mcm | 1:0eef8dbbf614 | 203 | /* LED_LIGHTING_FREQ <2> |
mcm | 1:0eef8dbbf614 | 204 | * NOTE: Select LED emitting frequency. |
mcm | 1:0eef8dbbf614 | 205 | */ |
mcm | 1:0eef8dbbf614 | 206 | typedef enum { |
mcm | 1:0eef8dbbf614 | 207 | MEAS_CONTROL1_LED_LIGHTING_FREQ_MASK = ( 1U << 2U ), /*!< LED_LIGHTLING_FREQ mask */ |
mcm | 1:0eef8dbbf614 | 208 | MEAS_CONTROL1_LED_LIGHTING_FREQ_128HZ_MODE = ( 0U << 2U ), /*!< 128Hz Mode */ |
mcm | 1:0eef8dbbf614 | 209 | MEAS_CONTROL1_LED_LIGHTING_FREQ_64HZ_MODE = ( 1U << 2U ) /*!< 64Hz Mode */ |
mcm | 1:0eef8dbbf614 | 210 | } BH1790GLC_meas_control1_led_lighting_freq_t; |
mcm | 1:0eef8dbbf614 | 211 | |
mcm | 1:0eef8dbbf614 | 212 | |
mcm | 1:0eef8dbbf614 | 213 | /* RCYCLE <1:0> |
mcm | 1:0eef8dbbf614 | 214 | * NOTE: Select Data reading frequency. |
mcm | 1:0eef8dbbf614 | 215 | */ |
mcm | 1:0eef8dbbf614 | 216 | typedef enum { |
mcm | 1:0eef8dbbf614 | 217 | MEAS_CONTROL1_RCYCLE_MASK = ( 0b11 << 0U ), /*!< RCYCLE mask */ |
mcm | 1:0eef8dbbf614 | 218 | MEAS_CONTROL1_RCYCLE_64HZ_MODE = ( 0b01 << 0U ), /*!< 128Hz Mode */ |
mcm | 1:0eef8dbbf614 | 219 | MEAS_CONTROL1_RCYCLE_32HZ_MODE = ( 0b10 << 0U ) /*!< 64Hz Mode */ |
mcm | 1:0eef8dbbf614 | 220 | } BH1790GLC_meas_control1_rcycle_t; |
mcm | 1:0eef8dbbf614 | 221 | |
mcm | 1:0eef8dbbf614 | 222 | |
mcm | 1:0eef8dbbf614 | 223 | /** |
mcm | 1:0eef8dbbf614 | 224 | * @brief MEAS_CONTROL2 REGISTER |
mcm | 1:0eef8dbbf614 | 225 | * |
mcm | 1:0eef8dbbf614 | 226 | */ |
mcm | 1:0eef8dbbf614 | 227 | /* LED_EN <7:6> |
mcm | 1:0eef8dbbf614 | 228 | * NOTE: Select LED driver mode. |
mcm | 1:0eef8dbbf614 | 229 | */ |
mcm | 1:0eef8dbbf614 | 230 | typedef enum { |
mcm | 1:0eef8dbbf614 | 231 | MEAS_CONTROL2_LED_EN_MASK = ( 0b11 << 6U ), /*!< LED_EN mask */ |
mcm | 1:0eef8dbbf614 | 232 | MEAS_CONTROL2_LED_EN_0 = ( 0b00 << 6U ), /*!< LED1 and LED2 pulsed light emit */ |
mcm | 1:0eef8dbbf614 | 233 | MEAS_CONTROL2_LED_EN_1 = ( 0b01 << 6U ), /*!< LED1 constant light LED2 pulsed light emit*/ |
mcm | 1:0eef8dbbf614 | 234 | MEAS_CONTROL2_LED_EN_2 = ( 0b10 << 6U ), /*!< LED1 pulsed light emit LED2 constant light*/ |
mcm | 1:0eef8dbbf614 | 235 | MEAS_CONTROL2_LED_EN_3 = ( 0b11 << 6U ) /*!< LED1 and LED2 constant light */ |
mcm | 1:0eef8dbbf614 | 236 | } BH1790GLC_meas_control2_led_en_t; |
mcm | 1:0eef8dbbf614 | 237 | |
mcm | 1:0eef8dbbf614 | 238 | |
mcm | 1:0eef8dbbf614 | 239 | /* LED_ON_TIME <5> |
mcm | 1:0eef8dbbf614 | 240 | * NOTE: Select LED emitting time. |
mcm | 1:0eef8dbbf614 | 241 | */ |
mcm | 1:0eef8dbbf614 | 242 | typedef enum { |
mcm | 1:0eef8dbbf614 | 243 | MEAS_CONTROL2_LED_ON_TIME_MASK = ( 1U << 5U ), /*!< LED_ON_TIME mask */ |
mcm | 1:0eef8dbbf614 | 244 | MEAS_CONTROL2_LED_ON_TIME_0_3_MS_MODE = ( 0U << 5U ), /*!< 0.3ms Mode */ |
mcm | 1:0eef8dbbf614 | 245 | MEAS_CONTROL2_LED_ON_TIME_0_6_MS_MODE = ( 1U << 5U ) /*!< 0.6ms Mode */ |
mcm | 1:0eef8dbbf614 | 246 | } BH1790GLC_meas_control2_led_on_time_t; |
mcm | 1:0eef8dbbf614 | 247 | |
mcm | 1:0eef8dbbf614 | 248 | |
mcm | 1:0eef8dbbf614 | 249 | /* LED_CURRENT <3:0> |
mcm | 1:0eef8dbbf614 | 250 | * NOTE: Select LED lighting current. |
mcm | 1:0eef8dbbf614 | 251 | */ |
mcm | 1:0eef8dbbf614 | 252 | typedef enum { |
mcm | 1:0eef8dbbf614 | 253 | MEAS_CONTROL2_LED_CURRENT_MASK = ( 0b1111 << 0U ), /*!< LED_CURRENT mask */ |
mcm | 1:0eef8dbbf614 | 254 | MEAS_CONTROL2_LED_CURRENT_0_MA_MODE = ( 0x0 << 0U ), /*!< 0mA Mode */ |
mcm | 1:0eef8dbbf614 | 255 | MEAS_CONTROL2_LED_CURRENT_1_MA_MODE = ( 0x8 << 0U ), /*!< 1mA Mode */ |
mcm | 1:0eef8dbbf614 | 256 | MEAS_CONTROL2_LED_CURRENT_2_MA_MODE = ( 0x9 << 0U ), /*!< 2mA Mode */ |
mcm | 1:0eef8dbbf614 | 257 | MEAS_CONTROL2_LED_CURRENT_3_MA_MODE = ( 0xA << 0U ), /*!< 3mA Mode */ |
mcm | 1:0eef8dbbf614 | 258 | MEAS_CONTROL2_LED_CURRENT_6_MA_MODE = ( 0xB << 0U ), /*!< 6mA Mode */ |
mcm | 1:0eef8dbbf614 | 259 | MEAS_CONTROL2_LED_CURRENT_10_MA_MODE = ( 0xC << 0U ), /*!< 10mA Mode */ |
mcm | 1:0eef8dbbf614 | 260 | MEAS_CONTROL2_LED_CURRENT_20_MA_MODE = ( 0xD << 0U ), /*!< 20mA Mode */ |
mcm | 1:0eef8dbbf614 | 261 | MEAS_CONTROL2_LED_CURRENT_30_MA_MODE = ( 0xE << 0U ), /*!< 30mA Mode */ |
mcm | 1:0eef8dbbf614 | 262 | MEAS_CONTROL2_LED_CURRENT_60_MA_MODE = ( 0xF << 0U ) /*!< 60mA Mode */ |
mcm | 1:0eef8dbbf614 | 263 | } BH1790GLC_meas_control2_led_current_t; |
mcm | 1:0eef8dbbf614 | 264 | |
mcm | 1:0eef8dbbf614 | 265 | |
mcm | 1:0eef8dbbf614 | 266 | /** |
mcm | 1:0eef8dbbf614 | 267 | * @brief MEAS_START REGISTER |
mcm | 1:0eef8dbbf614 | 268 | * |
mcm | 1:0eef8dbbf614 | 269 | */ |
mcm | 1:0eef8dbbf614 | 270 | /* LED_EN <0> |
mcm | 1:0eef8dbbf614 | 271 | * NOTE: Flag of start measurement. Start measurement by writing 'MEAS_ST=1' after writing 'RDY=1'. Measurement doesn�t restart if writing |
mcm | 1:0eef8dbbf614 | 272 | * 'MEAS_ST=1' after start measurement. When stop measurement, write 'SWRESET=1' without writing 'MEAS_ST=0'. |
mcm | 1:0eef8dbbf614 | 273 | */ |
mcm | 1:0eef8dbbf614 | 274 | typedef enum { |
mcm | 1:0eef8dbbf614 | 275 | MEAS_START_MEAS_ST_MASK = ( 1U << 0U ), /*!< MEAS_ST mask */ |
mcm | 1:0eef8dbbf614 | 276 | MEAS_START_MEAS_ST_MEASUREMENT_START = ( 1U << 0U ) /*!< Measurement start */ |
mcm | 1:0eef8dbbf614 | 277 | } BH1790GLC_meas_start_meas_st_t; |
mcm | 1:0eef8dbbf614 | 278 | |
mcm | 1:0eef8dbbf614 | 279 | |
mcm | 1:0eef8dbbf614 | 280 | |
mcm | 1:0eef8dbbf614 | 281 | #ifndef BH1790GLC_VECTOR_STRUCT_H |
mcm | 1:0eef8dbbf614 | 282 | #define BH1790GLC_VECTOR_STRUCT_H |
mcm | 1:0eef8dbbf614 | 283 | typedef struct { |
mcm | 1:0eef8dbbf614 | 284 | /* Raw dataout */ |
mcm | 1:0eef8dbbf614 | 285 | uint16_t dataOut_LED_OFF; /*!< Green Data Count Value when LED no emitting */ |
mcm | 1:0eef8dbbf614 | 286 | uint16_t dataOut_LED_ON; /*!< Green Data Count Value when LED emitting */ |
mcm | 1:0eef8dbbf614 | 287 | |
mcm | 1:0eef8dbbf614 | 288 | /* System control setting */ |
mcm | 1:0eef8dbbf614 | 289 | BH1790GLC_meas_control1_rdy_t rdy; /*!< OSC block is supply clock to internal block */ |
mcm | 1:0eef8dbbf614 | 290 | BH1790GLC_meas_control1_led_lighting_freq_t led_lighting_freq; /*!< Select LED emitting frequency */ |
mcm | 1:0eef8dbbf614 | 291 | BH1790GLC_meas_control1_rcycle_t rcycle; /*!< Select Measurement time */ |
mcm | 1:0eef8dbbf614 | 292 | |
mcm | 1:0eef8dbbf614 | 293 | /* Measurement control setting */ |
mcm | 1:0eef8dbbf614 | 294 | BH1790GLC_meas_control2_led_en_t led_en; /*!< Select LED driver mode */ |
mcm | 1:0eef8dbbf614 | 295 | BH1790GLC_meas_control2_led_on_time_t led_on_time; /*!< Select LED emitting time */ |
mcm | 1:0eef8dbbf614 | 296 | BH1790GLC_meas_control2_led_current_t led_current; /*!< Select LED driver current */ |
mcm | 1:0eef8dbbf614 | 297 | |
mcm | 1:0eef8dbbf614 | 298 | /* Device identifications */ |
mcm | 1:0eef8dbbf614 | 299 | uint8_t manufacturer_id; /*!< Manufacturer ID */ |
mcm | 2:eb95a49c8a29 | 300 | uint8_t part_id; /*!< Part ID */ |
mcm | 1:0eef8dbbf614 | 301 | } BH1790GLC_data_t; |
mcm | 1:0eef8dbbf614 | 302 | #endif |
mcm | 1:0eef8dbbf614 | 303 | |
mcm | 1:0eef8dbbf614 | 304 | |
mcm | 1:0eef8dbbf614 | 305 | /** |
mcm | 1:0eef8dbbf614 | 306 | * @brief INTERNAL CONSTANTS |
mcm | 1:0eef8dbbf614 | 307 | */ |
mcm | 3:11ba607ded8d | 308 | typedef enum { |
mcm | 3:11ba607ded8d | 309 | BH1790GLC_SUCCESS = 0U, /*!< I2C communication success */ |
mcm | 3:11ba607ded8d | 310 | BH1790GLC_FAILURE = 1U, /*!< I2C communication failure */ |
mcm | 3:11ba607ded8d | 311 | I2C_SUCCESS = 0U /*!< I2C communication was fine */ |
mcm | 3:11ba607ded8d | 312 | } BH1790GLC_status_t; |
mcm | 1:0eef8dbbf614 | 313 | |
mcm | 1:0eef8dbbf614 | 314 | |
mcm | 1:0eef8dbbf614 | 315 | |
mcm | 1:0eef8dbbf614 | 316 | |
mcm | 3:11ba607ded8d | 317 | /** Create an BH1790GLC object connected to the specified I2C pins. |
mcm | 3:11ba607ded8d | 318 | * |
mcm | 3:11ba607ded8d | 319 | * @param sda I2C data pin |
mcm | 3:11ba607ded8d | 320 | * @param scl I2C clock pin |
mcm | 3:11ba607ded8d | 321 | * @param addr I2C slave address |
mcm | 3:11ba607ded8d | 322 | * @param freq I2C frequency |
mcm | 3:11ba607ded8d | 323 | */ |
mcm | 3:11ba607ded8d | 324 | BH1790GLC ( PinName sda, PinName scl, uint32_t addr, uint32_t freq ); |
mcm | 1:0eef8dbbf614 | 325 | |
mcm | 3:11ba607ded8d | 326 | /** Delete BH1790GLC object. |
mcm | 3:11ba607ded8d | 327 | */ |
mcm | 3:11ba607ded8d | 328 | ~BH1790GLC(); |
mcm | 1:0eef8dbbf614 | 329 | |
mcm | 3:11ba607ded8d | 330 | /** It gets the manufacturer ID. |
mcm | 3:11ba607ded8d | 331 | */ |
mcm | 3:11ba607ded8d | 332 | BH1790GLC_status_t BH1790GLC_GetManufacturerID ( BH1790GLC_data_t* myManufacturerID ); |
mcm | 1:0eef8dbbf614 | 333 | |
mcm | 3:11ba607ded8d | 334 | /** It gets the part ID. |
mcm | 3:11ba607ded8d | 335 | */ |
mcm | 3:11ba607ded8d | 336 | BH1790GLC_status_t BH1790GLC_GetPartID ( BH1790GLC_data_t* myPartID ); |
mcm | 1:0eef8dbbf614 | 337 | |
mcm | 3:11ba607ded8d | 338 | /** It performs a soft reset. |
mcm | 3:11ba607ded8d | 339 | */ |
mcm | 3:11ba607ded8d | 340 | BH1790GLC_status_t BH1790GLC_SoftReset ( void ); |
mcm | 1:0eef8dbbf614 | 341 | |
mcm | 3:11ba607ded8d | 342 | /** It triggers a new measurement sample. |
mcm | 3:11ba607ded8d | 343 | */ |
mcm | 3:11ba607ded8d | 344 | BH1790GLC_status_t BH1790GLC_StartMeasurement ( BH1790GLC_data_t myConfData ); |
mcm | 1:0eef8dbbf614 | 345 | |
mcm | 3:11ba607ded8d | 346 | /** It gets the DATAOUT ( DATAOUT_LEDOFF and DATAOUT_LEDON data ). Raw data value. |
mcm | 3:11ba607ded8d | 347 | */ |
mcm | 3:11ba607ded8d | 348 | BH1790GLC_status_t BH1790GLC_GetRawDataOut ( BH1790GLC_data_t* myRawDataOut ); |
mcm | 1:0eef8dbbf614 | 349 | |
mcm | 1:0eef8dbbf614 | 350 | |
mcm | 3:11ba607ded8d | 351 | private: |
mcm | 3:11ba607ded8d | 352 | I2C _i2c; |
mcm | 3:11ba607ded8d | 353 | uint32_t _BH1790GLC_Addr; |
mcm | 3:11ba607ded8d | 354 | }; |
mcm | 1:0eef8dbbf614 | 355 | |
mcm | 1:0eef8dbbf614 | 356 | #endif |