// cpu内部Flash业务驱动
// 杭州秒寻科技有限公司
// 周涛
// 2023-09-26

#ifndef __DRIVERAPP_CPUFLASH_H__
#define __DRIVERAPP_CPUFLASH_H__

#include "sysdef.h"

#define DRIVERAPP_UPGRADE_PARAM_ADDRESS 0x08010000 // 升级参数地址，扇区4(64KB)
#define DRIVERAPP_OAM_PARAM_ADDRESS 0x08020000     // OAM参数地址，扇区5的首地址(128KB)

#define DRIVERAPP_APP_ADDRESS1 0x08080000 // APP启动地址，扇区8的首地址(128KB)
#define DRIVERAPP_APP_ADDRESS2 0x080A0000 // 升级文件地址，扇区9的首地址(128KB)

#define DRIVERAPP_APP_UPGRADE_ADDRESS1 0x080C0000 // 升级文件地址，扇区10的首地址(128KB)
#define DRIVERAPP_APP_UPGRADE_ADDRESS2 0x080E0000 // 升级文件地址，扇区11的首地址(128KB)

#define OAM_UPGRADE_MAX_FILE_SIZE 262144 // 升级文件最大字节数

// 文件升级管理结构
typedef struct
{
    uint32 dwFileSize;    // 文件大小
    uint32 dwNextFrameNo; // 下一次期望的帧号
    int32 dwMemAddress;   // 待写入的存储器地址
} DRIVERAPP_UPGRADE_T;

// 供外部使用接口
void driverapp_cpuflash_init();
uint8 driverapp_cpuflash_read_oam_param(uint32 *pdwData, uint16 wLen); // 读取系统OAM参数
uint8 driverapp_cpuflash_save_oam_param(uint32 *pdwData, uint16 wLen); // 保存系统OAM参数

uint8 driverapp_cpuflash_upgrade_erase_download_block();                                            // 擦除下载区
uint8 driverapp_cpuflash_upgrade_notice_file_info(uint32 dwFileSize);                               // 通知文件大小
uint8 driverapp_cpuflash_upgrade_write_data(uint32 dwCurrentFrameNo, uint32 *pdwData, uint16 wLen); // 升级写入数据
uint8 driverapp_cpuflash_upgrade_update_flag(uint8 byUpgradeFlag, uint32 dwFileSize);               // 更新升级标识符
uint8 driverapp_cpuflash_copy_data_from_download_block();                                           // 从下载区复制数据到程序区
uint8 driver_cpuflash_upgrade_erase_app_block();                                                    // 擦除程序区

#endif
