Fix ESP8266 core has a broken settimeofday implementation (#1231)

This commit is contained in:
Otto Winter 2020-07-30 11:41:06 +02:00 committed by Guillermo Ruffino
parent 61bfd347ea
commit 29cfcfaf0f

View File

@ -4,6 +4,7 @@
#ifdef ARDUINO_ARCH_ESP8266
#include "sys/time.h"
#endif
#include "errno.h"
namespace esphome {
namespace time {
@ -20,8 +21,18 @@ void RealTimeClock::synchronize_epoch_(uint32_t epoch) {
struct timeval timev {
.tv_sec = static_cast<time_t>(epoch), .tv_usec = 0,
};
ESP_LOGVV(TAG, "Got epoch %u", epoch);
timezone tz = {0, 0};
settimeofday(&timev, &tz);
int ret = settimeofday(&timev, &tz);
if (ret == EINVAL) {
// Some ESP8266 frameworks abort when timezone parameter is not NULL
// while ESP32 expects it not to be NULL
ret = settimeofday(&timev, nullptr);
}
if (ret != 0) {
ESP_LOGW(TAG, "setimeofday() failed with code %d", ret);
}
auto time = this->now();
char buf[128];