ESP32S2_Cal/main/service/service_clock.c

58 lines
1.6 KiB
C

#include "service_clock.h"
#include <time.h>
#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;
}