62 lines
1.8 KiB
C
62 lines
1.8 KiB
C
#include "Update.h"
|
|
#include "DebugCmd.h"
|
|
#include "main.h"
|
|
#include "bsp.h"
|
|
#include "spiflash.h"
|
|
|
|
extern GateWayPara_t GateWay;
|
|
|
|
/*****************************************************************************************
|
|
* 函数名称: Update
|
|
* 功能描述: 固件升级,此函数在解析到升级指令时调用
|
|
* 参 数: PayLoad 协议负载,需去除帧头等信息,只传负载数据
|
|
* 返 回 值: 无
|
|
*****************************************************************************************/
|
|
void Update(uint8_t *PayLoad)
|
|
{
|
|
UpDataRequset_t Req;
|
|
boot_para_t cfg = {0};
|
|
|
|
memcpy(&Req, PayLoad, sizeof(UpDataRequset_t));
|
|
|
|
/*读回现有boot参数,保留FirstRunFlag等字段*/
|
|
dev_boot_read_param(&cfg);
|
|
cfg.AppSize = Req.AppSize;
|
|
cfg.Crc32Check = Req.AppCrc32;
|
|
cfg.PackageCnt = Req.PackageNum;
|
|
cfg.AppFlag = 0;
|
|
cfg.UpdateFlag = APP_UPDATE_FLAG;
|
|
memcpy(cfg.GwMac, GateWay.ConfigPara.GwMac, 6);
|
|
|
|
U_DBG_LOG("Receive upgrade command:\r\n");
|
|
U_DBG_LOG("PackageNum: %d\r\n", cfg.PackageCnt);
|
|
U_DBG_LOG("AppSize: %d\r\n", cfg.AppSize);
|
|
U_DBG_LOG("AppCrc32: 0x%08x\r\n", cfg.Crc32Check);
|
|
U_DBG_LOG("System Reset!\r\n");
|
|
|
|
SAVE_BOOT_PARA(&cfg);
|
|
U_DELAY_MS(200);
|
|
U_SYSTEM_TESET();
|
|
}
|
|
|
|
/*****************************************************************************************
|
|
* 函数名称: UpdateInit
|
|
* 功能描述: 升级参数初始化,需要在程序启动,外设初始化完后调用
|
|
* 参 数: 无
|
|
* 返 回 值: 无
|
|
*****************************************************************************************/
|
|
void UpdateInit(void)
|
|
{
|
|
boot_para_t cfg;
|
|
|
|
READ_BOOT_PARA(&cfg);
|
|
/*参照hc32l170_app: 仅确保AppFlag=APP_START_FLAG, 使Boot下次直接跳转App
|
|
(网关MAC/服务器/Lora配置从BootPara_t获取, 由Boot配置)*/
|
|
if(cfg.AppFlag != APP_START_FLAG) {
|
|
cfg.AppFlag = APP_START_FLAG;
|
|
SAVE_BOOT_PARA(&cfg);
|
|
}
|
|
}
|
|
|
|
|