• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: MCU OTA适配层接口(此文件为DEMO,需集成方适配修改)
15  */
16 #ifndef HILINK_OPEN_OTA_MCU_ADAPTER_H
17 #define HILINK_OPEN_OTA_MCU_ADAPTER_H
18 
19 #ifdef __cplusplus
20 extern "C" {
21 #endif
22 
23 /* 返回正常 */
24 #ifndef RETURN_OK
25 #define RETURN_OK               0
26 #endif
27 
28 /* 没有MCU */
29 #ifndef RETURN_ERROR_NO_MCU
30 #define RETURN_ERROR_NO_MCU     (-1)
31 #endif
32 
33 /* MCU返回其他错误 */
34 #ifndef RETURN_ERROR
35 #define RETURN_ERROR            (-2)
36 #endif
37 
38 /* MCU不需要升级 */
39 #ifndef RETURN_MCU_NO_NEED_OTA
40 #define RETURN_MCU_NO_NEED_OTA  (-3)
41 #endif
42 
43 /* 手动升级 */
44 #ifndef UPDATE_TYPE_MANUAL
45 #define UPDATE_TYPE_MANUAL      0x00
46 #endif
47 
48 /* 自动升级 */
49 #ifndef UPDATE_TYPE_AUTO
50 #define UPDATE_TYPE_AUTO        0x01
51 #endif
52 
53 /* 开始发送MCU数据 */
54 #ifndef START_SEND_DATA
55 #define START_SEND_DATA         0
56 #endif
57 
58 /* 发送MCU数据结束 */
59 #ifndef STOP_SEND_DATA
60 #define STOP_SEND_DATA          1
61 #endif
62 
63 /* 异常终止 */
64 #ifndef SEND_DATA_ERROR
65 #define SEND_DATA_ERROR         2
66 #endif
67 
68 typedef int (*RptUpgProgressFlagCb)(void);
69 
70 /*
71  * 获取MCU当前版本
72  * version表示版本字符串
73  * inLen表示输入字符串长度
74  * outLen表示输出字符串长度
75  * 返回值是RETURN_OK时,表示获取成功
76  * 返回值是RETURN_ERROR_NO_MCU时,表示没有MCU
77  * 返回值是RETURN_ERROR时,表示获取失败
78  * 注意:如果获取不到MCU的版本,则不对MCU进行升级。
79  * 建议厂商在MCU正常启动后,或升级启动后,就将MCU的版本号传递给模组,确保模组可以获取到MCU的版本。
80  */
81 int HILINK_GetMcuVersion(char *version, unsigned int inLen, unsigned int *outLen);
82 
83 /*
84  * HiLink SDK调用厂商适配的此接口通知MCU固件传输的状态
85  * flag表示升级流程标志
86  * 当flag是START_SEND_DATA时,表示通知模组即将开始发送MCU固件数据包
87  * 当flag是STOP_SEND_DATA时,表示通知模组完整的MCU固件包已发送完成
88  * 当flag是SEND_DATA_ERROR时,表示通知模组本次MCU固件升级异常终止
89  * len表示MCU固件包的大小
90  * type表示升级类型
91  * 当type是UPDATE_TYPE_MANUAL时,表示本次升级流程是由用户主动发起的手动升级
92  * 当type是UPDATE_TYPE_AUTO时,表示本次升级流程是经过用户同意的自动升级
93  * 返回值是RETURN_OK时,表示处理成功,HiLink SDK继续正常处理后续流程
94  * 返回值是RETURN_ERROR时,表示处理失败,HiLink SDK将终止本次MCU升级流程
95  * 注意:当flag是STOP_SEND_DATA时,此接口需返回MCU侧固件升级的结果;当flag是其它值时,需返回接口接收到此消息后的处理结果。
96  * 开机后10分钟到1小时内随机时间检测一次是否有新版本,之后以当前时间为起点,23小时加1小时内随机值周期性检测新版本。
97  * 如果用户打开了自动升级开关,检测到有新版本并且是可以重启的情况下,就进行新版本的下载,下载完成后自动重启。
98  * 自动升级流程可能在凌晨进行,因此厂商在实现升级流程相关功能时,确保在升级的下载安装固件和重启设备时避免对用户产生
99  * 影响,比如发出声音,光亮等。
100  */
101 int HILINK_NotifyOtaStatus(int flag, unsigned int len, unsigned int type);
102 
103 /*
104  * HiLink SDK调用厂商适配的此接口通知厂商发送MCU固件文件数据
105  * data表示发送的数据
106  * len表示发送的数据的长度
107  * offset表示发送的数据起始位置相对于完整固件包的偏移量
108  * 此接口需要返回MCU接收这部分数据的处理结果
109  * 返回值是RETURN_OK时,模组将通知的数据正确发送给MCU,且MCU正确处理发送的数据,HiLink SDK将继续正常处理后续流程
110  * 返回值是RETURN_ERROR时,模组或MCU未能正常处理通知的MCU的固件文件数据,HiLink SDK将终止本次MCU固件升级流程
111  */
112 int HILINK_NotifyOtaData(const unsigned char *data, unsigned int len, unsigned int offset);
113 
114 /*
115  * 产品OTA升级时下载升级包进度为100%后会重启, APP上显示设备重启中
116  * 然后等设备起来后上报进度0, APP上才会显示升级成功
117  * 通过回调函数cb来设置Hilink Sdk被拉起后是否立即向APP上报进度0
118  * cb返回1时hilink sdk被拉起后不会立即上报进度0,
119  * 上报时机由产品自己决定,调用hilink_ota_rpt_prg进行上报
120  * cb返回0时hilink sdk被拉起后会立即上报进度0
121  * 产品根据自身升级情况判断是否需要注册cb,如不注册则默认hilink sdk被拉起后会立即上报进度0
122  */
123 void HILINK_PowerOnRptUpgProgress(RptUpgProgressFlagCb cb);
124 
125 #ifdef __cplusplus
126 }
127 #endif
128 #endif /* HILINK_OPEN_OTA_BRIDGE_ADAPTER_H */