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 64cc938..c50e459 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 @@ -78,12 +78,14 @@ unsigned g_mute_enable = 0; unsigned g_mute_state = 0; unsigned g_mute_state_old = 1; unsigned g_unmute_dac_state, g_unmute_time, g_format_time; -unsigned g_volume_level = 29, g_saved_volume_level = 29; +// 改动原因:DAC音量协议扩展到49级(0~48),默认值同步到最大级48。 +unsigned g_volume_level = 48, g_saved_volume_level = 48; unsigned g_request_volume_set = 0; unsigned g_init_saved_settings = 0; unsigned g_host_volume = 0x0; unsigned g_last_volume_level = 0xFF; // 上次已上报的音量级别,0xFF表示初始化未完成 -unsigned g_mic_volume_level = 37; // 麦克风PGA增益级别(0=mute, 1-37=0dB~36dB,HID可见范围) +// 改动原因:麦克风HID等级调整为49级(0~48),并将最大模拟增益限制到24dB。 +unsigned g_mic_volume_level = 48; // 麦克风音量等级(0=mute, 1~48=0~24dB,0.5dB/级) unsigned g_request_mic_volume_set = 0; unsigned g_last_mic_volume_level = 0xFF; // 上次已上报的麦克风增益级别,0xFF表示初始化未完成 unsigned g_dnr_strength = 100; // AI降噪强度HID值(1-100=档位,步进1;100→-200dB最强;关断由g_dnr_on控制,此处不再用0表示强度) @@ -235,14 +237,33 @@ void board_setup() // tile 0 // called on tile 0 - start -#define NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE 0x0 // 0x1=1, 0dB (0x0, -1dB which is not used in this design) -#define NAU88L21_PGA_GAIN_REG_MAX_VALUE 0x25+1 // 0x25=37, 36dB. +1 is for extra 1.5dB digital gain -#define NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE (NAU88L21_PGA_GAIN_REG_MAX_VALUE) +// 改动原因:协议层改为49级(0~48),硬件仍是1dB步进;通过“2个等级映射1dB”实现24dB上限。 +#define MIC_HID_LEVEL_MIN 0 +#define MIC_HID_LEVEL_MAX 48 +#define MIC_HID_LEVEL_DEFAULT 44 // 约22dB,保持原默认听感接近 -// DAC 监听音量控制范围: 共 30 级 (0~29) -// 0 = mute (全灭, reg 0x0034=0x0000), 1~29 = -28dB ~ 0dB,1dB/步 +#define NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE 0x0 // 0=mute +#define NAU88L21_PGA_GAIN_REG_MAX_VALUE 0x18 // 24dB上限 +#define NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE 0x16 // 22dB默认 + +// 改动原因:49级HID等级(0.5dB/级)需映射到Codec 1dB步进寄存器,避免改动底层codec写寄存器逻辑。 +static inline unsigned mic_hid_level_to_codec_gain(unsigned hid_level) +{ + if (hid_level == 0) { + return 0; + } + // ceil(hid_level / 2),把两档HID映射到1dB硬件步进 + unsigned codec_gain = (hid_level + 1) >> 1; + if (codec_gain > NAU88L21_PGA_GAIN_REG_MAX_VALUE) { + codec_gain = NAU88L21_PGA_GAIN_REG_MAX_VALUE; + } + return codec_gain; +} + +// 改动原因:按 SY102dac对应表.csv,将DAC HID范围扩展为49级(0~48)。 +// 0 = mute,1~48 = 有效音量等级(LED按csv映射显示)。 #define DAC_LEVEL_MIN 0 // mute,0 LEDs -#define DAC_LEVEL_MAX 29 // 0dB,15 LEDs +#define DAC_LEVEL_MAX 48 // max level,15 LEDs #define DAC_LEVEL_DEFAULT DAC_LEVEL_MAX static inline void NAU88C22_REGREAD(unsigned reg, unsigned &val, client interface i2c_master_if i2c) @@ -276,10 +297,73 @@ static inline i2c_regop_res_t NAU88C22_REGWRITE(unsigned reg, unsigned val, clie return result; } -void dac_volume(signed level) +// 改动原因:按 SY102dac对应表.csv 建立 0~48 级到 DAC 寄存器值的精确映射, +// 修复旧线性公式导致的 dB 对应错误(例如 47级应为-0.5dB,46级应为-1dB)。 +static const uint8_t dac_level_to_reg[49] = { + 0x0E, // [0] mute(调用方通常直接写0x0000) + 0x4B, // [1] -66dB + 0x4F, // [2] -64dB + 0x53, // [3] -62dB + 0x57, // [4] -60dB + 0x5B, // [5] -58dB + 0x5F, // [6] -56dB + 0x63, // [7] -54dB + 0x67, // [8] -52dB + 0x6B, // [9] -50dB + 0x6F, // [10] -48dB + 0x73, // [11] -46dB + 0x77, // [12] -44dB + 0x7B, // [13] -42dB + 0x7F, // [14] -40dB + 0x83, // [15] -38dB + 0x87, // [16] -36dB + 0x8B, // [17] -34dB + 0x8F, // [18] -32dB + 0x93, // [19] -30dB + 0x97, // [20] -28dB + 0x9B, // [21] -26dB + 0x9F, // [22] -24dB + 0xA3, // [23] -22dB + 0xA7, // [24] -20dB + 0xA9, // [25] -19dB + 0xAB, // [26] -18dB + 0xAD, // [27] -17dB + 0xAF, // [28] -16dB + 0xB1, // [29] -15dB + 0xB3, // [30] -14dB + 0xB5, // [31] -13dB + 0xB7, // [32] -12dB + 0xB9, // [33] -11dB + 0xBB, // [34] -10dB + 0xBD, // [35] -9dB + 0xBF, // [36] -8dB + 0xC1, // [37] -7dB + 0xC3, // [38] -6dB + 0xC5, // [39] -5dB + 0xC7, // [40] -4dB + 0xC8, // [41] -3.5dB + 0xC9, // [42] -3dB + 0xCA, // [43] -2.5dB + 0xCB, // [44] -2dB + 0xCC, // [45] -1.5dB + 0xCD, // [46] -1dB + 0xCE, // [47] -0.5dB + 0xCF // [48] 0dB +}; + +void dac_volume(unsigned level) { - // 1dB/步: level 范围 -28 ~ 0,对应寄存器 0xcf-28=0xb3 ~ 0xcf - unsigned tmp = 0xcf + level; + if (level > DAC_LEVEL_MAX) { + level = DAC_LEVEL_MAX; + } + unsigned tmp = dac_level_to_reg[level]; +#if 0 + int half_db = ((int)tmp - 0xCF); // 以 0.5dB 为单位(负数表示衰减) + int sign = (half_db < 0) ? -1 : 1; + int abs_half_db = (half_db < 0) ? -half_db : half_db; + debug_printf("dac_volume write level=%d reg=0x%02X db=%s%d.%d\n", + level, tmp, (sign < 0) ? "-" : "", abs_half_db / 2, (abs_half_db & 1) ? 5 : 0); +#endif unsafe {NAU88C22_REGWRITE(0x0034, (tmp<<8|tmp), (client interface i2c_master_if)i_i2c_client);} } @@ -290,17 +374,11 @@ void mic_volume(unsigned level) // mute: 关闭PGA和输出放大器 unsafe {NAU88C22_REGWRITE(0x007E, 0, (client interface i2c_master_if)i_i2c_client);} unsafe {NAU88C22_REGWRITE(0x0035, 0, (client interface i2c_master_if)i_i2c_client);} - } - else if(level == NAU88L21_PGA_GAIN_REG_MAX_VALUE) - { - // 内部最大值 (reg=38, +1.5dB数字增益,仅firmware使用) - // PGA设到最大(37=0x25),数字增益额外+1.5dB - unsafe {NAU88C22_REGWRITE(0x007E, (NAU88L21_PGA_GAIN_REG_MAX_VALUE-1) << 8, (client interface i2c_master_if)i_i2c_client);} - unsafe {NAU88C22_REGWRITE(0x0035, (0xd2d2), (client interface i2c_master_if)i_i2c_client);} + debug_printf("mic_volume mute\n"); } else { - // 1-37: 0dB ~ 36dB,1dB/步 + // 改动原因:移除旧版37~38寄存器额外数字增益路径,最大限制到24dB(1~24,1dB/步)。 debug_printf("mic_volume write reg=%d\n", level); unsafe {NAU88C22_REGWRITE(0x007E, (level << 8), (client interface i2c_master_if)i_i2c_client);} unsafe {NAU88C22_REGWRITE(0x0035, (0xcfcf), (client interface i2c_master_if)i_i2c_client);} @@ -320,10 +398,7 @@ void codec_init(void) } // ADCL PGA default setting - if(NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE == NAU88L21_PGA_GAIN_REG_MAX_VALUE) - unsafe {NAU88C22_REGWRITE(0x007E, (NAU88L21_PGA_GAIN_REG_MAX_VALUE-1) << 8, (client interface i2c_master_if)i_i2c_client);} - else - unsafe {NAU88C22_REGWRITE(0x007E, NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE << 8, (client interface i2c_master_if)i_i2c_client);} + unsafe {NAU88C22_REGWRITE(0x007E, NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE << 8, (client interface i2c_master_if)i_i2c_client);} //debug_printfln("Codec init finished"); } @@ -430,10 +505,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, //port_enable(p_button_music_mode); - // 出厂默认:麦克风21dB (reg=22), 监听-14dB (level=15) - int codec_adc_pga_gain_reg_value = 22; // 21dB + // 改动原因:麦克风默认值改为49级中的44级(约22dB),上限受24dB约束。 + // 改动原因:本变量改为保存“49级HID音量等级”(0~48),便于旋钮/HID统一一套等级语义。 + int codec_adc_pga_gain_reg_value = MIC_HID_LEVEL_DEFAULT; - int dac_level = 15; // -14dB (DAC_LEVEL_MAX - 14 = 29 - 14 = 15) + // 改动原因:默认监听音量从旧30级体系迁移到49级体系,保持中高音量默认值。 + int dac_level = 30; // mic endcoder 变量 uint8_t prev_encode_input1 = 0; @@ -690,10 +767,10 @@ 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 >= MIC_HID_LEVEL_MIN && saved_mic <= MIC_HID_LEVEL_MAX) codec_adc_pga_gain_reg_value = saved_mic; else - save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认22(21dB) + save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认44级(约22dB) unsigned char saved_dac = load_value(dac_vol_path); if(saved_dac <= DAC_LEVEL_MAX) @@ -783,12 +860,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, codec_init(); // 同步全局音量变量与从Flash恢复的dac_level / codec_adc_pga_gain_reg_value g_volume_level = dac_level; - // 麦克风HID范围上限37 (register=38的+1.5dB仅firmware内部使用) - g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37; + // 改动原因:g_mic_volume_level 直接使用49级HID等级,避免旧版37级上限截断。 + g_mic_volume_level = (codec_adc_pga_gain_reg_value <= MIC_HID_LEVEL_MAX) ? codec_adc_pga_gain_reg_value : MIC_HID_LEVEL_MAX; // ADCL PGA default setting(mic_volume内部已根据g_monitor_switch决定是否启用耳返通路) // 若mic_mute已从flash恢复为1,则此处先以正常gain调用,再用mute覆盖 - mic_volume(codec_adc_pga_gain_reg_value); + mic_volume(mic_hid_level_to_codec_gain(codec_adc_pga_gain_reg_value)); { int mic_led_count = flag_mic_mute ? 15 : mic_gain_to_led[codec_adc_pga_gain_reg_value]; for(int i = 0; i < 15; i++) @@ -813,7 +890,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if(dac_level == DAC_LEVEL_MIN) unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } else - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); { int dac_led_count = flag_hp_mute ? 15 : dac_gain_to_led[dac_level]; for(int i = 0; i < 15; i++) @@ -1183,7 +1260,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, dac_det_muted = 0; // 恢复DAC音量,但如果用户手动hp_mute或dac_level==0则不恢复 if (!flag_hp_mute && dac_level > DAC_LEVEL_MIN) { - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); debug_printf("mic_det: dac unmute -> level=%d\n", dac_level); } } @@ -1748,8 +1825,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, else { 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; + mic_volume(mic_hid_level_to_codec_gain(codec_adc_pga_gain_reg_value)); + g_mic_volume_level = (codec_adc_pga_gain_reg_value <= MIC_HID_LEVEL_MAX) ? codec_adc_pga_gain_reg_value : MIC_HID_LEVEL_MAX; mic_mute_blink_tick = 0; for(int i = 0; i < 15; i++) led_off(&led_ctx, led_l_physical_map[i]); @@ -1787,14 +1864,17 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, // 执行音量调节 if(current_dir == 1) { // 顺时针 - if((codec_adc_pga_gain_reg_value < NAU88L21_PGA_GAIN_REG_MAX_VALUE) && (flag_mic_mute == 0)) { + if((codec_adc_pga_gain_reg_value < MIC_HID_LEVEL_MAX) && (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; + codec_adc_pga_gain_reg_value = codec_adc_pga_gain_reg_value + 2; + if (codec_adc_pga_gain_reg_value > MIC_HID_LEVEL_MAX) { + codec_adc_pga_gain_reg_value = MIC_HID_LEVEL_MAX; + } 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; + mic_volume(mic_hid_level_to_codec_gain(codec_adc_pga_gain_reg_value)); + g_mic_volume_level = (codec_adc_pga_gain_reg_value <= MIC_HID_LEVEL_MAX) ? codec_adc_pga_gain_reg_value : MIC_HID_LEVEL_MAX; debug_printf("volume up %d\n", codec_adc_pga_gain_reg_value); save_value(mic_vol_path, codec_adc_pga_gain_reg_value); uint8_t new_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; @@ -1810,15 +1890,18 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, 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; + codec_adc_pga_gain_reg_value = codec_adc_pga_gain_reg_value - 2; + if (codec_adc_pga_gain_reg_value < 0) { + codec_adc_pga_gain_reg_value = 0; + } if (!mic_det_muted) { if (codec_adc_pga_gain_reg_value == 0) mic_volume(0); else - mic_volume(codec_adc_pga_gain_reg_value); + mic_volume(mic_hid_level_to_codec_gain(codec_adc_pga_gain_reg_value)); } - g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37; + g_mic_volume_level = (codec_adc_pga_gain_reg_value <= MIC_HID_LEVEL_MAX) ? codec_adc_pga_gain_reg_value : MIC_HID_LEVEL_MAX; debug_printf("volume down %d\n", codec_adc_pga_gain_reg_value); save_value(mic_vol_path, codec_adc_pga_gain_reg_value); @@ -1898,10 +1981,13 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, uint8_t old_led_count = dac_gain_to_led[dac_level]; // 增加音量 - ++dac_level; + dac_level = dac_level + 2; + if (dac_level > DAC_LEVEL_MAX) { + dac_level = DAC_LEVEL_MAX; + } g_volume_level = dac_level; if (!dac_det_muted) - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); save_value(dac_vol_path, dac_level); uint8_t new_led_count = dac_gain_to_led[dac_level]; @@ -1918,13 +2004,16 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, uint8_t old_led_count = dac_gain_to_led[dac_level]; // 减小音量 - --dac_level; + dac_level = dac_level - 2; + if (dac_level < DAC_LEVEL_MIN) { + dac_level = DAC_LEVEL_MIN; + } g_volume_level = dac_level; if (!dac_det_muted) { if(dac_level == DAC_LEVEL_MIN) unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } else - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); } save_value(dac_vol_path, dac_level); @@ -2001,7 +2090,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if(dac_level == DAC_LEVEL_MIN) unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } else - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); } g_volume_level = dac_level; hp_mute_blink_tick = 0; @@ -2059,7 +2148,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (dac_level == DAC_LEVEL_MIN) unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } else - dac_volume(dac_level - DAC_LEVEL_MAX); + dac_volume(dac_level); } save_value(dac_vol_path, (unsigned char)dac_level); // 更新DAC音量指示LED @@ -2079,7 +2168,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, if (g_request_mic_volume_set) { g_request_mic_volume_set = 0; unsigned new_mic_level = g_mic_volume_level; - if (new_mic_level <= 37) { // 0=mute, 1-37=0dB~36dB + if (new_mic_level <= MIC_HID_LEVEL_MAX) { // 0=mute, 1~48=0~24dB(0.5dB/级) uint8_t new_led_count; if (new_mic_level == 0) { // mute: 静音硬件,codec_adc_pga_gain_reg_value设为0(与编码器静音一致) @@ -2089,7 +2178,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, } else { codec_adc_pga_gain_reg_value = new_mic_level; if (!mic_det_muted) - mic_volume(codec_adc_pga_gain_reg_value); + mic_volume(mic_hid_level_to_codec_gain(codec_adc_pga_gain_reg_value)); new_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; } save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); @@ -2190,8 +2279,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol, ptr[i] = 0x00; } hidSetChangePending(0x1); - debug_printf("Mic volume changed: %d -> %d, HID report sent\n", - g_last_mic_volume_level, current_mic_level); + // debug_printf("Mic volume changed: %d -> %d, HID report sent\n", + // g_last_mic_volume_level, current_mic_level); } g_last_mic_volume_level = current_mic_level; } @@ -2447,7 +2536,7 @@ void mute_handler(chanend c_mic_det) c_mic_det <: (unsigned)MIC_DET_UNMUTE; debug_printf("mic stable -> unmute\n"); } - + timer tmr; unsigned time; tmr :> time; 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 0d3ea82..5217c61 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 @@ -636,12 +636,12 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { } // 处理设置麦克风增益命令 (0x82) - SET_MIC_VOLUME - // 范围: 0-37 (0=mute, 1-37=0dB~36dB, 1dB/步; register=38的+1.5dB仅firmware内部) + // 改动原因:麦克风协议升级为49级(0~48),最大增益由36dB收敛到24dB(0.5dB/级)。 if (data[1] == 0x82) { uint8_t mic_level = data[2]; - // 参数验证: 0-37 - if (mic_level > 37) { + // 参数验证: 0-48 + if (mic_level > 48) { return false; } @@ -710,13 +710,13 @@ unsigned char process_send_params(uint8_t data[], uint16_t len) { } // 处理设置音量命令 (0x93) - SET_VOLUME - // 范围: 0-15 (0=静音, 1-15=-28dB~0dB, 2dB/步) + // 改动原因:DAC音量协议与旋钮统一扩展到49级(0~48),与SY102dac对应表一致。 if (data[1] == 0x93) { // 获取音量级别 uint8_t volume_level = data[2]; - // 参数验证: 0-29 (0=mute, 1-29=-28dB~0dB, 1dB/步) - if (volume_level > 29) { + // 参数验证: 0-48 + if (volume_level > 48) { return false; } 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 eecc9dc..1a8a310 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 @@ -615,9 +615,10 @@ class EQDesigner(QMainWindow): volume_control_layout = QHBoxLayout() self.volume_label = QLabel("监听音量 (0x93/0x94):") self.volume_spin = QSpinBox() - self.volume_spin.setRange(0, 29) - self.volume_spin.setValue(29) - self.volume_spin.setSuffix(" (0=静音, 29=0dB)") + # 改动原因:与固件0x93协议保持一致,DAC监听音量改为49级(0~48)。 + self.volume_spin.setRange(0, 48) + self.volume_spin.setValue(48) + self.volume_spin.setSuffix(" (0=静音, 48=0dB)") volume_control_layout.addWidget(self.volume_label) volume_control_layout.addWidget(self.volume_spin) volume_layout.addRow(volume_control_layout) @@ -636,9 +637,10 @@ class EQDesigner(QMainWindow): mic_vol_control_layout = QHBoxLayout() self.mic_volume_label = QLabel("麦克风增益 (0x82/0x83):") self.mic_volume_spin = QSpinBox() - self.mic_volume_spin.setRange(0, 37) - self.mic_volume_spin.setValue(37) - self.mic_volume_spin.setSuffix(" (0=静音, 1=0dB, 37=36dB)") + # 改动原因:与固件0x82协议保持一致,MIC增益改为49级(0~48),2级=1dB,最大24dB。 + self.mic_volume_spin.setRange(0, 48) + self.mic_volume_spin.setValue(48) + self.mic_volume_spin.setSuffix(" (0=静音, 2级=1dB, 48=24dB)") mic_vol_control_layout.addWidget(self.mic_volume_label) mic_vol_control_layout.addWidget(self.mic_volume_spin) volume_layout.addRow(mic_vol_control_layout) @@ -2298,7 +2300,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ log_message(LOG_LEVEL_ERROR, f"设置并保存EQ模式时出错: {str(e)}", self.log_level) def on_set_volume(self): - """设置监听音量级别(发送0x93命令,范围0-29,0=静音,1=-28dB,29=0dB,1dB/步)""" + """设置监听音量级别(发送0x93命令,范围0-48,按SY102dac对应表映射)""" if self.device_combo.currentData() is None: log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level) return @@ -2309,7 +2311,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ self, "确认设置监听音量", f"将要设置监听音量级别为: {volume_level}\n\n" - f"音量范围: 0-29 (0=静音, 1=-28dB, ..., 29=0dB, 1dB/步)\n\n" + f"音量范围: 0-48 (0=静音, 1=-66dB, ..., 47=-0.5dB, 48=0dB;按SY102dac对应表)\n\n" f"是否继续?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No @@ -2325,7 +2327,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ data = bytearray(63) data[0] = 0x77 data[1] = 0x93 # SET_VOLUME - data[2] = volume_level # 0-29 + data[2] = volume_level # 0-48 log_message(LOG_LEVEL_INFO, f"正在设置监听音量级别为 {volume_level}...", self.log_level) h.write([0x01] + list(data)) @@ -2367,7 +2369,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ QMessageBox.information( self, "监听音量级别", f"当前监听音量级别: {volume_level}\n\n" - f"音量范围: 0-29 (0=静音, 1=-28dB, ..., 29=0dB, 1dB/步)" + f"音量范围: 0-48 (0=静音, 1=-66dB, ..., 47=-0.5dB, 48=0dB;按SY102dac对应表)" ) else: log_message(LOG_LEVEL_ERROR, f"无效的0x94响应同步头: 0x{reply[1]:02x} 0x{reply[2]:02x}", self.log_level) @@ -2380,7 +2382,7 @@ 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_mic_volume(self): - """设置麦克风增益级别(发送0x82命令,范围0-37,0=静音,1=0dB,37=36dB,1dB/步)""" + """设置麦克风增益级别(发送0x82命令,范围0-48,2级=1dB,48=24dB)""" if self.device_combo.currentData() is None: log_message(LOG_LEVEL_ERROR, "请先选择设备", self.log_level) return @@ -2391,7 +2393,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ self, "确认设置麦克风增益", f"将要设置麦克风增益级别为: {mic_level}\n\n" - f"增益范围: 0-37 (0=静音, 1=0dB, ..., 37=36dB, 1dB/步)\n\n" + f"增益范围: 0-48 (0=静音, 2级=1dB, ..., 48=24dB)\n\n" f"是否继续?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No @@ -2407,7 +2409,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ data = bytearray(63) data[0] = 0x77 data[1] = 0x82 # SET_MIC_VOLUME - data[2] = mic_level # 0-37 + data[2] = mic_level # 0-48 log_message(LOG_LEVEL_INFO, f"正在设置麦克风增益级别为 {mic_level}...", self.log_level) h.write([0x01] + list(data)) @@ -2449,7 +2451,7 @@ eq_mode_data_t sEQ_data_{int(fs)}HZ[NUM_EQ_MODES][NUM_EQ_CHANS] = {{ QMessageBox.information( self, "麦克风增益级别", f"当前麦克风增益级别: {mic_level}\n\n" - f"增益范围: 0-37 (0=静音, 1=0dB, ..., 37=36dB, 1dB/步)" + f"增益范围: 0-48 (0=静音, 2级=1dB, ..., 48=24dB)" ) else: log_message(LOG_LEVEL_ERROR, f"无效的0x83响应同步头: 0x{reply[1]:02x} 0x{reply[2]:02x}", self.log_level) 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 2824b13..37cc913 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 @@ -8,8 +8,8 @@ ### 1.2 支持的指令列表 | 指令码 | 命令名称 | 功能 | 方向 | 描述 | |--------|----------|------|------|------| -| 0x82 | SET_MIC_VOLUME | 设置麦克风增益级别 | 主机→设备 | 设置麦克风PGA增益(0=静音, 1-37=0dB~36dB, 1dB/步) | -| 0x83 | GET_MIC_VOLUME | 获取麦克风增益级别 | 主机→设备 | 读取当前麦克风PGA增益级别(0=静音, 1-37=0dB~36dB) | +| 0x82 | SET_MIC_VOLUME | 设置麦克风增益级别 | 主机→设备 | 设置麦克风增益(0=静音, 1-48=0~24dB, 2级=1dB) | +| 0x83 | GET_MIC_VOLUME | 获取麦克风增益级别 | 主机→设备 | 读取当前麦克风增益级别(0=静音, 1-48=0~24dB, 2级=1dB) | | 0x84 | FACTORY_RESET | 恢复出厂默认设置 | 主机→设备 | 删除Flash中所有已保存参数,设备重启后自动恢复出厂默认值 | | 0x85 | SET_AI_NOISE_STRENGTH | 设置AI降噪强度 | 主机→设备 | 设置AI降噪强度(0=关闭,2-100偶数=强度级别,步进2;100对应最强-200dB) | | 0x86 | GET_AI_NOISE_STRENGTH | 获取AI降噪强度 | 主机→设备 | 读取当前AI降噪强度;强度变化(含按键切换、开机初始值)时设备主动上报 | @@ -24,8 +24,8 @@ | 0x90 | RESET_EQ_PARAMS | 复位EQ参数 | 主机→设备 | 删除Flash中的EQ参数并恢复头文件预设参数 | | 0x91 | GET_EQ_MODE_COUNT | 获取EQ模式总数 | 主机→设备 | 返回预定义加用户模式的总数(不包含禁用模式) | | 0x92 | SET_AND_SAVE_EQ_MODE | 设置并保存EQ模式 | 主机→设备 | 设置当前EQ模式(0-9)并保存到Flash,开机时自动恢复 | -| 0x93 | SET_VOLUME | 设置监听音量级别 | 主机→设备 | 设置设备监听音量级别(0=静音, 1-29=-28dB~0dB, 1dB/步) | -| 0x94 | GET_VOLUME | 获取监听音量级别 | 主机→设备 | 读取设备当前监听音量级别(0=静音, 1-29=-28dB~0dB, 1dB/步) | +| 0x93 | SET_VOLUME | 设置监听音量级别 | 主机→设备 | 设置设备监听音量级别(0=静音, 1-48按SY102dac对应表映射到-66dB~0dB) | +| 0x94 | GET_VOLUME | 获取监听音量级别 | 主机→设备 | 读取设备当前监听音量级别(0=静音, 1-48按SY102dac对应表映射) | | 0x9D | SET_EQ_ENABLE | 设置EQ使能开关 | 主机→设备 | 设置EQ使能开关(ON/OFF),禁用时保存当前模式,启用时恢复之前模式 | | 0x9E | GET_EQ_ENABLE | 获取EQ使能开关 | 主机→设备 | 读取EQ使能开关状态(ON/OFF) | | 0x9F | GET_SAMPLE_FORMAT | 获取采样率和格式 | 主机→设备 | 读取当前采样率、DSD模式和DAC采样分辨率 | @@ -59,20 +59,20 @@ ---------|------|------|------ 0 | 1 | 0x77 | 同步头1 1 | 1 | 0x82 | 命令码 -2 | 1 | uint8 | 增益级别 (0=静音, 1-37=0dB~36dB, 1dB/步) +2 | 1 | uint8 | 增益级别 (0=静音, 1-48=0~24dB, 2级=1dB) 3-62 | 60 | 0x00 | 保留字节 ``` **参数说明**: -- **增益级别范围:** 0-37(共38级) +- **增益级别范围:** 0-48(共49级) - **对应硬件**:NAU88C22 ADC PGA增益寄存器(reg 0x007E)+ 输出放大器(reg 0x0035) - 0:静音(mute,同时清零 reg 0x007E 和 0x0035) - - 1:0dB(最小有效增益) + - 1:约0.5dB(按2级=1dB映射) - 2:1dB - - ...(1dB/步) - - 37:36dB(最大HID可设置增益) -- **注意**:内部寄存器值38(约+1.5dB数字增益)为firmware保留,HID不可设置 -- >37 为无效值,固件将拒绝设置 + - ...(2级=1dB) + - 47:约23.5dB + - 48:24dB(最大HID可设置增益) +- >48 为无效值,固件将拒绝设置 **设备端处理**: - 设置后立即应用到ADC PGA硬件 @@ -102,12 +102,12 @@ 0 | 1 | 0x01 | Report ID 1 | 1 | 0x77 | 同步头1 2 | 1 | 0x83 | 同步头2 -3 | 1 | uint8 | 当前增益级别 (0=静音, 1-37=0dB~36dB) +3 | 1 | uint8 | 当前增益级别 (0=静音, 1-48=0~24dB, 2级=1dB) 4-62 | 59 | 0x00 | 保留字节 ``` **主动上报说明**: -- 编码器旋转导致增益变化时,设备主动向主机上报当前增益(最大上报37,内部38时上报37) +- 编码器旋转导致增益变化时,设备主动向主机上报当前增益(范围0~48) - HID SET_MIC_VOLUME(0x82)命令成功执行后,设备也主动上报新增益 ### 2.0c 0x84 - FACTORY_RESET (恢复出厂默认设置) @@ -127,8 +127,8 @@ |------|-----------|------| | 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 | +| 麦克风音量 | 44 (约22dB) | 49级中的44级,按2级=1dB映射 | +| 监听音量 | 30 (-14dB) | 49级中的30级,按SY102dac对应表映射 | | EQ参数 | 头文件预设 | 删除所有用户EQ参数,恢复固件内置预设 | | AI降噪 | 开启 | 每次上电默认开启(不保存到Flash) | | 耳返开关 | 0 (关闭) | ADC→耳机监听通路默认关闭 | @@ -532,25 +532,27 @@ ---------|------|------|------ 0 | 1 | 0x77 | 同步头1 1 | 1 | 0x93 | 命令码 -2 | 1 | uint8 | 音量级别 (0-29: 0=静音, 1=-28dB, ..., 29=0dB) +2 | 1 | uint8 | 音量级别 (0-48: 0=静音, 1=-66dB, ..., 48=0dB;按SY102dac对应表) 3-62 | 60 | 0x00 | 保留字节 ``` **参数说明**: -- **音量级别范围:** 0-29(共30级) +- **音量级别范围:** 0-48(共49级) - **说明:** 控制设备监听输出(DAC/耳机)音量级别 - 0: 静音(mute,DAC完全静音) - - 1: -28dB(最小有效音量) - - 2: -27dB - - ...(每级1dB步进) - - 29: 0dB(最大音量) -- **对应硬件**:NAU88C22 DAC音量寄存器(reg 0x0034),30级精度(1dB/步) + - 1: -66dB(最小有效音量) + - 2: -64dB + - ...(按 `SY102dac对应表.csv` 的非线性步进) + - 46: -1dB + - 47: -0.5dB + - 48: 0dB(最大音量) +- **对应硬件**:NAU88C22 DAC音量寄存器(reg 0x0034),49级查表映射 **设备端处理**: - 设置后立即应用到DAC硬件 - 同步更新前面板LED(D系列15个LED,反映当前音量级别,每2级对应1个LED) - 保存到Flash(dac_vol路径),断电重启后自动恢复 -- 如果参数超出范围(>29),固件将拒绝设置 +- 如果参数超出范围(>48),固件将拒绝设置 **返回值**: 无直接返回值。如需确认音量是否设置成功,请使用GET_VOLUME命令读取当前音量。设备端音量变化(含编码器旋转引起的变化)会主动通过0x94格式上报。 @@ -574,7 +576,7 @@ 0 | 1 | 0x01 | Report ID 1 | 1 | 0x77 | 同步头1 2 | 1 | 0x94 | 同步头2 -3 | 1 | uint8 | 当前音量级别 (0-29: 0=静音, 1-29=-28dB~0dB, 1dB/步) +3 | 1 | uint8 | 当前音量级别 (0-48: 0=静音, 1-48按SY102dac对应表映射到-66dB~0dB) 4-62 | 59 | 0x00 | 保留字节 ``` diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.c index fdf437e..39a4182 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.c @@ -87,82 +87,112 @@ const uint8_t led_d_physical_map[15] = { 22, // LED_D15 -> OUT22 }; -const uint8_t mic_gain_to_led[39] = { - 0, // [-1] 增益-1: 0个LED,这个设计未启用 - 1, // [0] 增益0: 0个LED - 1, // [1] 增益1: 0个LED - 1, // [2] 增益2: 0个LED - 1, // [3] 增益3: 1个LED - 2, // [4] 增益4: 1个LED - 2, // [5] 增益5: 1个LED - 2, // [6] 增益6: 2个LED - 2, // [7] 增益7: 2个LED - 3, // [8] 增益8: 2个LED - 3, // [9] 增益9: 3个LED - 3, // [10] 增益10: 3个LED - 3, // [11] 增益11: 3个LED - 4, // [12] 增益12: 4个LED - 4, // [13] 增益13: 4个LED - 4, // [14] 增益14: 4个LED - 5, // [15] 增益15: 5个LED - 5, // [16] 增益16: 5个LED - 6, // [17] 增益17: 6个LED - 6, // [18] 增益18: 6个LED - 7, // [19] 增益19: 7个LED - 7, // [20] 增益20: 7个LED - 8, // [21] 增益21: 8个LED - 8, // [22] 增益22: 8个LED - 9, // [23] 增益23: 9个LED - 9, // [24] 增益24: 9个LED - 10, // [25] 增益25: 10个LED - 10, // [26] 增益26: 10个LED - 11, // [27] 增益27: 11个LED - 11, // [28] 增益28: 11个LED - 12, // [29] 增益29: 12个LED - 12, // [30] 增益30: 12个LED - 13, // [31] 增益31: 13个LED - 13, // [32] 增益32: 13个LED - 14, // [33] 增益33: 14个LED - 14, // [34] 增益34: 14个LED - 15, // [35] 增益35: 15个LED - 15, // [36] 增益36: 15个LED - 15 // [37] 增益36+1.5 digitial gain: 15个LED +// 改动原因:按 SY102mic音量对应表.csv,将麦克风音量等级改为 49 级(0~48),最大增益改为 24dB, +// LED档位按表中“旋钮刻度49级 + LED灯15个”的分段阈值重建。 +const uint8_t mic_gain_to_led[49] = { + 0, // [0] mute + 1, // [1] + 1, // [2] + 1, // [3] + 2, // [4] + 2, // [5] + 2, // [6] + 3, // [7] + 3, // [8] + 3, // [9] + 4, // [10] + 4, // [11] + 4, // [12] + 5, // [13] + 5, // [14] + 5, // [15] + 6, // [16] + 6, // [17] + 6, // [18] + 7, // [19] + 7, // [20] + 7, // [21] + 8, // [22] + 8, // [23] + 8, // [24] + 9, // [25] + 9, // [26] + 9, // [27] + 10, // [28] + 10, // [29] + 10, // [30] + 11, // [31] + 11, // [32] + 11, // [33] + 12, // [34] + 12, // [35] + 12, // [36] + 13, // [37] + 13, // [38] + 13, // [39] + 13, // [40] + 14, // [41] + 14, // [42] + 14, // [43] + 14, // [44] + 15, // [45] + 15, // [46] + 15, // [47] + 15 // [48] max 24dB }; -// DAC监听音量增益到LED数量的映射表 -// 索引 0 = 静音 (0个LED, reg 0x0034=0x0000) -// 索引 1~29: -28dB ~ 0dB,1dB/步,每2个dB对应1个LED(最后1dB独占15号LED) -const uint8_t dac_gain_to_led[30] = { - 0, // [0] mute: 0 LEDs - 1, // [1] -28dB: 1 LED - 1, // [2] -27dB: 1 LED - 2, // [3] -26dB: 2 LEDs - 2, // [4] -25dB: 2 LEDs - 3, // [5] -24dB: 3 LEDs - 3, // [6] -23dB: 3 LEDs - 4, // [7] -22dB: 4 LEDs - 4, // [8] -21dB: 4 LEDs - 5, // [9] -20dB: 5 LEDs - 5, // [10] -19dB: 5 LEDs - 6, // [11] -18dB: 6 LEDs - 6, // [12] -17dB: 6 LEDs - 7, // [13] -16dB: 7 LEDs - 7, // [14] -15dB: 7 LEDs - 8, // [15] -14dB: 8 LEDs - 8, // [16] -13dB: 8 LEDs - 9, // [17] -12dB: 9 LEDs - 9, // [18] -11dB: 9 LEDs - 10, // [19] -10dB: 10 LEDs - 10, // [20] -9dB: 10 LEDs - 11, // [21] -8dB: 11 LEDs - 11, // [22] -7dB: 11 LEDs - 12, // [23] -6dB: 12 LEDs - 12, // [24] -5dB: 12 LEDs - 13, // [25] -4dB: 13 LEDs - 13, // [26] -3dB: 13 LEDs - 14, // [27] -2dB: 14 LEDs - 14, // [28] -1dB: 14 LEDs - 15, // [29] 0dB: 15 LEDs +// 改动原因:按 SY102dac对应表.csv,将DAC音量等级改为 49 级(0~48), +// LED分段阈值按“旋钮48格 + 15灯”映射重建,确保HID 0x93新范围显示一致。 +const uint8_t dac_gain_to_led[49] = { + 0, // [0] mute + 1, // [1] + 1, // [2] + 1, // [3] + 2, // [4] + 2, // [5] + 2, // [6] + 3, // [7] + 3, // [8] + 3, // [9] + 4, // [10] + 4, // [11] + 4, // [12] + 5, // [13] + 5, // [14] + 5, // [15] + 6, // [16] + 6, // [17] + 6, // [18] + 7, // [19] + 7, // [20] + 7, // [21] + 8, // [22] + 8, // [23] + 8, // [24] + 9, // [25] + 9, // [26] + 9, // [27] + 10, // [28] + 10, // [29] + 10, // [30] + 11, // [31] + 11, // [32] + 11, // [33] + 12, // [34] + 12, // [35] + 12, // [36] + 13, // [37] + 13, // [38] + 13, // [39] + 13, // [40] + 14, // [41] + 14, // [42] + 14, // [43] + 14, // [44] + 15, // [45] + 15, // [46] + 15, // [47] + 15, // [48] }; /*========================================================================= diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.h b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.h index b6394c9..c359ecc 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.h +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/led_control.h @@ -65,8 +65,10 @@ typedef struct { extern const uint8_t led_l_physical_map[15]; extern const uint8_t led_d_physical_map[15]; -extern const uint8_t mic_gain_to_led[39]; -extern const uint8_t dac_gain_to_led[30]; +// 改动原因:麦克风音量协议从旧版38级(0~37)扩展为49级(0~48),LED映射表长度同步扩展。 +extern const uint8_t mic_gain_to_led[49]; +// 改动原因:按 SY102dac对应表.csv,DAC音量协议从30级(0~29)扩展为49级(0~48),LED映射表长度同步扩展。 +extern const uint8_t dac_gain_to_led[49]; /*========================================================================= 基础控制API diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/sy102_hid_protocol.md b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/sy102_hid_protocol.md index bfa1dae..7a9e602 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/sy102_hid_protocol.md +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/sy102_hid_protocol.md @@ -8,8 +8,8 @@ ### 1.2 支持的指令列表 | 指令码 | 命令名称 | 功能 | 方向 | 描述 | |--------|----------|------|------|------| -| 0x82 | SET_MIC_VOLUME | 设置麦克风增益级别 | 主机→设备 | 设置麦克风PGA增益(0=静音, 1-37=0dB~36dB, 1dB/步) | -| 0x83 | GET_MIC_VOLUME | 获取麦克风增益级别 | 主机→设备 | 读取当前麦克风PGA增益级别(0=静音, 1-37=0dB~36dB) | +| 0x82 | SET_MIC_VOLUME | 设置麦克风增益级别 | 主机→设备 | 设置麦克风增益(0=静音, 1-48=0~24dB, 2级=1dB) | +| 0x83 | GET_MIC_VOLUME | 获取麦克风增益级别 | 主机→设备 | 读取当前麦克风增益级别(0=静音, 1-48=0~24dB, 2级=1dB) | | 0x84 | FACTORY_RESET | 恢复出厂默认设置 | 主机→设备 | 删除Flash中所有已保存参数,设备重启后自动恢复出厂默认值 | | 0x85 | SET_AI_NOISE_STRENGTH | 设置AI降噪强度 | 主机→设备 | 设置AI降噪强度(0=关闭,2-100偶数=强度级别,步进2;100对应最强-200dB) | | 0x86 | GET_AI_NOISE_STRENGTH | 获取AI降噪强度 | 主机→设备 | 读取当前AI降噪强度;强度变化(含按键切换、开机初始值)时设备主动上报 | @@ -24,8 +24,8 @@ | 0x90 | RESET_EQ_PARAMS | 复位EQ参数 | 主机→设备 | 删除Flash中的EQ参数并恢复头文件预设参数 | | 0x91 | GET_EQ_MODE_COUNT | 获取EQ模式总数 | 主机→设备 | 返回预定义加用户模式的总数(不包含禁用模式) | | 0x92 | SET_AND_SAVE_EQ_MODE | 设置并保存EQ模式 | 主机→设备 | 设置当前EQ模式(0-9)并保存到Flash,开机时自动恢复 | -| 0x93 | SET_VOLUME | 设置监听音量级别 | 主机→设备 | 设置设备监听音量级别(0=静音, 1-29=-28dB~0dB, 1dB/步) | -| 0x94 | GET_VOLUME | 获取监听音量级别 | 主机→设备 | 读取设备当前监听音量级别(0=静音, 1-29=-28dB~0dB, 1dB/步) | +| 0x93 | SET_VOLUME | 设置监听音量级别 | 主机→设备 | 设置设备监听音量级别(0=静音, 1-48按SY102dac对应表映射到-66dB~0dB) | +| 0x94 | GET_VOLUME | 获取监听音量级别 | 主机→设备 | 读取设备当前监听音量级别(0=静音, 1-48按SY102dac对应表映射) | | 0x9D | SET_EQ_ENABLE | 设置EQ使能开关 | 主机→设备 | 设置EQ使能开关(ON/OFF),禁用时保存当前模式,启用时恢复之前模式 | | 0x9E | GET_EQ_ENABLE | 获取EQ使能开关 | 主机→设备 | 读取EQ使能开关状态(ON/OFF) | | 0x9F | GET_SAMPLE_FORMAT | 获取采样率和格式 | 主机→设备 | 读取当前采样率、DSD模式和DAC采样分辨率 | @@ -59,17 +59,18 @@ ---------|------|------|------ 0 | 1 | 0x77 | 同步头1 1 | 1 | 0x82 | 命令码 -2 | 1 | uint8 | 增益级别 (0=静音, 1-37=0dB~36dB, 1dB/步) +2 | 1 | uint8 | 增益级别 (0=静音, 1-48=0~24dB, 2级=1dB) 3-62 | 60 | 0x00 | 保留字节 ``` **参数说明**: -- **增益级别范围:** 0-37(共38级) +- **增益级别范围:** 0-48(共49级) - 0:静音(mute) - - 1:0dB(最小有效增益) + - 1:约0.5dB(按2级=1dB映射) - 2:1dB - - ...(1dB/步) - - 37:36dB(最大HID可设置增益) + - ...(2级=1dB) + - 47:约23.5dB + - 48:24dB(最大HID可设置增益) **返回值**: 无直接返回值。设备端增益变化会主动上报0x83格式数据包。 @@ -93,7 +94,7 @@ 0 | 1 | 0x01 | Report ID 1 | 1 | 0x77 | 同步头1 2 | 1 | 0x83 | 同步头2 -3 | 1 | uint8 | 当前增益级别 (0=静音, 1-37=0dB~36dB) +3 | 1 | uint8 | 当前增益级别 (0=静音, 1-48=0~24dB, 2级=1dB) 4-62 | 59 | 0x00 | 保留字节 ``` @@ -515,12 +516,12 @@ ---------|------|------|------ 0 | 1 | 0x77 | 同步头1 1 | 1 | 0x93 | 命令码 -2 | 1 | uint8 | 音量级别 (0-29: 0=静音, 1=-28dB, ..., 29=0dB) +2 | 1 | uint8 | 音量级别 (0-48: 0=静音, 1=-66dB, ..., 48=0dB;按SY102dac对应表) 3-62 | 60 | 0x00 | 保留字节 ``` **参数说明**: -- **音量级别范围:** 0-29(共30级) +- **音量级别范围:** 0-48(共49级) - **说明:** 控制设备监听输出(DAC/耳机)音量级别 - 0: 静音(mute,DAC完全静音) - 1: -28dB(最小有效音量) @@ -550,7 +551,7 @@ 0 | 1 | 0x01 | Report ID 1 | 1 | 0x77 | 同步头1 2 | 1 | 0x94 | 同步头2 -3 | 1 | uint8 | 当前音量级别 (0-29: 0=静音, 1-29=-28dB~0dB, 1dB/步) +3 | 1 | uint8 | 当前音量级别 (0-48: 0=静音, 1-48按SY102dac对应表映射到-66dB~0dB) 4-62 | 59 | 0x00 | 保留字节 ``` ### 2.20 0x9D - SET_EQ_ENABLE (设置EQ使能开关)