Optical Sensor for Heart Rate Monitor IC

Committer:
mcm
Date:
Thu Sep 16 14:25:08 2021 +0000
Revision:
4:55075fea807c
Parent:
3:11ba607ded8d
The data must be shifted! This bug was fixed for BH1790GLC_GetRawDataOut function.

Who changed what in which revision?

UserRevisionLine numberNew 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