sntp: Add API to set update interval

Closes: https://github.com/espressif/esp-idf/issues/4437
Closes: IDFGH-2298
This commit is contained in:
Konstantin Kondrashov 2019-12-20 18:26:23 +08:00 committed by Mahavir Jain
parent 28314f9bb0
commit 98495e5939
3 changed files with 57 additions and 1 deletions

View file

@ -18,12 +18,14 @@
#include <sys/time.h>
#include "esp_log.h"
#include "sntp.h"
#include "lwip/apps/sntp.h"
static const char *TAG = "sntp";
static volatile sntp_sync_mode_t sntp_sync_mode = SNTP_SYNC_MODE_IMMED;
static volatile sntp_sync_status_t sntp_sync_status = SNTP_SYNC_STATUS_RESET;
static sntp_sync_time_cb_t time_sync_notification_cb = NULL;
static uint32_t s_sync_interval = CONFIG_LWIP_SNTP_UPDATE_DELAY;
inline void sntp_set_sync_status(sntp_sync_status_t sync_status)
{
@ -91,3 +93,27 @@ sntp_sync_status_t sntp_get_sync_status(void)
}
return ret_sync_status;
}
void sntp_set_sync_interval(uint32_t interval_ms)
{
if (interval_ms < 15000) {
// SNTPv4 RFC 4330 enforces a minimum update time of 15 seconds
interval_ms = 15000;
}
s_sync_interval = interval_ms;
}
uint32_t sntp_get_sync_interval(void)
{
return s_sync_interval;
}
bool sntp_restart(void)
{
if (sntp_enabled()) {
sntp_stop();
sntp_init();
return true;
}
return false;
}

View file

@ -120,6 +120,33 @@ void sntp_set_sync_status(sntp_sync_status_t sync_status);
*/
void sntp_set_time_sync_notification_cb(sntp_sync_time_cb_t callback);
/**
* @brief Set the sync interval of SNTP operation
*
* Note: SNTPv4 RFC 4330 enforces a minimum sync interval of 15 seconds.
* This sync interval will be used in the next attempt update time throught SNTP.
* To apply the new sync interval call the sntp_restart() function,
* otherwise, it will be applied after the last interval expired.
*
* @param interval_ms The sync interval in ms. It cannot be lower than 15 seconds, otherwise 15 seconds will be set.
*/
void sntp_set_sync_interval(uint32_t interval_ms);
/**
* @brief Get the sync interval of SNTP operation
*
* @return the sync interval
*/
uint32_t sntp_get_sync_interval(void);
/**
* @brief Restart SNTP
*
* @return True - Restart
* False - SNTP was not initialized yet
*/
bool sntp_restart(void);
#ifdef __cplusplus
}
#endif

View file

@ -844,7 +844,10 @@
*/
#define SNTP_SERVER_DNS 1
#define SNTP_UPDATE_DELAY CONFIG_LWIP_SNTP_UPDATE_DELAY
// It disables a check of SNTP_UPDATE_DELAY it is done in sntp_set_sync_interval
#define SNTP_SUPPRESS_DELAY_CHECK
#define SNTP_UPDATE_DELAY (sntp_get_sync_interval())
#define SNTP_SET_SYSTEM_TIME_US(sec, us) \
do { \