179 APDS9930_ID_1, APDS9930_ID_2, APDS9930_ID_3, dev->id); |
179 APDS9930_ID_1, APDS9930_ID_2, APDS9930_ID_3, dev->id); |
180 } |
180 } |
181 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
181 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
182 |
182 |
183 /* Set ENABLE register to 0 (disable all features) */ |
183 /* Set ENABLE register to 0 (disable all features) */ |
184 if (apds9930_setMode(dev, APDS9930_MODE_ALL, APDS9930_OFF) != ESP_OK) { |
184 if (apds9930_setMode(dev, APDS9930_MODE_ALL | APDS9930_AUTO_INCREMENT, APDS9930_OFF) != ESP_OK) { |
185 ESP_LOGE(TAG, "apds9930_init() error 'Regs off'"); |
185 ESP_LOGE(TAG, "apds9930_init() error 'Regs off'"); |
186 err = ESP_ERR_INVALID_ARG; |
186 err = ESP_ERR_INVALID_ARG; |
187 } |
187 } |
188 |
188 |
189 /* Set default values for ambient light and proximity registers */ |
189 /* Set default values for ambient light and proximity registers */ |
190 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
190 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
191 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_ATIME, APDS9930_DEFAULT_ATIME), "Default atime"); |
191 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_ATIME | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_ATIME), "Default atime"); |
192 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_WTIME, APDS9930_DEFAULT_WTIME), "Default wtime"); |
192 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_WTIME | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_WTIME), "Default wtime"); |
193 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_PPULSE, APDS9930_DEFAULT_PPULSE), "Default ppulse"); |
193 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_PPULSE | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_PPULSE), "Default ppulse"); |
194 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_POFFSET, APDS9930_DEFAULT_POFFSET), "Default poffset"); |
194 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_POFFSET | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_POFFSET), "Default poffset"); |
195 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_CONFIG, APDS9930_DEFAULT_CONFIG), "Default config"); |
195 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_CONFIG | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_CONFIG), "Default config"); |
196 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
196 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
197 |
197 |
198 CHECK_LOGE(dev, apds9930_setLEDDrive(dev, APDS9930_DEFAULT_PDRIVE), "Default pdrive"); |
198 CHECK_LOGE(dev, apds9930_setLEDDrive(dev, APDS9930_DEFAULT_PDRIVE), "Default pdrive"); |
199 CHECK_LOGE(dev, apds9930_setProximityGain(dev, APDS9930_DEFAULT_PGAIN), "Default pgain"); |
199 CHECK_LOGE(dev, apds9930_setProximityGain(dev, APDS9930_DEFAULT_PGAIN), "Default pgain"); |
200 CHECK_LOGE(dev, apds9930_setAmbientLightGain(dev, APDS9930_DEFAULT_AGAIN), "Default again"); |
200 CHECK_LOGE(dev, apds9930_setAmbientLightGain(dev, APDS9930_DEFAULT_AGAIN), "Default again"); |
203 CHECK_LOGE(dev, apds9930_setProximityIntHighThreshold(dev, APDS9930_DEFAULT_PIHT), "Default PIHT"); |
203 CHECK_LOGE(dev, apds9930_setProximityIntHighThreshold(dev, APDS9930_DEFAULT_PIHT), "Default PIHT"); |
204 CHECK_LOGE(dev, apds9930_setLightIntLowThreshold(dev, APDS9930_DEFAULT_AILT), "Default ailt"); |
204 CHECK_LOGE(dev, apds9930_setLightIntLowThreshold(dev, APDS9930_DEFAULT_AILT), "Default ailt"); |
205 CHECK_LOGE(dev, apds9930_setLightIntHighThreshold(dev, APDS9930_DEFAULT_AIHT), "Default aiht"); |
205 CHECK_LOGE(dev, apds9930_setLightIntHighThreshold(dev, APDS9930_DEFAULT_AIHT), "Default aiht"); |
206 |
206 |
207 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
207 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
208 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_PERS, APDS9930_DEFAULT_PERS), "Default pers"); |
208 CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_PERS | APDS9930_AUTO_INCREMENT, APDS9930_DEFAULT_PERS), "Default pers"); |
209 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
209 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
210 |
210 |
211 return err; |
211 return err; |
212 } |
212 } |
213 |
213 |
219 { |
219 { |
220 uint8_t enable_value; |
220 uint8_t enable_value; |
221 |
221 |
222 /* Read current ENABLE register */ |
222 /* Read current ENABLE register */ |
223 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
223 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
224 if (read_reg_8_nolock(dev, APDS9930_ENABLE, &enable_value) != ESP_OK) { |
224 if (read_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &enable_value) != ESP_OK) { |
225 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
225 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
226 return APDS9930_ERROR; |
226 return APDS9930_ERROR; |
227 } |
227 } |
228 |
228 |
229 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
229 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
236 uint8_t reg_val; |
236 uint8_t reg_val; |
237 |
237 |
238 // CHECK_ARG(dev); |
238 // CHECK_ARG(dev); |
239 /* Read current ENABLE register */ |
239 /* Read current ENABLE register */ |
240 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
240 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
241 I2C_DEV_CHECK(&dev->i2c_dev, read_reg_8_nolock(dev, APDS9930_ENABLE, ®_val)); |
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); |
242 // i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1); |
243 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
243 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
244 ESP_LOGI(TAG, "apds9930_setMode(%d, %d) get=%02x", mode, enable, reg_val); |
244 ESP_LOGI(TAG, "apds9930_setMode(%d, %d) get=%02x", mode, enable, reg_val); |
245 |
245 |
246 /* Change bit(s) in ENABLE register */ |
246 /* Change bit(s) in ENABLE register */ |
260 } |
260 } |
261 |
261 |
262 ESP_LOGI(TAG, "apds9930_setMode write %02x", reg_val); |
262 ESP_LOGI(TAG, "apds9930_setMode write %02x", reg_val); |
263 /* Write value back to ENABLE register */ |
263 /* Write value back to ENABLE register */ |
264 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
264 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
265 I2C_DEV_CHECK(&dev->i2c_dev, write_reg_8_nolock(dev, APDS9930_ENABLE, reg_val)); |
265 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"); |
266 // CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_ENABLE, reg_val), "Enable register"); |
267 // CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1), "Enable register"); |
267 // CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1), "Enable register"); |
268 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
268 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
269 |
269 |
270 //vTaskDelay(12 / portTICK_PERIOD_MS); |
270 //vTaskDelay(12 / portTICK_PERIOD_MS); |
416 |
416 |
417 CHECK_ARG(dev); |
417 CHECK_ARG(dev); |
418 |
418 |
419 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
419 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
420 /* Read value from channel 0 */ |
420 /* Read value from channel 0 */ |
421 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL, &val_byte, 1), "Read ch0 low"); |
421 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch0 low"); |
422 ESP_LOGI(TAG, "l %02x", val_byte); |
422 ESP_LOGI(TAG, "l %02x", val_byte); |
423 *val = val_byte; |
423 *val = val_byte; |
424 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAH, &val_byte, 1), "Read ch0 high"); |
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); |
425 ESP_LOGI(TAG, "h %02x", val_byte); |
426 *val += ((uint16_t)val_byte << 8); |
426 *val += ((uint16_t)val_byte << 8); |
427 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
427 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
428 ESP_LOGI(TAG, "val %04x", *val); |
428 ESP_LOGI(TAG, "val %04x", *val); |
429 |
429 |
430 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL, &val_word, 2), "Read ch0 16"); |
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); |
431 ESP_LOGI(TAG, "16 %04x", val_word); |
432 |
432 |
433 return ESP_OK; |
433 return ESP_OK; |
434 } |
434 } |
435 |
435 |
439 uint8_t val_byte; |
439 uint8_t val_byte; |
440 *val = 0; |
440 *val = 0; |
441 |
441 |
442 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
442 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
443 /* Read value from channel 1 */ |
443 /* Read value from channel 1 */ |
444 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAL, &val_byte, 1), "Read ch1 low"); |
444 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 low"); |
445 *val = val_byte; |
445 *val = val_byte; |
446 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAH, &val_byte, 1), "Read ch1 high"); |
446 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 high"); |
447 *val += ((uint16_t)val_byte << 8); |
447 *val += ((uint16_t)val_byte << 8); |
448 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
448 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
449 |
449 |
450 return ESP_OK; |
450 return ESP_OK; |
451 } |
451 } |
459 *val = 0; |
459 *val = 0; |
460 uint8_t val_byte; |
460 uint8_t val_byte; |
461 |
461 |
462 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
462 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
463 /* Read value from proximity data register */ |
463 /* Read value from proximity data register */ |
464 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PDATAL, &val_byte, 1), "Read proximity low"); |
464 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PDATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read proximity low"); |
465 *val = val_byte; |
465 *val = val_byte; |
466 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PDATAH, &val_byte, 1), "Read proximity high"); |
466 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PDATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read proximity high"); |
467 *val += ((uint16_t)val_byte << 8); |
467 *val += ((uint16_t)val_byte << 8); |
468 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
468 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
469 |
469 |
470 return ESP_OK; |
470 return ESP_OK; |
471 } |
471 } |
479 uint16_t val; |
479 uint16_t val; |
480 uint8_t val_byte; |
480 uint8_t val_byte; |
481 |
481 |
482 /* Read value from PILT register */ |
482 /* Read value from PILT register */ |
483 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
483 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
484 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PILTL, &val_byte, 1) != ESP_OK) { |
484 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PILTL | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
485 val = 0; |
485 val = 0; |
486 } |
486 } |
487 val = val_byte; |
487 val = val_byte; |
488 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PILTH, &val_byte, 1) != ESP_OK) { |
488 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PILTH | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
489 val = 0; |
489 val = 0; |
490 } |
490 } |
491 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
491 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
492 val |= ((uint16_t)val_byte << 8); |
492 val |= ((uint16_t)val_byte << 8); |
493 |
493 |
501 uint8_t hi; |
501 uint8_t hi; |
502 hi = threshold >> 8; |
502 hi = threshold >> 8; |
503 lo = threshold & 0x00FF; |
503 lo = threshold & 0x00FF; |
504 |
504 |
505 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
505 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
506 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PILTL, &lo, 1), "Write PILTL"); |
506 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PILTL | APDS9930_AUTO_INCREMENT, &lo, 1), "Write PILTL"); |
507 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PILTH, &hi, 1), "Write PILTH"); |
507 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PILTH | APDS9930_AUTO_INCREMENT, &hi, 1), "Write PILTH"); |
508 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
508 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
509 |
509 |
510 return ESP_OK; |
510 return ESP_OK; |
511 } |
511 } |
512 |
512 |
516 uint16_t val; |
516 uint16_t val; |
517 uint8_t val_byte; |
517 uint8_t val_byte; |
518 |
518 |
519 /* Read value from PIHT register */ |
519 /* Read value from PIHT register */ |
520 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
520 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
521 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PIHTL, &val_byte, 1) != ESP_OK) { |
521 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PIHTL | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
522 val = 0; |
522 val = 0; |
523 } |
523 } |
524 val = val_byte; |
524 val = val_byte; |
525 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PIHTH, &val_byte, 1) != ESP_OK) { |
525 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_PIHTH | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
526 val = 0; |
526 val = 0; |
527 } |
527 } |
528 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
528 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
529 val |= ((uint16_t)val_byte << 8); |
529 val |= ((uint16_t)val_byte << 8); |
530 |
530 |
538 uint8_t hi; |
538 uint8_t hi; |
539 hi = threshold >> 8; |
539 hi = threshold >> 8; |
540 lo = threshold & 0x00FF; |
540 lo = threshold & 0x00FF; |
541 |
541 |
542 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
542 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
543 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PIHTL, &lo, 1), "Write PIHTL"); |
543 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PIHTL | APDS9930_AUTO_INCREMENT, &lo, 1), "Write PIHTL"); |
544 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PIHTH, &hi, 1), "Write PIHTH"); |
544 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_PIHTH | APDS9930_AUTO_INCREMENT, &hi, 1), "Write PIHTH"); |
545 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
545 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
546 |
546 |
547 return ESP_OK; |
547 return ESP_OK; |
548 } |
548 } |
549 |
549 |
552 { |
552 { |
553 uint8_t val; |
553 uint8_t val; |
554 |
554 |
555 /* Read value from CONTROL register */ |
555 /* Read value from CONTROL register */ |
556 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
556 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
557 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1) != ESP_OK) { |
557 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
558 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
558 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
559 return APDS9930_ERROR;; |
559 return APDS9930_ERROR;; |
560 } |
560 } |
561 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
561 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
562 |
562 |
571 { |
571 { |
572 uint8_t val; |
572 uint8_t val; |
573 |
573 |
574 /* Read value from CONTROL register */ |
574 /* Read value from CONTROL register */ |
575 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
575 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
576 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Read control"); |
576 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Read control"); |
577 |
577 |
578 /* Set bits in register to given value */ |
578 /* Set bits in register to given value */ |
579 drive &= 0b00000011; |
579 drive &= 0b00000011; |
580 drive = drive << 6; |
580 drive = drive << 6; |
581 val &= 0b00111111; |
581 val &= 0b00111111; |
582 val |= drive; |
582 val |= drive; |
583 |
583 |
584 /* Write register value back into CONTROL register */ |
584 /* Write register value back into CONTROL register */ |
585 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Write control"); |
585 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Write control"); |
586 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
586 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
587 |
587 |
588 return ESP_OK; |
588 return ESP_OK; |
589 } |
589 } |
590 |
590 |
593 { |
593 { |
594 uint8_t val; |
594 uint8_t val; |
595 |
595 |
596 /* Read value from CONTROL register */ |
596 /* Read value from CONTROL register */ |
597 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
597 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
598 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1) != ESP_OK) { |
598 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
599 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
599 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
600 return APDS9930_ERROR;; |
600 return APDS9930_ERROR;; |
601 } |
601 } |
602 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
602 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
603 |
603 |
612 { |
612 { |
613 uint8_t val; |
613 uint8_t val; |
614 |
614 |
615 /* Read value from CONTROL register */ |
615 /* Read value from CONTROL register */ |
616 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
616 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
617 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Read control"); |
617 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Read control"); |
618 |
618 |
619 /* Set bits in register to given value */ |
619 /* Set bits in register to given value */ |
620 drive &= 0b00000011; |
620 drive &= 0b00000011; |
621 drive = drive << 2; |
621 drive = drive << 2; |
622 val &= 0b11110011; |
622 val &= 0b11110011; |
623 val |= drive; |
623 val |= drive; |
624 |
624 |
625 /* Write register value back into CONTROL register */ |
625 /* Write register value back into CONTROL register */ |
626 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Write control"); |
626 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Write control"); |
627 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
627 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
628 |
628 |
629 return ESP_OK; |
629 return ESP_OK; |
630 } |
630 } |
631 |
631 |
634 { |
634 { |
635 uint8_t val; |
635 uint8_t val; |
636 |
636 |
637 /* Read value from CONTROL register */ |
637 /* Read value from CONTROL register */ |
638 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
638 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
639 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1) != ESP_OK) { |
639 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
640 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
640 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
641 return APDS9930_ERROR;; |
641 return APDS9930_ERROR;; |
642 } |
642 } |
643 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
643 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
644 |
644 |
653 { |
653 { |
654 uint8_t val; |
654 uint8_t val; |
655 |
655 |
656 /* Read value from CONTROL register */ |
656 /* Read value from CONTROL register */ |
657 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
657 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
658 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Read control"); |
658 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Read control"); |
659 |
659 |
660 /* Set bits in register to given value */ |
660 /* Set bits in register to given value */ |
661 drive &= 0b00000011; |
661 drive &= 0b00000011; |
662 drive = drive << 4; |
662 drive = drive << 4; |
663 val &= 0b11001111; |
663 val &= 0b11001111; |
664 val |= drive; |
664 val |= drive; |
665 |
665 |
666 /* Write register value back into CONTROL register */ |
666 /* Write register value back into CONTROL register */ |
667 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Write control"); |
667 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Write control"); |
668 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
668 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
669 |
669 |
670 return ESP_OK; |
670 return ESP_OK; |
671 } |
671 } |
672 |
672 |
675 { |
675 { |
676 uint8_t val; |
676 uint8_t val; |
677 |
677 |
678 /* Read value from CONTROL register */ |
678 /* Read value from CONTROL register */ |
679 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
679 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
680 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1) != ESP_OK) { |
680 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
681 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
681 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
682 return APDS9930_ERROR;; |
682 return APDS9930_ERROR;; |
683 } |
683 } |
684 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
684 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
685 |
685 |
694 { |
694 { |
695 uint8_t val; |
695 uint8_t val; |
696 |
696 |
697 /* Read value from CONTROL register */ |
697 /* Read value from CONTROL register */ |
698 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
698 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
699 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Read control"); |
699 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Read control"); |
700 |
700 |
701 /* Set bits in register to given value */ |
701 /* Set bits in register to given value */ |
702 drive &= 0b00000011; |
702 drive &= 0b00000011; |
703 val &= 0b11111100; |
703 val &= 0b11111100; |
704 val |= drive; |
704 val |= drive; |
705 |
705 |
706 /* Write register value back into CONTROL register */ |
706 /* Write register value back into CONTROL register */ |
707 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Write control"); |
707 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Write control"); |
708 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
708 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
709 |
709 |
710 return ESP_OK; |
710 return ESP_OK; |
711 } |
711 } |
712 |
712 |
715 { |
715 { |
716 uint8_t val; |
716 uint8_t val; |
717 |
717 |
718 /* Read value from CONTROL register */ |
718 /* Read value from CONTROL register */ |
719 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
719 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
720 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1) != ESP_OK) { |
720 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
721 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
721 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
722 return APDS9930_ERROR;; |
722 return APDS9930_ERROR;; |
723 } |
723 } |
724 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
724 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
725 |
725 |
734 { |
734 { |
735 uint8_t val; |
735 uint8_t val; |
736 |
736 |
737 /* Read value from CONTROL register */ |
737 /* Read value from CONTROL register */ |
738 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
738 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
739 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Read control"); |
739 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Read control"); |
740 |
740 |
741 /* Set bits in register to given value */ |
741 /* Set bits in register to given value */ |
742 enable &= 0b00000001; |
742 enable &= 0b00000001; |
743 enable = enable << 2; |
743 enable = enable << 2; |
744 val &= 0b11111011; |
744 val &= 0b11111011; |
745 val |= enable; |
745 val |= enable; |
746 |
746 |
747 /* Write register value back into CONTROL register */ |
747 /* Write register value back into CONTROL register */ |
748 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL, &val, 1), "Write control"); |
748 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_CONTROL | APDS9930_AUTO_INCREMENT, &val, 1), "Write control"); |
749 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
749 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
750 |
750 |
751 return ESP_OK; |
751 return ESP_OK; |
752 } |
752 } |
753 |
753 |
757 uint8_t val_byte; |
757 uint8_t val_byte; |
758 *threshold = 0; |
758 *threshold = 0; |
759 |
759 |
760 /* Read value from ambient light low threshold, low byte register */ |
760 /* Read value from ambient light low threshold, low byte register */ |
761 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
761 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
762 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AILTL, &val_byte, 1) != ESP_OK) { |
762 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AILTL | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
763 *threshold = 0; |
763 *threshold = 0; |
764 } |
764 } |
765 *threshold = val_byte; |
765 *threshold = val_byte; |
766 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AILTH, &val_byte, 1) != ESP_OK) { |
766 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AILTH | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
767 *threshold = 0; |
767 *threshold = 0; |
768 } |
768 } |
769 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
769 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
770 *threshold = *threshold + ((uint16_t)val_byte << 8); |
770 *threshold = *threshold + ((uint16_t)val_byte << 8); |
771 |
771 |
781 /* Break 16-bit threshold into 2 8-bit values */ |
781 /* Break 16-bit threshold into 2 8-bit values */ |
782 val_low = threshold & 0x00FF; |
782 val_low = threshold & 0x00FF; |
783 val_high = (threshold & 0xFF00) >> 8; |
783 val_high = (threshold & 0xFF00) >> 8; |
784 |
784 |
785 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
785 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
786 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AILTL, &val_low, 1), "Write AILTL"); |
786 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AILTL | APDS9930_AUTO_INCREMENT, &val_low, 1), "Write AILTL"); |
787 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AILTH, &val_high, 1), "Write AILTH"); |
787 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AILTH | APDS9930_AUTO_INCREMENT, &val_high, 1), "Write AILTH"); |
788 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
788 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
789 |
789 |
790 return ESP_OK; |
790 return ESP_OK; |
791 } |
791 } |
792 |
792 |
796 uint8_t val_byte; |
796 uint8_t val_byte; |
797 *threshold = 0; |
797 *threshold = 0; |
798 |
798 |
799 /* Read value from ambient light high threshold, low byte register */ |
799 /* Read value from ambient light high threshold, low byte register */ |
800 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
800 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
801 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AIHTL, &val_byte, 1) != ESP_OK) { |
801 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AIHTL | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
802 *threshold = 0; |
802 *threshold = 0; |
803 } |
803 } |
804 *threshold = val_byte; |
804 *threshold = val_byte; |
805 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AIHTH, &val_byte, 1) != ESP_OK) { |
805 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_AIHTH | APDS9930_AUTO_INCREMENT, &val_byte, 1) != ESP_OK) { |
806 *threshold = 0; |
806 *threshold = 0; |
807 } |
807 } |
808 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
808 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
809 *threshold = *threshold + ((uint16_t)val_byte << 8); |
809 *threshold = *threshold + ((uint16_t)val_byte << 8); |
810 |
810 |
820 /* Break 16-bit threshold into 2 8-bit values */ |
820 /* Break 16-bit threshold into 2 8-bit values */ |
821 val_low = threshold & 0x00FF; |
821 val_low = threshold & 0x00FF; |
822 val_high = (threshold & 0xFF00) >> 8; |
822 val_high = (threshold & 0xFF00) >> 8; |
823 |
823 |
824 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
824 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
825 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AIHTL, &val_low, 1), "Write AIHTL"); |
825 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AIHTL | APDS9930_AUTO_INCREMENT, &val_low, 1), "Write AIHTL"); |
826 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AIHTH, &val_high, 1), "Write AIHTH"); |
826 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_AIHTH | APDS9930_AUTO_INCREMENT, &val_high, 1), "Write AIHTH"); |
827 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
827 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
828 |
828 |
829 return ESP_OK; |
829 return ESP_OK; |
830 } |
830 } |
831 |
831 |
834 { |
834 { |
835 uint8_t val; |
835 uint8_t val; |
836 |
836 |
837 /* Read value from ENABLE register */ |
837 /* Read value from ENABLE register */ |
838 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
838 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
839 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1) != ESP_OK) { |
839 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
840 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
840 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
841 return APDS9930_ERROR;; |
841 return APDS9930_ERROR;; |
842 } |
842 } |
843 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
843 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
844 |
844 |
853 { |
853 { |
854 uint8_t val; |
854 uint8_t val; |
855 |
855 |
856 /* Read value from ENABLE register */ |
856 /* Read value from ENABLE register */ |
857 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
857 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
858 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1), "Read enable"); |
858 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1), "Read enable"); |
859 |
859 |
860 /* Set bits in register to given value */ |
860 /* Set bits in register to given value */ |
861 enable &= 0b00000001; |
861 enable &= 0b00000001; |
862 enable = enable << 4; |
862 enable = enable << 4; |
863 val &= 0b11101111; |
863 val &= 0b11101111; |
864 val |= enable; |
864 val |= enable; |
865 |
865 |
866 /* Write register value back into ENABLE register */ |
866 /* Write register value back into ENABLE register */ |
867 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1), "Write enable"); |
867 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1), "Write enable"); |
868 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
868 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
869 |
869 |
870 return ESP_OK; |
870 return ESP_OK; |
871 } |
871 } |
872 |
872 |
875 { |
875 { |
876 uint8_t val; |
876 uint8_t val; |
877 |
877 |
878 /* Read value from ENABLE register */ |
878 /* Read value from ENABLE register */ |
879 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
879 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
880 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1) != ESP_OK) { |
880 if (i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1) != ESP_OK) { |
881 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
881 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
882 return APDS9930_ERROR;; |
882 return APDS9930_ERROR;; |
883 } |
883 } |
884 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
884 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
885 |
885 |
894 { |
894 { |
895 uint8_t val; |
895 uint8_t val; |
896 |
896 |
897 /* Read value from ENABLE register */ |
897 /* Read value from ENABLE register */ |
898 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
898 I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); |
899 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1), "Read enable"); |
899 CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1), "Read enable"); |
900 |
900 |
901 /* Set bits in register to given value */ |
901 /* Set bits in register to given value */ |
902 enable &= 0b00000001; |
902 enable &= 0b00000001; |
903 enable = enable << 5; |
903 enable = enable << 5; |
904 val &= 0b11011111; |
904 val &= 0b11011111; |
905 val |= enable; |
905 val |= enable; |
906 |
906 |
907 /* Write register value back into ENABLE register */ |
907 /* Write register value back into ENABLE register */ |
908 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_ENABLE, &val, 1), "Write enable"); |
908 CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, &val, 1), "Write enable"); |
909 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
909 I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); |
910 |
910 |
911 return ESP_OK; |
911 return ESP_OK; |
912 } |
912 } |
913 |
913 |