--- a/main/dcf77tx.c Thu Oct 19 17:32:16 2023 +0200 +++ b/main/dcf77tx.c Fri Oct 20 15:57:56 2023 +0200 @@ -7,6 +7,7 @@ static const char *TAG = "dcf77tx"; static TaskHandle_t xTaskWifi = NULL; +static TaskHandle_t xTaskDCF = NULL; char hostname[32]; int Main_Loop = ML_INIT; @@ -15,6 +16,9 @@ extern WIFI_State *wifi_state; ///< WiFi state extern bool _wifi_ScanDone; extern int8_t _wifi_RSSI; +extern SemaphoreHandle_t xSemaphoreDCF; +extern DCF_State *dcf_state; ///< DCF77 state +extern bool System_TimeOk; void app_main(void) @@ -38,30 +42,30 @@ esp_efuse_mac_get_default(mac_addr); sprintf(hostname, "dcf77tx-%02x%02x%02x", mac_addr[3], mac_addr[4], mac_addr[5]); + setenv("TZ", "CET-01CEST-02,M3.4.0,M10.4.0", 1); + tzset(); + esp_log_level_set("wifi", ESP_LOG_ERROR); xTaskCreate(&task_wifi, "task_wifi", 4096, NULL, 3, &xTaskWifi); + xTaskCreate(&task_DCF, "task_DCF", 4096, NULL, 4, &xTaskDCF); int wait = 150; while (wait) { vTaskDelay(100 / portTICK_PERIOD_MS); if (ready_WiFi()) { - ESP_LOGI(TAG, "Online in %.1f seconds", (150 - wait) / 10.0); - wait = 0; + ESP_LOGI(TAG, "Online in %.1f seconds", (150 - wait) / 10.0); + wait = 0; } else { - wait--; - if (wait < 1) - ESP_LOGE(TAG, "Timeout network connection"); + wait--; + if (wait < 1) + ESP_LOGE(TAG, "Timeout network connection"); } } - time_t now; struct tm timeinfo; char strftime_buf[64]; time(&now); - // Set timezone to Central Europe Time and print local time - setenv("TZ", "CET-01CEST-02,M3.4.0,M10.4.0", 1); - tzset(); localtime_r(&now, &timeinfo); strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); ESP_LOGI(TAG, "The current date/time in Amsterdam is: %s", strftime_buf); @@ -74,14 +78,38 @@ case ML_INIT: if (ready_WiFi() ) { Main_Loop = ML_SYNC; ESP_LOGI(TAG, "ML_INIT -> ML_SYNC"); + gpio_set_level(CONFIG_LED1_PIN, 1); } else { Main_Loop = ML_CONNECT; ESP_LOGI(TAG, "ML_INIT -> ML_CONNECT"); } break; - case ML_CONNECT: break; - case ML_SYNC: break; - case ML_RUN: break; + case ML_CONNECT: if (System_TimeOk) { + Main_Loop = ML_SYNC; + ESP_LOGI(TAG, "ML_CONNECT -> ML_SYNC"); + } + break; + case ML_SYNC: if (System_TimeOk == false) { + Main_Loop = ML_CONNECT; + ESP_LOGI(TAG, "ML_SYNC -> ML_CONNECT"); + } + time(&now); + localtime_r(&now, &timeinfo); + if (timeinfo.tm_sec == 0) { + Main_Loop = ML_RUN; + ESP_LOGI(TAG, "ML_SYNC -> ML_RUN"); + request_DCF(true); + gpio_set_level(CONFIG_LED2_PIN, 1); + gpio_set_level(CONFIG_LED1_PIN, 0); + } + break; + case ML_RUN: if (System_TimeOk == false) { + Main_Loop = ML_CONNECT; + ESP_LOGI(TAG, "ML_RUN -> ML_CONNECT"); + request_DCF(false); + gpio_set_level(CONFIG_LED2_PIN, 0); + } + break; } vTaskDelay(10 / portTICK_PERIOD_MS);