Link Kit C-SDK  4.1.0
aiot_ota_api.h
浏览该文件的文档.
1 
24 #ifndef __AIOT_OTA_API_H__
25 #define __AIOT_OTA_API_H__
26 
27 #if defined(__cplusplus)
28 extern "C" {
29 #endif
30 
31 #include <stdint.h>
32 #include "aiot_http_download_api.h"
33 
41 typedef enum {
42 
48 
55 
61 typedef enum {
62 
68 
76 
82 typedef enum {
83 
89 
97 
102 typedef struct {
103 
108  char *product_key;
109 
114  char *device_name;
115 
116  /*
117  * @brief 下载固件所需的链接
118  *
119  */
120  char *url;
121  /*
122  * @brief mqtt文件下载,标识文件流的streamid
123  *
124  */
125  uint32_t stream_id;
126  /*
127  * @brief mqtt文件下载,标识文件的fileid
128  *
129  */
130  uint32_t stream_file_id;
131  /*
132  * @brief 固件的大小, 单位为Byte
133  *
134  */
135  uint32_t size_total;
136 
137  /*
138  * @brief 云端对的固件进行数字签名的方式, 具体见@ref aiot_ota_digest_type_t
139  *
140  */
141  uint8_t digest_method;
142 
143  /*
144  * @brief 云端对固件计算数字签名得出来的结果
145  *
146  */
148 
153  char *version;
154 
159  char *module;
160 
164  void *mqtt_handle;
165 
170  char *extra_data;
171 
175  char *file_name;
176 
180  uint32_t file_num;
181 
185  uint32_t file_id;
189  aiot_ota_protocol_type_t protocol_type;
190 
192 
197 typedef struct {
198 
202  aiot_ota_recv_type_t type;
203 
209 
219 typedef void (* aiot_ota_recv_handler_t)(void *handle, const aiot_ota_recv_t *const msg, void *userdata);
220 
225 typedef enum {
226 
233 
238 typedef struct {
239 
244  aiot_download_recv_type_t type;
245 
246  struct {
247 
252  uint8_t *buffer;
253 
258  uint32_t len;
259 
264  int32_t percent;
265  } data;
267 
268 
278 typedef void (* aiot_download_recv_handler_t)(void *handle, const aiot_download_recv_t *packet,
279  void *userdata);
280 
286 typedef enum {
287 
292 
297 
302 
308 
314 typedef enum {
315 
331 
342 
353 
367 
368 
382 int32_t aiot_ota_query_firmware(void *handle);
383 
392 void *aiot_ota_init();
393 
404 int32_t aiot_ota_deinit(void **handle);
405 
434 int32_t aiot_ota_report_version(void *handle, char *version);
435 
454 int32_t aiot_ota_report_version_ext(void *handle, char *product_key, char *device_name, char *version);
455 
477 int32_t aiot_ota_setopt(void *handle, aiot_ota_option_t option, void *data);
478 
483 #define STATE_OTA_BASE (-0x0900)
484 
489 #define STATE_OTA_DIGEST_MATCH (-0x0901)
490 
495 #define STATE_OTA_REPORT_FAILED (-0x0902)
496 
501 #define STATE_DOWNLOAD_RECV_ERROR (-0x0903)
502 
511 #define STATE_OTA_DIGEST_MISMATCH (-0x0904)
512 
521 #define STATE_OTA_PARSE_JSON_ERROR (-0x0905)
522 
531 #define STATE_DOWNLOAD_SEND_REQUEST_FAILED (-0x0906)
532 
541 #define STATE_DOWNLOAD_RANGE_FINISHED (-0x0907)
542 
547 #define STATE_OTA_PARSE_JSON_MALLOC_FAILED (-0x0908)
548 
553 #define STATE_OTA_DEINIT_HANDLE_IS_NULL (-0x0909)
554 
559 #define STATE_OTA_SETOPT_HANDLE_IS_NULL (-0x090A)
560 
565 #define STATE_OTA_SETOPT_DATA_IS_NULL (-0x090B)
566 
571 #define STATE_DOWNLOAD_DEINIT_HANDLE_IS_NULL (-0x090C)
572 
577 #define STATE_DOWNLOAD_SETOPT_HANDLE_IS_NULL (-0x090D)
578 
583 #define STATE_DOWNLOAD_SETOPT_DATA_IS_NULL (-0x090E)
584 
589 #define STATE_DOWNLOAD_SETOPT_COPIED_DATA_IS_NULL (-0x090F)
590 
595 #define STATE_OTA_REPORT_HANDLE_IS_NULL (-0x0910)
596 
601 #define STATE_OTA_REPORT_VERSION_IS_NULL (-0x0911)
602 
607 #define STATE_OTA_REPORT_MQTT_HANDLE_IS_NULL (-0x0912)
608 
613 #define STATE_OTA_REPORT_EXT_HANELD_IS_NULL (-0x0913)
614 
619 #define STATE_OTA_REPORT_EXT_VERSION_NULL (-0x0914)
620 
625 #define STATE_OTA_REPORT_EXT_PRODUCT_KEY_IS_NULL (-0x0915)
626 
631 #define STATE_OTA_REPORT_EXT_DEVICE_NAME_IS_NULL (-0x0916)
632 
637 #define STATE_OTA_REPORT_EXT_MQTT_HANDLE_IS_NULL (-0x0917)
638 
643 #define STATE_DOWNLOAD_REPORT_HANDLE_IS_NULL (-0x0918)
644 
649 #define STATE_DOWNLOAD_REPORT_TASK_DESC_IS_NULL (-0x0919)
650 
655 #define STATE_DOWNLOAD_RECV_HANDLE_IS_NULL (-0x091A)
656 
661 #define STATE_DOWNLOAD_REQUEST_HANDLE_IS_NULL (-0x091B)
662 
667 #define STATE_DOWNLOAD_REQUEST_TASK_DESC_IS_NULL (-0x091C)
668 
673 #define STATE_DOWNLOAD_REQUEST_URL_IS_NULL (-0x091D)
674 
679 #define STATE_OTA_UNKNOWN_DIGEST_METHOD (-0x091E)
680 
685 #define STATE_DOWNLOAD_FINISHED (-0x091F)
686 
691 #define STATE_DOWNLOAD_HTTPRSP_CODE_ERROR (-0x0920)
692 
697 #define STATE_DOWNLOAD_HTTPRSP_HEADER_ERROR (-0x0921)
698 
703 #define STATE_DOWNLOAD_RENEWAL_REQUEST_SENT (-0x0922)
704 
709 #define STATE_DOWNLOAD_SETOPT_MALLOC_SHA256_CTX_FAILED (-0x0923)
710 
715 #define STATE_DOWNLOAD_SETOPT_MALLOC_MD5_CTX_FAILED (-0x0924)
716 
721 #define STATE_OTA_PARSE_URL_HOST_IS_NULL (-0x0925)
722 
727 #define STATE_OTA_PARSE_URL_PATH_IS_NULL (-0x0926)
728 
735 #define STATE_DOWNLOAD_FETCH_TOO_MANY (-0x0927)
736 
744 #define STATE_OTA_QUERY_FIRMWARE_HANDLE_IS_NULL (-0x0928)
745 
752 #define STATE_OTA_HOST_STRING_OVERFLOW (-0x0929)
753 
760 #define STATE_OTA_PATH_STRING_OVERFLOW (-0x092A)
761 
762 #if defined(__cplusplus)
763 }
764 #endif
765 
766 #endif /* #ifndef __AIOT_OTA_API_H__ */
767 
下载固件过程中收到的分片的报文的描述, 包括类型, 以及所存储的buffer地址, buffer的长度, 以及当前的下载进度
Definition: aiot_ota_api.h:238
设置处理OTA消息的用户回调函数
Definition: aiot_ota_api.h:330
uint8_t * buffer
下载固件过程中, SDK分配出来的存储云端下行的固件内容的buffer地址.在回调函数结束后SDK就会主动释放.用户需要自行将报文拷贝保存.
Definition: aiot_ota_api.h:252
void * aiot_ota_init()
创建一个OTA实例
Definition: aiot_ota_api.c:59
与云端约定的设备下载出错的错误码描述
Definition: aiot_ota_api.h:296
aiot_download_recv_type_t
下载固件过程中收到的分片的报文的类型
Definition: aiot_ota_api.h:225
uint32_t file_num
ota任务中总共的url数量
Definition: aiot_ota_api.h:180
与云端约定的设备升级出错的错误描述
Definition: aiot_ota_api.h:291
char * extra_data
当前下载信息中的扩展内容
Definition: aiot_ota_api.h:170
Definition: aiot_ota_api.h:95
char * device_name
待升级设备的device_name
Definition: aiot_ota_api.h:114
与云端约定的烧写固件出错的错误码描述
Definition: aiot_ota_api.h:306
下载OTA文件的方式为HTTPS
Definition: aiot_ota_api.h:88
下载OTA文件的方式为MQTT
Definition: aiot_ota_api.h:94
void(* aiot_ota_recv_handler_t)(void *handle, const aiot_ota_recv_t *const msg, void *userdata)
设备收到OTA的mqtt下行报文时的接收回调函数.用户在这个回调函数中可以看到待升级固件的版本号, 决定升级策略(是否升级, 何时升级等)
Definition: aiot_ota_api.h:219
int32_t percent
当前的下载进度的百分比
Definition: aiot_ota_api.h:264
用户需要SDK暂存的上下文
Definition: aiot_ota_api.h:352
int32_t aiot_ota_setopt(void *handle, aiot_ota_option_t option, void *data)
设置ota句柄的参数
Definition: aiot_ota_api.c:110
aiot_ota_recv_type_t
云端下行的OTA消息的类型, 分为固件升级和远程配置两种
Definition: aiot_ota_api.h:41
uint32_t file_id
当前下载任务的序号
Definition: aiot_ota_api.h:185
uint8_t digest_method
Definition: aiot_ota_api.h:141
uint32_t len
下载固件过程中, SDK分配出来的存储云端下行的固件内容的buffer的大小, 用户可以通过AIOT_DLOPT_BODY_BUFFER...
Definition: aiot_ota_api.h:258
aiot_ota_protocol_type_t
OTA下载升级文件的方式
Definition: aiot_ota_api.h:82
云端下行的OTA消息, 包括其消息类型(固件升级/远程配置)和升级任务的具体描述
Definition: aiot_ota_api.h:197
设置MQTT的handle
Definition: aiot_ota_api.h:341
与云端约定的固件校验数字签名时出错的错误码描述
Definition: aiot_ota_api.h:301
收到的OTA固件的digest方法为SHA256
Definition: aiot_ota_api.h:73
aiot_ota_digest_type_t
OTA过程中使用的digest方法类型, 分为MD5和SHA256两种
Definition: aiot_ota_api.h:61
char * version
固件的版本信息. 如果为固件信息, 则这个version字段为固件的版本号. 如果为远程配置消息, 则为配置的configId
Definition: aiot_ota_api.h:153
Definition: aiot_ota_api.h:74
aiot_ota_option_t
调用 aiot_ota_setopt 接口时, option参数的可用值
Definition: aiot_ota_api.h:314
char * file_name
Definition: aiot_ota_api.h:175
char * expect_digest
Definition: aiot_ota_api.h:147
收到的OTA消息为固件升级消息
Definition: aiot_ota_api.h:47
void(* aiot_download_recv_handler_t)(void *handle, const aiot_download_recv_t *packet, void *userdata)
升级开始后, 设备收到分成一段段的固件内容时的收包回调函数.当前默认是通过https报文下推分段后的固件内容...
Definition: aiot_ota_api.h:278
int32_t aiot_ota_report_version_ext(void *handle, char *product_key, char *device_name, char *version)
用于网关中的子设备上报版本号
Definition: aiot_ota_api.c:196
如果当前ota是针对某个外接模块(mcu等), 需要通过该字段设置模块名
Definition: aiot_ota_api.h:364
uint32_t size_total
Definition: aiot_ota_api.h:135
aiot_download_task_desc_t * task_desc
云端下推的固件升级任务的描述信息, 包括url, 大小, 签名等, 更多信息参考aiot_download_task_desc_t ...
Definition: aiot_ota_api.h:207
uint32_t stream_id
Definition: aiot_ota_api.h:125
aiot_ota_protocol_errcode_t
与云端约定的OTA过程中的错误码, 云端据此知道升级过程中出错在哪个环节
Definition: aiot_ota_api.h:286
aiot_ota_protocol_type_t protocol_type
下载ota文件的协议
Definition: aiot_ota_api.h:189
char * product_key
待升级设备的product_key
Definition: aiot_ota_api.h:108
int32_t aiot_ota_report_version(void *handle, char *version)
上报普通设备(非网关中的子设备)的版本号
Definition: aiot_ota_api.c:156
int32_t aiot_ota_query_firmware(void *handle)
设备端主动向云端查询升级任务
Definition: aiot_ota_api.c:235
aiot_download_recv_type_t type
下载固件过程中收到的分片的报文的类型, 具体见aiot_download_recv_type_t
Definition: aiot_ota_api.h:244
收到的OTA消息为远程配置消息
Definition: aiot_ota_api.h:53
云端下推的固件升级任务的描述信息, 包括url, 大小, 签名等
Definition: aiot_ota_api.h:102
aiot_ota_recv_type_t type
云端下行的OTA消息类型, 更多信息请参考aiot_ota_recv_type_t
Definition: aiot_ota_api.h:202
收到的OTA固件的digest方法为MD5
Definition: aiot_ota_api.h:67
void * mqtt_handle
*固件升级过程中需用往云端上报消息时需要用到的mqtt句柄
Definition: aiot_ota_api.h:164
char * module
当前固件所都对应的模块
Definition: aiot_ota_api.h:159
Definition: aiot_ota_api.h:365
uint32_t stream_file_id
Definition: aiot_ota_api.h:130
int32_t aiot_ota_deinit(void **handle)
销毁ota实例句柄
Definition: aiot_ota_api.c:80
基于HTTP传输的固件分片报文
Definition: aiot_ota_api.h:231
char * url
Definition: aiot_ota_api.h:120