#include "service_clock.h" #include #include "esp_log.h" #include "if_standby.h" #include "task_config.h" #define LOG_TAG "SERVICE_CLOCK" static TaskHandle_t s_clock_task_handle; static const char *s_wday_array[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"}; void clock_task(void *pvParameters) { struct tm timeinfo; time_t now; uint8_t prev_min = 0xFF; uint8_t prev_mday = 0xFF; uint8_t prev_wday = 0xFF; setenv("TZ", "CST-8", 1); tzset(); for (;;) { time(&now); localtime_r(&now, &timeinfo); if ((timeinfo.tm_min != prev_min) || (prev_min == 0xFF)) { if_standby_component_update(IF_STANDBY_COMPONENT_TIME, "%02u:%02u", timeinfo.tm_hour, timeinfo.tm_min); prev_min = timeinfo.tm_min; } if ((timeinfo.tm_mday != prev_mday) || (prev_mday == 0xFF)) { if_standby_component_update(IF_STANDBY_COMPONENT_DATE, "%04u/%02d/%02d", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1, timeinfo.tm_mday); prev_mday = timeinfo.tm_mday; } if ((timeinfo.tm_wday != prev_wday) || (prev_wday == 0xFF)) { if_standby_component_update(IF_STANDBY_COMPONENT_WEEKDAY, s_wday_array[timeinfo.tm_wday]); prev_wday = timeinfo.tm_wday; } // TODO: Set an alarm at 0sec every 1 minute. vTaskDelay(pdMS_TO_TICKS(200)); } } esp_err_t service_clock_init(void) { if (xTaskCreate(clock_task, "SVC_CLK", TASK_SVC_CLK_STACK_SIZE, NULL, TASK_SVC_CLK_PRIORITY, &s_clock_task_handle) != pdTRUE) { return ESP_FAIL; } return ESP_OK; }