add footsteps report and update mic led logic

This commit is contained in:
Steven Dan
2026-04-20 17:43:15 +08:00
parent e9d0ef5269
commit 0a0f720362

View File

@@ -396,6 +396,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 出厂默认AI降噪开启
unsigned flag_aidenoise_onoff = 1;
unsigned dnr_strength_saved = 100; // AI降噪重新开启时恢复的强度0x85可更新
unsigned last_footstep_expand = 0xFF; // 上次已上报的脚步增强增益值0xFF表示初始化未完成
// Buttons state
unsigned push_button_music_mode_state_old = 1; // Active low
@@ -600,7 +601,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 从 Flash 恢复 mic/dac 音量
{
unsigned char saved_mic = load_value(mic_vol_path);
if(saved_mic >= NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE && saved_mic <= NAU88L21_PGA_GAIN_REG_MAX_VALUE)
if(saved_mic <= NAU88L21_PGA_GAIN_REG_MAX_VALUE)
codec_adc_pga_gain_reg_value = saved_mic;
else
save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认22(21dB)
@@ -1580,8 +1581,11 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if((codec_adc_pga_gain_reg_value < NAU88L21_PGA_GAIN_REG_MAX_VALUE) && (flag_mic_mute == 0)) {
uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value];
// 增加音量
++codec_adc_pga_gain_reg_value;
// 从mute(0)跳到首个LED档位(3)跳过无LED的1-2档
if (codec_adc_pga_gain_reg_value == 0)
codec_adc_pga_gain_reg_value = 3;
else
++codec_adc_pga_gain_reg_value;
if (!mic_det_muted)
mic_volume(codec_adc_pga_gain_reg_value);
g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37;
@@ -1597,13 +1601,20 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
}
}
} else { // 逆时针
if((codec_adc_pga_gain_reg_value > NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE) && (flag_mic_mute == 0)) {
if((codec_adc_pga_gain_reg_value > 0) && (flag_mic_mute == 0)) {
uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value];
// 减小音量
--codec_adc_pga_gain_reg_value;
if (!mic_det_muted)
mic_volume(codec_adc_pga_gain_reg_value);
// 减小音量在首个LED档位(<=3)直接跳到mute(0)跳过无LED的1-2档
if (codec_adc_pga_gain_reg_value <= 3)
codec_adc_pga_gain_reg_value = 0;
else
--codec_adc_pga_gain_reg_value;
if (!mic_det_muted) {
if (codec_adc_pga_gain_reg_value == 0)
mic_volume(0);
else
mic_volume(codec_adc_pga_gain_reg_value);
}
g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37;
debug_printf("volume down %d\n", codec_adc_pga_gain_reg_value);
save_value(mic_vol_path, codec_adc_pga_gain_reg_value);
@@ -1868,9 +1879,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if (new_mic_level <= 37) { // 0=mute, 1-37=0dB~36dB
uint8_t new_led_count;
if (new_mic_level == 0) {
// mute: 静音硬件codec_adc_pga_gain_reg_value回到最小值
// mute: 静音硬件codec_adc_pga_gain_reg_value设为0与编码器静音一致
mic_volume(0);
codec_adc_pga_gain_reg_value = NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE;
codec_adc_pga_gain_reg_value = 0;
new_led_count = 0;
} else {
codec_adc_pga_gain_reg_value = new_mic_level;
@@ -2023,6 +2034,37 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
}
g_last_game_mode = current_game_mode;
}
#if USE_EX3D == 1
// HID脚步增强状态变化主动上报按键切换或HID 0xB0命令导致的变化含首次开机上报
{
unsigned current_footstep_expand;
if (flag_footsteps_enhancement == 0) current_footstep_expand = 0;
else if (flag_footsteps_enhancement == 1) current_footstep_expand = 6;
else current_footstep_expand = 12;
#if HID_DFU_EN
if (!g_in_fw_upgrade)
#endif
if (last_footstep_expand != current_footstep_expand) {
unsafe {
unsigned char * unsafe ptr = (unsigned char * unsafe)hidSendData;
ptr[0] = 1;
ptr[1] = 0x77;
ptr[2] = 0xB1;
// EX3D GET CMD_EXPAND_GAIN = 0x193 (little-endian)
ptr[3] = 0x93; ptr[4] = 0x01; ptr[5] = 0x00; ptr[6] = 0x00;
// 返回值: expand_gain (uint32, little-endian)
ptr[7] = (unsigned char)current_footstep_expand;
ptr[8] = 0x00; ptr[9] = 0x00; ptr[10] = 0x00;
for (int i = 11; i < HID_MAX_DATA_BYTES; i++) ptr[i] = 0x00;
}
hidSetChangePending(0x1);
debug_printf("Footstep expand_gain changed: %d -> %d, HID 0xB1 report sent\n",
last_footstep_expand, current_footstep_expand);
}
last_footstep_expand = current_footstep_expand;
}
#endif
#endif
#if EQ_EN