AC695N-SoundBox-SDK/apps/soundbox/smartbox/smartbox_setting/smartbox_karaoke_eq_setting.c
2026-08-09 00:00:00 +00:00

134 lines
3.6 KiB
C

#include "app_config.h"
#include "syscfg_id.h"
#include "le_smartbox_module.h"
#include "smartbox_setting_sync.h"
#include "smartbox_setting_opt.h"
#if (TCFG_EQ_ENABLE && MIC_EFFECT_EQ_EN && SMART_BOX_EN && RCSP_ADV_KARAOKE_EQ_SET_ENABLE && RCSP_ADV_KARAOKE_SET_ENABLE)
#include "effect_cfg.h"
#include "effect_tool.h"
#include "mic_effect.h"
static u8 g_karaoke_setting_info[9] = {EFFECT_EQ_SECTION_MAX, 0};
static void update_eq_setting_info(u8 *eq_info_data)
{
// 更新卡拉ok的EQ值
struct eq_seg_info *eq_info = NULL;
for (u8 i = 0; i < EFFECT_EQ_SECTION_MAX; i++) {
eq_info = mic_eq_get_info(i);
s8 gain = g_karaoke_setting_info[i + 1];
if (gain != (eq_info->gain >> 20)) {
eq_info->gain = gain << 20;
mic_eq_set_info(eq_info);
}
}
}
static void set_karaoke_eq_setting(u8 *eq_setting)
{
memcpy(g_karaoke_setting_info, eq_setting, sizeof(g_karaoke_setting_info));
}
static int get_karaoke_eq_setting(u8 *eq_setting)
{
memcpy(eq_setting, g_karaoke_setting_info, sizeof(g_karaoke_setting_info));
return sizeof(g_karaoke_setting_info);
}
// 1、写入VM
static void update_karaoke_eq_vm_value(u8 *eq_setting)
{
syscfg_write(VM_KARAOKE_EQ_SETTING, g_karaoke_setting_info, 9);
}
// 2、同步对端
static void karaoke_eq_sync(u8 *eq_setting)
{
#if TCFG_USER_TWS_ENABLE
if (get_bt_tws_connect_status()) {
update_smartbox_setting(ATTR_TYPE_KARAOKE_EQ_SETTING);
}
#endif
}
static void deal_karaoke_eq_setting(u8 *eq_setting, u8 write_vm, u8 tws_sync)
{
if (eq_setting) {
set_karaoke_eq_setting(eq_setting);
}
if (write_vm) {
update_karaoke_eq_vm_value(eq_setting);
}
if (tws_sync) {
karaoke_eq_sync(eq_setting);
}
update_eq_setting_info(eq_setting);
}
// 0 - gain
// 1 - freq
static u8 get_karaoke_eq_info(u8 *get_eq_info, u8 type)
{
u8 i;
u8 data_len = 1;
struct eq_seg_info *eq_info = NULL;
get_eq_info[0] = EFFECT_EQ_SECTION_MAX;
for (i = 0; i < EFFECT_EQ_SECTION_MAX; i++) {
eq_info = mic_eq_get_info(i);
if (type) {
u16 eq_freq = eq_info->freq;
eq_freq = ((((u8 *)&eq_freq)[0] << 8) + ((u8 *)&eq_freq)[1]);
memcpy(get_eq_info + data_len, &eq_freq, sizeof(eq_freq));
data_len += sizeof(eq_freq);
} else {
u8 eq_gain = (eq_info->gain >> 20) & 0xFF;
memcpy(get_eq_info + data_len, &eq_gain, sizeof(eq_gain));
data_len += sizeof(eq_gain);
}
}
return data_len;
}
static u8 get_karaoke_eq_all_freq_info(u8 *get_eq_info)
{
return get_karaoke_eq_info(get_eq_info, 1);
}
static u8 get_karoke_eq_all_gain_info(u8 *get_eq_info)
{
return get_karaoke_eq_info(get_eq_info, 0);
}
static int karaoke_eq_get_setting_extra_handle(void *setting_data, void *param)
{
u16 data_len = *((u16 *) param);
if (data_len > sizeof(g_karaoke_setting_info)) {
data_len = get_karaoke_eq_all_freq_info(setting_data);
} else {
data_len = get_karaoke_eq_setting(setting_data);
}
return data_len;
}
static SMARTBOX_SETTING_OPT karaoke_eq_opt = {
.data_len = 9,
.setting_type = ATTR_TYPE_KARAOKE_EQ_SETTING,
.syscfg_id = VM_KARAOKE_EQ_SETTING,
.deal_opt_setting = deal_karaoke_eq_setting,
.set_setting = set_karaoke_eq_setting,
.get_setting = get_karaoke_eq_setting,
.custom_vm_info_update = NULL,
.custom_setting_update = NULL,
.custom_sibling_setting_deal = NULL,
.custom_setting_release = NULL,
.set_setting_extra_handle = NULL,
.get_setting_extra_handle = karaoke_eq_get_setting_extra_handle,
};
REGISTER_APP_SETTING_OPT(karaoke_eq_opt);
#endif