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 */