58 lines
1.6 KiB
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;
|
|
} |