TuyaOS
tuya_svc_upgrade.h
浏览该文件的文档.
1
10#ifndef __TUYA_SVC_UPGRADE_H__
11#define __TUYA_SVC_UPGRADE_H__
12
13#include "tuya_cloud_types.h"
14#include "tuya_cloud_com_defs.h"
15#include "ty_cJSON.h"
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21#ifndef STACK_SIZE_UPGRADE
22#define STACK_SIZE_UPGRADE (4096) //Bytes
23#endif
24
25typedef BYTE_T TI_UPGRD_STAT_S;
26#define TUS_RD 1 // ready
27#define TUS_UPGRDING 2 // upgrading
28#define TUS_UPGRD_FINI 3 // finish
29#define TUS_UPGRD_EXEC 4 // error
30
31#define TUS_DOWNLOAD_START 10 // download start
32#define TUS_DOWNLOAD_COMPLETE 11 // download complete
33#define TUS_UPGRADE_START 12 // upgrade start
34#define TUS_UPGRADE_SUCCESS 3 //upgrade success
35
36#define TUS_DOWNLOAD_ERROR_UNKONW 40 // unknown error
37#define TUS_DOWNLOAD_ERROR_LOW_BATTERY 41 // low battery
38#define TUS_DOWNLOAD_ERROR_STORAGE_NOT_ENOUGH 42 // storage not enough
39#define TUS_DOWNLOAD_ERROR_MALLOC_FAIL 43 // malloc fail
40#define TUS_DOWNLOAD_ERROR_TIMEOUT 44 // download timeout
41#define TUS_DOWNLOAD_ERROR_HMAC 45 // hmac not match
42#define TUS_UPGRADE_ERROR_LOW_BATTERY 46 // low battery
43#define TUS_UPGRADE_ERROR_MALLOC_FAIL 47 // malloc fail
44#define TUS_UPGRADE_ERROR_VERSION 48 // version invalid
45#define TUS_UPGRADE_ERROR_HMAC 49 // hmac not match
46
47/*
48* @param[out] dev_id device id for gw or nodeId for subdev
49* @return OPERATE_RET OPRT_OK indicates a valid device need detect
50*/
51typedef OPERATE_RET(*UPGRADE_GET_DEV)(OUT CHAR_T dev_id[DEV_ID_LEN + 1]);
52
53/*
54* @param[in] is_err TRUE indicates error happen, detect process is over
55* @param[in] is_exe valid when !is_err
56 TRUE indicates upgrade is got and notified
57 FALSE indicates upgrade is got but execute time not arrival
58* @param[in] detect_interval valid when !is_err && !is_exe
59 upgrade should be detected again after detect_interval(s)
60*/
61typedef VOID (*UPGRADE_DETECT_RESULT)(IN BOOL_T is_err, IN BOOL_T is_exe, IN UINT_T detect_interval);
62
66typedef struct {
67 UPGRADE_GET_DEV upgrade_get_dev;
68 UPGRADE_DETECT_RESULT upgrade_detect_result;
70
76typedef INT_T(*DEV_UPGRADE_INFORM_CB)(CONST FW_UG_S *fw);
77
81typedef VOID (*DEV_UPGRADE_PRE_INFORM_CB)(BOOL_T *handled, CONST FW_UG_S *fw);
82
88typedef INT_T(*SUBDEV_UPGRADE_INFORM_CB)(CONST CHAR_T *dev_id, CONST FW_UG_S *fw);
89
95typedef INT_T(*dev_upgrade_mq15_inform_cb)(ty_cJSON *root_json);
96
100typedef struct {
110
117
124TUYA_OTA_PATH_E tuya_upgrade_get_path(VOID);
125
131OPERATE_RET tuya_svc_upgrade_continue(VOID_T);
132
138OPERATE_RET tuya_svc_upgrade_active(VOID_T);
139
148
155
156OPERATE_RET tuya_svc_upgrade_ug_info_parse(ty_cJSON *result, UPGRADE_TYPE_T type, FW_UG_S *ug_info);
157
164
172OPERATE_RET tuya_svc_upgrade_detect_reset(CONST INT_T upgrade_interval);
173
182OPERATE_RET tuya_svc_upgrade_refuse(CONST FW_UG_S *fw, CONST CHAR_T *dev_id);
183
193OPERATE_RET tuya_svc_upgrade_result_report(CONST CHAR_T *dev_id, CONST DEV_TYPE_T type, CONST int result);
194
208OPERATE_RET tuya_svc_upgrade_start(CONST CHAR_T *dev_id,
209 CONST FW_UG_S *fw,
210 CONST GET_FILE_DATA_CB get_file_cb,
211 VOID *pri_data,
212 CONST UPGRADE_NOTIFY_CB upgrd_nofity_cb,
213 CONST BOOL_T upload_upgrade_percent,
214 CONST UINT_T download_buf_size);
215
223OPERATE_RET tuya_svc_upgrade_mqtt_notify(CHAR_T *dev_id, DEV_TYPE_T tp);
224
232OPERATE_RET tuya_lan_upgrade_start(ty_cJSON * p_upgrade_info);
233
242OPERATE_RET tuya_lan_upgrade_data_proc(BYTE_T *p_data_block, UINT_T u_data_block_len);
243
251OPERATE_RET tuya_lan_upgrade_data_request_string(CHAR_T* request_string);
252
258
259#define SVC_UPGRADE_SIGN_CONTENT_MAX_LEN 4096
260
261typedef enum {
262 SignContent_TYPE_USER = 0,
263 SignContent_TYPE_TUYA = 1,
264}
265SignContent_TYPE;
266
267typedef struct {
268 uint8_t *pub_key_der;
269 uint32_t pub_key_der_size;
270 int8_t *pub_key_name;
272
273typedef struct {
274 uint32_t sign_content_len;
275 uint32_t magiclow;
276 uint32_t magichigh;
277} SignHead;
278typedef struct {
279 uint32_t type;
280 uint32_t usage;
281 uint32_t alg;
282 int8_t *user_id;
283 int8_t *key_name;
284 int8_t *sign_time;
285 int8_t *fw_key;
286 int8_t *fw_ver;
287 uint8_t *sig_value;
288 uint32_t sig_value_len;
289} SignBlock;
290typedef struct {
291 int8_t *version;
292 uint32_t num;
293 SignBlock *block;
295typedef struct {
296 uint32_t save_addr;
297 uint32_t len;
298} file_info;
299
300#if defined(ENABLE_FIRMWARE_SIGN_USER) && (ENABLE_FIRMWARE_SIGN_USER == 1)
301OPERATE_RET tuya_svc_upgrade_set_user_pub_key(uint8_t *pub_key_der, uint32_t der_size, int8_t *pub_key_name);
302OPERATE_RET tuya_svc_upgrade_set_tuya_pub_key(uint8_t *pub_key_der, uint32_t der_size, int8_t *pub_key_name);
303#endif
304OPERATE_RET tuya_svc_upgrade_verify_init(void);
305OPERATE_RET tuya_svc_upgrade_verify_process(IN CONST FW_UG_S *fw, IN CONST UINT_T total_len, \
306 IN CONST UINT_T offset, IN CONST BYTE_T *data, \
307 IN CONST UINT_T len, OUT UINT_T *remain_len, IN PVOID_T pri_data);
308OPERATE_RET tuya_svc_upgrade_verify_end(IN CONST FW_UG_S *fw, IN CONST INT_T download_result, IN PVOID_T pri_data);
309#ifdef __cplusplus
310}
311#endif
312
313#endif
tuya sdk ota firmware info
Definition: tuya_cloud_com_defs.h:663
Definition: tuya_svc_upgrade.h:278
Definition: tuya_svc_upgrade.h:290
Definition: tuya_svc_upgrade.h:273
Definition of firmware upgrade workload
Definition: tuya_svc_upgrade.h:66
Definition of firmware upgrade handler
Definition: tuya_svc_upgrade.h:100
SUBDEV_UPGRADE_INFORM_CB pre_subdev_upgrade_cb
Definition: tuya_svc_upgrade.h:108
SUBDEV_UPGRADE_INFORM_CB subdev_upgrade_cb
Definition: tuya_svc_upgrade.h:104
DEV_UPGRADE_INFORM_CB dev_upgrade_cb
Definition: tuya_svc_upgrade.h:102
DEV_UPGRADE_INFORM_CB pre_dev_upgrade_cb
Definition: tuya_svc_upgrade.h:106
Definition: tuya_svc_upgrade.h:295
Definition: tuya_svc_upgrade.h:267
Definition: ty_cJSON.h:104
VOID(* DEV_UPGRADE_PRE_INFORM_CB)(BOOL_T *handled, CONST FW_UG_S *fw)
Handler of pre-process inform
Definition: tuya_svc_upgrade.h:81
VOID tuya_svc_upgrade_register_pre_cb(DEV_UPGRADE_PRE_INFORM_CB pre_ug_cb)
Register pre-precess handler to replace the default one
OPERATE_RET tuya_svc_upgrade_result_report(CONST CHAR_T *dev_id, CONST DEV_TYPE_T type, CONST int result)
Sync dowload result to cloud
OPERATE_RET tuya_lan_upgrade_data_proc(BYTE_T *p_data_block, UINT_T u_data_block_len)
局域网升级数据处理
OPERATE_RET tuya_svc_upgrade_continue(VOID_T)
Continue to process multi section upgrade
OPERATE_RET tuya_svc_upgrade_detect_register(TUYA_UPGRADE_DETECT_T *detect)
Register a new firmware upgrade workload
INT_T(* dev_upgrade_mq15_inform_cb)(ty_cJSON *root_json)
Handler of process inform for some upgrade type
Definition: tuya_svc_upgrade.h:95
VOID tuya_svc_upgrade_enable_mqtt_notify()
enable mqtt notify
VOID tuya_svc_upgrade_register_mq15_cb(dev_upgrade_mq15_inform_cb mq15_cb)
Register process handler for some upgrade type
OPERATE_RET tuya_svc_upgrade_start(CONST CHAR_T *dev_id, CONST FW_UG_S *fw, CONST GET_FILE_DATA_CB get_file_cb, VOID *pri_data, CONST UPGRADE_NOTIFY_CB upgrd_nofity_cb, CONST BOOL_T upload_upgrade_percent, CONST UINT_T download_buf_size)
Start to download the specific firmware
BOOL_T tuya_svc_devos_get_upgrade(VOID)
Need upgrade or not(multi-section ota)
INT_T(* SUBDEV_UPGRADE_INFORM_CB)(CONST CHAR_T *dev_id, CONST FW_UG_S *fw)
Handler of sub-device upgrade inform
Definition: tuya_svc_upgrade.h:88
OPERATE_RET tuya_svc_upgrade_active(VOID_T)
Run firmware upgrade framework, workloads registered will be executed
OPERATE_RET tuya_svc_upgrade_refuse(CONST FW_UG_S *fw, CONST CHAR_T *dev_id)
Refuse to download the specific firmware
OPERATE_RET tuya_lan_upgrade_start(ty_cJSON *p_upgrade_info)
局域网升级启动
INT_T(* DEV_UPGRADE_INFORM_CB)(CONST FW_UG_S *fw)
Handler of GW upgrade inform
Definition: tuya_svc_upgrade.h:76
OPERATE_RET tuya_svc_upgrade_mqtt_notify(CHAR_T *dev_id, DEV_TYPE_T tp)
Notify to upgrade immediately like mqtt15
OPERATE_RET tuya_svc_upgrade_detect_reset(CONST INT_T upgrade_interval)
Reset firmware upgrade check interval
OPERATE_RET tuya_svc_upgrade_init(TUYA_UPGRADE_PARAM_T *ota_param)
Initilize firmware upgrade framework
OPERATE_RET tuya_lan_upgrade_data_request_string(CHAR_T *request_string)
局域网升级数据请求