From fbdec8f1743adbf4e76fbd1fd9987c85bd16f00b Mon Sep 17 00:00:00 2001 From: Develo Date: Wed, 27 Feb 2019 16:41:38 -0300 Subject: [PATCH 1/4] Implement sntp_get|set_timezone_in_seconds() --- cores/esp8266/sntp-lwip2.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/cores/esp8266/sntp-lwip2.cpp b/cores/esp8266/sntp-lwip2.cpp index 50b10bc5da..8592315c57 100644 --- a/cores/esp8266/sntp-lwip2.cpp +++ b/cores/esp8266/sntp-lwip2.cpp @@ -57,14 +57,14 @@ void settimeofday_cb (void (*cb)(void)) #include static const char stod14[] PROGMEM = "settimeofday() can't set time!\n"; -bool sntp_set_timezone(sint8 timezone); +bool sntp_set_timezone_in_seconds(sint32 timezone); void sntp_set_daylight(int daylight); int settimeofday(const struct timeval* tv, const struct timezone* tz) { if (tz) /*before*/ { - sntp_set_timezone(tz->tz_minuteswest / 60); + sntp_set_timezone_in_seconds(tz->tz_minuteswest * 60); // apparently tz->tz_dsttime is a bitfield and should not be further used (cf man) sntp_set_daylight(0); } @@ -89,7 +89,7 @@ int settimeofday(const struct timeval* tv, const struct timezone* tz) static uint32 realtime_stamp = 0; static uint16 dst = 0; -static sint8 time_zone = 8; // espressif HQ's default timezone +static sint32 time_zone = 8 * (60 * 60); // espressif HQ's default timezone LOCAL os_timer_t sntp_timer; /*****************************************/ @@ -410,14 +410,22 @@ char* sntp_get_real_time(time_t t) return sntp_asctime(sntp_localtime (&t)); } -sint8 sntp_get_timezone(void) +/* Returns the set timezone in seconds. If the timezone was set as seconds, the fractional part is floored. */ +sint32 sntp_get_timezone_in_seconds(void) { return time_zone; } -bool sntp_set_timezone(sint8 timezone) +/* Returns the set timezone in hours. If the timezone was set as seconds, the fractional part is floored. */ +sint8 sntp_get_timezone(void) +{ + return (sint8)(time_zone / (60 * 60); +} + +/* Sets the timezone in hours. Internally, the timezone is converted to seconds. */ +bool sntp_set_timezone_in_seconds(sint32 timezone) { - if(timezone >= -11 || timezone <= 13) { + if(timezone >= (-11 * (60 * 60)) || timezone <= (13 * (60 * 60))) { time_zone = timezone; return true; } else { @@ -425,6 +433,13 @@ bool sntp_set_timezone(sint8 timezone) } } +/* Sets the timezone in hours. Internally, the timezone is converted to seconds. */ +bool sntp_set_timezone(sint8 timezone) +{ + return sntp_set_time_zone_in_seconds((sint32)timezone * 60 * 60); +} + + void sntp_set_daylight(int daylight) { dst = daylight; @@ -437,7 +452,7 @@ void ICACHE_RAM_ATTR sntp_time_inc (void) static void sntp_set_system_time (uint32_t t) { - realtime_stamp = t + time_zone * 60 * 60 + dst; + realtime_stamp = t + time_zone + dst; os_timer_disarm(&sntp_timer); os_timer_setfn(&sntp_timer, (os_timer_func_t *)sntp_time_inc, NULL); os_timer_arm(&sntp_timer, 1000, 1); @@ -447,7 +462,7 @@ int settimeofday(const struct timeval* tv, const struct timezone* tz) { if (tz) /*before*/ { - sntp_set_timezone(tz->tz_minuteswest / 60); + sntp_set_timezone_in_seconds(tz->tz_minuteswest * 60); // apparently tz->tz_dsttime is a bitfield and should not be further used (cf man) sntp_set_daylight(0); } From 45396d2a8203cc31ba25d19d56650703a2626e70 Mon Sep 17 00:00:00 2001 From: Develo Date: Wed, 27 Feb 2019 22:12:24 -0300 Subject: [PATCH 2/4] Fix typo --- cores/esp8266/sntp-lwip2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp8266/sntp-lwip2.cpp b/cores/esp8266/sntp-lwip2.cpp index 8592315c57..699b9c50cd 100644 --- a/cores/esp8266/sntp-lwip2.cpp +++ b/cores/esp8266/sntp-lwip2.cpp @@ -419,7 +419,7 @@ sint32 sntp_get_timezone_in_seconds(void) /* Returns the set timezone in hours. If the timezone was set as seconds, the fractional part is floored. */ sint8 sntp_get_timezone(void) { - return (sint8)(time_zone / (60 * 60); + return (sint8)(time_zone / (60 * 60)); } /* Sets the timezone in hours. Internally, the timezone is converted to seconds. */ From e3c20274f39b8a47a7d49f5eafb81826b5ec92e6 Mon Sep 17 00:00:00 2001 From: Develo Date: Wed, 27 Feb 2019 22:21:14 -0300 Subject: [PATCH 3/4] Fix typo --- cores/esp8266/sntp-lwip2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/esp8266/sntp-lwip2.cpp b/cores/esp8266/sntp-lwip2.cpp index 699b9c50cd..8debcf00cd 100644 --- a/cores/esp8266/sntp-lwip2.cpp +++ b/cores/esp8266/sntp-lwip2.cpp @@ -436,7 +436,7 @@ bool sntp_set_timezone_in_seconds(sint32 timezone) /* Sets the timezone in hours. Internally, the timezone is converted to seconds. */ bool sntp_set_timezone(sint8 timezone) { - return sntp_set_time_zone_in_seconds((sint32)timezone * 60 * 60); + return sntp_set_timezone_in_seconds((sint32)timezone * 60 * 60); } From cfbc5446f12994202cc450c0091b2c6b2e527bbb Mon Sep 17 00:00:00 2001 From: Develo Date: Thu, 28 Feb 2019 02:00:23 -0300 Subject: [PATCH 4/4] Get lwip1.4 to compile This is just a workaround to get lwip1.4 to compile. It doesn't implement sntp_set_timezone_in_seconds() correctly, but rather does pretty much the same as sntp_set_timezone(). --- cores/esp8266/sntp-lwip2.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cores/esp8266/sntp-lwip2.cpp b/cores/esp8266/sntp-lwip2.cpp index 8debcf00cd..5edfa66c63 100644 --- a/cores/esp8266/sntp-lwip2.cpp +++ b/cores/esp8266/sntp-lwip2.cpp @@ -57,7 +57,12 @@ void settimeofday_cb (void (*cb)(void)) #include static const char stod14[] PROGMEM = "settimeofday() can't set time!\n"; -bool sntp_set_timezone_in_seconds(sint32 timezone); +bool sntp_set_timezone(sint8 timezone); +bool sntp_set_timezone_in_seconds(sint32 timezone) +{ + return sntp_set_timezone((sint8)(timezone/(60*60))); //TODO: move this to the same file as sntp_set_timezone() in lwip1.4, and implement correctly over there. +} + void sntp_set_daylight(int daylight); int settimeofday(const struct timeval* tv, const struct timezone* tz)