class to readout the VEML7700 light sensor via i2c
Diff: veml7700.h
- Revision:
- 0:e71d3ecdd257
- Child:
- 1:d6eb62dc0a1e
diff -r 000000000000 -r e71d3ecdd257 veml7700.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/veml7700.h Tue Sep 10 11:11:19 2019 +0000 @@ -0,0 +1,112 @@ +#include "getVersion.h" +#include "dev_interface_def.h" +#include "I2CInterface.h" + +/** + * veml7700.h + * This is a C++ class header to read the veml7700 lux sensor + * via the I2C interface + * + * version history + * version 0.20 : initial value not tested with the sensor + * version 0.21 : just change the name from VEML770 VEML7700 + * version 0.30 : start with error reporting + * version 0.42 : more methodes + * This file make part of the PeriperalDevice package see repository + * https://github.com/wimbeaumont/PeripheralDevices + * + * (C) Wim Beaumont Universiteit Antwerpen 2015 2019 + * License see + * https://github.com/wimbeaumont/PeripheralDevices/blob/master/LICENSE + * + **/ + +#define VERSION_VEML7700_HDR "0.42" + + +class VEML7700 : public virtual getVersion { + +private : +// registers +int gain_nr; // array index of the last set gain . +int IntTnr ; //array index of the last set integration time +I2CInterface* i2cdev; + +// a read command to the device +u16 read_cmd ( u8 reg); +// a write command to the device +void write_cmd( u8 reg , u16 value ); + + +// reg the word that has to change +// value the value that has to be set into reg +// lsb , the position of the lsb in the reg word +// bsize the size in bits of the value to be set +void set_bits_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ); + +// write value to the reg value in the correct place ( calls set_bits_reg ) +u16 set_bits(u16 regvalue, u16 value, u16 lsb ,u16 bsize ); + + +public : + +VEML7700(I2CInterface* i2cinterfaceint , bool init =true ); + +// returns 0 if no error reported +// -10 for communication error +int get_status(void) ; + +// set interrupt enable +void set_int_enable( bool int_enable); + +// write the gain bits to reg 0 +void set_gain_bits( u16 gbits ) ; +// write the integration time bits to reg 0 +void set_IntT_bits( u16 InTgbits ); + +// set the bits for the ALS config register (0) in one write cycle +void set_default_als_config ( bool shutdown=false , bool int_enable=false ,u16 pres=0, u16 integationtime=0, u16 gain =1 ); + +void shutdown( bool enable) ;// if true set shutdown mode + +void set_power_saving_enable( bool ps_enable); + +void set_power_saving_mode( u16 psmode); + +// set the bits for the power mode config register (0) in one write cycle +void set_default_powermode ( bool ps_enable=false , u16 psmode=0); + +void setHighWarningLevel( int lvl); +void setLowWarningLevel( int lvl); + +bool LowThresoldExeed(void) ; +bool HighThresoldExeed(void) ; + +void set_gain( float gain ); +void set_integrationtime( int time_ms ); + +// return convert the value readed from the als register, taking in acount the gain and integration factor in to lux +float get_lux_als(void) { return 0;} + +float get_lux_white(void) { return 0;} +// these could be private but could be useful for debugging + +// get the gain bits depending on the value of gainsel, setgain <= gainsel +// so 0 -> .125 , .126 -> .25 , 4 -> 2 1.1 -> 2 +u16 get_gain_in_set_bit (float gainsel ); +u16 get_IntT_in_set_bit( int time_ms); +u16 get_als_bits(void); +u16 get_white_ch_bits(void); +u16 get_reg( u8 reg) { return read_cmd ( reg); } +u16 get_bits(u16 regvalue, u16 lsb ,u16 bsize ); +void set_bits_in_reg ( u8 reg , u16 value, u16 lsb ,u16 bsize ) { set_bits_reg ( reg , value, lsb ,bsize ) ;} + +float decodeGainBits( u16 gb) ; +int decodeIntTbits( u16 ib ) ; +void decode_Reg0( bool& sd ,bool& ie, u16& pers_protect,int& IntT, float& gain ) ; + +}; //end class + + + +