diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc index 698a641..2f69672 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc @@ -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