| | |
| | | OTA_STATE_HTTP_REQUEST_DATA, |
| | | OTA_STATE_WAIT_HTTP_RESPONSE, |
| | | }E_OTAState; |
| | | typedef enum |
| | | { |
| | | OTA_TYPE_MCU, |
| | | OTA_TYPE_MUSIC, |
| | | } E_OTAType; |
| | | |
| | | /******************************************************************************* |
| | | * Local Variable * |
| | | *******************************************************************************/ |
| | | static HIDO_UINT8 l_u8OTAType; |
| | | static HIDO_CHAR l_acOTAUrl[256]; |
| | | static HIDO_UINT32 l_u32OTATimerID = 0; |
| | | static volatile E_OTAState l_eOTAState = OTA_STATE_IDLE; |
| | | static HIDO_UINT32 l_u32OTARetryCnt = 0; |
| | | static HIDO_UINT32 l_u32OTAFileRecvLen = 0; |
| | | static HIDO_UINT32 l_u32OTAFileSize = 0; |
| | | |
| | | static HIDO_UINT32 l_u32MusicWriteLen = 0; |
| | | static E_OTAType l_eOTAType = OTA_TYPE_MCU; |
| | | /******************************************************************************* |
| | | * Local Function Declaration * |
| | | *******************************************************************************/ |
| | |
| | | /* 文件接收完成 */ |
| | | if (l_u32OTAFileRecvLen == l_u32OTAFileSize) |
| | | { |
| | | uint16_t tmp = 0; |
| | | 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)); |
| | | //#endif |
| | | // HAL_Delay(10); |
| | | // Reboot(0); |
| | | uint16_t tmp = 0xBBBB; |
| | | // 执行到这里,已经完成文件的下载,可以执行下一步处理了 |
| | | if (OTA_TYPE_MUSIC == l_eOTAType) |
| | | { |
| | | tmp = 0xFFFF; |
| | | l_u32MusicWriteLen = 0; |
| | | DATA_CHANGE(); |
| | | } |
| | | else |
| | | { |
| | | tmp = 0xBBBB; |
| | | } |
| | | __disable_irq(); |
| | | result1=flash_open(FLASH_ID0,NULL); |
| | | if(!result1) |
| | | { |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APPFLAG |
| | | flash_write_nbytes(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, (uint8_t*)&tmp, sizeof(tmp)); |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAP_PARAM_MAP, FLASH_SECTOR_SIZE);//擦除APPFLAG |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAPFLAG_SECTOR_ADDR, FLASH_SECTOR_SIZE);//擦除APPFLAG |
| | | flash_write_nbytes(FLASH_ID0, APP_CONFIG_IAPFLAG_MAP, (uint8_t*)&tmp, sizeof(tmp)); |
| | | flash_erase(FLASH_ID0, APP_CONFIG_IAP_PARAM_MAP, FLASH_SECTOR_SIZE);//擦除APPFLAG |
| | | } |
| | | __enable_irq(); |
| | | delay_us(1000000); |
| | |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | |
| | | HIDO_VOID OTA_GetMusicPackData(HIDO_UINT8 *_pu8Data) |
| | | { |
| | | flash_read(FLASH_ID0, APP2_ADRESS + l_u32MusicWriteLen, _pu8Data, 512); |
| | | l_u32MusicWriteLen += 512; |
| | | } |
| | | |
| | | HIDO_UINT16 OTA_GetMusicPackNum() |
| | | { |
| | | if ((l_u32OTAFileSize % 512) != 0) |
| | | { |
| | | return (l_u32OTAFileSize / 512) + 1; |
| | | } |
| | | else |
| | | { |
| | | return l_u32OTAFileSize / 512; |
| | | } |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : OTA_Failed |
| | | * Description : |
| | |
| | | *******************************************************************************/ |
| | | static HIDO_INT32 OTA_Failed(void) |
| | | { |
| | | /* 升级参数有误,取消升级 */ |
| | | // 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); |
| | | #endif |
| | | uint16_t tmp = 0xFFFF; |
| | | __disable_irq(); |
| | | result1=flash_open(FLASH_ID0,NULL); |
| | |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2020年9月13日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 OTA_SetUp(HIDO_CHAR *_pcUrl) |
| | | HIDO_INT32 OTA_SetUp(HIDO_UINT8 _u8Type, HIDO_CHAR *_pcUrl) |
| | | { |
| | | if(HIDO_NULL == _pcUrl) |
| | | { |
| | |
| | | l_u32OTARetryCnt = 0; |
| | | l_u32OTAFileSize = 0; |
| | | l_u32OTAFileRecvLen = 0; |
| | | l_u8OTAType = _u8Type; |
| | | HIDO_UtilSnprintf(l_acOTAUrl, sizeof(l_acOTAUrl), _pcUrl); |
| | | |
| | | /* 擦除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); |
| | | #else |
| | | flash_erase(FLASH_ID0,APP2_ADRESS,APP_CONFIG_APPLICATION_SIZE); |
| | | #endif |
| | | if (_u8Type == 0) |
| | | { |
| | | l_eOTAType = OTA_TYPE_MCU; |
| | | flash_erase(FLASH_ID0, APP2_ADRESS, APP_CONFIG_APPLICATION_SIZE); |
| | | } |
| | | else |
| | | { |
| | | l_eOTAType = OTA_TYPE_MUSIC; |
| | | } |
| | | |
| | | /* 请求升级文件长度 */ |
| | | if(OTA_RequestFileLen() != HIDO_OK) |
| | | { |
| | |
| | | *******************************************************************************/ |
| | | HIDO_INT32 OTA_Poll(void) |
| | | { |
| | | if(Internet_IsIPReady() != HIDO_TRUE) |
| | | if (Internet_IsIPReady() != HIDO_TRUE) |
| | | { |
| | | return HIDO_ERR; |
| | | } |
| | | |
| | | if(l_eOTAState == OTA_STATE_IDLE) |
| | | |
| | | if (l_eOTAState == OTA_STATE_IDLE) |
| | | { |
| | | OTA_SetUp(l_acOTAUrl); |
| | | OTA_SetUp(l_u8OTAType, l_acOTAUrl); |
| | | } |
| | | |
| | | |
| | | return HIDO_OK; |
| | | } |
| | | |
| | | |
| | | /******************************************************************************* |
| | | * Function Name : OTA_Start |
| | |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2020年9月13日 |
| | | *******************************************************************************/ |
| | | HIDO_INT32 OTA_Start(HIDO_CHAR *_pcUrl) |
| | | HIDO_INT32 OTA_Start(HIDO_UINT8 _u8Type, HIDO_CHAR *_pcUrl) |
| | | { |
| | | l_eOTAState = OTA_STATE_IDLE; |
| | | HIDO_TimerCreate(&l_u32OTATimerID); |
| | | |
| | | OTA_SetUp(_pcUrl); |
| | | |
| | | |
| | | OTA_SetUp(_u8Type, _pcUrl); |
| | | |
| | | return HIDO_OK; |
| | | } |