default settings
This commit is contained in:
@@ -96,6 +96,8 @@ unsigned g_led_enable = 1; // LED开关,默认开启
|
||||
// HID 0xB0 CMD_EXPAND_GAIN到达时由eq.c设置,button_task读取后更新footstep LED
|
||||
// -1 (0xFFFFFFFF) 表示无待处理请求
|
||||
unsigned g_hid_expand_gain_request = (unsigned)-1;
|
||||
// HID 0x84 FACTORY_RESET命令到达时由eq.c设置,button_task轮询后执行重启
|
||||
unsigned g_request_factory_reset = 0;
|
||||
uint32_t get_reference_time();
|
||||
unsigned g_disable_i2c = 0;
|
||||
unsigned g_dac_mode = 10;
|
||||
@@ -319,9 +321,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
|
||||
//port_enable(p_button_music_mode);
|
||||
|
||||
int codec_adc_pga_gain_reg_value = NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE;// NAU88L21_PGA_GAIN_REG_MAX_VALUE;//0x01;//0x1f;
|
||||
// 出厂默认:麦克风21dB (reg=22), 监听-14dB (level=15)
|
||||
int codec_adc_pga_gain_reg_value = 22; // 21dB
|
||||
|
||||
int dac_level = DAC_LEVEL_DEFAULT;
|
||||
int dac_level = 15; // -14dB (DAC_LEVEL_MAX - 14 = 29 - 14 = 15)
|
||||
|
||||
// mic endcoder 变量
|
||||
uint8_t prev_encode_input1 = 0;
|
||||
@@ -344,9 +347,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
// active_mode: 0=off, 1=music (LED_MUSIC, no algorithm),
|
||||
// 2=game (LED_GAME_MODE, IR_GAME), 3=AI7.1 (LED_AI7_1, IR_7_1_GAME)
|
||||
unsigned active_mode = 0;
|
||||
// 脚步增强3档状态: 0=关(0dB), 1=中亮/6dB, 2=高亮/12dB
|
||||
unsigned flag_footsteps_enhancement = 0;
|
||||
unsigned flag_aidenoise_onoff = 0;
|
||||
// 脚步增强3档状态: 0=关(0dB), 1=中亮/6dB, 2=高亮/12dB;出厂默认开启(12dB)
|
||||
unsigned flag_footsteps_enhancement = 2;
|
||||
// 出厂默认:AI降噪开启
|
||||
unsigned flag_aidenoise_onoff = 1;
|
||||
|
||||
// Buttons state
|
||||
unsigned push_button_music_mode_state_old = 1; // Active low
|
||||
@@ -390,7 +394,11 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
unsigned char saved_footstep = load_value(footstep_path);
|
||||
if (saved_footstep == 6) flag_footsteps_enhancement = 1;
|
||||
else if (saved_footstep == 12) flag_footsteps_enhancement = 2;
|
||||
else flag_footsteps_enhancement = 0;
|
||||
else if (saved_footstep == 255) {
|
||||
// 未初始化:出厂默认脚步增强开启(12dB),写入flash
|
||||
flag_footsteps_enhancement = 2;
|
||||
save_value(footstep_path, (unsigned char)12);
|
||||
} else flag_footsteps_enhancement = 0;
|
||||
debug_printf("Loaded footstep gain from flash: %d, state=%d\n", saved_footstep, flag_footsteps_enhancement);
|
||||
}
|
||||
#endif
|
||||
@@ -409,13 +417,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
}
|
||||
#else
|
||||
if (saved_mode == 255) {
|
||||
#if defined(F1_MUSIC_UAC2)
|
||||
saved_mode = 1; // f1: default music mode
|
||||
#elif defined(F3_F4_FPS_UAC2)
|
||||
saved_mode = 3; // f3/f4: default AI7.1 (IR_7_1_GAME)
|
||||
#else
|
||||
saved_mode = 0;
|
||||
#endif
|
||||
// 出厂默认:AI7.1开启(mode=3)
|
||||
saved_mode = 3;
|
||||
save_value(path, saved_mode);
|
||||
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
||||
}
|
||||
@@ -502,13 +505,13 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
if(saved_mic >= NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE && 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);
|
||||
save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认22(21dB)
|
||||
|
||||
unsigned char saved_dac = load_value(dac_vol_path);
|
||||
if(saved_dac <= DAC_LEVEL_MAX)
|
||||
dac_level = saved_dac;
|
||||
else
|
||||
save_value(dac_vol_path, (unsigned char)dac_level);
|
||||
save_value(dac_vol_path, (unsigned char)dac_level); // 出厂默认15(-14dB)
|
||||
}
|
||||
// 同步全局音量变量与从Flash恢复的dac_level / codec_adc_pga_gain_reg_value
|
||||
g_volume_level = dac_level;
|
||||
@@ -588,7 +591,16 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
led_on(&led_ctx, LED_FOOTSTEP_MODE);
|
||||
led_update_all(&led_ctx);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// 出厂默认:AI降噪开启,初始化LED和算法
|
||||
#if DNR_ENABLE == 1
|
||||
if (flag_aidenoise_onoff) {
|
||||
led_on(&led_ctx, LED_ANC);
|
||||
led_update_all(&led_ctx);
|
||||
dnr_set_mode(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
// port_enable(p_ctrl_keys);
|
||||
port_ctrl_keys = 0;//port_in(p_ctrl_keys);
|
||||
@@ -991,6 +1003,18 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol)
|
||||
//led_update_all(&led_ctx);
|
||||
#endif
|
||||
|
||||
// 检查HID 0x84 FACTORY_RESET请求
|
||||
{
|
||||
unsigned factory_reset_req;
|
||||
GET_SHARED_GLOBAL(factory_reset_req, g_request_factory_reset);
|
||||
if (factory_reset_req) {
|
||||
SET_SHARED_GLOBAL(g_request_factory_reset, 0);
|
||||
debug_printf("Factory reset: rebooting...\n");
|
||||
delay_milliseconds(500);
|
||||
device_reboot();
|
||||
while (1);
|
||||
}
|
||||
}
|
||||
|
||||
mode_change = 0;
|
||||
if(button_mic_mute == 0)
|
||||
|
||||
@@ -460,6 +460,10 @@ static unsigned ex3d_b0b1_result[HID_MAX_DATA_BYTES / 4] = {0};
|
||||
extern unsigned g_hid_expand_gain_request;
|
||||
void SetEx3dHidChan(chanend_t c) { g_ex3d_hid_chanend = c; }
|
||||
#endif
|
||||
|
||||
// 0x84 FACTORY_RESET: 删除Flash参数后触发重启(由button_task轮询执行)
|
||||
extern unsigned g_request_factory_reset;
|
||||
extern int lfs_remove_file(const char *path);
|
||||
unsigned char process_send_params(uint8_t data[], uint16_t len) {
|
||||
if (len < 60) {
|
||||
return false;
|
||||
@@ -722,6 +726,21 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 处理恢复出厂默认命令 (0x84) - FACTORY_RESET
|
||||
if (data[1] == 0x84) {
|
||||
// 删除所有Flash保存的参数文件
|
||||
lfs_remove_file("game_mode");
|
||||
lfs_remove_file("mic_vol");
|
||||
lfs_remove_file("dac_vol");
|
||||
lfs_remove_file("footstep");
|
||||
// 删除EQ flash数据
|
||||
eq_flash_clear_all();
|
||||
// 通知button_task在合适时机重启(避免在USB上下文中直接reboot)
|
||||
SET_SHARED_GLOBAL(g_request_factory_reset, 1);
|
||||
read_request.pending_cmd = 0x84;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 处理发送/读取EX3D命令 (0xB0/0xB1) - SET_EX3D_CMD / GET_EX3D_CMD
|
||||
// 数据通过 g_ex3d_hid_chanend 直接传到tile1的hid_button_task执行,结果同步返回
|
||||
if (data[1] == 0xB0 || data[1] == 0xB1) {
|
||||
@@ -1073,6 +1092,14 @@ unsigned char process_read_params(uint8_t response[]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// 处理恢复出厂默认响应 (0x84) - FACTORY_RESET
|
||||
if (read_request.pending_cmd == 0x84) {
|
||||
RSP_HDR(response, 0x84);
|
||||
response[2] = 0x00; // 成功
|
||||
read_request.pending_cmd = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
// 处理发送EX3D命令响应 (0xB0) - SET_EX3D_CMD
|
||||
// 结果已在process_send_params中同步从tile1获取,存于ex3d_b0b1_result
|
||||
if (ex3d_request.pending_cmd == 0xB0) {
|
||||
|
||||
@@ -678,6 +678,13 @@ class EQDesigner(QMainWindow):
|
||||
firmware_btn_layout.addWidget(self.get_firmware_version_btn)
|
||||
device_mode_layout.addRow(firmware_btn_layout)
|
||||
|
||||
# 恢复出厂默认按钮
|
||||
factory_reset_btn_layout = QHBoxLayout()
|
||||
self.factory_reset_btn = QPushButton("恢复出厂默认 (0x84)")
|
||||
self.factory_reset_btn.clicked.connect(self.on_factory_reset)
|
||||
factory_reset_btn_layout.addWidget(self.factory_reset_btn)
|
||||
device_mode_layout.addRow(factory_reset_btn_layout)
|
||||
|
||||
left_content_layout.addWidget(device_mode_group)
|
||||
|
||||
|
||||
@@ -2022,6 +2029,83 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{
|
||||
except Exception as e:
|
||||
log_message(LOG_LEVEL_ERROR, f"复位EQ参数时出错: {str(e)}", self.log_level)
|
||||
|
||||
def on_factory_reset(self):
|
||||
"""恢复出厂默认(发送0x84命令)"""
|
||||
if self.device_combo.currentData() is None:
|
||||
log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level)
|
||||
return
|
||||
|
||||
reply = QMessageBox.warning(
|
||||
self,
|
||||
"确认恢复出厂默认",
|
||||
"这将删除所有已保存的参数(音效模式、麦克风增益、监听音量、脚步声增强、EQ预设),\n"
|
||||
"恢复出厂默认值,并重启设备。\n\n"
|
||||
"出厂默认值:\n"
|
||||
" · 音效模式: AI7.1 (3)\n"
|
||||
" · 脚步声增强: 12dB (全亮)\n"
|
||||
" · 麦克风增益: 21dB\n"
|
||||
" · 监听音量: -14dB\n"
|
||||
" · AI降噪: 开启\n"
|
||||
" · EQ预设: 头文件默认值\n\n"
|
||||
"是否继续?",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No
|
||||
)
|
||||
|
||||
if reply == QMessageBox.Yes:
|
||||
self.send_factory_reset()
|
||||
|
||||
def send_factory_reset(self):
|
||||
"""发送恢复出厂默认命令(0x84命令)"""
|
||||
if self.device_combo.currentData() is None:
|
||||
log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level)
|
||||
return
|
||||
|
||||
try:
|
||||
device_info = self.device_combo.currentData()
|
||||
h = hid.device()
|
||||
h.open(device_info['vendor_id'], device_info['product_id'])
|
||||
h.set_nonblocking(1)
|
||||
|
||||
# 构建0x84数据包
|
||||
data = bytearray(63) # 63字节数据包
|
||||
data[0] = 0x77 # 同步头1
|
||||
data[1] = 0x84 # 命令码 (FACTORY_RESET)
|
||||
# data[2..62] 保留,保持为0
|
||||
|
||||
log_message(LOG_LEVEL_INFO, "正在发送恢复出厂默认命令...", self.log_level)
|
||||
h.write([0x01] + list(data)) # 0x01是report_id
|
||||
|
||||
# 读取响应(设备重启前会先回复)
|
||||
reply = h.get_input_report(0x1, 64)
|
||||
if reply and len(reply) == 64:
|
||||
if reply[0] == 0x01 and reply[1] == 0x77 and reply[2] == 0x84:
|
||||
status = reply[3]
|
||||
if status == 0x00:
|
||||
log_message(LOG_LEVEL_INFO, "恢复出厂默认成功,设备即将重启...", self.log_level)
|
||||
QMessageBox.information(
|
||||
self,
|
||||
"恢复出厂默认",
|
||||
"命令已发送,设备将在500ms后重启。\n请稍候重新连接设备。"
|
||||
)
|
||||
else:
|
||||
log_message(LOG_LEVEL_ERROR, f"恢复出厂默认失败 (状态码: 0x{status:02x})", self.log_level)
|
||||
else:
|
||||
log_message(LOG_LEVEL_ERROR, f"无效的0x84响应: 0x{reply[1]:02x} 0x{reply[2]:02x}", self.log_level)
|
||||
else:
|
||||
# 设备可能已开始重启,视为成功
|
||||
log_message(LOG_LEVEL_INFO, "未收到响应,设备可能已开始重启", self.log_level)
|
||||
QMessageBox.information(
|
||||
self,
|
||||
"恢复出厂默认",
|
||||
"命令已发送,设备将重启。\n请稍候重新连接设备。"
|
||||
)
|
||||
|
||||
h.close()
|
||||
|
||||
except Exception as e:
|
||||
log_message(LOG_LEVEL_ERROR, f"恢复出厂默认时出错: {str(e)}", self.log_level)
|
||||
|
||||
def on_get_mode_count(self):
|
||||
"""获取EQ模式总数(发送0x91命令)"""
|
||||
if self.device_combo.currentData() is None:
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|--------|----------|------|------|------|
|
||||
| 0x82 | SET_MIC_VOLUME | 设置麦克风增益级别 | 主机→设备 | 设置麦克风PGA增益(0=静音, 1-37=0dB~36dB, 1dB/步) |
|
||||
| 0x83 | GET_MIC_VOLUME | 获取麦克风增益级别 | 主机→设备 | 读取当前麦克风PGA增益级别(0=静音, 1-37=0dB~36dB) |
|
||||
| 0x84 | FACTORY_RESET | 恢复出厂默认设置 | 主机→设备 | 删除Flash中所有已保存参数,设备重启后自动恢复出厂默认值 |
|
||||
| 0x8A | SET_EQ_MODE | 切换EQ模式 | 主机→设备 | 切换EQ模式 |
|
||||
| 0x8B | GET_EQ_MODE | 获取当前EQ模式信息 | 主机→设备 | 读取设备当前EQ模式和名称 |
|
||||
| 0x8C | SET_MODE_GAIN_AND_NAME | 设置模式整体增益和名称 | 主机→设备 | 设置模式整体增益和名称 |
|
||||
@@ -98,6 +99,54 @@
|
||||
- 编码器旋转导致增益变化时,设备主动向主机上报当前增益(最大上报37,内部38时上报37)
|
||||
- HID SET_MIC_VOLUME(0x82)命令成功执行后,设备也主动上报新增益
|
||||
|
||||
### 2.0c 0x84 - FACTORY_RESET (恢复出厂默认设置)
|
||||
**功能**: 删除Flash中所有已保存的用户参数,设备重启后自动恢复出厂默认值
|
||||
**方向**: 主机→设备
|
||||
**数据包格式**:
|
||||
```
|
||||
字节位置 | 长度 | 内容 | 描述
|
||||
---------|------|------|------
|
||||
0 | 1 | 0x77 | 同步头1
|
||||
1 | 1 | 0x84 | 命令码
|
||||
2-62 | 61 | 0x00 | 保留字节
|
||||
```
|
||||
|
||||
**出厂默认参数**:
|
||||
| 参数 | 出厂默认值 | 说明 |
|
||||
|------|-----------|------|
|
||||
| AI7.1音效模式 | 3 (AI7.1开启) | 音效模式 0=无音效, 1=音乐, 2=游戏, 3=AI7.1 |
|
||||
| 脚步增强 | 12dB (全亮, 状态2) | LED全亮, 扩展增益12dB |
|
||||
| 麦克风音量 | 22 (21dB) | PGA寄存器值22 = 21dB |
|
||||
| 监听音量 | 15 (-14dB) | DAC level 15 = 0dB - 14 = -14dB |
|
||||
| EQ参数 | 头文件预设 | 删除所有用户EQ参数,恢复固件内置预设 |
|
||||
| AI降噪 | 开启 | 每次上电默认开启(不保存到Flash) |
|
||||
|
||||
**设备端处理**:
|
||||
1. 删除Flash中保存的以下参数文件:
|
||||
- `game_mode`(音效模式)
|
||||
- `mic_vol`(麦克风音量)
|
||||
- `dac_vol`(监听音量)
|
||||
- `footstep`(脚步增强状态)
|
||||
- 所有EQ参数文件(调用eq_flash_clear_all)
|
||||
2. 设置重启标志,约500ms后设备自动重启
|
||||
3. 重启后自动加载出厂默认参数
|
||||
|
||||
**响应数据包格式**:
|
||||
```
|
||||
字节位置 | 长度 | 内容 | 描述
|
||||
---------|------|------|------
|
||||
0 | 1 | 0x01 | Report ID
|
||||
1 | 1 | 0x77 | 同步头1
|
||||
2 | 1 | 0x84 | 同步头2
|
||||
3 | 1 | uint8 | 状态码 (0x00=成功, 0x01=失败)
|
||||
4-62 | 59 | 0x00 | 保留字节
|
||||
```
|
||||
|
||||
**注意**:
|
||||
- 执行后设备将在约500ms后自动重启,USB连接会短暂断开后重连
|
||||
- 重启后所有参数将恢复为出厂默认值
|
||||
- 此操作不可撤销
|
||||
|
||||
### 2.1 0x8A - SET_EQ_MODE (切换EQ模式)
|
||||
**功能**: 切换当前EQ模式
|
||||
**方向**: 主机→设备
|
||||
|
||||
Reference in New Issue
Block a user