8 |
8 |
9 static TaskHandle_t xTaskWifi = NULL; |
9 static TaskHandle_t xTaskWifi = NULL; |
10 static TaskHandle_t xTaskDCF = NULL; |
10 static TaskHandle_t xTaskDCF = NULL; |
11 char hostname[32]; |
11 char hostname[32]; |
12 int Main_Loop = ML_INIT; |
12 int Main_Loop = ML_INIT; |
13 |
13 static led_strip_handle_t led_strip; ///< ESP32-C3 onboard LED |
14 |
14 |
15 extern SemaphoreHandle_t xSemaphoreWiFi; |
15 extern SemaphoreHandle_t xSemaphoreWiFi; |
16 extern WIFI_State *wifi_state; ///< WiFi state |
16 extern WIFI_State *wifi_state; ///< WiFi state |
17 extern bool _wifi_ScanDone; |
17 extern bool _wifi_ScanDone; |
18 extern int8_t _wifi_RSSI; |
18 extern int8_t _wifi_RSSI; |
19 extern SemaphoreHandle_t xSemaphoreDCF; |
19 extern SemaphoreHandle_t xSemaphoreDCF; |
20 extern DCF_State *dcf_state; ///< DCF77 state |
20 extern DCF_State *dcf_state; ///< DCF77 state |
21 extern bool System_TimeOk; |
21 extern bool System_TimeOk; |
|
22 |
|
23 |
|
24 void set_ob_led(uint32_t red, uint32_t green, uint32_t blue) |
|
25 { |
|
26 if ((red + green + blue) > 0) { |
|
27 led_strip_set_pixel(led_strip, 0, red, green, blue); |
|
28 led_strip_refresh(led_strip); |
|
29 } else { |
|
30 led_strip_clear(led_strip); |
|
31 } |
|
32 } |
22 |
33 |
23 |
34 |
24 void app_main(void) |
35 void app_main(void) |
25 { |
36 { |
26 esp_err_t ret; |
37 esp_err_t ret; |
47 |
58 |
48 esp_log_level_set("wifi", ESP_LOG_ERROR); |
59 esp_log_level_set("wifi", ESP_LOG_ERROR); |
49 xTaskCreate(&task_wifi, "task_wifi", 4096, NULL, 3, &xTaskWifi); |
60 xTaskCreate(&task_wifi, "task_wifi", 4096, NULL, 3, &xTaskWifi); |
50 xTaskCreate(&task_DCF, "task_DCF", 4096, NULL, 4, &xTaskDCF); |
61 xTaskCreate(&task_DCF, "task_DCF", 4096, NULL, 4, &xTaskDCF); |
51 |
62 |
|
63 led_strip_config_t strip_config = { |
|
64 .strip_gpio_num = 7, |
|
65 .max_leds = 1, // at least one LED on board |
|
66 }; |
|
67 led_strip_rmt_config_t rmt_config = { |
|
68 .resolution_hz = 10 * 1000 * 1000, // 10MHz |
|
69 }; |
|
70 ESP_ERROR_CHECK(led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip)); |
|
71 /* Set all LED off to clear all pixels */ |
|
72 led_strip_clear(led_strip); |
|
73 |
52 int wait = 150; |
74 int wait = 150; |
53 while (wait) { |
75 while (wait) { |
54 vTaskDelay(100 / portTICK_PERIOD_MS); |
76 vTaskDelay(100 / portTICK_PERIOD_MS); |
55 if (ready_WiFi()) { |
77 if (ready_WiFi()) { |
56 ESP_LOGI(TAG, "Online in %.1f seconds", (150 - wait) / 10.0); |
78 ESP_LOGI(TAG, "Online in %.1f seconds", (150 - wait) / 10.0); |
76 while (1) { |
98 while (1) { |
77 switch (Main_Loop) { |
99 switch (Main_Loop) { |
78 case ML_INIT: if (ready_WiFi() ) { |
100 case ML_INIT: if (ready_WiFi() ) { |
79 Main_Loop = ML_SYNC; |
101 Main_Loop = ML_SYNC; |
80 ESP_LOGI(TAG, "ML_INIT -> ML_SYNC"); |
102 ESP_LOGI(TAG, "ML_INIT -> ML_SYNC"); |
81 gpio_set_level(CONFIG_LED1_PIN, 1); |
103 set_ob_led(5, 0, 0); |
82 } else { |
104 } else { |
83 Main_Loop = ML_CONNECT; |
105 Main_Loop = ML_CONNECT; |
84 ESP_LOGI(TAG, "ML_INIT -> ML_CONNECT"); |
106 ESP_LOGI(TAG, "ML_INIT -> ML_CONNECT"); |
85 } |
107 } |
86 break; |
108 break; |
97 localtime_r(&now, &timeinfo); |
119 localtime_r(&now, &timeinfo); |
98 if (timeinfo.tm_sec == 0) { |
120 if (timeinfo.tm_sec == 0) { |
99 Main_Loop = ML_RUN; |
121 Main_Loop = ML_RUN; |
100 ESP_LOGI(TAG, "ML_SYNC -> ML_RUN"); |
122 ESP_LOGI(TAG, "ML_SYNC -> ML_RUN"); |
101 request_DCF(true); |
123 request_DCF(true); |
102 gpio_set_level(CONFIG_LED2_PIN, 1); |
|
103 gpio_set_level(CONFIG_LED1_PIN, 0); |
|
104 } |
124 } |
105 break; |
125 break; |
106 case ML_RUN: if (System_TimeOk == false) { |
126 case ML_RUN: if (System_TimeOk == false) { |
107 Main_Loop = ML_CONNECT; |
127 Main_Loop = ML_CONNECT; |
108 ESP_LOGI(TAG, "ML_RUN -> ML_CONNECT"); |
128 ESP_LOGI(TAG, "ML_RUN -> ML_CONNECT"); |
109 request_DCF(false); |
129 request_DCF(false); |
110 gpio_set_level(CONFIG_LED1_PIN, 0); |
|
111 gpio_set_level(CONFIG_LED2_PIN, 0); |
|
112 } |
130 } |
113 break; |
131 break; |
114 } |
132 } |
115 |
133 |
116 vTaskDelay(10 / portTICK_PERIOD_MS); |
134 vTaskDelay(10 / portTICK_PERIOD_MS); |