EC600U_esp32_iap_uart/LinkSDK/components/ntp/aiot_ntp_api.h

265 lines
7.1 KiB
C
Raw Permalink Normal View History

2024-02-05 17:39:56 +08:00
/**
* @file aiot_ntp_api.h
* @brief ntp模块头文件, utc时间的能力
*
* @copyright Copyright (C) 2015-2020 Alibaba Group Holding Limited
*
* @details
*
* NTP模块用于从阿里云物联网平台上获取UTC时间, API的使用流程如下:
*
* 1. @ref aiot_mqtt_api.h , `MQTT`
*
* 2. @ref aiot_ntp_init ntp会话,
*
* 3. @ref aiot_ntp_setopt NTP会话的参数, @ref aiot_ntp_setopt
*
* 4. @ref aiot_ntp_send_request NTP请求
*
* 5. UTC时间经SDK处理后会调用由 @ref aiot_ntp_setopt @ref AIOT_NTPOPT_RECV_HANDLER ,
*
*/
#ifndef __AIOT_NTP_API_H__
#define __AIOT_NTP_API_H__
#if defined(__cplusplus)
extern "C" {
#endif
#include <stdint.h>
/**
* @brief -0x1100~-0x11FFSDK在ntp模块内的状态码
*/
#define STATE_NTP_BASE (-0x1100)
/**
* @brief MQTT会话句柄未设置, @ref aiot_ntp_setopt MQTT会话句柄
*/
#define STATE_NTP_MISSING_MQTT_HANDLE (-0x1101)
/**
* @brief ntp模块收到从网络上来的报文时,
*/
typedef enum {
AIOT_NTPRECV_LOCAL_TIME
} aiot_ntp_recv_type_t;
/**
* @brief ntp模块收到从网络上来的报文时,
*/
typedef struct {
/**
* @brief , @ref aiot_ntp_recv_type_t
*/
aiot_ntp_recv_type_t type;
union {
/**
* @brief utc事件戳以及时区换算后的日期, @ref AIOT_NTPOPT_TIME_ZONE
*/
struct {
uint64_t timestamp;
uint32_t year;
uint32_t mon;
uint32_t day;
uint32_t hour;
uint32_t min;
uint32_t sec;
uint32_t msec;
} local_time;
} data;
} aiot_ntp_recv_t;
/**
* @brief ntp模块收到从网络上来的报文时,
*
* @param[in] handle ntp会话句柄
* @param[in] packet ntp消息结构体, ntp报文内容
* @param[in] userdata
*
* @return void
*/
typedef void (* aiot_ntp_recv_handler_t)(void *handle,
const aiot_ntp_recv_t *packet, void *userdata);
/**
* @brief ntp内部事件类型
*/
typedef enum {
/**
* @brief ntp应答中字段不合法
*/
AIOT_NTPEVT_INVALID_RESPONSE,
/**
* @brief ntp应答中时间字段格式错误
*/
AIOT_NTPEVT_INVALID_TIME_FORMAT,
} aiot_ntp_event_type_t;
/**
* @brief NTP内部事件
*/
typedef struct {
/**
* @brief NTP内部事件类型. @ref aiot_ntp_event_type_t
*
*/
aiot_ntp_event_type_t type;
} aiot_ntp_event_t;
/**
* @brief ntp事件回调函数
*
* @details
*
* NTP内部事件被触发时,
*
*/
typedef void (*aiot_ntp_event_handler_t)(void *handle, const aiot_ntp_event_t *event, void *userdata);
/**
* @brief @ref aiot_ntp_setopt option参数可选值.
*
* @details , @ref aiot_ntp_setopt , data参数的数据类型
*
* 1. data的数据类型是char *, @ref AIOT_NTPOPT_MQTT_HANDLE :
*
* void *mqtt_handle = aiot_mqtt_init();
* aiot_ntp_setopt(ntp_handle, AIOT_NTPOPT_MQTT_HANDLE, mqtt_handle);
*
* 2. data的数据类型是其他数据类型时, @ref AIOT_NTPOPT_TIME_ZONE :
*
* int8_t time_zone = 8;
* aiot_mqtt_setopt(ntp_handle, AIOT_NTPOPT_TIME_ZONE, (void *)&time_zone);
*/
typedef enum {
/**
* @brief ntp会话 MQTT句柄, MQTT连接, MQTT句柄
*
* @details
*
* : (void *)
*/
AIOT_NTPOPT_MQTT_HANDLE,
/**
* @brief ntp会话 utc时间后会根据此时区值转换成本地时间, @ref aiot_ntp_recv_handler_t
*
* @details
*
* : 8, 8; 西3, -3
*
* : (int8_t *)
*/
AIOT_NTPOPT_TIME_ZONE,
/**
* @brief , SDK收到网络报文的时候被调用,
*
* @details
*
* : ( @ref aiot_ntp_recv_handler_t )
*/
AIOT_NTPOPT_RECV_HANDLER,
/**
* @brief ntp内部发生的事件会从此回调函数进行通知
*
* @details
*
* : ( @ref aiot_ntp_event_handler_t )
*/
AIOT_NTPOPT_EVENT_HANDLER,
/**
* @brief SDK暂存的上下文
*
* @details AIOT_NTPOPT_RECV_HANDLER AIOT_NTPOPT_EVENT_HANDLER , SDK传给用户
*
* : (void *)
*/
AIOT_NTPOPT_USERDATA,
/**
* @brief ntp实例时, api执行完毕的时间
*
* @details
*
* @ref aiot_ntp_deinit NTP实例时, aiot_ntp_xxx API, API会返回@ref STATE_USER_INPUT_EXEC_DISABLED
*
* , aiot_ntp_xxx API
*
* : (uint32_t *) : (2 * 1000) ms
*/
AIOT_NTPOPT_DEINIT_TIMEOUT_MS,
AIOT_NTPOPT_MAX
} aiot_ntp_option_t;
/**
* @brief ntp会话实例,
*
* @return void *
* @retval NULL ntp实例的句柄
* @retval NULL ,
*
*/
void *aiot_ntp_init(void);
/**
* @brief ntp会话
*
* @details
*
*
*
* + `AIOT_NTPOPT_MQTT_HANDLE`: MQTT会话句柄
*
* + `AIOT_NTPOPT_TIME_ZONE`: , SDK会将收到的UTC时间按配置的时区进行转换
*
* + `AIOT_NTPOPT_RECV_HANDLER`: , SDK将UTC时间转换完成后,
*
* @param[in] handle ntp会话句柄
* @param[in] option , @ref aiot_ntp_option_t
* @param[in] data , @ref aiot_ntp_option_t
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_ntp_setopt(void *handle, aiot_ntp_option_t option, void *data);
/**
* @brief ntp会话,
*
* @param[in] handle ntp会话句柄的指针
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*
*/
int32_t aiot_ntp_deinit(void **handle);
/**
* @brief ntp服务器发送ntp消息请求
*
* @details
*
* NTP请求, SDK会调用通过 @ref aiot_ntp_setopt @ref AIOT_NTPOPT_RECV_HANDLER ,
*
* @param handle ntp会话句柄
*
* @return int32_t
* @retval <STATE_SUCCESS
* @retval >=STATE_SUCCESS
*/
int32_t aiot_ntp_send_request(void *handle);
#if defined(__cplusplus)
}
#endif
#endif /* __AIOT_NTP_API_H__ */