|
|
@@ -374,63 +374,73 @@ int set_IP_action(uint8_t cmd, uint8_t *parg)
|
|
|
int updateStart_action(uint8_t cmd, uint8_t *parg)
|
|
|
{
|
|
|
static int restult = 0;
|
|
|
- if(restult==0){
|
|
|
+ updateInf.updateState = FLASH_UPDATE_ST_NUILL;
|
|
|
+ if(restult==0){ ;
|
|
|
restult = app_image_copy(FLASH_APP1_ADDR,FLASH_APP2_ADDR,FLASH_PAGE_SIZE,FLASH_APP2_SIZE);
|
|
|
}
|
|
|
+ if(restult){
|
|
|
+ updateInf.updateState = FLASH_UPDATE_ST_BACKUP;
|
|
|
+ }
|
|
|
return restult;
|
|
|
}
|
|
|
|
|
|
int updateInfo_action(uint8_t cmd, uint8_t *parg)
|
|
|
{
|
|
|
updateHeader *upHead = (updateHeader *)parg;
|
|
|
- updateInf.allchecksum = upHead->allchecksum;
|
|
|
- updateInf.appLen = upHead->appLen;
|
|
|
- updateInf.allpackage = upHead->allpackage;
|
|
|
- updateInf.packageSize = upHead->packageSize;
|
|
|
- if(FLASH_PAGE_SIZE%upHead->packageSize){
|
|
|
- /*包大小演出*/
|
|
|
- return 0;
|
|
|
+ if(updateInf.updateState == FLASH_UPDATE_ST_BACKUP){
|
|
|
+ updateInf.allchecksum = upHead->allchecksum;
|
|
|
+ updateInf.appLen = upHead->appLen;
|
|
|
+ updateInf.allpackage = upHead->allpackage;
|
|
|
+ updateInf.packageSize = upHead->packageSize;
|
|
|
+ if(FLASH_PAGE_SIZE%upHead->packageSize){
|
|
|
+ /*包大小演出*/
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ updateInf.packageInPage = FLASH_PAGE_SIZE/upHead->packageSize;
|
|
|
+ updateInf.writeAddr = FLASH_APP1_ADDR;
|
|
|
+ updateInf.lenInPage = 0;
|
|
|
+ updateInf.updateState = FLASH_UPDATE_ST_REC;
|
|
|
+ updateInf.nextpackageOrder = 0;
|
|
|
+ light_set(MODE_BREATH, 1000, COLOR_YELLOW, 0);
|
|
|
+ light_set(MODE_BREATH, 1000, COLOR_YELLOW, 1);
|
|
|
+ Flash_ErasePage(FLASH_APP1_ADDR + FLASH_APP_VERSION_PAGE);
|
|
|
+ return 1;
|
|
|
}
|
|
|
- updateInf.packageInPage = FLASH_PAGE_SIZE/upHead->packageSize;
|
|
|
- updateInf.writeAddr = FLASH_APP1_ADDR;
|
|
|
- updateInf.lenInPage = 0;
|
|
|
- updateInf.updateState = FLASH_UPDATE_ST_REC;
|
|
|
- updateInf.nextpackageOrder = 0;
|
|
|
- light_set(MODE_BREATH, 1000, COLOR_YELLOW, 0);
|
|
|
- light_set(MODE_BREATH, 1000, COLOR_YELLOW, 1);
|
|
|
- return 1;
|
|
|
+ return 0;
|
|
|
+
|
|
|
}
|
|
|
int updateDate_action(uint8_t cmd, uint8_t *parg)
|
|
|
{
|
|
|
- Refresh_IWDG();
|
|
|
- updateData *upHead = (updateData *)parg;
|
|
|
- unsigned int posInPage;
|
|
|
- if(upHead->packageOrder !=updateInf.nextpackageOrder){
|
|
|
- /*序号不对,返回错误*/
|
|
|
- return 0;
|
|
|
- }
|
|
|
- if(updateInf.updateState != FLASH_UPDATE_ST_REC){
|
|
|
- /*状态不对,返回错误*/
|
|
|
- return 0;
|
|
|
- }
|
|
|
- posInPage = upHead->packageOrder%(updateInf.packageInPage);
|
|
|
- memcpy(&updateInf.data[posInPage*updateInf.packageSize], (uint8_t*)upHead->data, upHead->packageSize);
|
|
|
- updateInf.nextpackageOrder++;
|
|
|
- updateInf.lenInPage += upHead->packageSize;
|
|
|
- if((updateInf.nextpackageOrder%updateInf.packageInPage==0) || (updateInf.nextpackageOrder==updateInf.allpackage)){
|
|
|
- /*当前页收完,或包收完*/
|
|
|
- iap_write_apppage(updateInf.writeAddr,updateInf.data,updateInf.lenInPage);
|
|
|
- updateInf.writeAddr = updateInf.writeAddr+updateInf.lenInPage;
|
|
|
- updateInf.lenInPage = 0;
|
|
|
- }
|
|
|
-
|
|
|
- if(updateInf.nextpackageOrder==updateInf.allpackage){
|
|
|
- /*稍后添加check sum */
|
|
|
- Flash_ErasePage(FLASH_APP1_ADDR + FLASH_APP_VERSION_PAGE);
|
|
|
- updateInf.updateState = FLASH_UPDATE_ST_PROG;
|
|
|
+ if(updateInf.updateState == FLASH_UPDATE_ST_REC){
|
|
|
+ Refresh_IWDG();
|
|
|
+ updateData *upHead = (updateData *)parg;
|
|
|
+ unsigned int posInPage;
|
|
|
+ if(upHead->packageOrder !=updateInf.nextpackageOrder){
|
|
|
+ /*序号不对,返回错误*/
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if(updateInf.updateState != FLASH_UPDATE_ST_REC){
|
|
|
+ /*状态不对,返回错误*/
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ posInPage = upHead->packageOrder%(updateInf.packageInPage);
|
|
|
+ memcpy(&updateInf.data[posInPage*updateInf.packageSize], (uint8_t*)upHead->data, upHead->packageSize);
|
|
|
+ updateInf.nextpackageOrder++;
|
|
|
+ updateInf.lenInPage += upHead->packageSize;
|
|
|
+ if((updateInf.nextpackageOrder%updateInf.packageInPage==0) || (updateInf.nextpackageOrder==updateInf.allpackage)){
|
|
|
+ /*当前页收完,或包收完*/
|
|
|
+ iap_write_apppage(updateInf.writeAddr,updateInf.data,updateInf.lenInPage);
|
|
|
+ updateInf.writeAddr = updateInf.writeAddr+updateInf.lenInPage;
|
|
|
+ updateInf.lenInPage = 0;
|
|
|
+ }
|
|
|
+ if(updateInf.nextpackageOrder==updateInf.allpackage){
|
|
|
+ /*稍后添加check sum */;
|
|
|
+ updateInf.updateState = FLASH_UPDATE_ST_PROG;
|
|
|
+ }
|
|
|
+ updateInf.updateWaitTime = 0;
|
|
|
+ return 1;
|
|
|
}
|
|
|
- updateInf.updateWaitTime = 0;
|
|
|
- return 1;
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
int updatestart_respone(CmdMessage *pMsg, unsigned char result)
|