yincheng.zhong
2 天以前 2ebb8217f43b69f491620423ea4d5d5944d1f91d
keil/include/src/OTA.c
@@ -37,7 +37,7 @@
    OTA_STATE_HTTP_REQUEST_FILE_LEN,
    OTA_STATE_HTTP_REQUEST_DATA,
    OTA_STATE_WAIT_HTTP_RESPONSE,
}E_OTAState;
} E_OTAState;
/*******************************************************************************
 *                             Local Variable                                  *
@@ -139,76 +139,76 @@
    {
        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
@@ -232,20 +232,20 @@
{
    /* 升级参数有误,取消升级 */
    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;
}
@@ -264,34 +264,34 @@
    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;
    }
    }
}
@@ -329,7 +329,7 @@
    /* 擦除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
@@ -377,12 +377,12 @@
    {
        return HIDO_ERR;
    }
    if(l_eOTAState == OTA_STATE_IDLE)
    {
        OTA_SetUp(l_acOTAUrl);
    }
    return HIDO_OK;
}
@@ -399,8 +399,8 @@
{
    l_eOTAState = OTA_STATE_IDLE;
    HIDO_TimerCreate(&l_u32OTATimerID);
    OTA_SetUp(_pcUrl);
    return HIDO_OK;
}