class to readout the VEML7700 light sensor via i2c

Dependents:   veml7700_tst

Committer:
wbeaumont
Date:
Tue Sep 10 11:11:19 2019 +0000
Revision:
0:e71d3ecdd257
Child:
1:d6eb62dc0a1e
initial version for the VEML7700 light detector.  Basic methods implemented, tested with  FRDM-KL057

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wbeaumont 0:e71d3ecdd257 1 #include "getVersion.h"
wbeaumont 0:e71d3ecdd257 2 #include "dev_interface_def.h"
wbeaumont 0:e71d3ecdd257 3 #include "I2CInterface.h"
wbeaumont 0:e71d3ecdd257 4
wbeaumont 0:e71d3ecdd257 5 /**
wbeaumont 0:e71d3ecdd257 6 * veml7700.h
wbeaumont 0:e71d3ecdd257 7 * This is a C++ class header to read the veml7700 lux sensor
wbeaumont 0:e71d3ecdd257 8 * via the I2C interface
wbeaumont 0:e71d3ecdd257 9 *
wbeaumont 0:e71d3ecdd257 10 * version history
wbeaumont 0:e71d3ecdd257 11 * version 0.20 : initial value not tested with the sensor
wbeaumont 0:e71d3ecdd257 12 * version 0.21 : just change the name from VEML770 VEML7700
wbeaumont 0:e71d3ecdd257 13 * version 0.30 : start with error reporting
wbeaumont 0:e71d3ecdd257 14 * version 0.42 : more methodes
wbeaumont 0:e71d3ecdd257 15 * This file make part of the PeriperalDevice package see repository
wbeaumont 0:e71d3ecdd257 16 * https://github.com/wimbeaumont/PeripheralDevices
wbeaumont 0:e71d3ecdd257 17 *
wbeaumont 0:e71d3ecdd257 18 * (C) Wim Beaumont Universiteit Antwerpen 2015 2019
wbeaumont 0:e71d3ecdd257 19 * License see
wbeaumont 0:e71d3ecdd257 20 * https://github.com/wimbeaumont/PeripheralDevices/blob/master/LICENSE
wbeaumont 0:e71d3ecdd257 21 *
wbeaumont 0:e71d3ecdd257 22 **/
wbeaumont 0:e71d3ecdd257 23
wbeaumont 0:e71d3ecdd257 24 #define VERSION_VEML7700_HDR "0.42"
wbeaumont 0:e71d3ecdd257 25
wbeaumont 0:e71d3ecdd257 26
wbeaumont 0:e71d3ecdd257 27 class VEML7700 : public virtual getVersion {
wbeaumont 0:e71d3ecdd257 28
wbeaumont 0:e71d3ecdd257 29 private :
wbeaumont 0:e71d3ecdd257 30 // registers
wbeaumont 0:e71d3ecdd257 31 int gain_nr; // array index of the last set gain .
wbeaumont 0:e71d3ecdd257 32 int IntTnr ; //array index of the last set integration time
wbeaumont 0:e71d3ecdd257 33 I2CInterface* i2cdev;
wbeaumont 0:e71d3ecdd257 34
wbeaumont 0:e71d3ecdd257 35 // a read command to the device
wbeaumont 0:e71d3ecdd257 36 u16 read_cmd ( u8 reg);
wbeaumont 0:e71d3ecdd257 37 // a write command to the device
wbeaumont 0:e71d3ecdd257 38 void write_cmd( u8 reg , u16 value );
wbeaumont 0:e71d3ecdd257 39
wbeaumont 0:e71d3ecdd257 40
wbeaumont 0:e71d3ecdd257 41 // reg the word that has to change
wbeaumont 0:e71d3ecdd257 42 // value the value that has to be set into reg
wbeaumont 0:e71d3ecdd257 43 // lsb , the position of the lsb in the reg word
wbeaumont 0:e71d3ecdd257 44 // bsize the size in bits of the value to be set
wbeaumont 0:e71d3ecdd257 45 void set_bits_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize );
wbeaumont 0:e71d3ecdd257 46
wbeaumont 0:e71d3ecdd257 47 // write value to the reg value in the correct place ( calls set_bits_reg )
wbeaumont 0:e71d3ecdd257 48 u16 set_bits(u16 regvalue, u16 value, u16 lsb ,u16 bsize );
wbeaumont 0:e71d3ecdd257 49
wbeaumont 0:e71d3ecdd257 50
wbeaumont 0:e71d3ecdd257 51 public :
wbeaumont 0:e71d3ecdd257 52
wbeaumont 0:e71d3ecdd257 53 VEML7700(I2CInterface* i2cinterfaceint , bool init =true );
wbeaumont 0:e71d3ecdd257 54
wbeaumont 0:e71d3ecdd257 55 // returns 0 if no error reported
wbeaumont 0:e71d3ecdd257 56 // -10 for communication error
wbeaumont 0:e71d3ecdd257 57 int get_status(void) ;
wbeaumont 0:e71d3ecdd257 58
wbeaumont 0:e71d3ecdd257 59 // set interrupt enable
wbeaumont 0:e71d3ecdd257 60 void set_int_enable( bool int_enable);
wbeaumont 0:e71d3ecdd257 61
wbeaumont 0:e71d3ecdd257 62 // write the gain bits to reg 0
wbeaumont 0:e71d3ecdd257 63 void set_gain_bits( u16 gbits ) ;
wbeaumont 0:e71d3ecdd257 64 // write the integration time bits to reg 0
wbeaumont 0:e71d3ecdd257 65 void set_IntT_bits( u16 InTgbits );
wbeaumont 0:e71d3ecdd257 66
wbeaumont 0:e71d3ecdd257 67 // set the bits for the ALS config register (0) in one write cycle
wbeaumont 0:e71d3ecdd257 68 void set_default_als_config ( bool shutdown=false , bool int_enable=false ,u16 pres=0, u16 integationtime=0, u16 gain =1 );
wbeaumont 0:e71d3ecdd257 69
wbeaumont 0:e71d3ecdd257 70 void shutdown( bool enable) ;// if true set shutdown mode
wbeaumont 0:e71d3ecdd257 71
wbeaumont 0:e71d3ecdd257 72 void set_power_saving_enable( bool ps_enable);
wbeaumont 0:e71d3ecdd257 73
wbeaumont 0:e71d3ecdd257 74 void set_power_saving_mode( u16 psmode);
wbeaumont 0:e71d3ecdd257 75
wbeaumont 0:e71d3ecdd257 76 // set the bits for the power mode config register (0) in one write cycle
wbeaumont 0:e71d3ecdd257 77 void set_default_powermode ( bool ps_enable=false , u16 psmode=0);
wbeaumont 0:e71d3ecdd257 78
wbeaumont 0:e71d3ecdd257 79 void setHighWarningLevel( int lvl);
wbeaumont 0:e71d3ecdd257 80 void setLowWarningLevel( int lvl);
wbeaumont 0:e71d3ecdd257 81
wbeaumont 0:e71d3ecdd257 82 bool LowThresoldExeed(void) ;
wbeaumont 0:e71d3ecdd257 83 bool HighThresoldExeed(void) ;
wbeaumont 0:e71d3ecdd257 84
wbeaumont 0:e71d3ecdd257 85 void set_gain( float gain );
wbeaumont 0:e71d3ecdd257 86 void set_integrationtime( int time_ms );
wbeaumont 0:e71d3ecdd257 87
wbeaumont 0:e71d3ecdd257 88 // return convert the value readed from the als register, taking in acount the gain and integration factor in to lux
wbeaumont 0:e71d3ecdd257 89 float get_lux_als(void) { return 0;}
wbeaumont 0:e71d3ecdd257 90
wbeaumont 0:e71d3ecdd257 91 float get_lux_white(void) { return 0;}
wbeaumont 0:e71d3ecdd257 92 // these could be private but could be useful for debugging
wbeaumont 0:e71d3ecdd257 93
wbeaumont 0:e71d3ecdd257 94 // get the gain bits depending on the value of gainsel, setgain <= gainsel
wbeaumont 0:e71d3ecdd257 95 // so 0 -> .125 , .126 -> .25 , 4 -> 2 1.1 -> 2
wbeaumont 0:e71d3ecdd257 96 u16 get_gain_in_set_bit (float gainsel );
wbeaumont 0:e71d3ecdd257 97 u16 get_IntT_in_set_bit( int time_ms);
wbeaumont 0:e71d3ecdd257 98 u16 get_als_bits(void);
wbeaumont 0:e71d3ecdd257 99 u16 get_white_ch_bits(void);
wbeaumont 0:e71d3ecdd257 100 u16 get_reg( u8 reg) { return read_cmd ( reg); }
wbeaumont 0:e71d3ecdd257 101 u16 get_bits(u16 regvalue, u16 lsb ,u16 bsize );
wbeaumont 0:e71d3ecdd257 102 void set_bits_in_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ) { set_bits_reg ( reg , value, lsb ,bsize ) ;}
wbeaumont 0:e71d3ecdd257 103
wbeaumont 0:e71d3ecdd257 104 float decodeGainBits( u16 gb) ;
wbeaumont 0:e71d3ecdd257 105 int decodeIntTbits( u16 ib ) ;
wbeaumont 0:e71d3ecdd257 106 void decode_Reg0( bool& sd ,bool& ie, u16& pers_protect,int& IntT, float& gain ) ;
wbeaumont 0:e71d3ecdd257 107
wbeaumont 0:e71d3ecdd257 108 }; //end class
wbeaumont 0:e71d3ecdd257 109
wbeaumont 0:e71d3ecdd257 110
wbeaumont 0:e71d3ecdd257 111
wbeaumont 0:e71d3ecdd257 112