#ifndef OTA_H #define OTA_H #ifdef __cplusplus extern "C" { #endif #define SIZE_1K (1024) ///< 1K 字节大小 #define MD5_CHKSUM_LEN (16) ///< MD5校验和长度 #define MD5_CHKSUM_STR_LEN (MD5_CHKSUM_LEN * 2 + 1) ///< MD5校验和字符串格式长度 #define NO_OTA_STATUS_VAL_TAG (0) ///< 状态默认值 /** * 系统启动模式定义 */ typedef enum { NORMAL_SETUP = 0x1234, ///< 普通启动模式 RECOVERY_SETUP, ///< 恢复模式 SYSTEM_OTA, ///< OTA升级模式 SYSTEM_OTA_OK, } SETUP_MODE; /** * OTA状态命令定义 */ typedef enum { OTA_CURRENT_VERSION = 0, ///< 当前系统版本号 OTA_CURRENT_SETUP_MODE, ///< 当前系统启动模式 OTA_CURRENT_REBOOT_TIME, ///< 当前系统未正常启动次数 OTA_DOWNLOAD_FILE, ///< OTA升级包下载状态 OTA_DOWNLOAD_PROGRESS, ///< OTA升级包下载进度 OTA_VERIFY_FILE, ///< 文件校验结果 OTA_VERIFY_PARTITION, ///< OTA分区校验结果 OTA_DECOMPRESS_FILE, ///< OTA当前进度:解压文件 OTA_UPGRADE_READY, ///< OTA更新准备完成 OTA_UPGRADE_START, ///< OTA更新开始 OTA_UPGRADE_PARTITION, ///< OTA写入分区数据 OTA_RECOVERY_START, ///< OTA恢复模式启动 OTA_REREQ_OTA_NOW, ///< OTA请求立即执行OTA更新系统 OTA_REBOOT_SYSTEM, ///< OTA准备重启系统 OTA_SUCCESED, ///< OTA执行成功 OTA_UNKNOWN_CMD, ///< 位置OTA状态命令 OTA_ERR_CODE, ///< OTA过程异常 OTA_DISK_FULL, ///< 存储空间不足 } OTA_STATUS_TYPE; /** * OTA模式 */ typedef enum { OTA_MODE_NORMAL = 9029, ///< 普通OTA更新模式 OTA_MODE_FORCE_NOW, ///< 强制OTA更新模式 OTA_MODE_RECOVERY, ///< OTA恢复模式 } OTA_MODE; /** * OTA操作命令 */ typedef enum { OTA_CMD_DOWNLOAD = 1234, ///< 下载OTA升级包 OTA_CMD_USED_LOCAL_IMAGE, ///< 从上次备份的OTA升级包升级 OTA_CMD_EXEC, ///< 开始OTA更新系统 } OTA_CMD; /** * OTA级包信息 * */ typedef struct { char url[SIZE_1K]; ///< URL, Base64编码 char md5[MD5_CHKSUM_STR_LEN]; ///< OTA升级包MD5校验和 unsigned int size; ///< OTA升级包文件大小 } OTA_FILE_INFO, *POTA_FILE_INFO; /** * 控制中心控制命令协议 * * @see OTA_CMD * @see OTA_MODE * @see OTA_FILE_INFO */ typedef struct { int version; ///< OTA版本号 OTA_CMD otaCmd; ///< OTA命令 OTA_MODE otaMode; ///< OTA模式 OTA_FILE_INFO otaFileInfo; ///< OTA升级包信息 } OTA_DATA_INFO, *POTA_DATA_INFO; /** * OTA状态信息协议 * * @see OTA_STATUS_TYPE */ typedef struct { OTA_STATUS_TYPE status; ///< 状态命令 int val; ///< 状态值 } OTA_RSP_STATUS, *POTA_RSP_STATUS; static inline const char* otaStatusName(OTA_STATUS_TYPE type) { switch(type) { case OTA_CURRENT_VERSION: return ("OTA_CURRENT_VERSION"); case OTA_CURRENT_SETUP_MODE: return ("OTA_CURRENT_SETUP_MODE"); case OTA_CURRENT_REBOOT_TIME: return ("OTA_CURRENT_REBOOT_TIME"); case OTA_DOWNLOAD_FILE: return ("OTA_DOWNLOAD_FILE"); case OTA_DOWNLOAD_PROGRESS: return ("OTA_DOWNLOAD_PROGRESS"); case OTA_VERIFY_FILE: return ("OTA_VERIFY_FILE"); case OTA_VERIFY_PARTITION: return ("OTA_VERIFY_PARTITION"); case OTA_DECOMPRESS_FILE: return ("OTA_DECOMPRESS_FILE"); case OTA_UPGRADE_READY: return ("OTA_UPGRADE_READY"); case OTA_UPGRADE_START: return ("OTA_UPGRADE_START"); case OTA_UPGRADE_PARTITION: return ("OTA_UPGRADE_PARTITION"); case OTA_RECOVERY_START: return ("OTA_RECOVERY_START"); case OTA_REREQ_OTA_NOW: return ("OTA_REREQ_OTA_NOW"); case OTA_REBOOT_SYSTEM: return ("OTA_REBOOT_SYSTEM"); case OTA_SUCCESED: return ("OTA_SUCCESED"); case OTA_UNKNOWN_CMD: return ("OTA_UNKNOWN_CMD"); case OTA_ERR_CODE: return ("OTA_ERR_CODE"); default: return ("Unknown Type"); } } #ifdef __cplusplus } #endif #endif