esp-open-rtos/extras/sntp/sntp.h
iosen b1f7a0493f sntp: calibrate to the ntp times rather than the system function.
The system sdk_system_rtc_clock_cali_proc() is rather noisy, so
this patch calibrates the RTC count to the NTP time responses.

An average of many calls to sdk_system_rtc_clock_cali_proc() is used
for initialization.

The system calibration value is used to limit the calibration value
computed via the ntp times, to 1/16 either way.

A 64 bit RTC counter is implemented, and used in the calculations, but
might be of some use on its own.

The ratio of the ntp time differences and the RTC count differences is
filtered a little to keep the changes relatively stable and to filter
the jitter.
2016-07-02 01:38:51 +10:00

75 lines
2.2 KiB
C

/************************************************************************//**
* RTC time keeping and synchronization using SNTP for esp-open-rtos.
* Uses SNTP lwIP contribution.
*
* 2016, Jesus Alonso (doragasu)
****************************************************************************/
#ifndef _SNTP_H_
#define _SNTP_H_
#include <stdint.h>
#include <sys/time.h>
#include <time.h>
/*
* Function used by lwIP sntp module to update the date/time,
* with microseconds resolution.
*/
#define SNTP_SET_SYSTEM_TIME_US(sec, us) sntp_update_rtc(sec, us)
/*
* For the lwIP implementation of SNTP to allow using names for NTP servers.
*/
#define SNTP_SERVER_DNS 1
/*
* Number of supported NTP servers
*/
#define SNTP_NUM_SERVERS_SUPPORTED 4
/*
* Initialize the module, and start requesting SNTP updates. This function
* must be called only once.
* WARNING: tz->tz_dsttime doesn't have the same meaning as the standard
* implementation. If it is set to 1, a dst hour will be applied. If set
* to zero, time will not be modified.
*/
void sntp_initialize(const struct timezone *tz);
/*
* Sets time zone. Allowed values are in the range [-11, 13].
* NOTE: Settings do not take effect until SNTP time is updated. It is
* recommended to set these parameters only during initialization.
* WARNING: tz->tz_dsttime doesn't have the same meaning as the standard
* implementation. If it is set to 1, a dst hour will be applied. If set
* to zero, time will not be modified.
*/
void sntp_set_timezone(const struct timezone *tz);
/*
* Set SNTP servers. Up to SNTP_NUM_SERVERS_SUPPORTED can be set.
* Returns 0 if OK, less than 0 if error.
* NOTE: This function must NOT be called before sntp_initialize().
*/
int sntp_set_servers(char *server_url[], int num_servers);
/*
* Sets the update delay in ms. If requested value is less than 15s,
* a 15s update interval will be set.
*/
void sntp_set_update_delay(uint32_t ms);
/*
* Returns the time read from RTC counter, in micro seconds from Epoch.
*/
uint64_t sntp_get_rtc_time();
/*
* Update RTC timer. This function is called by the SNTP module each time
* an SNTP update is received.
*/
void sntp_update_rtc(time_t t, uint32_t us);
#endif /* _SNTP_H_ */