From d9ed3f2334202150efafdaf4ef0acdc331ba973a Mon Sep 17 00:00:00 2001 From: leo Date: Sat, 24 Dec 2022 13:44:45 +0100 Subject: [PATCH] upd measure on connect --- components/BTlib/BTlib_nimble.c | 6 ++++ main/CO2_Sense.c | 52 ++++++++++++--------------------- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/components/BTlib/BTlib_nimble.c b/components/BTlib/BTlib_nimble.c index 39ecbde..5dd0ff4 100644 --- a/components/BTlib/BTlib_nimble.c +++ b/components/BTlib/BTlib_nimble.c @@ -5,6 +5,8 @@ #include "host/ble_uuid.h" #include "nimble/hci_common.h" #include "os/os_mbuf.h" +#include "scd4x_data.h" +#include "scd4x_i2c.h" #include "sdkconfig.h" #include #ifdef CONFIG_BT_NIMBLE_ENABLED @@ -18,6 +20,9 @@ #include "services/gatt/ble_svc_gatt.h" #include "nimble/nimble_port_freertos.h" +#include "scd4x_util.h" +#include "scd4x_i2c.h" + static configuration_data_t* main_app_conf; static uint8_t ble_addr_type; @@ -506,6 +511,7 @@ static int gatt_svr_chr_access_magfield_update(uint16_t conn_handle, uint16_t at } static void ble_advertise(void){ + scd4x_power_down(); main_app_conf->sensor->enabled = false; ESP_ERROR_CHECK(ble_gap_adv_set_fields(&adv_fields)); ESP_ERROR_CHECK(ble_gap_adv_start(ble_addr_type, NULL, BLE_HS_FOREVER, &adv_params, ble_gap_event, NULL)); diff --git a/main/CO2_Sense.c b/main/CO2_Sense.c index c7f16c4..13ccebd 100644 --- a/main/CO2_Sense.c +++ b/main/CO2_Sense.c @@ -20,6 +20,7 @@ #include "ledController.h" #include "power_inout.h" #include "scd4x_i2c.h" +#include "scd4x_util.h" #include "sdkconfig.h" #include "sensirion_i2c_hal.h" #include "scd4x_data.h" @@ -92,52 +93,35 @@ void fetch_sensor_task(void* pvParameters){ configuration_data_t* mainConf = (configuration_data_t*) pvParameters; scd4x_config_t* conf = mainConf->sensor; scd4x_data_t* measures = conf->measure; - uint8_t sensorStarted = false; + int sensorStarted = false; while(1){ ESP_LOGI("MAIN", "witing for %d sec", conf->delay); - vTaskDelay(conf->delay * 1000 / portTICK_PERIOD_MS); + for(int i=0, oldEnable=conf->enabled; idelay || !conf->enabled; i++){ + vTaskDelay(1000 / portTICK_PERIOD_MS); + if(conf->enabled != oldEnable) break; + ESP_LOGI("MAIN", "waiting"); + } + ESP_LOGI("MAIN", "sensor status changed"); + if(!conf->enabled){ if(sensorStarted){ - sensorStarted = false; scd4x_power_down(); + sensorStarted = false; } - else{ - continue; - } + else continue; } - if(conf->enabled && !sensorStarted){ - scd4x_wake_up(); - for(int i=0; i<5; i++){ - uint16_t s0, s1, s2; - int16_t res=scd4x_get_serial_number(&s0, &s1, &s2); - if(res == 0) break; - vTaskDelay(500 / portTICK_PERIOD_MS); - ESP_LOGI("MAIN", "get serial, res %d; serial %d %d %d", res, s0, s1, s2); - } - sensorStarted = true; - switch(conf->mode){ - case SCD4X_NORMAL_MODE: - ESP_ERROR_CHECK(scd4x_start_periodic_measurement()); - ESP_LOGI("scd4x init","started in normal mode"); - break; - case SCD4X_LP_MODE: - ESP_ERROR_CHECK(scd4x_start_low_power_periodic_measurement()); - ESP_LOGI("scd4x init","started in low power mode"); - break; + else{ + if(!sensorStarted){ + scd4x_wait_wake_up(); + scd4x_measure_single_shot(); + update_scd4x_measures(measures); + start_scd4x_measure(conf); } } if(conf->mode == SCD4X_SS_MODE) scd4x_measure_single_shot(); ESP_LOGI("MAIN", "reading sensor"); - uint16_t dataReady; - scd4x_get_data_ready_status(&dataReady); - if(!(dataReady & 0x07FF)){ - ESP_LOGI("MAIN", "no new sensor data"); - continue; - } - int16_t error = scd4x_read_measurement(&measures->co2, &measures->temperature, &measures->humidity); - if (error) - ESP_LOGE("sensor fetch", "Error executing scd4x_read_measurement(): %i\n", error); + update_scd4x_measures(measures); update_led_status(mainConf->leds, mainConf->led_nb, conf->measure->co2); ble_sensor_notify(); ESP_LOGI("MAIN", "co2 : %u ppm, temp : %ld m°C, hum : %ld mRH", conf->measure->co2, conf->measure->temperature, conf->measure->humidity);