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 5133602..196d5c4 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 @@ -393,8 +393,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol) debug_printf("Saved game_mode to flash: %d\n", saved_mode); } #else - // if (saved_mode == 255) - { + if (saved_mode == 255) { #if defined(F1_MUSIC_UAC2) saved_mode = 1; // f1: default music mode #elif defined(F3_F4_FPS_UAC2) @@ -432,9 +431,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol) active_mode = (saved_mode <= 3) ? saved_mode : 0; { - unsigned hid_mode_init = (active_mode >= 2) ? (active_mode - 1) : 0; - SET_SHARED_GLOBAL(g_game_mode, hid_mode_init); - debug_printf("active_mode=%d hid_mode=%d\n", active_mode, hid_mode_init); + SET_SHARED_GLOBAL(g_game_mode, active_mode); + debug_printf("active_mode=%d\n", active_mode); } @@ -551,10 +549,9 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol) { - unsigned hid_mode_startup = (active_mode >= 2) ? (active_mode - 1) : 0; cc_mic_level <: 0xFC; - cc_mic_level <: hid_mode_startup; - debug_printf("Sent hid_mode %d (active_mode=%d) to hid_button_task\n", hid_mode_startup, active_mode); + cc_mic_level <: active_mode; + debug_printf("Sent sound_effect_mode %d to hid_button_task\n", active_mode); } // port_enable(p_ctrl_keys); @@ -789,6 +786,38 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol) } push_button_game_mode_state_old = button_game_mode; + // 处理HID SET_SOUND_EFFECT_MODE (0xA4) 请求,等同于按键效果 + if (!mode_btn_change && !need_reboot) { + unsigned hid_req_mode; + GET_SHARED_GLOBAL(hid_req_mode, g_request_game_mode); + if (hid_req_mode != (unsigned)-1) { + SET_SHARED_GLOBAL(g_request_game_mode, (unsigned)-1); + unsigned target = (hid_req_mode <= 3) ? hid_req_mode : 0; +#if (F3_F4_FPS_UAC2 == 1) + if (target == 1) { + active_mode = target; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2); + } else { + active_mode = target; + mode_btn_change = 1; + } +#elif (F1_MUSIC_UAC2 == 1) + if (target >= 2) { + active_mode = target; + need_reboot = 1; + SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); + } else { + active_mode = target; + mode_btn_change = 1; + } +#else + active_mode = target; + mode_btn_change = 1; +#endif + } + } + if (mode_btn_change || need_reboot) { // Always persist mode to flash so boot chain restores it { @@ -816,14 +845,14 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol) } led_update_all(&led_ctx); + // Always update g_game_mode so 0xA5 reads correctly + SET_SHARED_GLOBAL(g_game_mode, active_mode); #if USE_EX3D == 1 { - // hid_mode: 0=IR_OFF, 1=IR_GAME, 2=IR_7_1_GAME - unsigned hid_mode = (active_mode >= 2) ? (active_mode - 1) : 0; - SET_SHARED_GLOBAL(g_game_mode, hid_mode); + // sound_effect_mode: 0=无音效, 1=音乐, 2=游戏, 3=AI7.1 cc_mic_level <: 0xFC; - cc_mic_level <: hid_mode; - debug_printf("Mode changed: active=%d hid=%d\n", active_mode, hid_mode); + cc_mic_level <: active_mode; + debug_printf("Mode changed: active_mode=%d\n", active_mode); } #endif } diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c index a42fa31..b7c1fd4 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c @@ -133,6 +133,7 @@ float fLevel[NUM_USB_CHAN_OUT] = {0,}; enum {UBM_A3D_OFF=0, UBM_A3D_VON=1, UBM_A3D_ON=2}; extern void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]); extern unsigned int is_eq_disabled(void); +extern unsigned int g_eq_enable; void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) { uint32_t is_3d; @@ -868,16 +869,28 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local); if (current_mode_local == 0) { - // 关闭算法 + // 无音效模式:关闭EX3D和EQ算法 audio_ex3d_set_onoff(0); + g_eq_enable = 0; #if IR_SWITCHING_MODE is_3d_on = IR_OFF; #else is_3d_on = A3D_OFF; #endif - debug_printf("Mode 0: algorithm OFF\n"); + debug_printf("Mode 0: EX3D+EQ OFF\n"); } else if (current_mode_local == 1) { - // 游戏模式 (IR_GAME, stereo): SF index 0 + // 音乐模式:EX3D关闭,EQ开启 + audio_ex3d_set_onoff(0); + g_eq_enable = 1; +#if IR_SWITCHING_MODE + is_3d_on = IR_OFF; +#else + is_3d_on = A3D_OFF; +#endif + debug_printf("Mode 1: MUSIC, EQ ON, EX3D OFF\n"); + } else if (current_mode_local == 2) { + // 游戏模式 (IR_GAME, stereo): SF index 0,EQ开启 + g_eq_enable = 1; #if IR_SWITCHING_MODE audio_ex3d_set_sf(0); // SF 0 = STEREO GAME is_3d_on = IR_GAME; @@ -885,9 +898,10 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c is_3d_on = A3D_ON; #endif audio_ex3d_set_onoff(1); - debug_printf("Mode 1: GAME (IR_GAME) ON, sf=0\n"); - } else if (current_mode_local == 2) { - // AI7.1模式 (IR_7_1_GAME, 7.1): SF index 1 + debug_printf("Mode 2: GAME (IR_GAME) ON, sf=0, EQ ON\n"); + } else if (current_mode_local == 3) { + // AI7.1模式 (IR_7_1_GAME, 7.1): SF index 1,EQ开启 + g_eq_enable = 1; #if IR_SWITCHING_MODE audio_ex3d_set_sf(1); // SF 1 = SPATIAL GAME (7.1) is_3d_on = IR_7_1_GAME; @@ -895,7 +909,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c is_3d_on = A3D_ON; #endif audio_ex3d_set_onoff(1); - debug_printf("Mode 2: AI7.1 (IR_7_1_GAME) ON, sf=1\n"); + debug_printf("Mode 3: AI7.1 (IR_7_1_GAME) ON, sf=1, EQ ON\n"); } SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on); } else { diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq.c index 4639fae..d52181c 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq.c @@ -684,31 +684,23 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { return true; } - // 处理设置游戏模式命令 (0xA4) - SET_GAME_MODE + // 处理设置音效模式命令 (0xA4) - SET_SOUND_EFFECT_MODE + // 0=无音效(EQ/EX3D全关), 1=音乐模式, 2=游戏模式, 3=AI7.1模式 if (data[1] == 0xA4) { uint8_t game_mode = data[2]; - // 参数验证 - if (game_mode > 2) { + // 参数验证:0-3 + if (game_mode > 3) { return false; } - extern unsigned g_uac_mode; - unsigned uac_mode; - GET_SHARED_GLOBAL(uac_mode, g_uac_mode); - - if (uac_mode == 1) { - extern void request_game_mode_switch(unsigned game_mode); - //request_game_mode_switch(game_mode); - } else { - extern unsigned g_request_game_mode; - SET_SHARED_GLOBAL(g_request_game_mode, game_mode); - } + extern unsigned g_request_game_mode; + SET_SHARED_GLOBAL(g_request_game_mode, game_mode); return true; } - // 处理获取游戏模式命令 (0xA5) - GET_GAME_MODE + // 处理获取音效模式命令 (0xA5) - GET_SOUND_EFFECT_MODE if (data[1] == 0xA5) { read_request.pending_cmd = 0xA5; return true; @@ -1044,11 +1036,7 @@ unsigned char process_read_params(uint8_t response[]) { GET_SHARED_GLOBAL(game_mode, g_game_mode); // 当前游戏模式 (1字节,位置2) -#if UAC2 == 1 - response[2] = 0; -#else response[2] = (uint8_t)game_mode; -#endif read_request.pending_cmd = 0; // Clear read request flag return true; diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_designer_new.py b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_designer_new.py index c898b71..e94ce06 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_designer_new.py +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_designer_new.py @@ -522,10 +522,10 @@ class EQDesigner(QMainWindow): # 添加音效模式设置组 - mode_group = QGroupBox("音效模式设置") + mode_group = QGroupBox("EQ模式") self.ui_groups['mode'] = mode_group # 保存引用 mode_layout = QFormLayout(mode_group) - self.mode_label = QLabel("音效模式:") + self.mode_label = QLabel("EQ模式:") self.mode_combo = QComboBox() self.mode_combo.addItems(["预设模式1", "预设模式2", "预设模式3", "预设模式4", "预设模式5", "预设模式6", "用户模式1", "用户模式2", "用户模式3", "bypass", "禁用EQ"]) self.mode_combo.currentIndexChanged.connect(self.on_mode_changed) @@ -540,19 +540,19 @@ class EQDesigner(QMainWindow): mode_layout.addRow(self.mode_name_label, self.mode_name_edit) # 切换音效模式按钮(只发送0x8A命令) - self.switch_mode_btn = QPushButton("切换音效模式") + self.switch_mode_btn = QPushButton("切换EQ模式") self.switch_mode_btn.clicked.connect(self.on_switch_mode) self.switch_mode_btn.hide() mode_layout.addRow(self.switch_mode_btn) # 获取音效模式按钮(只处理0x8B命令) # 改动原因:移除hide()调用,让按钮显示出来,方便用户获取当前模式 - self.get_mode_btn = QPushButton("获取当前音效模式") + self.get_mode_btn = QPushButton("获取当前EQ模式") self.get_mode_btn.clicked.connect(self.on_get_mode) mode_layout.addRow(self.get_mode_btn) # 设置并保存音效模式按钮(发送0x92命令) - self.set_and_save_mode_btn = QPushButton("设置并保存音效模式") + self.set_and_save_mode_btn = QPushButton("设置并保存EQ模式") self.set_and_save_mode_btn.clicked.connect(self.on_set_and_save_mode) mode_layout.addRow(self.set_and_save_mode_btn) @@ -560,17 +560,17 @@ class EQDesigner(QMainWindow): # 添加音效参数配置组(EQ参数相关,可通过菜单隐藏) # 改动原因:将音效参数配置组也添加到ui_groups中,使其可以通过菜单隐藏/显示 - param_group = QGroupBox("音效参数配置") + param_group = QGroupBox("EQ参数配置") self.ui_groups['param'] = param_group # 保存引用,用于菜单控制可见性 param_layout = QVBoxLayout(param_group) # 配置音效参数按钮 - self.config_params_btn = QPushButton("配置音效参数") + self.config_params_btn = QPushButton("配置EQ参数") self.config_params_btn.clicked.connect(self.on_config_params) param_layout.addWidget(self.config_params_btn) # 读取音效参数按钮 - self.read_params_btn = QPushButton("读取音效参数") + self.read_params_btn = QPushButton("读取EQ参数") self.read_params_btn.hide() self.read_params_btn.clicked.connect(self.on_read_params) param_layout.addWidget(self.read_params_btn) @@ -646,68 +646,26 @@ class EQDesigner(QMainWindow): left_content_layout.addWidget(volume_group) - # 添加设备模式控制组(增益模式、滤波器模式、游戏模式) - device_mode_group = QGroupBox("设备模式控制") + # 添加音效模式控制组 + device_mode_group = QGroupBox("音效模式控制") self.ui_groups['device_mode'] = device_mode_group # 保存引用 device_mode_layout = QFormLayout(device_mode_group) - # 增益模式 - gain_control_layout = QHBoxLayout() - self.gain_mode_combo = QComboBox() - self.gain_mode_combo.addItem("低阻模式 (0)", 0) - self.gain_mode_combo.addItem("高阻模式 (1)", 1) - gain_control_layout.addWidget(QLabel("增益模式:")) - gain_control_layout.addWidget(self.gain_mode_combo) - device_mode_layout.addRow(gain_control_layout) - - gain_btn_layout = QHBoxLayout() - self.set_gain_mode_btn = QPushButton("设置增益模式") - self.set_gain_mode_btn.clicked.connect(self.on_set_gain_mode) - self.get_gain_mode_btn = QPushButton("读取增益模式") - self.get_gain_mode_btn.clicked.connect(self.on_get_gain_mode) - gain_btn_layout.addWidget(self.set_gain_mode_btn) - gain_btn_layout.addWidget(self.get_gain_mode_btn) - device_mode_layout.addRow(gain_btn_layout) - - # 滤波器模式 - # 改动原因:添加第8种滤波器模式,支持0-7共8种模式 - filter_control_layout = QHBoxLayout() - self.filter_mode_combo = QComboBox() - self.filter_mode_combo.addItem("Minimum Phase filter (default) (0)", 0) - self.filter_mode_combo.addItem("Linear Phase Apodizing Fast Roll-off filter (1)", 1) - self.filter_mode_combo.addItem("Linear phase fast roll-off filter (2)", 2) - self.filter_mode_combo.addItem("Linear Phase Fast Roll-off low-ripple filter (3)", 3) - self.filter_mode_combo.addItem("Linear phase slow roll-off filter (4)", 4) - self.filter_mode_combo.addItem("Minimum phase fast roll-off filter (5)", 5) - self.filter_mode_combo.addItem("Minimum phase slow roll-off filter (6)", 6) - self.filter_mode_combo.addItem("Minimum Phase Fast Roll-Off Low Dispersion (7)", 7) - filter_control_layout.addWidget(QLabel("滤波器模式:")) - filter_control_layout.addWidget(self.filter_mode_combo) - device_mode_layout.addRow(filter_control_layout) - - filter_btn_layout = QHBoxLayout() - self.set_filter_mode_btn = QPushButton("设置滤波器模式") - self.set_filter_mode_btn.clicked.connect(self.on_set_filter_mode) - self.get_filter_mode_btn = QPushButton("读取滤波器模式") - self.get_filter_mode_btn.clicked.connect(self.on_get_filter_mode) - filter_btn_layout.addWidget(self.set_filter_mode_btn) - filter_btn_layout.addWidget(self.get_filter_mode_btn) - device_mode_layout.addRow(filter_btn_layout) - - # 游戏模式 + # 音效模式 game_control_layout = QHBoxLayout() self.game_mode_combo = QComboBox() self.game_mode_combo.addItem("无音效 (0)", 0) - self.game_mode_combo.addItem("FPS模式 (1)", 1) - self.game_mode_combo.addItem("虚拟7.1 (2)", 2) - game_control_layout.addWidget(QLabel("游戏模式:")) + self.game_mode_combo.addItem("音乐模式 (1)", 1) + self.game_mode_combo.addItem("游戏模式 (2)", 2) + self.game_mode_combo.addItem("AI7.1模式 (3)", 3) + game_control_layout.addWidget(QLabel("音效模式:")) game_control_layout.addWidget(self.game_mode_combo) device_mode_layout.addRow(game_control_layout) game_btn_layout = QHBoxLayout() - self.set_game_mode_btn = QPushButton("设置游戏模式") + self.set_game_mode_btn = QPushButton("设置音效模式") self.set_game_mode_btn.clicked.connect(self.on_set_game_mode) - self.get_game_mode_btn = QPushButton("读取游戏模式") + self.get_game_mode_btn = QPushButton("读取音效模式") self.get_game_mode_btn.clicked.connect(self.on_get_game_mode) game_btn_layout.addWidget(self.set_game_mode_btn) game_btn_layout.addWidget(self.get_game_mode_btn) @@ -722,111 +680,6 @@ class EQDesigner(QMainWindow): left_content_layout.addWidget(device_mode_group) - # 添加LED控制组 - led_group = QGroupBox("LED控制") - self.ui_groups['led'] = led_group # 保存引用 - led_layout = QFormLayout(led_group) - - # LED索引选择 - led_index_layout = QHBoxLayout() - self.led_index_label = QLabel("LED索引:") - self.led_index_spin = QSpinBox() - self.led_index_spin.setRange(0, 7) - self.led_index_spin.setValue(0) - led_index_layout.addWidget(self.led_index_label) - led_index_layout.addWidget(self.led_index_spin) - led_layout.addRow(led_index_layout) - - # LED开关 - led_switch_layout = QHBoxLayout() - self.led_switch_label = QLabel("LED开关:") - self.led_switch_combo = QComboBox() - self.led_switch_combo.addItems(["OFF (关闭)", "ON (开启)"]) - self.led_switch_combo.setCurrentIndex(1) # 默认开启 - led_switch_layout.addWidget(self.led_switch_label) - led_switch_layout.addWidget(self.led_switch_combo) - led_layout.addRow(led_switch_layout) - - # LED信息显示 - self.led_info_label = QLabel("LED信息: 未获取") - led_layout.addRow("LED信息:", self.led_info_label) - - # LED状态显示 - self.led_status_label = QLabel("LED状态: 未获取") - led_layout.addRow("LED状态:", self.led_status_label) - - # LED控制按钮 - led_buttons_layout = QVBoxLayout() - - # 获取LED信息按钮 - self.get_led_info_btn = QPushButton("获取LED信息") - self.get_led_info_btn.clicked.connect(self.on_get_led_info) - led_buttons_layout.addWidget(self.get_led_info_btn) - - # 设置LED开关按钮 - self.set_led_switch_btn = QPushButton("设置LED开关") - self.set_led_switch_btn.clicked.connect(self.on_set_led_switch) - led_buttons_layout.addWidget(self.set_led_switch_btn) - - # 获取LED开关按钮 - self.get_led_switch_btn = QPushButton("获取LED开关") - self.get_led_switch_btn.clicked.connect(self.on_get_led_switch) - led_buttons_layout.addWidget(self.get_led_switch_btn) - - # 获取LED状态按钮 - self.get_led_status_btn = QPushButton("获取LED状态") - self.get_led_status_btn.clicked.connect(self.on_get_led_status) - led_buttons_layout.addWidget(self.get_led_status_btn) - - # 获取LED总数按钮 - self.get_led_count_btn = QPushButton("获取LED总数") - self.get_led_count_btn.clicked.connect(self.on_get_led_count) - led_buttons_layout.addWidget(self.get_led_count_btn) - - led_layout.addRow(led_buttons_layout) - - left_content_layout.addWidget(led_group) - - # 添加UAC控制组 - uac_group = QGroupBox("UAC模式控制") - self.ui_groups['uac'] = uac_group # 保存引用 - uac_layout = QFormLayout(uac_group) - - # UAC模式选择 - uac_mode_layout = QHBoxLayout() - self.uac_mode_label = QLabel("UAC模式:") - self.uac_mode_combo = QComboBox() - self.uac_mode_combo.addItems(["UAC2.0", "UAC1.0"]) - self.uac_mode_combo.setCurrentIndex(0) # 默认UAC2.0 - uac_mode_layout.addWidget(self.uac_mode_label) - uac_mode_layout.addWidget(self.uac_mode_combo) - uac_layout.addRow(uac_mode_layout) - - # 当前UAC模式显示 - self.current_uac_mode_label = QLabel("当前UAC模式: 未获取") - uac_layout.addRow("当前模式:", self.current_uac_mode_label) - - # UAC控制按钮 - uac_buttons_layout = QVBoxLayout() - - # 获取UAC模式信息按钮 - self.get_uac_mode_info_btn = QPushButton("获取UAC模式信息") - self.get_uac_mode_info_btn.clicked.connect(self.on_get_uac_mode_info) - uac_buttons_layout.addWidget(self.get_uac_mode_info_btn) - - # 设置UAC模式按钮 - self.set_uac_mode_btn = QPushButton("设置UAC模式") - self.set_uac_mode_btn.clicked.connect(self.on_set_uac_mode) - uac_buttons_layout.addWidget(self.set_uac_mode_btn) - - # 获取当前UAC模式按钮 - self.get_current_uac_mode_btn = QPushButton("获取当前UAC模式") - self.get_current_uac_mode_btn.clicked.connect(self.on_get_current_uac_mode) - uac_buttons_layout.addWidget(self.get_current_uac_mode_btn) - - uac_layout.addRow(uac_buttons_layout) - - left_content_layout.addWidget(uac_group) # 添加EQ使能控制组 eq_enable_group = QGroupBox("EQ使能控制") @@ -1005,12 +858,10 @@ class EQDesigner(QMainWindow): # 改动原因:添加'param'(音效参数配置)到菜单控制列表中 group_names = { 'device_info': '设备信息', - 'mode': '音效模式设置', - 'param': '音效参数配置', + 'mode': 'EQ模式', + 'param': 'EQ参数配置', 'volume': '音量控制', - 'device_mode': '设备模式控制', - 'led': 'LED控制', - 'uac': 'UAC模式控制', + 'device_mode': '音效模式控制', 'eq_enable': 'EQ使能控制', 'ex3d': 'EX3D控制' } @@ -1034,12 +885,10 @@ class EQDesigner(QMainWindow): if group_key in self.view_actions: group_names = { 'device_info': '设备信息', - 'mode': '音效模式设置', - 'param': '音效参数配置', + 'mode': 'EQ模式', + 'param': 'EQ参数配置', 'volume': '音量控制', - 'device_mode': '设备模式控制', - 'led': 'LED控制', - 'uac': 'UAC模式控制', + 'device_mode': '音效模式控制', 'eq_enable': 'EQ使能控制', 'ex3d': 'EX3D控制' } @@ -3354,20 +3203,20 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ log_message(LOG_LEVEL_ERROR, f"读取滤波器模式时出错: {str(e)}", self.log_level) def on_set_game_mode(self): - """设置游戏模式(发送0xA4命令)""" + """设置音效模式(发送0xA4命令)""" if self.device_combo.currentData() is None: log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level) return - # 获取游戏模式值 + # 获取音效模式值 game_mode = self.game_mode_combo.currentData() # 弹出确认对话框 reply = QMessageBox.question( self, - "确认设置游戏模式", - f"将要设置游戏模式为: {self.game_mode_combo.currentText()}\n\n" - f"游戏模式: 0=无音效, 1=FPS, 2=虚拟7.1\n\n" + "确认设置音效模式", + f"将要设置音效模式为: {self.game_mode_combo.currentText()}\n\n" + f"音效模式: 0=无音效, 1=音乐模式, 2=游戏模式, 3=AI7.1模式\n\n" f"是否继续?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No @@ -3383,27 +3232,27 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ # 构建0xA4数据包 data = bytearray(63) # 63字节数据包 data[0] = 0x77 # 同步头1 - data[1] = 0xA4 # 命令码 (SET_GAME_MODE) - data[2] = game_mode # 游戏模式值 (0-2) + data[1] = 0xA4 # 命令码 (SET_SOUND_EFFECT_MODE) + data[2] = game_mode # 音效模式值 (0-3) # 其余字节保持为0 # 发送请求 - log_message(LOG_LEVEL_INFO, f"正在设置游戏模式为 {game_mode}...", self.log_level) + log_message(LOG_LEVEL_INFO, f"正在设置音效模式为 {game_mode}...", self.log_level) h.write([0x01] + list(data)) h.close() - log_message(LOG_LEVEL_INFO, f"游戏模式 {game_mode} 设置成功", self.log_level) + log_message(LOG_LEVEL_INFO, f"音效模式 {game_mode} 设置成功", self.log_level) QMessageBox.information( self, "成功", - f"游戏模式已设置为: {self.game_mode_combo.currentText()}" + f"音效模式已设置为: {self.game_mode_combo.currentText()}" ) except Exception as e: - log_message(LOG_LEVEL_ERROR, f"设置游戏模式时出错: {str(e)}", self.log_level) + log_message(LOG_LEVEL_ERROR, f"设置音效模式时出错: {str(e)}", self.log_level) def on_get_game_mode(self): - """读取游戏模式(发送0xA5命令)""" + """读取音效模式(发送0xA5命令)""" if self.device_combo.currentData() is None: log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level) return @@ -3417,11 +3266,11 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ # 构建0xA5数据包 data = bytearray(63) # 63字节数据包 data[0] = 0x77 # 同步头1 - data[1] = 0xA5 # 命令码 (GET_GAME_MODE) + data[1] = 0xA5 # 命令码 (GET_SOUND_EFFECT_MODE) # 其余字节保持为0 # 发送请求 - log_message(LOG_LEVEL_INFO, "正在读取游戏模式...", self.log_level) + log_message(LOG_LEVEL_INFO, "正在读取音效模式...", self.log_level) h.write([0x01] + list(data)) # 读取响应 @@ -3431,7 +3280,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ if reply and len(reply) == 64: # 检查Report ID和同步头 if reply[0] == 0x01 and reply[1] == 0x77 and reply[2] == 0xA5: - # 解析游戏模式 + # 解析音效模式 game_mode = reply[3] # 更新UI显示 @@ -3439,14 +3288,14 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ if index >= 0: self.game_mode_combo.setCurrentIndex(index) - mode_names = ["无音效", "FPS模式", "虚拟7.1"] + mode_names = ["无音效", "音乐模式", "游戏模式", "AI7.1模式"] mode_name = mode_names[game_mode] if game_mode < len(mode_names) else "未知" - log_message(LOG_LEVEL_INFO, f"当前游戏模式: {game_mode} ({mode_name})", self.log_level) + log_message(LOG_LEVEL_INFO, f"当前音效模式: {game_mode} ({mode_name})", self.log_level) QMessageBox.information( self, - "游戏模式", - f"当前游戏模式: {game_mode}\n\n" + "音效模式", + f"当前音效模式: {game_mode}\n\n" f"{mode_name}" ) else: @@ -3457,7 +3306,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ h.close() except Exception as e: - log_message(LOG_LEVEL_ERROR, f"读取游戏模式时出错: {str(e)}", self.log_level) + log_message(LOG_LEVEL_ERROR, f"读取音效模式时出错: {str(e)}", self.log_level) def on_get_firmware_version(self): """读取固件版本(发送0xA6命令)""" diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_hid_protocol.md b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_hid_protocol.md index 3fcc34b..04ff9a5 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_hid_protocol.md +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/eq_hid_protocol.md @@ -24,8 +24,8 @@ | 0x9D | SET_EQ_ENABLE | 设置EQ使能开关 | 主机→设备 | 设置EQ使能开关(ON/OFF),禁用时保存当前模式,启用时恢复之前模式 | | 0x9E | GET_EQ_ENABLE | 获取EQ使能开关 | 主机→设备 | 读取EQ使能开关状态(ON/OFF) | | 0x9F | GET_SAMPLE_FORMAT | 获取采样率和格式 | 主机→设备 | 读取当前采样率、DSD模式和DAC采样分辨率 | -| 0xA4 | SET_GAME_MODE | 设置游戏模式 | 主机→设备 | 设置游戏模式(0=无音效,1=FPS,2=虚拟7.1) | -| 0xA5 | GET_GAME_MODE | 获取游戏模式 | 主机→设备 | 读取当前游戏模式(0-2) | +| 0xA4 | SET_SOUND_EFFECT_MODE | 设置音效模式 | 主机→设备 | 设置音效模式(0=无音效,1=音乐模式,2=游戏模式,3=AI7.1模式) | +| 0xA5 | GET_SOUND_EFFECT_MODE | 获取音效模式 | 主机→设备 | 读取当前音效模式(0-3) | | 0xA6 | GET_FIRMWARE_VERSION | 获取固件版本 | 主机→设备 | 读取设备固件版本号(BCD格式:主版本.次版本.修订版本) | | 0xB0 | SET_EX3D_CMD | 发送EX3D命令 | 主机→设备 | 发送EX3D设置命令(封装所有EX3D SET命令) | | 0xB1 | GET_EX3D_CMD | 读取EX3D命令 | 主机→设备 | 读取EX3D参数(封装所有EX3D GET命令) | @@ -500,8 +500,8 @@ - 返回当前EQ使能开关状态 - 返回之前保存的模式值(如果存在) -### 2.27 0xA4 - SET_GAME_MODE (设置游戏模式) -**功能**: 设置游戏模式 +### 2.27 0xA4 - SET_SOUND_EFFECT_MODE (设置音效模式) +**功能**: 设置音效模式 **方向**: 主机→设备 **数据包格式**: ``` @@ -509,26 +509,28 @@ ---------|------|------|------ 0 | 1 | 0x77 | 同步头1 1 | 1 | 0xA4 | 命令码 -2 | 1 | uint8 | 游戏模式值 (0=无音效, 1=FPS, 2=虚拟7.1) +2 | 1 | uint8 | 音效模式值 (0=无音效, 1=音乐模式, 2=游戏模式, 3=AI7.1模式) 3-62 | 60 | 0x00 | 保留字节 ``` **参数说明**: -- **游戏模式范围:** 0-2 -- **说明:** 选择游戏音效模式 - - 0: 无音效(标准立体声) - - 1: FPS模式(增强定位感) - - 2: 虚拟7.1(环绕声效果) +- **音效模式范围:** 0-3 +- **说明:** 选择音效模式,与硬件按键效果相同 + - 0: 无音效 — 所有模式按键灯灭,EQ算法关闭,EX3D算法关闭 + - 1: 音乐模式 — 音乐键灯亮,EQ算法开启,EX3D算法关闭 + - 2: 游戏模式 — 游戏键灯亮,EQ算法开启,EX3D游戏声场(SF=0)开启 + - 3: AI7.1模式 — AI7.1键灯亮,EQ算法开启,EX3D AI7.1声场(SF=1)开启 **设备端处理**: +- 效果等同于按下相应的硬件模式按键 - 参数会通过现有的定时保存机制自动保存到Flash -- 如果参数超出范围(>2),固件将拒绝设置并返回false +- 如果参数超出范围(>3),固件将拒绝设置并返回false **返回值**: -无直接返回值。如需确认游戏模式是否设置成功,请使用GET_GAME_MODE命令读取当前游戏模式。 +无直接返回值。如需确认音效模式是否设置成功,请使用GET_SOUND_EFFECT_MODE命令读取当前音效模式。 -### 2.28 0xA5 - GET_GAME_MODE (获取游戏模式) -**功能**: 读取设备当前游戏模式 +### 2.28 0xA5 - GET_SOUND_EFFECT_MODE (获取音效模式) +**功能**: 读取设备当前音效模式 **方向**: 主机→设备 **请求数据包格式**: ``` @@ -546,7 +548,7 @@ 0 | 1 | 0x01 | Report ID 1 | 1 | 0x77 | 同步头1 2 | 1 | 0xA5 | 同步头2 -3 | 1 | uint8 | 当前游戏模式 (0=无音效, 1=FPS, 2=虚拟7.1) +3 | 1 | uint8 | 当前音效模式 (0=无音效, 1=音乐模式, 2=游戏模式, 3=AI7.1模式) 4-62 | 59 | 0x00 | 保留字节 ```