/* * clock.c * * Created on: Apr 23, 2020 * Author: chris */ #include "clock.h" const char* TAG = "clock"; void time_sync_notification_cb(struct timeval *tv) { ESP_LOGI(TAG, "Synchronized time to PTB!"); } esp_err_t init_clock() { ESP_LOGI(TAG, "Initializing SNTP"); esp_event_loop_create_default(); sntp_setoperatingmode(SNTP_OPMODE_POLL); sntp_setservername(0, "ptbtime1.ptb.de"); sntp_set_time_sync_notification_cb(time_sync_notification_cb); sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED); sntp_init(); // wait for time to be set time_t now = 0; struct tm timeinfo = { 0 }; int retry = 0; const int retry_count = 10; while (sntp_get_sync_status() == SNTP_SYNC_STATUS_RESET && ++retry < retry_count) { ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count); vTaskDelay(2000 / portTICK_PERIOD_MS); } time(&now); localtime_r(&now, &timeinfo); setenv("TZ", "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", 1); tzset(); return ESP_OK; } void get_time(time_str_t* res) { time_t now; struct tm timeinfo; time(&now); localtime_r(&now, &timeinfo); char date_str[64]; char time_str[64]; strftime(date_str, sizeof(date_str), "%d.%m.%Y", &timeinfo); strftime(time_str, sizeof(time_str), "%H:%M:%S", &timeinfo); strcpy(res->date_str, date_str); strcpy(res->time_str, time_str); }