upgrade_opt.c 2.9 KB
#include "upgrade_opt.h"
#include "stdbool.h"
#include "jz_upgrade.h"
#include "my_typedef.h"
#include "stmflash.h"
#include "string.h"


//获取升级状态
uint64_t GetUpgradeRebootState(bool *isUpgradeReboot,T_UpgradeEndInfo *upgradeEndInfo)
{
	T_UpgradeRebootParam upgradeRebootParam;

    upgradeRebootParam = *(T_UpgradeRebootParam *) (APPLICATION_PARAM_STORE_ADDRESS);

    if (upgradeRebootParam.upgradeRebootKey == DJI_TEST_UPGRADE_REBOOT_KEY) {
        *isUpgradeReboot = true;
        *upgradeEndInfo = upgradeRebootParam.upgradeEndInfo;
    } else {
        *isUpgradeReboot = false;
    }

    return 0;
}


//设置重启状态
uint64_t SetUpgradeRebootState(const T_UpgradeEndInfo *upgradeEndInfo)
{
    uint32_t result;
    T_UpgradeRebootParam upgradeRebootParam;

    upgradeRebootParam.upgradeRebootKey = DJI_TEST_UPGRADE_REBOOT_KEY;
    upgradeRebootParam.upgradeEndInfo = *upgradeEndInfo;

//	printf("key = 0x%X  upgradeEndInfo = %d\r\n",upgradeRebootParam.upgradeRebootKey,upgradeRebootParam.upgradeEndInfo);
	
    result = FLASH_If_Erase(APPLICATION_PARAM_STORE_ADDRESS, APPLICATION_PARAM_STORE_ADDRESS_END);
    if (result != FLASHIF_OK) {
        return 1;
    }

    stmflash_write(APPLICATION_PARAM_STORE_ADDRESS, (uint16_t *) &upgradeRebootParam,
                            sizeof(T_UpgradeRebootParam)/sizeof(uint16_t));//半字写入
//    if (result != FLASHIF_OK) {
//        return 2;
//    }
	
//	printf("set reboot state success\r\n");

    return 0;
}

//擦除升级文件存储区
uint64_t CleanUpgradeProgramFileStoreArea(void)
{
    uint32_t result;

    result = FLASH_If_Erase(APPLICATION_STORE_ADDRESS, APPLICATION_STORE_ADDRESS_END);
    if (result != FLASHIF_OK) {
        return 1;
    }
    return 0;
}


//擦除升级参数存储区
uint64_t CleanUpgradeParmStoreArea(void)
{
	uint32_t result;
	
	FLASH_If_Erase(APPLICATION_PARAM_STORE_ADDRESS,APPLICATION_PARAM_STORE_ADDRESS_END);
	if (result != FLASHIF_OK) {
        return 1;
    }
    return 0;
}


//读取升级文件
uint64_t ReadUpgradeProgramFile(uint32_t offset, uint16_t readDataLen, uint8_t *data,uint16_t *realLen)
{
	 memcpy(data, (const void *) (APPLICATION_STORE_ADDRESS + offset), readDataLen);
    *realLen = readDataLen;

    return 0;
}


//替换升级文件
uint64_t ReplaceOldProgram(void)
{
    uint32_t result;
    T_UpgradeFileInfo *upgradeFileInfo = (T_UpgradeFileInfo *) (DJI_TEST_UPGRADE_FILE_INFO_STORE_ADDR);

    if (upgradeFileInfo->fileSize > APPLICATION_ADDRESS_END - APPLICATION_ADDRESS + 1) {
        return 1;
    }

    result = FLASH_If_Erase(APPLICATION_ADDRESS, APPLICATION_ADDRESS_END);
    if (result != FLASHIF_OK) {
        return 2;
    }
	
    stmflash_write(APPLICATION_ADDRESS, (uint16_t *)APPLICATION_STORE_ADDRESS, (upgradeFileInfo->fileSize)/2);

//	if (result != FLASHIF_OK) {
//        return 3;
//    }

    return 0;
}



uint64_t RebootSystem(void)
{
    __disable_irq();
//#ifdef __CC_ARM
//    __disable_fiq();
//#endif
    NVIC_SystemReset();

    return 0;
}