#include "include.h" #define CM_SIZE FLASH_CM_SIZE #define CM_START (FLASH_SIZE - CM_SIZE) #define param_read8(a, b) b = cm_read8(PAGE0(a)) #define param_write8(a, b) cm_write8(PAGE0(a), b) #define param_read16(a, b) b = cm_read16(PAGE0(a)) #define param_write16(a, b) cm_write16(PAGE0(a), b) #define param_read32(a, b) b = cm_read32(PAGE0(a)) #define param_write332(a, b) cm_write32(PAGE0(a), b) #define param_read(a, b, c) cm_read(a, PAGE0(b), c) #define param_write(a, b, c) cm_write(a, PAGE0(b), c) #define param_sync_do() cm_sync() AT(.text.bsp.param) void param_init(bool reset) { cm_init(MAX_CM_PAGE, CM_START, CM_SIZE); //printf("CM: %x\n", cm_read8(PAGE0(0))); //printf("CM: %x\n", cm_read8(PAGE1(0))); sys_cb.rand_seed = sys_get_rand_key(); #if FUNC_MUSIC_EN f_msc.cur_dev = DEV_UDISK; #endif param_sys_vol_read(); if (sys_cb.vol < SYS_LIMIT_VOLUME) { sys_cb.vol = SYS_INIT_VOLUME; } sys_cb.hfp_vol = sys_cb.vol / sys_cb.hfp2sys_mul; } AT(.text.bsp.param) void bsp_param_write(u8 *buf, u32 addr, uint len) { param_write(buf, addr, len); } AT(.text.bsp.param) void bsp_param_read(u8 *buf, u32 addr, uint len) { param_read(buf, addr, len); } AT(.text.bsp.param) void bsp_param_sync(void) { param_sync_do(); } #if BT_LOCAL_ADDR AT(.text.bsp.param) void param_random_key_read(u8 *key) { if (key == NULL) { return; } param_read(key, PARAM_RANDOM_KEY, 4); } AT(.text.bsp.param) void param_random_key_write(void) { u32 key; param_random_key_read((u8*)&key); if (key == 0 || key == UINT_MAX) { key = sys_cb.rand_seed; param_write((u8 *)&key, PARAM_RANDOM_KEY, 4); } } #endif // BT_LOCAL_ADDR #if FUNC_MUSIC_EN AT(.text.bsp.param) void param_msc_num_write(void) { if (f_msc.cur_dev == DEV_SDCARD) { param_write((u8 *)&f_msc.file_num, PARAM_MSC_NUM_SD, 2); } else if (f_msc.cur_dev == DEV_SDCARD1) { param_write((u8 *)&f_msc.file_num, PARAM_MSC_NUM_SD1, 2); } else { param_write((u8 *)&f_msc.file_num, PARAM_MSC_NUM_USB, 2); } } AT(.text.bsp.param) void param_msc_num_read(void) { if (f_msc.cur_dev == DEV_SDCARD) { param_read((u8 *)&f_msc.file_num, PARAM_MSC_NUM_SD, 2); } else if (f_msc.cur_dev == DEV_SDCARD1) { param_read((u8 *)&f_msc.file_num, PARAM_MSC_NUM_SD1, 2); } else { param_read((u8 *)&f_msc.file_num, PARAM_MSC_NUM_USB, 2); } if (f_msc.file_num > f_msc.file_total) { f_msc.file_num = f_msc.file_total; } if (f_msc.file_num < 1) { f_msc.file_num = 1; } } #if MUSIC_BREAKPOINT_EN AT(.text.bsp.param) void param_msc_breakpoint_write(void) { if (f_msc.cur_dev == DEV_SDCARD) { param_write((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_SD, 10); } else if (f_msc.cur_dev == DEV_SDCARD1) { param_write((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_SD1, 10); } else { param_write((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_USB, 10); } } AT(.text.bsp.param) void param_msc_breakpoint_read(void) { if (f_msc.cur_dev == DEV_SDCARD) { param_read((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_SD, 10); } else if (f_msc.cur_dev == DEV_SDCARD1) { param_read((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_SD1, 10); } else { param_read((u8 *)&f_msc.brkpt, PARAM_MSC_BRKPT_USB, 10); } } #endif // MUSIC_BREAKPOINT_EN #endif // FUNC_MUSIC_EN AT(.text.bsp.param) void param_sys_vol_write(void) { param_write((u8 *)&sys_cb.vol, PARAM_SYS_VOL, 1); } AT(.text.bsp.param) void param_sys_vol_read(void) { param_read((u8 *)&sys_cb.vol, PARAM_SYS_VOL, 1); } AT(.text.bsp.param) void param_lang_id_write(void) { // param_write((u8 *)&sys_cb.lang_id, PARAM_LANG_ID, 1); } AT(.text.bsp.param) void param_lang_id_read(void) { // param_read((u8 *)&sys_cb.lang_id, PARAM_LANG_ID, 1); } AT(.text.bsp.param) void param_sync(void) { param_sync_do(); } AT(.text.bsp.param) u32 param_get_xosc_addr(void) { return PARAM_BT_XOSC_CAP; }