105 lines
3.6 KiB
C
105 lines
3.6 KiB
C
|
#ifndef __OTA_PRIVATE_H__
|
||
|
#define __OTA_PRIVATE_H__
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
#include "core_stdinc.h"
|
||
|
|
||
|
#include "core_http.h"
|
||
|
#include "aiot_ota_api.h"
|
||
|
|
||
|
#define OTA_VERSION_TOPIC_PREFIX "/ota/device/inform"
|
||
|
#define OTA_PROGRESS_TOPIC_PREFIX "/ota/device/progress"
|
||
|
|
||
|
#define OTA_MODULE_NAME "OTA"
|
||
|
#define DOWNLOAD_MODULE_NAME "DOWNLOAD"
|
||
|
|
||
|
#define OTA_DEFAULT_DOWNLOAD_BUFLEN (2 * 1024)
|
||
|
#define OTA_DEFAULT_DOWNLOAD_TIMEOUT_MS (5 * 1000)
|
||
|
|
||
|
#define OTA_FOTA_TOPIC "/ota/device/upgrade/+/+"
|
||
|
#define OTA_FOTA_TOPIC_PREFIX "/ota/device/upgrade"
|
||
|
#define OTA_COTA_PUSH_TOPIC "/sys/+/+/thing/config/push"
|
||
|
#define OTA_COTA_PUSH_TOPIC_POSTFIX "/thing/config/push"
|
||
|
#define OTA_COTA_GET_REPLY_TOPIC "/sys/+/+/thing/config/get_reply"
|
||
|
#define OTA_COTA_GET_REPLY_TOPIC_POSTFIX "/thing/config/get_reply"
|
||
|
#define OTA_COTA_TOPIC_PREFIX "/sys/"
|
||
|
#define OTA_GET_TOPIC_PREFIX "/sys"
|
||
|
#define OTA_GET_TOPIC_SUFFIX "thing/ota/firmware/get"
|
||
|
#define OTA_GET_REPLY_TOPIC_SUFFIX "thing/ota/firmware/get_reply"
|
||
|
#define OTA_OTA_GET_REPLY_TOPIC "/sys/+/+/thing/ota/firmware/get_reply"
|
||
|
|
||
|
#define OTA_HTTPCLIENT_MAX_URL_LEN (256)
|
||
|
#define OTA_MAX_DIGIT_NUM_OF_UINT32 (20)
|
||
|
#define OTA_RESPONSE_PARTIAL (206)
|
||
|
#define OTA_RESPONSE_OK (200)
|
||
|
#define OTA_TOPIC_NUM (4)
|
||
|
#define OTA_MD5_LEN (32)
|
||
|
#define OTA_SHA256_LEN (64)
|
||
|
|
||
|
typedef enum {
|
||
|
DOWNLOAD_STATUS_START,
|
||
|
DOWNLOAD_STATUS_FETCH,
|
||
|
DOWNLOAD_STATUS_RENEWAL,
|
||
|
} download_status_t;
|
||
|
|
||
|
typedef enum {
|
||
|
OTA_TYPE_FOTA,
|
||
|
OTA_TYPE_CONFIG_PUSH,
|
||
|
OTA_TYPE_CONFIG_GET,
|
||
|
} ota_type_t;
|
||
|
|
||
|
/**
|
||
|
* @brief OTA过程中处理mqtt消息的句柄, 该句柄主要用于通过mqtt协议从云端收取固件升级消息, 包括固件的url等
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
void *userdata; /* 组件调用recv_handler的入参之一, 传入用户数据 */
|
||
|
aiot_ota_recv_handler_t recv_handler; /* OTA的mqtt消息到达设备端时, 通知用户的回调 */
|
||
|
aiot_sysdep_portfile_t *sysdep;
|
||
|
|
||
|
/*---- 以上都是用户在API可配 ----*/
|
||
|
/*---- 以下都是OTA内部使用, 用户无感知 ----*/
|
||
|
|
||
|
void *mqtt_handle;
|
||
|
void *module;
|
||
|
void *data_mutex;
|
||
|
} ota_handle_t;
|
||
|
|
||
|
/**
|
||
|
* @brief 处理下载任务的句柄, 该句柄主要用于通过http协议从指定的url下载固件
|
||
|
*
|
||
|
*/
|
||
|
typedef struct {
|
||
|
void
|
||
|
*userdata; /* 组件调用recv_handler 时的入参之一, 传入用户数据 */
|
||
|
aiot_download_recv_handler_t recv_handler; /* 设备收到分段的固件报文时的回调函数 */
|
||
|
aiot_download_task_desc_t *task_desc; /* 某次下载活动的目标描述信息, 如URL等 */
|
||
|
aiot_sysdep_portfile_t *sysdep;
|
||
|
uint32_t range_start;
|
||
|
uint32_t range_end;
|
||
|
|
||
|
/*---- 以上都是用户在API可配 ----*/
|
||
|
/*---- 以下都是downloader内部使用, 用户无感知 ----*/
|
||
|
|
||
|
uint8_t download_status;
|
||
|
void *http_handle;
|
||
|
uint32_t size_fetched;
|
||
|
uint32_t range_size_fetched;
|
||
|
uint32_t content_len;
|
||
|
int32_t percent;
|
||
|
int32_t http_rsp_status_code;
|
||
|
void *digest_ctx;
|
||
|
void *data_mutex;
|
||
|
void *recv_mutex;
|
||
|
} download_handle_t;
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* __OTA_PRIVATE_H__ */
|
||
|
|