first commit for chrg
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
|
||||
#ifndef __APP_H__
|
||||
#define __APP_H__
|
||||
|
||||
#include "firmware.h"
|
||||
#include "ymodem.h"
|
||||
#include "transfer.h"
|
||||
#include "utils.h"
|
||||
|
||||
|
||||
typedef enum {
|
||||
EXE_FLOW_NOTHING = 0x00,
|
||||
EXE_FLOW_ACCIDENT_UPDATE, /* 意外更新固件流程 */
|
||||
EXE_FLOW_NEED_HOST_SEND_FIRMWARE, /* 需要主机下发固件包 */
|
||||
|
||||
EXE_FLOW_FIND_RUNNING_FIRMWARE, /* (0) 在各分区查找可运行的固件 */
|
||||
EXE_FLOW_WAIT_FIRMWARE, /* 等待接收固件包 */
|
||||
EXE_FLOW_VERIFY_FIRMWARE_HEAD, /* (1) 校验收到的固件包头 */
|
||||
EXE_FLOW_ERASE_OLD_FIRMWARE, /* 擦除旧固件 */
|
||||
EXE_FLOW_ERASE_OLD_FIRMWARE_DONE, /* 完成擦除旧固件 */
|
||||
EXE_FLOW_WRITE_FIRMWARE_HEAD, /* 将固件包头写入 flash */
|
||||
EXE_FLOW_WRITE_FIRMWARE_HEAD_DONE, /* 完成固件包头的写入 */
|
||||
EXE_FLOW_VERIFY_FIRMWARE_PKG, /* (2) 校验固件分包数据的正确性 */
|
||||
EXE_FLOW_WRITE_NEW_FIRMWARE, /* 写入新的固件分包到分区 */
|
||||
EXE_FLOW_WRITE_NEW_FIRMWARE_DONE, /* 写入新的固件分包完成 */
|
||||
EXE_FLOW_UPDATE_FIRMWARE, /* (3) 开始更新固件 */
|
||||
EXE_FLOW_VERIFY_FIRMWARE, /* 校验整个固件包体的数据正确性 */
|
||||
EXE_FLOW_VERIFY_FIRMWARE_DONE, /* 完成校验整个固件包体的数据正确性 */
|
||||
EXE_FLOW_ERASE_APP, /* 擦除 APP 分区的固件 */
|
||||
EXE_FLOW_UPDATE_TO_APP, /* 将其它分区的固件更新到 APP 分区 */
|
||||
EXE_FLOW_VERIFY_APP, /* 校验 APP 分区固件的数据正确性 */
|
||||
EXE_FLOW_UPDATE_TO_APP_DONE, /* 校验 APP 分区固件通过后,将剩余数据写入 */
|
||||
EXE_FLOW_ERASE_DOWNLOAD, /* 擦除 download 分区 */
|
||||
EXE_FLOW_ERASE_DOWNLOAD_DONE, /* 完成擦除 download 分区 */
|
||||
EXE_FLOW_JUMP_TO_APP, /* 跳转至 APP 运行 */
|
||||
EXE_FLOW_RECOVERY, /* 恢复出厂固件 */
|
||||
EXE_FLOW_FAILED, /* 失败流程 */
|
||||
} eFLOW;
|
||||
|
||||
|
||||
/* 固件更新的缩略步骤,用于计算固件更新的进度 */
|
||||
typedef enum {
|
||||
STEP_VERIFY_FIRMWARE = 0x00, /* 校验接收到的固件包 */
|
||||
STEP_ERASE_APP, /* 擦除 APP 分区 */
|
||||
STEP_UPDATE_TO_APP, /* 更新固件包到 APP 分区 */
|
||||
STEP_VERIFY_APP, /* 校验 APP 固件 */
|
||||
STEP_ERASE_DOWNLOAD, /* 擦除 download 分区 */
|
||||
|
||||
} eSTAGE;
|
||||
|
||||
|
||||
/* 应用状态 */
|
||||
typedef enum {
|
||||
BOOT_STATUS_NONE = 0x00,
|
||||
BOOT_STATUS_NO_UPDATE, /* 无须更新固件的标志 */
|
||||
BOOT_STATUS_ENTER_UPDATE_MODE, /* 进入固件更新模式的标志 */
|
||||
BOOT_STATUS_ACCIDENT_UPDATE, /* 意外更新固件中 */
|
||||
BOOT_STATUS_UPDATE_SUCCESS, /* 更新固件成功 */
|
||||
BOOT_STATUS_UPDATE_FAILED, /* 更新固件失败 */
|
||||
BOOT_STATUS_NO_FIRMWARE, /* 无任何可用固件 */
|
||||
BOOT_STATUS_NO_APP, /* 无 APP 固件 */
|
||||
BOOT_STATUS_READ_PART_ERR, /* 读取分区失败 */
|
||||
BOOT_STATUS_APP_VERIFY_ERR, /* APP 固件校验错误 */
|
||||
BOOT_STATUS_APP_CAN_NOT_VERIFY, /* APP 固件无法校验 */
|
||||
BOOT_STATUS_AUTO_UPDATE_FAILED, /* 自动更新失败 */
|
||||
|
||||
} eSTATE;
|
||||
|
||||
struct upgrade_t {
|
||||
eSTATE state; /* 记录 bootloader 所处的状态 */
|
||||
eFLOW flow; /* 应用执行的流程 */
|
||||
eSTAGE stage; /* 固件的更新阶段,便于程序判断 progress 的增加系数 */
|
||||
|
||||
eRESULT result; /* 指令执行结果 */
|
||||
eErrCode errCode; /* 指令执行失败时的故障码 */
|
||||
|
||||
uint8_t start :1; /* 开始固件更新流程的标志 */
|
||||
uint8_t :0;
|
||||
|
||||
uint8_t progress; /* 固件更新的总进度, 0-100 */
|
||||
};
|
||||
|
||||
extern void System_Init (void);
|
||||
|
||||
extern void APP_Init (void);
|
||||
|
||||
extern void APP_Running (void);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user