116 static inline esp_err_t write_reg_8_nolock(apds9930_t *dev, uint8_t reg, uint8_t data) |
116 static inline esp_err_t write_reg_8_nolock(apds9930_t *dev, uint8_t reg, uint8_t data) |
117 { |
117 { |
118 return i2c_dev_write_reg(&dev->i2c_dev, reg, &data, 1); |
118 return i2c_dev_write_reg(&dev->i2c_dev, reg, &data, 1); |
119 } |
119 } |
120 |
120 |
121 static esp_err_t read_reg_8(apds9930_t *dev, uint8_t reg, uint8_t *data) |
|
122 { |
|
123 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
|
124 I2C_DEV_CHECK(&dev->i2c_dev, read_reg_8_nolock(dev, reg, data)); |
|
125 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
|
126 |
|
127 return ESP_OK; |
|
128 } |
|
129 |
|
130 |
|
131 |
|
132 |
121 |
133 inline static esp_err_t write_register8(i2c_dev_t *dev, uint8_t addr, uint8_t value) |
122 inline static esp_err_t write_register8(i2c_dev_t *dev, uint8_t addr, uint8_t value) |
134 { |
123 { |
135 return i2c_dev_write_reg(dev, addr, &value, 1); |
124 return i2c_dev_write_reg(dev, addr, &value, 1); |
136 } |
125 } |
233 |
222 |
234 esp_err_t apds9930_setMode(apds9930_t *dev, uint8_t mode, uint8_t enable) |
223 esp_err_t apds9930_setMode(apds9930_t *dev, uint8_t mode, uint8_t enable) |
235 { |
224 { |
236 uint8_t reg_val; |
225 uint8_t reg_val; |
237 |
226 |
238 // CHECK_ARG(dev); |
227 CHECK_ARG(dev); |
239 /* Read current ENABLE register */ |
228 /* Read current ENABLE register */ |
240 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
229 reg_val = apds9930_getMode(dev); |
241 I2C_DEV_CHECK(&dev->i2c_dev, read_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, ®_val)); |
|
242 // i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1); |
|
243 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
|
244 ESP_LOGI(TAG, "apds9930_setMode(%d, %d) get=%02x", mode, enable, reg_val); |
|
245 |
230 |
246 /* Change bit(s) in ENABLE register */ |
231 /* Change bit(s) in ENABLE register */ |
247 enable = enable & 0x01; |
232 enable = enable & 0x01; |
248 if (mode <= 6) { |
233 if (mode <= 6) { |
249 if (enable) { |
234 if (enable) { |
257 } else { |
242 } else { |
258 reg_val = 0x00; |
243 reg_val = 0x00; |
259 } |
244 } |
260 } |
245 } |
261 |
246 |
262 ESP_LOGI(TAG, "apds9930_setMode write %02x", reg_val); |
|
263 /* Write value back to ENABLE register */ |
247 /* Write value back to ENABLE register */ |
264 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
248 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
265 I2C_DEV_CHECK(&dev->i2c_dev, write_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, reg_val)); |
249 I2C_DEV_CHECK(&dev->i2c_dev, write_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, reg_val)); |
266 // CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_ENABLE, reg_val), "Enable register"); |
250 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
267 // CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1), "Enable register"); |
251 |
268 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
|
269 |
|
270 //vTaskDelay(12 / portTICK_PERIOD_MS); |
|
271 return ESP_OK; |
252 return ESP_OK; |
272 } |
253 } |
273 |
254 |
274 |
255 |
275 esp_err_t apds9930_enableLightSensor(apds9930_t *dev, bool interrupts) |
256 esp_err_t apds9930_enableLightSensor(apds9930_t *dev, bool interrupts) |
408 } |
389 } |
409 |
390 |
410 |
391 |
411 esp_err_t apds9930_readCh0Light(apds9930_t *dev, uint16_t *val) |
392 esp_err_t apds9930_readCh0Light(apds9930_t *dev, uint16_t *val) |
412 { |
393 { |
413 uint8_t val_byte; |
|
414 uint16_t val_word; |
394 uint16_t val_word; |
415 *val = 0; |
395 *val = 0; |
416 |
396 |
417 CHECK_ARG(dev); |
397 CHECK_ARG(dev); |
418 |
398 |
419 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
399 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
420 /* Read value from channel 0 */ |
400 /* Read value from channel 0 */ |
421 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch0 low"); |
401 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch0"); |
422 ESP_LOGI(TAG, "l %02x", val_byte); |
402 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
423 *val = val_byte; |
403 *val = val_word; |
424 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch0 high"); |
|
425 ESP_LOGI(TAG, "h %02x", val_byte); |
|
426 *val += ((uint16_t)val_byte << 8); |
|
427 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
|
428 ESP_LOGI(TAG, "val %04x", *val); |
|
429 |
|
430 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch0 16"); |
|
431 ESP_LOGI(TAG, "16 %04x", val_word); |
|
432 |
404 |
433 return ESP_OK; |
405 return ESP_OK; |
434 } |
406 } |
435 |
407 |
436 |
408 |
437 esp_err_t apds9930_readCh1Light(apds9930_t *dev, uint16_t *val) |
409 esp_err_t apds9930_readCh1Light(apds9930_t *dev, uint16_t *val) |
438 { |
410 { |
439 uint8_t val_byte; |
411 uint16_t val_word; |
440 *val = 0; |
412 *val = 0; |
441 |
413 |
442 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
414 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
443 /* Read value from channel 1 */ |
415 /* Read value from channel 1 */ |
444 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 low"); |
416 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch1DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch1"); |
445 *val = val_byte; |
417 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
446 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 high"); |
418 *val = val_word; |
447 *val += ((uint16_t)val_byte << 8); |
|
448 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
|
449 |
419 |
450 return ESP_OK; |
420 return ESP_OK; |
451 } |
421 } |
452 |
422 |
453 /******************************************************************************* |
423 /******************************************************************************* |