dnr strength update
This commit is contained in:
@@ -86,7 +86,9 @@ unsigned g_last_volume_level = 0xFF; // 上次已上报的音量级别,0xFF
|
||||
unsigned g_mic_volume_level = 37; // 麦克风PGA增益级别(0=mute, 1-37=0dB~36dB,HID可见范围)
|
||||
unsigned g_request_mic_volume_set = 0;
|
||||
unsigned g_last_mic_volume_level = 0xFF; // 上次已上报的麦克风增益级别,0xFF表示初始化未完成
|
||||
unsigned g_dnr_strength = 100; // AI降噪强度HID值(0=关,2-100=开,步进2;100→-200dB最强)
|
||||
unsigned g_dnr_strength = 100; // AI降噪强度HID值(1-100=档位,步进1;100→-200dB最强;关断由g_dnr_on控制,此处不再用0表示强度)
|
||||
// 改动原因:用户要求与强度分离的开关量;关时仍保留g_dnr_strength供0x86读取与再次开启时恢复
|
||||
unsigned g_dnr_on = 1; // AI降噪总开关(0=关仅停算法,1=开且用g_dnr_strength档位)
|
||||
unsigned g_last_dnr_strength = 0xFF; // 上次已上报的降噪强度,0xFF表示首次未上报(触发开机上报)
|
||||
unsigned g_last_game_mode = 0xFF; // 上次已上报的音效模式,0xFF表示首次未上报(触发开机上报)
|
||||
unsigned g_request_dnr_strength_set = 0; // HID 0x85 SET_AI_NOISE_STRENGTH待处理标志
|
||||
@@ -508,6 +510,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
unsigned char hp_mute_path[] = "hp_mute";
|
||||
unsigned char monitor_sw_path[] = "monitor_sw";
|
||||
unsigned char dnr_strength_path[] = "dnr_strength";
|
||||
// 改动原因:断电记忆AI降噪开关与强度分离存储(旧固件仅用dnr_strength=0表示关,启动时迁移)
|
||||
unsigned char dnr_on_path[] = "dnr_on";
|
||||
unsigned host_os = OS_OTHERS;
|
||||
#if DNR_ENABLE
|
||||
unsigned dnr_init_flag = 0;
|
||||
@@ -711,28 +715,45 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
|
||||
{
|
||||
unsigned char saved_dnr = load_value(dnr_strength_path);
|
||||
unsigned char saved_on = load_value(dnr_on_path);
|
||||
// 改动原因:强度文件只存2–100偶数档位;开关存dnr_on;兼容旧数据saved_dnr==0表示关且未单独存开关
|
||||
if (saved_dnr == 255) {
|
||||
g_dnr_strength = 100;
|
||||
dnr_strength_saved = 100;
|
||||
g_dnr_on = 1;
|
||||
flag_aidenoise_onoff = 1;
|
||||
save_value(dnr_strength_path, (unsigned char)100);
|
||||
} else if (saved_dnr == 0 || (saved_dnr <= 100 && (saved_dnr % 2) == 0)) {
|
||||
if (saved_on == 255)
|
||||
save_value(dnr_on_path, (unsigned char)1);
|
||||
} else if (saved_dnr == 0) {
|
||||
g_dnr_strength = 100;
|
||||
dnr_strength_saved = 100;
|
||||
g_dnr_on = 0;
|
||||
flag_aidenoise_onoff = 0;
|
||||
save_value(dnr_strength_path, (unsigned char)100);
|
||||
save_value(dnr_on_path, (unsigned char)0);
|
||||
} else if (saved_dnr <= 100) {
|
||||
g_dnr_strength = saved_dnr;
|
||||
if (saved_dnr == 0) {
|
||||
dnr_strength_saved = 100;
|
||||
dnr_strength_saved = saved_dnr;
|
||||
if (saved_on == 0) {
|
||||
g_dnr_on = 0;
|
||||
flag_aidenoise_onoff = 0;
|
||||
} else {
|
||||
dnr_strength_saved = saved_dnr;
|
||||
g_dnr_on = 1;
|
||||
flag_aidenoise_onoff = 1;
|
||||
if (saved_on == 255)
|
||||
save_value(dnr_on_path, (unsigned char)1);
|
||||
}
|
||||
} else {
|
||||
g_dnr_strength = 100;
|
||||
dnr_strength_saved = 100;
|
||||
g_dnr_on = 1;
|
||||
flag_aidenoise_onoff = 1;
|
||||
save_value(dnr_strength_path, (unsigned char)100);
|
||||
save_value(dnr_on_path, (unsigned char)1);
|
||||
}
|
||||
debug_printf("Loaded dnr_strength from flash: current=%d saved=%d onoff=%d\n",
|
||||
g_dnr_strength, dnr_strength_saved, flag_aidenoise_onoff);
|
||||
debug_printf("Loaded dnr from flash: strength=%d saved=%d on=%d key_onoff=%d\n",
|
||||
g_dnr_strength, dnr_strength_saved, g_dnr_on, flag_aidenoise_onoff);
|
||||
}
|
||||
|
||||
// 从Flash恢复mic_mute状态(默认关闭=未静音)
|
||||
@@ -886,9 +907,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
cc_mic_level <: (unsigned)g_monitor_switch;
|
||||
debug_printf("Init monitor sync: sw=%d\n", g_monitor_switch);
|
||||
|
||||
// 出厂默认:AI降噪开启,初始化LED和算法
|
||||
// 出厂默认:AI降噪由g_dnr_on决定,关时强度变量仍保留供再次开启
|
||||
#if DNR_ENABLE == 1
|
||||
if (flag_aidenoise_onoff) {
|
||||
if (g_dnr_on) {
|
||||
led_on(&led_ctx, LED_ANC);
|
||||
led_update_all(&led_ctx);
|
||||
dnr_set_mode(1);
|
||||
@@ -1652,21 +1673,33 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
push_button_aidenoise_onoff_state_old = button_aidenoise_onoff;
|
||||
#if DNR_ENABLE == 1
|
||||
if(mode_change)
|
||||
if(mode_change) {
|
||||
if(flag_aidenoise_onoff)
|
||||
{
|
||||
// 改动原因:开时应用当前保存的档位g_dnr_strength,不把强度全局量写成0
|
||||
unsigned gs_on;
|
||||
GET_SHARED_GLOBAL(gs_on, g_dnr_strength);
|
||||
led_on(&led_ctx, LED_ANC);
|
||||
dnr_set_strength_level((unsigned char)dnr_strength_saved);
|
||||
SET_SHARED_GLOBAL(g_dnr_strength, dnr_strength_saved);
|
||||
dnr_set_strength_level((unsigned char)gs_on);
|
||||
SET_SHARED_GLOBAL(g_dnr_on, 1);
|
||||
dnr_strength_saved = gs_on;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 改动原因:关时只清开关与算法档位,保留g_dnr_strength供HID 0x86与再次开启
|
||||
led_off(&led_ctx, LED_ANC);
|
||||
dnr_set_strength_level(0);
|
||||
SET_SHARED_GLOBAL(g_dnr_strength, 0);
|
||||
SET_SHARED_GLOBAL(g_dnr_on, 0);
|
||||
}
|
||||
|
||||
//led_update_all(&led_ctx);
|
||||
save_value(dnr_on_path, (unsigned char)flag_aidenoise_onoff);
|
||||
{
|
||||
unsigned gs_sv;
|
||||
GET_SHARED_GLOBAL(gs_sv, g_dnr_strength);
|
||||
save_value(dnr_strength_path, (unsigned char)gs_sv);
|
||||
}
|
||||
g_dnr_on = flag_aidenoise_onoff;
|
||||
led_update_all(&led_ctx);
|
||||
}
|
||||
#endif
|
||||
|
||||
// 检查HID 0x84 FACTORY_RESET请求
|
||||
@@ -2084,27 +2117,34 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
|
||||
// 处理HID SET_AI_NOISE_STRENGTH (0x85) 请求
|
||||
// 改动原因:0x85的0仅关开关与灯并停算法,g_dnr_strength由eq.c保持原档位;非0更新强度并打开
|
||||
{
|
||||
unsigned dnr_req;
|
||||
GET_SHARED_GLOBAL(dnr_req, g_request_dnr_strength_set);
|
||||
if (dnr_req) {
|
||||
SET_SHARED_GLOBAL(g_request_dnr_strength_set, 0);
|
||||
unsigned new_strength;
|
||||
unsigned dnr_on_sw;
|
||||
GET_SHARED_GLOBAL(new_strength, g_dnr_strength);
|
||||
GET_SHARED_GLOBAL(dnr_on_sw, g_dnr_on);
|
||||
#if DNR_ENABLE == 1
|
||||
dnr_set_strength_level((unsigned char)new_strength);
|
||||
#endif
|
||||
if (new_strength == 0) {
|
||||
flag_aidenoise_onoff = 0;
|
||||
led_off(&led_ctx, LED_ANC);
|
||||
} else {
|
||||
if (dnr_on_sw) {
|
||||
dnr_set_strength_level((unsigned char)new_strength);
|
||||
flag_aidenoise_onoff = 1;
|
||||
dnr_strength_saved = new_strength;
|
||||
led_on(&led_ctx, LED_ANC);
|
||||
} else {
|
||||
dnr_set_strength_level(0);
|
||||
flag_aidenoise_onoff = 0;
|
||||
led_off(&led_ctx, LED_ANC);
|
||||
}
|
||||
#endif
|
||||
save_value(dnr_on_path, (unsigned char)dnr_on_sw);
|
||||
save_value(dnr_strength_path, (unsigned char)new_strength);
|
||||
g_dnr_on = dnr_on_sw;
|
||||
led_update_all(&led_ctx);
|
||||
debug_printf("HID SET_AI_NOISE_STRENGTH: strength=%d, saved to flash\n", new_strength);
|
||||
debug_printf("HID SET_AI_NOISE_STRENGTH: strength=%d on=%d flash saved\n",
|
||||
new_strength, dnr_on_sw);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2156,10 +2196,16 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
|
||||
// HID AI降噪强度变化主动上报(含首次开机上报:g_last_dnr_strength初始为0xFF)
|
||||
// 改动原因:按键关闭AI降噪时,协议要求上报0;开启时上报当前g_dnr_strength
|
||||
#if DNR_ENABLE == 1
|
||||
{
|
||||
unsigned current_dnr_strength;
|
||||
unsigned current_dnr_on;
|
||||
GET_SHARED_GLOBAL(current_dnr_on, g_dnr_on);
|
||||
GET_SHARED_GLOBAL(current_dnr_strength, g_dnr_strength);
|
||||
if (!current_dnr_on) {
|
||||
current_dnr_strength = 0;
|
||||
}
|
||||
#if HID_DFU_EN
|
||||
if (!g_in_fw_upgrade)
|
||||
#endif
|
||||
|
||||
@@ -656,15 +656,22 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) {
|
||||
}
|
||||
|
||||
// 处理设置AI降噪强度命令 (0x85) - SET_AI_NOISE_STRENGTH
|
||||
// 有效值: 0(关闭), 2,4,...,100(步进2); 强度映射: strength*2 → dB (100→-200dB)
|
||||
// 有效值: 0(仅关开关与算法,不修改强度档位), 2,4,...,100(步进2并打开); 强度映射: strength*2 → dB (100→-200dB)
|
||||
if (data[1] == 0x85) {
|
||||
uint8_t strength = data[2];
|
||||
if (strength > 100 || (strength != 0 && strength % 2 != 0)) {
|
||||
return false;
|
||||
}
|
||||
extern unsigned g_dnr_strength;
|
||||
extern unsigned g_dnr_on;
|
||||
extern unsigned g_request_dnr_strength_set;
|
||||
g_dnr_strength = strength;
|
||||
// 改动原因:用户要求0x85为0时只关g_dnr_on与灯、停算法,g_dnr_strength保留原值供断电记忆与0x86读取
|
||||
if (strength == 0) {
|
||||
g_dnr_on = 0;
|
||||
} else {
|
||||
g_dnr_strength = strength;
|
||||
g_dnr_on = 1;
|
||||
}
|
||||
g_request_dnr_strength_set = 1;
|
||||
read_request.pending_cmd = 0x86; // 设置后用0x86格式回报当前强度
|
||||
return true;
|
||||
@@ -1133,7 +1140,12 @@ unsigned char process_read_params(uint8_t response[]) {
|
||||
RSP_HDR(response, 0x86);
|
||||
|
||||
extern unsigned g_dnr_strength;
|
||||
response[2] = (uint8_t)g_dnr_strength;
|
||||
extern unsigned g_dnr_on;
|
||||
if (g_dnr_on) {
|
||||
response[2] = (uint8_t)g_dnr_strength;
|
||||
} else {
|
||||
response[2] = 0;
|
||||
}
|
||||
|
||||
read_request.pending_cmd = 0;
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user