update mode switch

This commit is contained in:
Steven Dan
2026-03-26 12:11:50 +08:00
parent e7975a9a5c
commit c9235923ed
5 changed files with 130 additions and 248 deletions

View File

@@ -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
}

View File

@@ -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 0EQ开启
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 1EQ开启
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 {

View File

@@ -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;

View File

@@ -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命令"""

View File

@@ -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=FPS2=虚拟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 | 保留字节
```