AC63_BT_SDK/apps/mesh/user_cfg.c
2025-02-18 15:40:42 +08:00

349 lines
12 KiB
C

#include "app_config.h"
#include "user_cfg.h"
#include "fs.h"
#include "string.h"
#include "system/includes.h"
#include "vm.h"
#include "btcontroller_config.h"
#include "app_main.h"
#include "bt_common.h"
#ifdef CONFIG_LITE_AUDIO
#include "audio_config.h"
#endif /*CONFIG_LITE_AUDIO*/
#define LOG_TAG_CONST USER_CFG
#define LOG_TAG "[USER_CFG]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
#define LOG_DUMP_ENABLE
#define LOG_CLI_ENABLE
#include "debug.h"
/*对应bt的tx功率挡位,SDK默认使用接近 0 dbm 功率挡位*/
#if (defined CONFIG_CPU_BR30)
#define SET_BLE_TX_POWER_LEVEL (4)
#elif (defined CONFIG_CPU_BR34)
#define SET_BLE_TX_POWER_LEVEL (7)
#else
#define SET_BLE_TX_POWER_LEVEL (6)
#endif
void lp_winsize_init(struct lp_ws_t *lp);
/* void bt_max_pwr_set(u8 pwr, u8 pg_pwr, u8 iq_pwr, u8 ble_pwr); */
extern APP_VAR app_var;
BT_CONFIG bt_cfg = {
.edr_name = "JL_app_debug",
.mac_addr = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
.tws_local_addr = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
.rf_power = 10,
.dac_analog_gain = 25,
.mic_analog_gain = 7,
.tws_device_indicate = 0x6688,
};
u8 get_max_sys_vol(void)
{
#if TCFG_APP_FM_EMITTER_EN
return FM_EMITTER_MAX_VOL;
#else
/* return (audio_cfg.max_sys_vol); */
return 30;
#endif
}
#if 1
u8 get_tone_vol(void)
{
return 15;
#if 0
if (!audio_cfg.tone_vol) {
return (get_max_sys_vol());
}
if (audio_cfg.tone_vol > get_max_sys_vol()) {
return (get_max_sys_vol());
}
return (audio_cfg.tone_vol);
#endif
}
#endif
//======================================================================================//
// BTIF配置项表 //
// 参数1: 配置项名字 //
// 参数2: 配置项需要多少个byte存储 //
// 说明: 配置项ID注册到该表后该配置项将读写于BTIF区域, 其它没有注册到该表 //
// 的配置项则默认读写于VM区域. //
//======================================================================================//
const struct btif_item btif_table[] = {
// item id len //
{CFG_BT_MAC_ADDR, 6 },
{CFG_BT_FRE_OFFSET, 6 }, //测试盒矫正频偏值
//{CFG_DAC_DTB, 2 },
//{CFG_MC_BIAS, 1 },
{0, 0 }, //reserved cfg
};
//============================= VM 区域空间最大值 ======================================//
const int vm_max_size_config = VM_MAX_SIZE_CONFIG; //该宏在app_cfg中配置
//======================================================================================//
struct lp_ws_t lp_winsize = {
.lrc_ws_inc = 480, //260
.lrc_ws_init = 160,
.bt_osc_ws_inc = 100,
.bt_osc_ws_init = 140,
.osc_change_mode = 0,
};
u16 bt_get_tws_device_indicate(u8 *tws_device_indicate)
{
return bt_cfg.tws_device_indicate;
}
const u8 *bt_get_mac_addr()
{
return bt_cfg.mac_addr;
}
void bt_set_mac_addr(u8 *addr)
{
memcpy(bt_cfg.mac_addr, addr, 6);
}
static u8 bt_mac_addr_for_testbox[6] = {0};
void bt_get_vm_mac_addr(u8 *addr)
{
#if 0
//中断不能调用syscfg_read;
int ret = 0;
ret = syscfg_read(CFG_BT_MAC_ADDR, addr, 6);
if ((ret != 6)) {
syscfg_write(CFG_BT_MAC_ADDR, addr, 6);
}
#else
memcpy(addr, bt_mac_addr_for_testbox, 6);
#endif
}
void bt_get_tws_local_addr(u8 *addr)
{
memcpy(addr, bt_cfg.tws_local_addr, 6);
}
const char *bt_get_local_name()
{
return (const char *)(bt_cfg.edr_name);
}
void bt_set_local_name(char *name, u8 len)
{
memcpy(bt_cfg.edr_name, name, len);
bt_cfg.edr_name[len] = 0;
}
const char *bt_get_pin_code()
{
return "0000";
}
extern STATUS_CONFIG status_config;
extern struct charge_platform_data charge_data;
extern struct dac_platform_data dac_data;
extern struct adkey_platform_data adkey_data;
extern struct led_platform_data pwm_led_data;
extern struct adc_platform_data adc_data;
extern u8 key_table[KEY_EVENT_MAX][KEY_NUM_MAX];
#define USE_CONFIG_BIN_FILE 0
#define USE_CONFIG_STATUS_SETTING 1 //状态设置,包括灯状态和提示音
#define USE_CONFIG_AUDIO_SETTING USE_CONFIG_BIN_FILE //音频设置
#define USE_CONFIG_CHARGE_SETTING USE_CONFIG_BIN_FILE //充电设置
#define USE_CONFIG_KEY_SETTING USE_CONFIG_BIN_FILE //按键消息设置
#define USE_CONFIG_MIC_TYPE_SETTING USE_CONFIG_BIN_FILE //MIC类型设置
#define USE_CONFIG_LOWPOWER_V_SETTING USE_CONFIG_BIN_FILE //低电提示设置
#define USE_CONFIG_AUTO_OFF_SETTING USE_CONFIG_BIN_FILE //自动关机时间设置
#define USE_CONFIG_COMBINE_VOL_SETTING 1
#define LOW_POWER_SHUTDOWN 320 //低电直接关机电压
#define LOW_POWER_OFF_VAL 330 //低电关机电压
#define LOW_POWER_WARN_VAL 340 //低电提醒电压
void cfg_file_parse(u8 idx)
{
u8 tmp[128] = {0};
int ret = 0;
memset(tmp, 0x00, sizeof(tmp));
/*************************************************************************/
/* CFG READ IN cfg_tools.bin */
/*************************************************************************/
//-----------------------------CFG_COMBINE_VOL----------------------------------//
#if TCFG_AUDIO_ENABLE
#if (defined SYS_VOL_TYPE && (SYS_VOL_TYPE == VOL_TYPE_AD))
audio_combined_vol_init(USE_CONFIG_COMBINE_VOL_SETTING);
#endif/*SYS_VOL_TYPE*/
#endif /*TCFG_AUDIO_ENABLE*/
//-----------------------------CFG_BT_NAME--------------------------------------//
ret = syscfg_read(CFG_BT_NAME, tmp, 32);
if (ret < 0) {
log_info("read bt name err\n");
} else if (ret >= LOCAL_NAME_LEN) {
memset(bt_cfg.edr_name, 0x00, LOCAL_NAME_LEN);
memcpy(bt_cfg.edr_name, tmp, LOCAL_NAME_LEN);
bt_cfg.edr_name[LOCAL_NAME_LEN - 1] = 0;
} else {
memset(bt_cfg.edr_name, 0x00, LOCAL_NAME_LEN);
memcpy(bt_cfg.edr_name, tmp, ret);
}
/* g_printf("bt name config:%s\n", bt_cfg.edr_name); */
log_info("bt name config:%s\n", bt_cfg.edr_name);
//-----------------------------CFG_BT_RF_POWER_ID----------------------------//
ret = syscfg_read(CFG_BT_RF_POWER_ID, &app_var.rf_power, 1);
if (ret < 0) {
log_debug("read rf err\n");
app_var.rf_power = 10;
}
bt_max_pwr_set(app_var.rf_power, 5, 8, SET_BLE_TX_POWER_LEVEL);
/* g_printf("rf config:%d\n", app_var.rf_power); */
log_info("rf config:%d,%d\n", app_var.rf_power, SET_BLE_TX_POWER_LEVEL);
app_var.music_volume = 30;
app_var.wtone_volume = 14;
#if (USE_CONFIG_CHARGE_SETTING) && (TCFG_CHARGE_ENABLE)
/* g_printf("app charge config:\n"); */
log_info("app charge config:\n");
CHARGE_CONFIG *charge = (CHARGE_CONFIG *)tmp;
ret = syscfg_read(CFG_CHARGE_ID, charge, sizeof(CHARGE_CONFIG));
if (ret > 0) {
log_info_hexdump(charge, sizeof(CHARGE_CONFIG));
log_info("sw:%d poweron_en:%d full_v:%d full_mA:%d charge_mA:%d\n",
charge->sw, charge->poweron_en, charge->full_v, charge->full_c, charge->charge_c);
memcpy((u8 *)&charge_data, (u8 *)charge, sizeof(CHARGE_CONFIG));
}
#endif
#if (USE_CONFIG_KEY_SETTING) && (TCFG_ADKEY_ENABLE || TCFG_IOKEY_ENABLE)
/* g_printf("app key config:\n"); */
log_info("app key config:\n");
KEY_OP *key_msg = (KEY_OP *)tmp;
ret = syscfg_read(CFG_KEY_MSG_ID, key_msg, sizeof(KEY_OP) * KEY_NUM_MAX);
if (ret > 0) {
log_info_hexdump(key_msg, sizeof(KEY_OP) * KEY_NUM);
memcpy(key_table, key_msg, sizeof(KEY_OP) * KEY_NUM);
}
log_info("key_msg:");
log_info_hexdump((u8 *)key_table, KEY_EVENT_MAX * KEY_NUM_MAX);
#endif
#if USE_CONFIG_LOWPOWER_V_SETTING
/* g_printf("auto low power config:\n"); */
log_info("auto low power config:\n");
AUTO_LOWPOWER_V_CONFIG auto_lowpower;
ret = syscfg_read(CFG_LOWPOWER_V_ID, &auto_lowpower, sizeof(AUTO_LOWPOWER_V_CONFIG));
if (ret > 0) {
app_var.warning_tone_v = auto_lowpower.warning_tone_v;
app_var.poweroff_tone_v = auto_lowpower.poweroff_tone_v;
}
log_info("warning_tone_v:%d poweroff_tone_v:%d\n", app_var.warning_tone_v, app_var.poweroff_tone_v);
#else
app_var.warning_tone_v = LOW_POWER_WARN_VAL;
app_var.poweroff_tone_v = LOW_POWER_OFF_VAL;
log_info("warning_tone_v:%d poweroff_tone_v:%d\n", app_var.warning_tone_v, app_var.poweroff_tone_v);
#endif
#if USE_CONFIG_AUTO_OFF_SETTING
/* g_printf("auto off time config:\n"); */
log_info("auto off time config:\n");
AUTO_OFF_TIME_CONFIG auto_off_time;
ret = syscfg_read(CFG_AUTO_OFF_TIME_ID, &auto_off_time, sizeof(AUTO_OFF_TIME_CONFIG));
if (ret > 0) {
app_var.auto_off_time = auto_off_time.auto_off_time * 60;
}
log_info("auto_off_time:%d\n", app_var.auto_off_time)
#else
app_var.auto_off_time = TCFG_AUTO_SHUT_DOWN_TIME;
log_info("auto_off_time:%d\n", app_var.auto_off_time);
#endif
/*************************************************************************/
/* CFG READ IN VM */
/*************************************************************************/
u8 mac_buf[6];
u8 mac_buf_tmp[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
u8 mac_buf_tmp2[6] = {0, 0, 0, 0, 0, 0};
#if TCFG_USER_TWS_ENABLE
int len = syscfg_read(CFG_TWS_LOCAL_ADDR, bt_cfg.tws_local_addr, 6);
if (len != 6) {
get_random_number(bt_cfg.tws_local_addr, 6);
syscfg_write(CFG_TWS_LOCAL_ADDR, bt_cfg.tws_local_addr, 6);
}
log_debug("tws_local_mac:");
log_info_hexdump(bt_cfg.tws_local_addr, sizeof(bt_cfg.tws_local_addr));
ret = syscfg_read(CFG_TWS_COMMON_ADDR, mac_buf, 6);
if (ret != 6 || !memcmp(mac_buf, mac_buf_tmp, 6))
#endif
do {
ret = syscfg_read(CFG_BT_MAC_ADDR, mac_buf, 6);
if ((ret != 6) || !memcmp(mac_buf, mac_buf_tmp, 6) || !memcmp(mac_buf, mac_buf_tmp2, 6)) {
get_random_number(mac_buf, 6);
syscfg_write(CFG_BT_MAC_ADDR, mac_buf, 6);
}
} while (0);
syscfg_read(CFG_BT_MAC_ADDR, bt_mac_addr_for_testbox, 6);
if (!memcmp(bt_mac_addr_for_testbox, mac_buf_tmp, 6)) {
get_random_number(bt_mac_addr_for_testbox, 6);
syscfg_write(CFG_BT_MAC_ADDR, bt_mac_addr_for_testbox, 6);
log_info(">>>init mac addr!!!\n");
}
log_info("mac:");
log_info_hexdump(mac_buf, sizeof(mac_buf));
memcpy(bt_cfg.mac_addr, mac_buf, 6);
#if (CONFIG_BT_MODE != BT_NORMAL)
const u8 dut_name[] = "AC693x_DUT";
const u8 dut_addr[6] = {0x12, 0x34, 0x56, 0x56, 0x34, 0x12};
memcpy(bt_cfg.edr_name, dut_name, sizeof(dut_name));
memcpy(bt_cfg.mac_addr, dut_addr, 6);
#endif
/*************************************************************************/
/* CFG READ IN isd_config.ini */
/*************************************************************************/
LRC_CONFIG lrc_cfg;
ret = syscfg_read(CFG_LRC_ID, &lrc_cfg, sizeof(LRC_CONFIG));
if (ret > 0) {
log_info("lrc cfg:");
log_info_hexdump(&lrc_cfg, sizeof(LRC_CONFIG));
lp_winsize.lrc_ws_inc = lrc_cfg.lrc_ws_inc;
lp_winsize.lrc_ws_init = lrc_cfg.lrc_ws_init;
lp_winsize.bt_osc_ws_inc = lrc_cfg.btosc_ws_inc;
lp_winsize.bt_osc_ws_init = lrc_cfg.btosc_ws_init;
lp_winsize.osc_change_mode = lrc_cfg.lrc_change_mode;
}
/* printf("%d %d %d \n",lp_winsize.lrc_ws_inc,lp_winsize.lrc_ws_init,lp_winsize.osc_change_mode); */
lp_winsize_init(&lp_winsize);
}