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:
Wed Apr 27 22:24:37 2016 +0000
Revision:
3:dda770fa7228
Parent:
2:c17b84879a2f
Child:
4:0ce65ee5697f
1. modified scaling in veml60xx::getConfig(veml60xx_struct& Pntr) for the VEML6075
; 2. fixed error in VEML6040_LUX_STEP from 0.005625 to 0.007865

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 2:c17b84879a2f 40 if((Pntr.id & 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 2:c17b84879a2f 44 if((Pntr.id & 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 0:92cb496cbbe1 68 break;
loopsva 0:92cb496cbbe1 69 case VEML60xx_CONF_BITS_IT_100m80m:
loopsva 2:c17b84879a2f 70 Pntr.lux_step = VEML6040_LUX_STEP * 16.0;
loopsva 0:92cb496cbbe1 71 break;
loopsva 0:92cb496cbbe1 72 case VEML60xx_CONF_BITS_IT_200m160m:
loopsva 2:c17b84879a2f 73 Pntr.lux_step = VEML6040_LUX_STEP * 8.0;
loopsva 0:92cb496cbbe1 74 break;
loopsva 0:92cb496cbbe1 75 case VEML60xx_CONF_BITS_IT_400m320m:
loopsva 2:c17b84879a2f 76 Pntr.lux_step = VEML6040_LUX_STEP * 4.0;
loopsva 0:92cb496cbbe1 77 break;
loopsva 0:92cb496cbbe1 78 case VEML60xx_CONF_BITS_IT_800m640m:
loopsva 2:c17b84879a2f 79 Pntr.lux_step = VEML6040_LUX_STEP * 2.0;
loopsva 0:92cb496cbbe1 80 break;
loopsva 0:92cb496cbbe1 81 case VEML6040_CONF_BITS_IT_1280m:
loopsva 2:c17b84879a2f 82 Pntr.lux_step = VEML6040_LUX_STEP * 1.0;
loopsva 0:92cb496cbbe1 83 break;
loopsva 0:92cb496cbbe1 84 default:
loopsva 0:92cb496cbbe1 85 Pntr.lux_step = 0.0;
loopsva 0:92cb496cbbe1 86 break;
loopsva 0:92cb496cbbe1 87 }
loopsva 0:92cb496cbbe1 88 }
loopsva 2:c17b84879a2f 89 if(Pntr.is6075) {
loopsva 2:c17b84879a2f 90 switch (c) {
loopsva 2:c17b84879a2f 91 case VEML60xx_CONF_BITS_IT_50m40m:
loopsva 2:c17b84879a2f 92 Pntr.uva_step = VEML6075_UVA_RESP * 2.0;
loopsva 2:c17b84879a2f 93 Pntr.uvb_step = VEML6075_UVB_RESP * 2.0;
loopsva 2:c17b84879a2f 94 break;
loopsva 3:dda770fa7228 95 case VEML60xx_CONF_BITS_IT_100m80m:
loopsva 3:dda770fa7228 96 Pntr.uva_step = VEML6075_UVA_RESP * 1.0; //reference dwell time (100mS) from app note
loopsva 3:dda770fa7228 97 Pntr.uvb_step = VEML6075_UVB_RESP * 1.0;
loopsva 3:dda770fa7228 98 break;
loopsva 3:dda770fa7228 99 case VEML60xx_CONF_BITS_IT_200m160m:
loopsva 3:dda770fa7228 100 Pntr.uva_step = VEML6075_UVA_RESP * 0.5;
loopsva 3:dda770fa7228 101 Pntr.uvb_step = VEML6075_UVB_RESP * 0.5;
loopsva 3:dda770fa7228 102 break;
loopsva 3:dda770fa7228 103 case VEML60xx_CONF_BITS_IT_400m320m:
loopsva 3:dda770fa7228 104 Pntr.uva_step = VEML6075_UVA_RESP * 0.25;
loopsva 3:dda770fa7228 105 Pntr.uvb_step = VEML6075_UVB_RESP * 0.25;
loopsva 3:dda770fa7228 106 break;
loopsva 2:c17b84879a2f 107 case VEML60xx_CONF_BITS_IT_800m640m:
loopsva 3:dda770fa7228 108 Pntr.uva_step = VEML6075_UVA_RESP * 0.125;
loopsva 3:dda770fa7228 109 Pntr.uvb_step = VEML6075_UVB_RESP * 0.125;
loopsva 2:c17b84879a2f 110 break;
loopsva 2:c17b84879a2f 111 default:
loopsva 2:c17b84879a2f 112 Pntr.uva_step = 0.0;
loopsva 2:c17b84879a2f 113 Pntr.uvb_step = 0.0;
loopsva 2:c17b84879a2f 114 break;
loopsva 2:c17b84879a2f 115 }
loopsva 2:c17b84879a2f 116 }
loopsva 0:92cb496cbbe1 117 return(rdata);
loopsva 0:92cb496cbbe1 118 }
loopsva 0:92cb496cbbe1 119
loopsva 0:92cb496cbbe1 120 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 121 // If AF set to trigger mode, start a conversion process trigger
loopsva 0:92cb496cbbe1 122 // Returns: 0=trigger set, 1=already triggered, 2=no AF bit - cannot set trigger
loopsva 0:92cb496cbbe1 123
loopsva 0:92cb496cbbe1 124 uint16_t veml60xx::startAccess(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 125 uint16_t val = getConfig(Pntr);
loopsva 0:92cb496cbbe1 126 if((val & VEML60xx_CONF_BITS_AF) == VEML60xx_CONF_BITS_AF) {
loopsva 0:92cb496cbbe1 127 if((val & VEML60xx_CONF_BITS_TRIG) == VEML60xx_CONF_BITS_TRIG) return(1);
loopsva 0:92cb496cbbe1 128 val |= VEML60xx_CONF_BITS_TRIG;
loopsva 0:92cb496cbbe1 129 setConfig(Pntr, val);
loopsva 0:92cb496cbbe1 130 return(0);
loopsva 0:92cb496cbbe1 131 }
loopsva 0:92cb496cbbe1 132 return(2);
loopsva 0:92cb496cbbe1 133 }
loopsva 0:92cb496cbbe1 134
loopsva 0:92cb496cbbe1 135 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 136 // Get VEML60xx values. Saves raw data is data structure. Returns 0 if successful, !0 if status is (something else);
loopsva 0:92cb496cbbe1 137 // mode: false = VEML6075, true = VEML6040
loopsva 0:92cb496cbbe1 138
loopsva 0:92cb496cbbe1 139 uint16_t veml60xx::getRawData(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 140 Pntr.conf_reg = getConfig(Pntr);
loopsva 0:92cb496cbbe1 141 Pntr.id = getID(Pntr);
loopsva 0:92cb496cbbe1 142
loopsva 0:92cb496cbbe1 143 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 144 vemlBuffer[0] = VEML6075_UVA_DATA_REG;
loopsva 0:92cb496cbbe1 145 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 146 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 147 Pntr.uva_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 148 }
loopsva 0:92cb496cbbe1 149
loopsva 0:92cb496cbbe1 150 vemlBuffer[0] = VEML6075_DUMMY_REG;
loopsva 0:92cb496cbbe1 151 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 152 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 153 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 154 Pntr.dummy_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 155 } else
loopsva 0:92cb496cbbe1 156 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 157 Pntr.r_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 158 }
loopsva 0:92cb496cbbe1 159
loopsva 0:92cb496cbbe1 160 vemlBuffer[0] = VEML6075_UVB_DATA_REG;
loopsva 0:92cb496cbbe1 161 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 162 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 163 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 164 Pntr.uvb_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 165 } else
loopsva 0:92cb496cbbe1 166 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 167 Pntr.g_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 168 }
loopsva 0:92cb496cbbe1 169
loopsva 0:92cb496cbbe1 170 vemlBuffer[0] = VEML6075_UV_COMP1_REG;
loopsva 0:92cb496cbbe1 171 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 172 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 173 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 174 Pntr.uv_c1 = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 175 } else
loopsva 0:92cb496cbbe1 176 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 177 Pntr.b_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 178 }
loopsva 0:92cb496cbbe1 179
loopsva 0:92cb496cbbe1 180 vemlBuffer[0] = VEML6075_UV_COMP2_REG;
loopsva 0:92cb496cbbe1 181 _i2c_->write(VEML60_WADDR, vemlBuffer, 1, true);
loopsva 0:92cb496cbbe1 182 _i2c_->read(VEML60_RADDR, vemlBuffer, 2, false);
loopsva 0:92cb496cbbe1 183 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 184 Pntr.uv_c1 = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 185 } else
loopsva 0:92cb496cbbe1 186 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 187 Pntr.w_d = ((vemlBuffer[1] << 8) | vemlBuffer[0]);
loopsva 0:92cb496cbbe1 188 }
loopsva 0:92cb496cbbe1 189
loopsva 0:92cb496cbbe1 190 return(0);
loopsva 0:92cb496cbbe1 191 }
loopsva 0:92cb496cbbe1 192
loopsva 0:92cb496cbbe1 193 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 194 // Convert raw data into real UVA, UVB and UVI numbers
loopsva 0:92cb496cbbe1 195
loopsva 0:92cb496cbbe1 196 void veml60xx::convertRawData(veml60xx_struct& Pntr) {
loopsva 2:c17b84879a2f 197 if(Pntr.is6075) {
loopsva 2:c17b84879a2f 198 //Eq (1)
loopsva 2:c17b84879a2f 199 Pntr.uva_comp = (double)(Pntr.uva_d - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 200 VEML6075_UVA_COEF_A * (double)(Pntr.uv_c1 - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 201 VEML6075_UVA_COEF_B * (double)(Pntr.uv_c2 - Pntr.dummy_d);
loopsva 2:c17b84879a2f 202
loopsva 2:c17b84879a2f 203 //Eq (2)
loopsva 2:c17b84879a2f 204 Pntr.uvb_comp = (double)(Pntr.uvb_d - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 205 VEML6075_UVB_COEF_C * (double)(Pntr.uv_c1 - Pntr.dummy_d) -
loopsva 2:c17b84879a2f 206 VEML6075_UVB_COEF_D * (double)(Pntr.uv_c2 - Pntr.dummy_d);
loopsva 2:c17b84879a2f 207 //Eq (3)
loopsva 2:c17b84879a2f 208 Pntr.uv_index = ((Pntr.uva_comp * Pntr.uva_step) + (Pntr.uvb_comp * Pntr.uvb_step))/2.0;
loopsva 2:c17b84879a2f 209
loopsva 2:c17b84879a2f 210 if(Pntr.uva_comp < 0.0) Pntr.uva_comp = 0.0;
loopsva 2:c17b84879a2f 211 if(Pntr.uvb_comp < 0.0) Pntr.uvb_comp = 0.0;
loopsva 2:c17b84879a2f 212 if(Pntr.uv_index < 0.0) Pntr.uv_index = 0.0;
loopsva 2:c17b84879a2f 213 }
loopsva 0:92cb496cbbe1 214
loopsva 2:c17b84879a2f 215 if(Pntr.is6040) {
loopsva 2:c17b84879a2f 216 Pntr.r_lux = (double)Pntr.r_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 217 Pntr.g_lux = (double)Pntr.g_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 218 Pntr.b_lux = (double)Pntr.b_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 219 Pntr.w_lux = (double)Pntr.w_d * Pntr.lux_step;
loopsva 2:c17b84879a2f 220 }
loopsva 0:92cb496cbbe1 221 }
loopsva 0:92cb496cbbe1 222
loopsva 0:92cb496cbbe1 223
loopsva 0:92cb496cbbe1 224 //--------------------------------------------------------------------------------------------------------------------------------------//
loopsva 0:92cb496cbbe1 225 // If there is a lux over/underflow, automatically adjust the CONF_BITS_IT by +-1 to compensate accordingly
loopsva 2:c17b84879a2f 226 // if returns true, the Lux dwell time (IT bits in CONF reg) was changed.
loopsva 0:92cb496cbbe1 227
loopsva 0:92cb496cbbe1 228 bool veml60xx::autoAdjustLux(veml60xx_struct& Pntr) {
loopsva 0:92cb496cbbe1 229 getRawData(Pntr);
loopsva 0:92cb496cbbe1 230 uint16_t rdata = Pntr.conf_reg;
loopsva 0:92cb496cbbe1 231 uint16_t lux = rdata & VEML60xx_CONF_BITS_IT;
loopsva 0:92cb496cbbe1 232 if(Pntr.is6040) {
loopsva 0:92cb496cbbe1 233 if((Pntr.r_d < 255) && (Pntr.g_d < 255) && (Pntr.b_d < 255) && (Pntr.w_d < 255)) {
loopsva 0:92cb496cbbe1 234 if(lux == VEML6040_CONF_BITS_IT_1280m) return false;
loopsva 0:92cb496cbbe1 235 lux += VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 236 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 237 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 238 return true;
loopsva 0:92cb496cbbe1 239 } else
loopsva 0:92cb496cbbe1 240 if((Pntr.r_d == 65535) || (Pntr.g_d == 65535) || (Pntr.b_d == 65535) || (Pntr.w_d == 65535)) {
loopsva 0:92cb496cbbe1 241 if(lux == VEML60xx_CONF_BITS_IT_50m40m) return false;
loopsva 0:92cb496cbbe1 242 lux -= VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 243 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 244 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 245 return true;
loopsva 0:92cb496cbbe1 246 }
loopsva 0:92cb496cbbe1 247 } else
loopsva 0:92cb496cbbe1 248 if(Pntr.is6075) {
loopsva 0:92cb496cbbe1 249 if((Pntr.uva_d < 255) && (Pntr.uvb_d < 255)) {
loopsva 0:92cb496cbbe1 250 if(lux == VEML60xx_CONF_BITS_IT_800m640m) return false;
loopsva 0:92cb496cbbe1 251 lux += VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 252 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 253 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 254 return true;
loopsva 0:92cb496cbbe1 255 } else
loopsva 0:92cb496cbbe1 256 if((Pntr.uva_d == 65535) || (Pntr.uvb_d == 65535)) {
loopsva 0:92cb496cbbe1 257 if(lux == VEML60xx_CONF_BITS_IT_50m40m) return false;
loopsva 0:92cb496cbbe1 258 lux -= VEML60xx_CONF_BITS_IT_100m80m;
loopsva 0:92cb496cbbe1 259 rdata = (rdata & ~VEML60xx_CONF_BITS_IT) | lux;
loopsva 0:92cb496cbbe1 260 setConfig(Pntr, rdata);
loopsva 0:92cb496cbbe1 261 return true;
loopsva 0:92cb496cbbe1 262 }
loopsva 0:92cb496cbbe1 263 }
loopsva 0:92cb496cbbe1 264 return false;
loopsva 0:92cb496cbbe1 265 }
loopsva 0:92cb496cbbe1 266
loopsva 3:dda770fa7228 267