134 lines
3.6 KiB
C
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
|