mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-04 08:01:38 +01:00 
			
		
		
		
	
		
			
	
	
		
			128 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			128 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2015-2019 Espressif Systems (Shanghai) PTE LTD
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								// you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								// You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//     http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								// Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								// distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								// See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								// limitations under the License.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef __SNTP_H__
							 | 
						||
| 
								 | 
							
								#define __SNTP_H__
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								extern "C" {
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * The time update takes place in the sntp_sync_time() function.
							 | 
						||
| 
								 | 
							
								 * The user has the ability to redefine this function in order
							 | 
						||
| 
								 | 
							
								 * to re-define its functionality. This function has two time update modes,
							 | 
						||
| 
								 | 
							
								 * which can be set via the sntp_set_sync_mode() function.
							 | 
						||
| 
								 | 
							
								 * Two modes are available:
							 | 
						||
| 
								 | 
							
								 * - the first is an immediate update when receiving time from the sntp server,
							 | 
						||
| 
								 | 
							
								 * - the second is a smooth time update (if the time error is no more than 35 minutes,
							 | 
						||
| 
								 | 
							
								 *   and an immediate update if the error is more than 35 minutes).
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * To receive notification of time synchronization,
							 | 
						||
| 
								 | 
							
								 * you can use the callback function or get the synchronization status
							 | 
						||
| 
								 | 
							
								 * via the sntp_get_sync_status() function.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * To determine the time synchronization time on the device, you can use:
							 | 
						||
| 
								 | 
							
								 * 1) sntp_set_time_sync_notification_cb() function to set the callback function,
							 | 
						||
| 
								 | 
							
								 *    which is convenient to use to receive notification of the update time.
							 | 
						||
| 
								 | 
							
								 * 2) sntp_get_sync_status() function for getting time synchronization status.
							 | 
						||
| 
								 | 
							
								 *    After the time synchronization is completed, the status will be
							 | 
						||
| 
								 | 
							
								 *    SNTP_SYNC_STATUS_COMPLETED, after, it will be reseted to SNTP_SYNC_STATUS_RESET
							 | 
						||
| 
								 | 
							
								 *    to wait for the next sync cycle.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// SNTP time update mode
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    SNTP_SYNC_MODE_IMMED,   /*!< Update system time immediately when receiving a response from the SNTP server. */
							 | 
						||
| 
								 | 
							
								    SNTP_SYNC_MODE_SMOOTH,  /*!< Smooth time updating. Time error is gradually reduced using adjtime function. If the difference between SNTP response time and system time is large (more than 35 minutes) then update immediately. */
							 | 
						||
| 
								 | 
							
								} sntp_sync_mode_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// SNTP sync status
							 | 
						||
| 
								 | 
							
								typedef enum {
							 | 
						||
| 
								 | 
							
								    SNTP_SYNC_STATUS_RESET,         // Reset status.
							 | 
						||
| 
								 | 
							
								    SNTP_SYNC_STATUS_COMPLETED,     // Time is synchronized.
							 | 
						||
| 
								 | 
							
								    SNTP_SYNC_STATUS_IN_PROGRESS,   // Smooth time sync in progress.
							 | 
						||
| 
								 | 
							
								} sntp_sync_status_t;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief SNTP callback function for notifying about time sync event
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param tv Time received from SNTP server.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								typedef void (*sntp_sync_time_cb_t) (struct timeval *tv);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief This function updates the system time.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This is a weak-linked function. It is possible to replace all SNTP update functionality
							 | 
						||
| 
								 | 
							
								 * by placing a sntp_sync_time() function in the app firmware source.
							 | 
						||
| 
								 | 
							
								 * If the default implementation is used, calling sntp_set_sync_mode() allows
							 | 
						||
| 
								 | 
							
								 * the time synchronization mode to be changed to instant or smooth.
							 | 
						||
| 
								 | 
							
								 * If a callback function is registered via sntp_set_time_sync_notification_cb(),
							 | 
						||
| 
								 | 
							
								 * it will be called following time synchronization.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param tv Time received from SNTP server.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void sntp_sync_time(struct timeval *tv);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief Set the sync mode
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Allowable two mode: SNTP_SYNC_MODE_IMMED and SNTP_SYNC_MODE_SMOOTH.
							 | 
						||
| 
								 | 
							
								 * @param sync_mode Sync mode.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void sntp_set_sync_mode(sntp_sync_mode_t sync_mode);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief Get set sync mode
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return  SNTP_SYNC_MODE_IMMED: Update time immediately.
							 | 
						||
| 
								 | 
							
								 *          SNTP_SYNC_MODE_SMOOTH: Smooth time updating.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								sntp_sync_mode_t sntp_get_sync_mode(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief Get status of time sync
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * After the update is completed, the status will be returned as SNTP_SYNC_STATUS_COMPLETED.
							 | 
						||
| 
								 | 
							
								 * After that, the status will be reset to SNTP_SYNC_STATUS_RESET.
							 | 
						||
| 
								 | 
							
								 * If the update operation is not completed yet, the status will be SNTP_SYNC_STATUS_RESET.
							 | 
						||
| 
								 | 
							
								 * If a smooth mode was chosen and the synchronization is still continuing (adjtime works), then it will be SNTP_SYNC_STATUS_IN_PROGRESS.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @return  SNTP_SYNC_STATUS_RESET: Reset status.
							 | 
						||
| 
								 | 
							
								 *          SNTP_SYNC_STATUS_COMPLETED: Time is synchronized.
							 | 
						||
| 
								 | 
							
								 *          SNTP_SYNC_STATUS_IN_PROGRESS: Smooth time sync in progress.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								sntp_sync_status_t sntp_get_sync_status(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief Set status of time sync
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param sync_status status of time sync (see sntp_sync_status_t)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void sntp_set_sync_status(sntp_sync_status_t sync_status);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @brief Set a callback function for time synchronization notification
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param callback a callback function
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								void sntp_set_time_sync_notification_cb(sntp_sync_time_cb_t callback);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef __cplusplus
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // __SNTP_H__
							 |