From e41ccffbe9e4a9d59df51da01970e7ffc3848e95 Mon Sep 17 00:00:00 2001 From: WXK <287788329@qq.com> Date: 星期二, 06 五月 2025 16:53:46 +0800 Subject: [PATCH] 最新ota 加入ota语音 --- keil/include/src/OTA.c | 104 +++++++++++++++++++++++++++++++++------------------- 1 files changed, 66 insertions(+), 38 deletions(-) diff --git a/keil/include/src/OTA.c b/keil/include/src/OTA.c index 02fb7bf..0783f1f 100644 --- a/keil/include/src/OTA.c +++ b/keil/include/src/OTA.c @@ -38,17 +38,24 @@ 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 * *******************************************************************************/ @@ -175,25 +182,28 @@ /* 文件接收完成 */ 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); @@ -219,6 +229,27 @@ 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 : @@ -230,15 +261,6 @@ *******************************************************************************/ 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); @@ -314,7 +336,7 @@ * 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) { @@ -330,15 +352,20 @@ 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) { @@ -379,18 +406,19 @@ *******************************************************************************/ 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 @@ -401,12 +429,12 @@ * 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; } -- Gitblit v1.9.3