|  | @@ -11,7 +11,7 @@
 | 
	
		
			
				|  |  |  #include <esp_sntp.h>
 | 
	
		
			
				|  |  |  #include <esp_wifi.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static String ssid, password, hostname, dnsserver, sntpserver;
 | 
	
		
			
				|  |  | +static String ssid, password, hostname, dnsserver;
 | 
	
		
			
				|  |  |  static TimerHandle_t sta_failure_timer;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  static bool sta_timeout_enabled;
 | 
	
	
		
			
				|  | @@ -61,12 +61,13 @@ static void sntp_sync_cb(struct timeval *tv)
 | 
	
		
			
				|  |  |      prev_sync_status = sync_status;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void my_sntp_start()
 | 
	
		
			
				|  |  | +static void my_sntp_start(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      setenv_bool("status.net.sntp.sync", false);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if (getenv_bool("sntp.enabled")) {
 | 
	
		
			
				|  |  |  	sntp_set_time_sync_notification_cb(sntp_sync_cb);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	sntp_setoperatingmode(SNTP_OPMODE_POLL);
 | 
	
		
			
				|  |  |  	sntp_servermode_dhcp(!getenv_bool("ip4.dhcp.nosntp"));
 | 
	
		
			
				|  |  |  	sntp_set_sync_mode(SNTP_SYNC_MODE_IMMED); // Until first sync
 | 
	
	
		
			
				|  | @@ -92,6 +93,43 @@ static inline bool invalid_ip(const ip_addr_t *ip)
 | 
	
		
			
				|  |  |      return !memcmp(ip, &ip_addr_any, sizeof *ip);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void sntp_server_show(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    const ip_addr_t *sntp_ip = sntp_getserver(0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (!invalid_ip(sntp_ip)) {
 | 
	
		
			
				|  |  | +	const char *sntp_server = inet_ntoa(*sntp_ip);
 | 
	
		
			
				|  |  | +	printf("[SNTP] Time server: %s\n", sntp_server);
 | 
	
		
			
				|  |  | +	setenv_cond("status.net.sntp.server", sntp_server);
 | 
	
		
			
				|  |  | +    } else {
 | 
	
		
			
				|  |  | +	unsetenv("status.net.sntp.server");
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void sntp_server_found(const char *name, const ip_addr_t *addr,
 | 
	
		
			
				|  |  | +			      void *arg)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    (void)name;
 | 
	
		
			
				|  |  | +    (void)arg;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (invalid_ip(addr))
 | 
	
		
			
				|  |  | +	return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    sntp_setserver(0, addr);
 | 
	
		
			
				|  |  | +    sntp_server_show();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void sntp_set_server(const char *name)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    if (!name || !*name)
 | 
	
		
			
				|  |  | +	return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    ip_addr_t addr;
 | 
	
		
			
				|  |  | +    err_t err = dns_gethostbyname(name, &addr, sntp_server_found, NULL);
 | 
	
		
			
				|  |  | +    if (err == ERR_OK)
 | 
	
		
			
				|  |  | +	sntp_server_found(name, &addr, NULL);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void start_services(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      /* Always run after (re)connect */
 | 
	
	
		
			
				|  | @@ -114,22 +152,11 @@ static void start_services(void)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // If Arduino supported both of these at the same that would be
 | 
	
		
			
				|  |  |      // awesome, but it requires ESP-IDF reconfiguration...
 | 
	
		
			
				|  |  | -    if (sntp_enabled()) {
 | 
	
		
			
				|  |  | -	const ip_addr_t *sntp_ip = sntp_getserver(0);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if (invalid_ip(sntp_ip)) {
 | 
	
		
			
				|  |  | -	    if (sntpserver != "") {
 | 
	
		
			
				|  |  | -		sntp_setservername(0, sntpserver.c_str());
 | 
	
		
			
				|  |  | -		sntp_ip = sntp_getserver(0);
 | 
	
		
			
				|  |  | -	    }
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	if (!invalid_ip(sntp_ip)) {
 | 
	
		
			
				|  |  | -	    const char *sntp_server = inet_ntoa(*sntp_ip);
 | 
	
		
			
				|  |  | -	    printf("[SNTP] Time server: %s\n", sntp_server);
 | 
	
		
			
				|  |  | -	    setenv_cond("status.net.sntp.server", sntp_server);
 | 
	
		
			
				|  |  | +    if (getenv_bool("sntp.enabled")) {
 | 
	
		
			
				|  |  | +	if (!invalid_ip(sntp_getserver(0))) {
 | 
	
		
			
				|  |  | +	    sntp_server_show();
 | 
	
		
			
				|  |  |  	} else {
 | 
	
		
			
				|  |  | -	    unsetenv("status.net.sntp.server");
 | 
	
		
			
				|  |  | +	    sntp_set_server(getenv("sntp.server"));
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 |