| | |
| | | OTA_STATE_HTTP_REQUEST_FILE_LEN, |
| | | OTA_STATE_HTTP_REQUEST_DATA, |
| | | OTA_STATE_WAIT_HTTP_RESPONSE, |
| | | }E_OTAState; |
| | | } E_OTAState; |
| | | |
| | | /******************************************************************************* |
| | | * Local Variable * |
| | |
| | | { |
| | | switch (l_eOTAState) |
| | | { |
| | | case OTA_STATE_HTTP_REQUEST_FILE_LEN: |
| | | case OTA_STATE_HTTP_REQUEST_FILE_LEN: |
| | | { |
| | | l_u32OTAFileRecvLen = 0; |
| | | l_u32OTAFileSize = _pstResponse->m_u32RangeTotal; |
| | | if(0 == l_u32OTAFileSize) |
| | | { |
| | | l_u32OTAFileRecvLen = 0; |
| | | l_u32OTAFileSize = _pstResponse->m_u32RangeTotal; |
| | | if(0 == l_u32OTAFileSize) |
| | | { |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileSize error\r\n"); |
| | | } |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileSize error\r\n"); |
| | | } |
| | | |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileSize %u\r\n", l_u32OTAFileSize); |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileSize %u\r\n", l_u32OTAFileSize); |
| | | |
| | | l_eOTAState = OTA_STATE_HTTP_REQUEST_DATA; |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | l_eOTAState = OTA_STATE_HTTP_REQUEST_DATA; |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | } |
| | | case OTA_STATE_HTTP_REQUEST_DATA: |
| | | { |
| | | if(_pstResponse->m_u32RangeBegin != l_u32OTAFileRecvLen) |
| | | { |
| | | break; |
| | | } |
| | | case OTA_STATE_HTTP_REQUEST_DATA: |
| | | { |
| | | if(_pstResponse->m_u32RangeBegin != l_u32OTAFileRecvLen) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | /* 写入文件 */ |
| | | |
| | | /* 写入文件 */ |
| | | #if 0 |
| | | SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_APP_DOWN_LOAD_SPIFLASH_ADDRESS + l_u32OTAFileRecvLen, _pu8Data, _u32Len); |
| | | SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_APP_DOWN_LOAD_SPIFLASH_ADDRESS + l_u32OTAFileRecvLen, _pu8Data, _u32Len); |
| | | #else |
| | | flash_write_nbytes(FLASH_ID0, APP2_ADRESS + l_u32OTAFileRecvLen, _pu8Data, _u32Len); |
| | | flash_write_nbytes(FLASH_ID0, APP2_ADRESS + l_u32OTAFileRecvLen, _pu8Data, _u32Len); |
| | | #endif |
| | | l_u32OTAFileRecvLen += _u32Len; |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileDownload %u/%u\r\n", l_u32OTAFileRecvLen, l_u32OTAFileSize); |
| | | l_u32OTAFileRecvLen += _u32Len; |
| | | LOG_INFO(TRACE_MODULE_APP,"OTAFileDownload %u/%u\r\n", l_u32OTAFileRecvLen, l_u32OTAFileSize); |
| | | |
| | | /* 文件接收完成 */ |
| | | if (l_u32OTAFileRecvLen == l_u32OTAFileSize) |
| | | { |
| | | l_eOTAState = OTA_STATE_IDLE; |
| | | HIDO_TimerCancel(l_u32OTATimerID); |
| | | /* 文件接收完成 */ |
| | | if (l_u32OTAFileRecvLen == l_u32OTAFileSize) |
| | | { |
| | | l_eOTAState = OTA_STATE_IDLE; |
| | | HIDO_TimerCancel(l_u32OTATimerID); |
| | | |
| | | // 执行到这里,已经完成文件的下载,可以执行下一步处理了 |
| | | // 执行到这里,已经完成文件的下载,可以执行下一步处理了 |
| | | //#if 0 |
| | | // HIDO_UINT16 tmp = 0xBBBB,result; |
| | | // SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP,2, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | // SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); |
| | | // SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP,2, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | // SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); |
| | | //#endif |
| | | // HAL_Delay(10); |
| | | // Reboot(0); |
| | | uint32_t result = 0; |
| | | uint16_t tmp = 0xCCCC; |
| | | __disable_irq(); |
| | | result = flash_open(FLASH_ID0,NULL); |
| | | if(!result)//打开成功 |
| | | flash_erase(FLASH_ID0,APP_CONFIG_IAPFLAG_SECTOR_ADDR,FLASH_SECTOR_SIZE); |
| | | result = flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2); |
| | | __enable_irq(); |
| | | Serial0PutString("进入升级模式\r\n"); |
| | | g_com_map[CNT_UPDATE]=0; |
| | | save_com_map_to_flash(); |
| | | delay_us(100000); |
| | | NVIC_SystemReset(); //软复位回到bootloader |
| | | break; |
| | | } |
| | | // HAL_Delay(10); |
| | | // Reboot(0); |
| | | uint32_t result = 0; |
| | | uint16_t tmp = 0xCCCC; |
| | | __disable_irq(); |
| | | result = flash_open(FLASH_ID0,NULL); |
| | | if(!result)//打开成功 |
| | | flash_erase(FLASH_ID0,APP_CONFIG_IAPFLAG_SECTOR_ADDR,FLASH_SECTOR_SIZE); |
| | | result = flash_write_nbytes(FLASH_ID0,APP_CONFIG_IAPFLAG_MAP,(uint8_t*)&tmp,2); |
| | | __enable_irq(); |
| | | Serial0PutString("进入升级模式\r\n"); |
| | | g_com_map[CNT_UPDATE]=0; |
| | | save_com_map_to_flash(); |
| | | delay_us(100000); |
| | | NVIC_SystemReset(); //软复位回到bootloader |
| | | break; |
| | | } |
| | | |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | else |
| | |
| | | { |
| | | /* 升级参数有误,取消升级 */ |
| | | HIDO_UINT16 tmp = 0xFFFF; |
| | | |
| | | |
| | | // HIDO_Debug("goto app application\r\n"); |
| | | |
| | | // 执行到这里,说明文件下载失败了,需要进一步处理 |
| | | // 执行到这里,说明文件下载失败了,需要进一步处理 |
| | | #if 0 |
| | | SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, 2, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); |
| | | SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAP_PARAM_MAP, 256, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, 2, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | SPIFlash_Write(SPI_FLASH_ID_0, APP_CONFIG_IAPFLAG_MAP, (HIDO_UINT8*)&tmp, sizeof(tmp)); |
| | | SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_IAP_PARAM_MAP, 256, SPI_FLASH_SECTOR_ERASE_MODE_4K); |
| | | #endif |
| | | // g_com_map[OTA_FLAG]=0; |
| | | // save_com_map_to_flash(); |
| | | // delay_us(100000); |
| | | NVIC_SystemReset(); //软复位回到bootloader |
| | | |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | |
| | | |
| | | switch (l_eOTAState) |
| | | { |
| | | case OTA_STATE_HTTP_REQUEST_FILE_LEN: |
| | | case OTA_STATE_HTTP_REQUEST_FILE_LEN: |
| | | { |
| | | l_u32OTARetryCnt++; |
| | | if(l_u32OTARetryCnt >= 3) |
| | | { |
| | | l_u32OTARetryCnt++; |
| | | if(l_u32OTARetryCnt >= 3) |
| | | { |
| | | OTA_Failed(); |
| | | } |
| | | |
| | | OTA_RequestFileLen(); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | OTA_Failed(); |
| | | } |
| | | case OTA_STATE_HTTP_REQUEST_DATA: |
| | | |
| | | OTA_RequestFileLen(); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | } |
| | | case OTA_STATE_HTTP_REQUEST_DATA: |
| | | { |
| | | l_u32OTARetryCnt++; |
| | | if(l_u32OTARetryCnt >= 3) |
| | | { |
| | | l_u32OTARetryCnt++; |
| | | if(l_u32OTARetryCnt >= 3) |
| | | { |
| | | OTA_Failed(); |
| | | } |
| | | |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | OTA_Failed(); |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | |
| | | OTA_RequestFileData(l_u32OTAFileRecvLen); |
| | | HIDO_TimerStart(l_u32OTATimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(30), OTA_TimerCallBack, HIDO_NULL); |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | /* 擦除OTA文件缓存存储空间 */ |
| | | #if 0 |
| | | SPIFlash_Erase(SPI_FLASH_ID_0, APP_CONFIG_APP_DOWN_LOAD_SPIFLASH_ADDRESS, |
| | | APP_CONFIG_APP_DOWN_LOAD_SPIFLASH_SIZE, SPI_FLASH_SECTOR_ERASE_MODE_64K); |
| | | APP_CONFIG_APP_DOWN_LOAD_SPIFLASH_SIZE, SPI_FLASH_SECTOR_ERASE_MODE_64K); |
| | | #else |
| | | flash_erase(FLASH_ID0,APP2_ADRESS,APP_SIZE); |
| | | #endif |
| | |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | |
| | | if(l_eOTAState == OTA_STATE_IDLE) |
| | | { |
| | | OTA_SetUp(l_acOTAUrl); |
| | | } |
| | | |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | |
| | | { |
| | | l_eOTAState = OTA_STATE_IDLE; |
| | | HIDO_TimerCreate(&l_u32OTATimerID); |
| | | |
| | | |
| | | OTA_SetUp(_pcUrl); |
| | | |
| | | |
| | | return HIDO_OK; |
| | | } |