diff -r c3001154416f -r df8564c9701e main/task_apds9930.c --- a/main/task_apds9930.c Thu Apr 06 22:01:08 2023 +0200 +++ b/main/task_apds9930.c Fri Apr 07 14:31:17 2023 +0200 @@ -51,7 +51,7 @@ { int tries; esp_err_t err = ESP_OK; - uint8_t l_gain = 0, l_aglbit = 0; + uint8_t l_gain, l_aglbit; ESP_LOGI(TAG, "Starting task APDS9930 sda=%d scl=%d", CONFIG_I2C_MASTER_SDA, CONFIG_I2C_MASTER_SCL); apds9930_state = malloc(sizeof(APDS9930_State)); @@ -61,6 +61,11 @@ apds9930_state->address = apds9930_dev.i2c_dev.addr; apds9930_state->error = APDS9930_ERR_NONE; + /* Gain settings are saved in NVS for quick startup. */ + l_gain = nvsio_read_u8((char *)"l_gain"); + l_aglbit = nvsio_read_u8((char *)"l_aglbit"); + ESP_LOGI(TAG, "gain %d agl: %d", l_gain, l_aglbit); + // Calculate these for auto gain scaling. ALS_maxcount = (256 - APDS9930_DEFAULT_ATIME) * 1024; ALS_mincount = ALS_maxcount / 64; @@ -81,15 +86,8 @@ if (! apds9930_state->fake) { /* Real sensor is present */ - if (xSemaphoreTake(xSemaphoreAPDS9930, 25) == pdTRUE) { - l_gain = apds9930_state->gain; - l_aglbit = apds9930_state->aglbit; - xSemaphoreGive(xSemaphoreAPDS9930); - } if (l_gain > 3) l_gain = 0; - ESP_LOGI(TAG, "1"); - // ESP_ERROR_CHECK(apds9930_enablePower(&apds9930_dev)); ESP_ERROR_CHECK(apds9930_enableLightSensor(&apds9930_dev, false)); // Does apds9930_enablePower() too. ESP_ERROR_CHECK(apds9930_disableProximitySensor(&apds9930_dev)); ESP_ERROR_CHECK(apds9930_setAmbientLightGain(&apds9930_dev, l_gain)); @@ -99,8 +97,6 @@ err = ESP_OK; while (tries) { - ESP_LOGI(TAG, "2 tries %d", tries); - err = apds9930_readAmbientLightLux(&apds9930_dev, &ambient_light); if (err == ESP_OK) { err = apds9930_readCh0Light(&apds9930_dev, &ch0); if (err == ESP_OK) { @@ -111,7 +107,7 @@ ESP_LOGE(TAG, "read APDS-9930 values error '%s'", esp_err_to_name(err)); break; } - ESP_LOGI(TAG, "2a ALS_maxcount=%d ALS_mincount=%d", ALS_maxcount, ALS_mincount); + ambient_light = apds9930_floatAmbientToLux(&apds9930_dev, ch0, ch1); /* * Check ranges @@ -144,7 +140,9 @@ } else if (l_aglbit) { ambient_light = ambient_light / 0.1666; } - ESP_LOGI(TAG, "Ambient: %.3f Ch0: %d Ch1: %d Gain: %d AGL: %d", ambient_light, ch0, ch1, l_gain, l_aglbit); + nvsio_write_u8((char *)"l_gain", l_gain); + nvsio_write_u8((char *)"l_aglbit", l_aglbit); + ESP_LOGI(TAG, "Ambient: %.2f Ch0: %d Ch1: %d Gain: %d AGL: %d", ambient_light, ch0, ch1, l_gain, l_aglbit); break; } tries--; @@ -185,7 +183,7 @@ xEventGroupClearBits(xEventGroupAPDS9930, TASK_APDS9930_REQUEST_LIGHT); xEventGroupSetBits(xEventGroupAPDS9930, TASK_APDS9930_REQUEST_DONE); -#if 1 +#if 0 ESP_LOGI(TAG, " Light: %.2f, gain: %d, error: %d", apds9930_state->ambient_light, apds9930_state->gain, apds9930_state->error); #endif }