Skip to content

Commit 2d57457

Browse files
committed
Fix configTime call from outsite LwIP thread
1 parent 39738fe commit 2d57457

File tree

1 file changed

+35
-18
lines changed

1 file changed

+35
-18
lines changed

cores/esp32/esp32-hal-time.c

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
#include "esp32-hal.h"
1616
#include "lwip/apps/sntp.h"
17+
#include "lwip/priv/tcpip_priv.h"
18+
#include "lwip/err.h"
1719
#include "tcpip_adapter.h"
1820

1921
static void setTimeZone(long offset, int daylight)
@@ -40,21 +42,39 @@ static void setTimeZone(long offset, int daylight)
4042
tzset();
4143
}
4244

45+
typedef struct {
46+
struct tcpip_api_call_data call;
47+
u8_t mode;
48+
const char *server1;
49+
const char *server2;
50+
const char *server3;
51+
} tcpip_config_time_t;
52+
53+
static s8_t do_configTime(struct tcpip_api_call_data *msg) {
54+
tcpip_config_time_t *params = (tcpip_config_time_t *)msg;
55+
if(sntp_enabled()){
56+
sntp_stop();
57+
}
58+
sntp_setoperatingmode(params->mode);
59+
sntp_setservername(0, params->server1);
60+
sntp_setservername(1, params->server2);
61+
sntp_setservername(2, params->server3);
62+
sntp_init();
63+
return ERR_OK;
64+
}
65+
4366
/*
4467
* configTime
4568
* Source: https://github.com/esp8266/Arduino/blob/master/cores/esp8266/time.c
4669
* */
4770
void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2, const char* server3)
4871
{
49-
tcpip_adapter_init(); // Should not hurt anything if already inited
50-
if(sntp_enabled()){
51-
sntp_stop();
52-
}
53-
sntp_setoperatingmode(SNTP_OPMODE_POLL);
54-
sntp_setservername(0, (char*)server1);
55-
sntp_setservername(1, (char*)server2);
56-
sntp_setservername(2, (char*)server3);
57-
sntp_init();
72+
tcpip_config_time_t msg;
73+
msg.mode = SNTP_OPMODE_POLL;
74+
msg.server1 = server1;
75+
msg.server2 = server2;
76+
msg.server3 = server3;
77+
tcpip_api_call(do_configTime, (struct tcpip_api_call_data *)&msg);
5878
setTimeZone(-gmtOffset_sec, daylightOffset_sec);
5979
}
6080

@@ -64,15 +84,12 @@ void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1,
6484
* */
6585
void configTzTime(const char* tz, const char* server1, const char* server2, const char* server3)
6686
{
67-
tcpip_adapter_init(); // Should not hurt anything if already inited
68-
if(sntp_enabled()){
69-
sntp_stop();
70-
}
71-
sntp_setoperatingmode(SNTP_OPMODE_POLL);
72-
sntp_setservername(0, (char*)server1);
73-
sntp_setservername(1, (char*)server2);
74-
sntp_setservername(2, (char*)server3);
75-
sntp_init();
87+
tcpip_config_time_t msg;
88+
msg.mode = SNTP_OPMODE_POLL;
89+
msg.server1 = server1;
90+
msg.server2 = server2;
91+
msg.server3 = server3;
92+
tcpip_api_call(do_configTime, (struct tcpip_api_call_data *)&msg);
7693
setenv("TZ", tz, 1);
7794
tzset();
7895
}

0 commit comments

Comments
 (0)