A Vishay library for devices VEML6040 R+G+B+W and VEML6075 UVA+UVB optical sensors. Data is stored in a dedicated data structure.

Dependents:   vmel60xx_hello_world

This device library is for use with the Vishay VEML6040 and VEML6075 optical sensors. Ambient light conditions are gathered and stored in a user accessible data structure veml60xx_struct. The library has enough intelligence to determine which device is connected and performs the appropriate functions.

The VEML6040 detects Red, Green, Blue and White light data, which is easily converted to relative Lux intensities.

The VEML6075 detects UVA and UVB light which is converted to a UV Index value.

Since both devices use the same I2C address, they cannot be on the same I2C bus at the same time.

Tested on a K64F

Committer:
loopsva
Date:
Fri Apr 29 16:40:06 2016 +0000
Revision:
4:0ce65ee5697f
Parent:
3:dda770fa7228
Added a delay variable in veml60xx_struct that is dependent on the IT bits and 6040 vs 6075
; Note: There is something screwy with the VEML6075 and FORCE mode, specially when dynamically changing the IT bits. It required much longer delays than...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 2:c17b84879a2f 1 // Vishay veml6040 R+G+B+W and veml6075 UVA+UVB optical sensors
loopsva 0:92cb496cbbe1 2
loopsva 0:92cb496cbbe1 3 #include "veml60xx.h"
loopsva 0:92cb496cbbe1 4
loopsva 0:92cb496cbbe1 5 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 6 // Constructor, to allow for user to select i2c frequency
loopsva 0:92cb496cbbe1 7
loopsva 0:92cb496cbbe1 8 veml60xx::veml60xx(PinName sda, PinName scl, int i2cFrequency) {
loopsva 0:92cb496cbbe1 9 _i2c_ = new I2C(sda, scl);
loopsva 0:92cb496cbbe1 10 _i2c_->frequency(i2cFrequency);
loopsva 0:92cb496cbbe1 11 }
loopsva 0:92cb496cbbe1 12
loopsva 0:92cb496cbbe1 13 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 14 // deconstructor
loopsva 0:92cb496cbbe1 15
loopsva 0:92cb496cbbe1 16 veml60xx::~veml60xx() {
loopsva 0:92cb496cbbe1 17 }
loopsva 0:92cb496cbbe1 18
loopsva 0:92cb496cbbe1 19 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 20 // Set/initialize the veml60xx config register.
loopsva 0:92cb496cbbe1 21
loopsva 0:92cb496cbbe1 22 void veml60xx::setConfig(veml60xx_struct& Pntr, uint16_t val) {
loopsva 0:92cb496cbbe1 23 vemlBuffer[0] = VEML60xx_CONF_REG;
loopsva 0:92cb496cbbe1 24 vemlBuffer[1] = val;
loopsva 0:92cb496cbbe1 25 vemlBuffer[2] = 0;
loopsva 0:92cb496cbbe1 26 _i2c_->write(VEML60_WADDR, vemlBuffer, 3, false);
loopsva 0:92cb496cbbe1 27 Pntr.conf_reg = (vemlBuffer[2] << 8) | vemlBuffer[1];
loopsva 0:92cb496cbbe1 28 }
loopsva 0:92cb496cbbe1 29
loopsva 0:92cb496cbbe1 30 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 31 // Get veml60xx ID register. Returns register value
loopsva 2:c17b84879a2f 32 // Note: the veml6040 does have a device ID, but is not in datasheet
loopsva 0:92cb496cbbe1 33
loopsva 0:92cb496cbbe1 34 uint16_t veml60xx::getID(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 35 vemlBuffer[0] = VEML6075_CHIP_ID_REG;
loopsva 0:92cb496cbbe1 36 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 37 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 2:c17b84879a2f 38 Pntr.id = (vemlBuffer[1] << 8) | vemlBuffer[0];
loopsva 2:c17b84879a2f 39
loopsva 4:0ce65ee5697f 40 if(((Pntr.id & 0xff) & VEML6075_DEVICE_ID) == VEML6075_DEVICE_ID) {
loopsva 0:92cb496cbbe1 41 Pntr.is6075 = true;
loopsva 0:92cb496cbbe1 42 Pntr.is6040 = false;
loopsva 0:92cb496cbbe1 43 } else
loopsva 4:0ce65ee5697f 44 if(((Pntr.id & 0xff) & VEML6040_DEVICE_ID) == VEML6040_DEVICE_ID) {
loopsva 0:92cb496cbbe1 45 Pntr.is6075 = false;
loopsva 0:92cb496cbbe1 46 Pntr.is6040 = true;
loopsva 0:92cb496cbbe1 47 } else {
loopsva 0:92cb496cbbe1 48 Pntr.is6075 = false;
loopsva 0:92cb496cbbe1 49 Pntr.is6040 = false;
loopsva 0:92cb496cbbe1 50 }
loopsva 2:c17b84879a2f 51 return(Pntr.id);
loopsva 0:92cb496cbbe1 52 }
loopsva 0:92cb496cbbe1 53
loopsva 0:92cb496cbbe1 54 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 55 // Get veml60xx config register. Returns register value
loopsva 0:92cb496cbbe1 56
loopsva 0:92cb496cbbe1 57 uint16_t veml60xx::getConfig(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 58 vemlBuffer[0] = VEML60xx_CONF_REG;
loopsva 0:92cb496cbbe1 59 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 60 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 61 uint16_t rdata = (vemlBuffer[1] << 8) | vemlBuffer[0];
loopsva 2:c17b84879a2f 62 Pntr.conf_reg = rdata;
loopsva 2:c17b84879a2f 63 uint16_t c = rdata & VEML60xx_CONF_BITS_IT;
loopsva 0:92cb496cbbe1 64 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 65 switch (c) {
loopsva 0:92cb496cbbe1 66 case VEML60xx_CONF_BITS_IT_50m40m:
loopsva 2:c17b84879a2f 67 Pntr.lux_step = VEML6040_LUX_STEP * 32.0;
loopsva 4:0ce65ee5697f 68 Pntr.trig_dly = 54;
loopsva 0:92cb496cbbe1 69 break;
loopsva 0:92cb496cbbe1 70 case VEML60xx_CONF_BITS_IT_100m80m:
loopsva 2:c17b84879a2f 71 Pntr.lux_step = VEML6040_LUX_STEP * 16.0;
loopsva 4:0ce65ee5697f 72 Pntr.trig_dly = 102;
loopsva 0:92cb496cbbe1 73 break;
loopsva 0:92cb496cbbe1 74 case VEML60xx_CONF_BITS_IT_200m160m:
loopsva 2:c17b84879a2f 75 Pntr.lux_step = VEML6040_LUX_STEP * 8.0;
loopsva 4:0ce65ee5697f 76 Pntr.trig_dly = 204;
loopsva 0:92cb496cbbe1 77 break;
loopsva 0:92cb496cbbe1 78 case VEML60xx_CONF_BITS_IT_400m320m:
loopsva 2:c17b84879a2f 79 Pntr.lux_step = VEML6040_LUX_STEP * 4.0;
loopsva 4:0ce65ee5697f 80 Pntr.trig_dly = 408;
loopsva 0:92cb496cbbe1 81 break;
loopsva 0:92cb496cbbe1 82 case VEML60xx_CONF_BITS_IT_800m640m:
loopsva 2:c17b84879a2f 83 Pntr.lux_step = VEML6040_LUX_STEP * 2.0;
loopsva 4:0ce65ee5697f 84 Pntr.trig_dly = 816;
loopsva 0:92cb496cbbe1 85 break;
loopsva 0:92cb496cbbe1 86 case VEML6040_CONF_BITS_IT_1280m:
loopsva 2:c17b84879a2f 87 Pntr.lux_step = VEML6040_LUX_STEP * 1.0;
loopsva 4:0ce65ee5697f 88 Pntr.trig_dly = 1400;
loopsva 0:92cb496cbbe1 89 break;
loopsva 0:92cb496cbbe1 90 default:
loopsva 0:92cb496cbbe1 91 Pntr.lux_step = 0.0;
loopsva 4:0ce65ee5697f 92 Pntr.trig_dly = 1400;
loopsva 0:92cb496cbbe1 93 break;
loopsva 0:92cb496cbbe1 94 }
loopsva 0:92cb496cbbe1 95 }
loopsva 2:c17b84879a2f 96 if(Pntr.is6075) {
loopsva 2:c17b84879a2f 97 switch (c) {
loopsva 2:c17b84879a2f 98 case VEML60xx_CONF_BITS_IT_50m40m:
loopsva 2:c17b84879a2f 99 Pntr.uva_step = VEML6075_UVA_RESP * 2.0;
loopsva 2:c17b84879a2f 100 Pntr.uvb_step = VEML6075_UVB_RESP * 2.0;
loopsva 4:0ce65ee5697f 101 Pntr.trig_dly = 80;
loopsva 2:c17b84879a2f 102 break;
loopsva 3:dda770fa7228 103 case VEML60xx_CONF_BITS_IT_100m80m:
loopsva 4:0ce65ee5697f 104 Pntr.uva_step = VEML6075_UVA_RESP * 1.0; //reference integration/dwell time (100mS) from app note
loopsva 3:dda770fa7228 105 Pntr.uvb_step = VEML6075_UVB_RESP * 1.0;
loopsva 4:0ce65ee5697f 106 Pntr.trig_dly = 320;
loopsva 3:dda770fa7228 107 break;
loopsva 3:dda770fa7228 108 case VEML60xx_CONF_BITS_IT_200m160m:
loopsva 3:dda770fa7228 109 Pntr.uva_step = VEML6075_UVA_RESP * 0.5;
loopsva 3:dda770fa7228 110 Pntr.uvb_step = VEML6075_UVB_RESP * 0.5;
loopsva 4:0ce65ee5697f 111 Pntr.trig_dly = 640;
loopsva 3:dda770fa7228 112 break;
loopsva 3:dda770fa7228 113 case VEML60xx_CONF_BITS_IT_400m320m:
loopsva 3:dda770fa7228 114 Pntr.uva_step = VEML6075_UVA_RESP * 0.25;
loopsva 3:dda770fa7228 115 Pntr.uvb_step = VEML6075_UVB_RESP * 0.25;
loopsva 4:0ce65ee5697f 116 Pntr.trig_dly = 1280;
loopsva 3:dda770fa7228 117 break;
loopsva 2:c17b84879a2f 118 case VEML60xx_CONF_BITS_IT_800m640m:
loopsva 3:dda770fa7228 119 Pntr.uva_step = VEML6075_UVA_RESP * 0.125;
loopsva 3:dda770fa7228 120 Pntr.uvb_step = VEML6075_UVB_RESP * 0.125;
loopsva 4:0ce65ee5697f 121 Pntr.trig_dly = 2000;
loopsva 2:c17b84879a2f 122 break;
loopsva 2:c17b84879a2f 123 default:
loopsva 2:c17b84879a2f 124 Pntr.uva_step = 0.0;
loopsva 2:c17b84879a2f 125 Pntr.uvb_step = 0.0;
loopsva 4:0ce65ee5697f 126 Pntr.trig_dly = 2000;
loopsva 2:c17b84879a2f 127 break;
loopsva 2:c17b84879a2f 128 }
loopsva 2:c17b84879a2f 129 }
loopsva 0:92cb496cbbe1 130 return(rdata);
loopsva 0:92cb496cbbe1 131 }
loopsva 0:92cb496cbbe1 132
loopsva 0:92cb496cbbe1 133 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 134 // If AF set to trigger mode, start a conversion process trigger
loopsva 0:92cb496cbbe1 135 // Returns: 0=trigger set, 1=already triggered, 2=no AF bit - cannot set trigger
loopsva 0:92cb496cbbe1 136
loopsva 0:92cb496cbbe1 137 uint16_t veml60xx::startAccess(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 138 uint16_t val = getConfig(Pntr);
loopsva 0:92cb496cbbe1 139 if((val & VEML60xx_CONF_BITS_AF) == VEML60xx_CONF_BITS_AF) {
loopsva 0:92cb496cbbe1 140 if((val & VEML60xx_CONF_BITS_TRIG) == VEML60xx_CONF_BITS_TRIG) return(1);
loopsva 0:92cb496cbbe1 141 val |= VEML60xx_CONF_BITS_TRIG;
loopsva 0:92cb496cbbe1 142 setConfig(Pntr, val);
loopsva 0:92cb496cbbe1 143 return(0);
loopsva 0:92cb496cbbe1 144 }
loopsva 0:92cb496cbbe1 145 return(2);
loopsva 0:92cb496cbbe1 146 }
loopsva 0:92cb496cbbe1 147
loopsva 0:92cb496cbbe1 148 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 149 // Get VEML60xx values. Saves raw data is data structure. Returns 0 if successful, !0 if status is (something else);
loopsva 0:92cb496cbbe1 150 // mode: false = VEML6075, true = VEML6040
loopsva 0:92cb496cbbe1 151
loopsva 0:92cb496cbbe1 152 uint16_t veml60xx::getRawData(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 153 Pntr.conf_reg = getConfig(Pntr);
loopsva 0:92cb496cbbe1 154 Pntr.id = getID(Pntr);
loopsva 0:92cb496cbbe1 155
loopsva 0:92cb496cbbe1 156 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 157 vemlBuffer[0] = VEML6075_UVA_DATA_REG;
loopsva 0:92cb496cbbe1 158 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 159 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 160 Pntr.uva_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 161 }
loopsva 0:92cb496cbbe1 162
loopsva 0:92cb496cbbe1 163 vemlBuffer[0] = VEML6075_DUMMY_REG;
loopsva 0:92cb496cbbe1 164 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 165 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 166 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 167 Pntr.dummy_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 168 } else
loopsva 0:92cb496cbbe1 169 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 170 Pntr.r_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 171 }
loopsva 0:92cb496cbbe1 172
loopsva 0:92cb496cbbe1 173 vemlBuffer[0] = VEML6075_UVB_DATA_REG;
loopsva 0:92cb496cbbe1 174 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 175 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 176 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 177 Pntr.uvb_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 178 } else
loopsva 0:92cb496cbbe1 179 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 180 Pntr.g_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 181 }
loopsva 0:92cb496cbbe1 182
loopsva 0:92cb496cbbe1 183 vemlBuffer[0] = VEML6075_UV_COMP1_REG;
loopsva 0:92cb496cbbe1 184 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 185 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 186 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 187 Pntr.uv_c1 = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 188 } else
loopsva 0:92cb496cbbe1 189 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 190 Pntr.b_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 191 }
loopsva 0:92cb496cbbe1 192
loopsva 0:92cb496cbbe1 193 vemlBuffer[0] = VEML6075_UV_COMP2_REG;
loopsva 0:92cb496cbbe1 194 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 195 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 196 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 197 Pntr.uv_c1 = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 198 } else
loopsva 0:92cb496cbbe1 199 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 200 Pntr.w_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 201 }
loopsva 0:92cb496cbbe1 202
loopsva 0:92cb496cbbe1 203 return(0);
loopsva 0:92cb496cbbe1 204 }
loopsva 0:92cb496cbbe1 205
loopsva 0:92cb496cbbe1 206 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 207 // Convert raw data into real UVA, UVB and UVI numbers
loopsva 0:92cb496cbbe1 208
loopsva 0:92cb496cbbe1 209 void veml60xx::convertRawData(veml60xx_struct& Pntr) {
loopsva 2:c17b84879a2f 210 if(Pntr.is6075) {
loopsva 2:c17b84879a2f 211 //Eq (1)
loopsva 2:c17b84879a2f 212 Pntr.uva_comp = (double)(Pntr.uva_d - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 213 VEML6075_UVA_COEF_A * (double)(Pntr.uv_c1 - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 214 VEML6075_UVA_COEF_B * (double)(Pntr.uv_c2 - Pntr.dummy_d);
loopsva 2:c17b84879a2f 215
loopsva 2:c17b84879a2f 216 //Eq (2)
loopsva 2:c17b84879a2f 217 Pntr.uvb_comp = (double)(Pntr.uvb_d - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 218 VEML6075_UVB_COEF_C * (double)(Pntr.uv_c1 - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 219 VEML6075_UVB_COEF_D * (double)(Pntr.uv_c2 - Pntr.dummy_d);
loopsva 2:c17b84879a2f 220 //Eq (3)
loopsva 2:c17b84879a2f 221 Pntr.uv_index = ((Pntr.uva_comp * Pntr.uva_step) + (Pntr.uvb_comp * Pntr.uvb_step))/2.0;
loopsva 2:c17b84879a2f 222
loopsva 2:c17b84879a2f 223 if(Pntr.uva_comp < 0.0) Pntr.uva_comp = 0.0;
loopsva 2:c17b84879a2f 224 if(Pntr.uvb_comp < 0.0) Pntr.uvb_comp = 0.0;
loopsva 2:c17b84879a2f 225 if(Pntr.uv_index < 0.0) Pntr.uv_index = 0.0;
loopsva 2:c17b84879a2f 226 }
loopsva 0:92cb496cbbe1 227
loopsva 2:c17b84879a2f 228 if(Pntr.is6040) {
loopsva 2:c17b84879a2f 229 Pntr.r_lux = (double)Pntr.r_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 230 Pntr.g_lux = (double)Pntr.g_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 231 Pntr.b_lux = (double)Pntr.b_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 232 Pntr.w_lux = (double)Pntr.w_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 233 }
loopsva 0:92cb496cbbe1 234 }
loopsva 0:92cb496cbbe1 235
loopsva 0:92cb496cbbe1 236
loopsva 0:92cb496cbbe1 237 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 238 // If there is a lux over/underflow, automatically adjust the CONF_BITS_IT by +-1 to compensate accordingly
loopsva 4:0ce65ee5697f 239 // if returns true, the Lux integration/dwell time (IT bits in CONF reg) was changed.
loopsva 0:92cb496cbbe1 240
loopsva 0:92cb496cbbe1 241 bool veml60xx::autoAdjustLux(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 242 getRawData(Pntr);
loopsva 0:92cb496cbbe1 243 uint16_t rdata = Pntr.conf_reg;
loopsva 0:92cb496cbbe1 244 uint16_t lux = rdata & VEML60xx_CONF_BITS_IT;
loopsva 0:92cb496cbbe1 245 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 246 if((Pntr.r_d < 255) && (Pntr.g_d < 255) && (Pntr.b_d < 255) && (Pntr.w_d < 255)) {
loopsva 0:92cb496cbbe1 247 if(lux == VEML6040_CONF_BITS_IT_1280m) return false;
loopsva 0:92cb496cbbe1 248 lux += VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 249 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 250 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 251 return true;
loopsva 0:92cb496cbbe1 252 } else
loopsva 0:92cb496cbbe1 253 if((Pntr.r_d == 65535) || (Pntr.g_d == 65535) || (Pntr.b_d == 65535) || (Pntr.w_d == 65535)) {
loopsva 0:92cb496cbbe1 254 if(lux == VEML60xx_CONF_BITS_IT_50m40m) return false;
loopsva 0:92cb496cbbe1 255 lux -= VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 256 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 257 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 258 return true;
loopsva 0:92cb496cbbe1 259 }
loopsva 0:92cb496cbbe1 260 } else
loopsva 0:92cb496cbbe1 261 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 262 if((Pntr.uva_d < 255) && (Pntr.uvb_d < 255)) {
loopsva 0:92cb496cbbe1 263 if(lux == VEML60xx_CONF_BITS_IT_800m640m) return false;
loopsva 0:92cb496cbbe1 264 lux += VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 265 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 266 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 267 return true;
loopsva 0:92cb496cbbe1 268 } else
loopsva 0:92cb496cbbe1 269 if((Pntr.uva_d == 65535) || (Pntr.uvb_d == 65535)) {
loopsva 0:92cb496cbbe1 270 if(lux == VEML60xx_CONF_BITS_IT_50m40m) return false;
loopsva 0:92cb496cbbe1 271 lux -= VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 272 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 273 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 274 return true;
loopsva 0:92cb496cbbe1 275 }
loopsva 0:92cb496cbbe1 276 }
loopsva 0:92cb496cbbe1 277 return false;
loopsva 0:92cb496cbbe1 278 }
loopsva 0:92cb496cbbe1 279
loopsva 3:dda770fa7228 280
loopsva 4:0ce65ee5697f 281