#ifndef _DRV_FLASH_
#define _DRV_FLASH_

#ifdef __cplusplus
extern "C" {
#endif

#include "kit_macro.h"

typedef struct
{
    uint32_t start_page;
    uint32_t page_cnt;
}flash_Item_t;

#define STATIC_FLASH_INIT(_name, _start_page, _page_cnt)  \
    flash_Item_t _name = \
    {   \
        (_start_page),     \
        (_page_cnt),    \
    }



kit_ret_e drv_flash_read_u16(flash_Item_t *item, uint32_t addr, uint16_t *data);
kit_ret_e drv_flash_read_u32(flash_Item_t *item, uint32_t addr, uint32_t *data);

kit_ret_e drv_flash_write_u32(flash_Item_t *item, uint32_t addr, uint32_t value);
kit_ret_e flash_series_erase_page(flash_Item_t *item, uint32_t addr, uint32_t cnt); 

uint32_t drv_flash_get_page_size(flash_Item_t *item);
void flash_jump(uint32_t dest_addr, NoArgFuncCall call);
    
kit_ret_e drv_drv_flash_write_u32(uint32_t addr, uint32_t value);
kit_ret_e drv_bsp_flash_write_data_u32(uint32_t addr, uint8_t* buf, uint32_t len);
kit_ret_e drv_flash_series_erase_page(uint32_t addr, uint32_t cnt); 
#ifdef __cplusplus
}
#endif

#endif