implement high_perf_mode DAC attenuation and D11 LED
GAME+MIC toggles high_perf_mode (default off, saved to Flash). When on, DAC uses user HID level and D11 lights; when off, hardware level is user level minus 6 steps (max -6dB, floor at level 0). g_volume_level keeps the user level for HID and persistence. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -58,6 +58,8 @@ unsigned g_mute_switch = 0; // 改动原因:与g_adc_loop一致,记录MCU
|
||||
unsigned g_led_enable = 0;
|
||||
unsigned g_dnr_enable = 1;
|
||||
unsigned g_3d_enable = 1;
|
||||
/* 改动原因:GAME+MIC 高性能模式,0=DAC 在用户等级基础上减 6 格(约 -6dB),1=不减;默认 0 */
|
||||
unsigned g_high_perf_mode = 0;
|
||||
unsigned g_led_mode = 0;
|
||||
unsigned g_fps_enable = 0;
|
||||
uint32_t get_reference_time();
|
||||
@@ -509,6 +511,8 @@ void mic_volume(unsigned level, client interface i2c_master_if i2c)
|
||||
#define TX1_MIC_HID_LEVEL_MAX 48
|
||||
#define TX1_MIC_HID_LEVEL_DEFAULT 48
|
||||
#define TX1_VOL_BAR_MAX 12
|
||||
/* 改动原因:非高性能时 DAC 在用户 HID 等级上最多降低 6 格(约 6dB),最低落到 level 0(约 -34dB) */
|
||||
#define TX1_HIGH_PERF_DAC_ATTEN_LEVELS 6u
|
||||
|
||||
/* 改动原因:与 phaten golden / SY102dac 表一致,DAC HID 0~48 级映射 NAU88 0x0034 寄存器值 */
|
||||
static const uint8_t tx1_dac_level_to_reg[49] = {
|
||||
@@ -559,17 +563,38 @@ static unsigned tx1_bar_to_hid_level(unsigned bar)
|
||||
return (bar * TX1_DAC_HID_LEVEL_MAX) / TX1_VOL_BAR_MAX;
|
||||
}
|
||||
|
||||
/* 改动原因:统一把 DAC HID 等级写入 g_volume_level/g_dac_vol,定时器请求分支写 0x0034 并 Flash */
|
||||
/**
|
||||
* 改动原因:g_volume_level 保存用户/Flash 目标等级;写 0x0034 时高性能=原等级,否则减 6 格且不低于 0。
|
||||
*/
|
||||
static unsigned tx1_effective_dac_hid_level(unsigned user_hid, unsigned high_perf)
|
||||
{
|
||||
if (user_hid > TX1_DAC_HID_LEVEL_MAX) {
|
||||
user_hid = TX1_DAC_HID_LEVEL_MAX;
|
||||
}
|
||||
if (high_perf) {
|
||||
return user_hid;
|
||||
}
|
||||
if (user_hid <= TX1_HIGH_PERF_DAC_ATTEN_LEVELS) {
|
||||
return 0;
|
||||
}
|
||||
return user_hid - TX1_HIGH_PERF_DAC_ATTEN_LEVELS;
|
||||
}
|
||||
|
||||
static unsigned tx1_dac_reg_from_hid_level(unsigned hid_level)
|
||||
{
|
||||
if (hid_level == 0) {
|
||||
return 0u;
|
||||
}
|
||||
return (unsigned)tx1_dac_level_to_reg[hid_level];
|
||||
}
|
||||
|
||||
/* 改动原因:仅更新用户 DAC HID 等级并请求写寄存器;实际 0x0034 值在定时器里按 g_high_perf_mode 衰减 */
|
||||
static void tx1_apply_dac_hid_level(unsigned hid_level)
|
||||
{
|
||||
unsigned reg;
|
||||
|
||||
if (hid_level > TX1_DAC_HID_LEVEL_MAX) {
|
||||
hid_level = TX1_DAC_HID_LEVEL_MAX;
|
||||
}
|
||||
reg = (hid_level == 0) ? 0u : (unsigned)tx1_dac_level_to_reg[hid_level];
|
||||
SET_SHARED_GLOBAL(g_volume_level, hid_level);
|
||||
SET_SHARED_GLOBAL(g_dac_vol, reg);
|
||||
SET_SHARED_GLOBAL(g_request_volume_set, 1);
|
||||
}
|
||||
|
||||
@@ -1343,6 +1368,7 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
unsigned dnr_enabled = 1;
|
||||
/* 改动原因:FPS+MIC 组合键切换 EX3D 总开关,默认开启;D8 绿灯亮=开、灭=关 */
|
||||
unsigned ex3d_enable = 1;
|
||||
/* 改动原因:默认 0;开机从 Flash 覆盖,与 g_high_perf_mode 同步 */
|
||||
unsigned high_perf_mode = 0;
|
||||
|
||||
htr3236_t htr3236_dev;
|
||||
@@ -1449,10 +1475,11 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
debug_printf("FPS71_UAC2 running, g_3d_fps=%u\n", (unsigned)game_mode);
|
||||
#endif
|
||||
|
||||
/* 改动原因:开机恢复 DAC/MIC 音量(放在 OS 检测/切固件之后,与 c1_lp 一致避免阻塞枚举过久) */
|
||||
/* 改动原因:开机恢复 DAC/MIC 音量与高性能模式(放在 OS 检测/切固件之后,与 c1_lp 一致避免阻塞枚举过久) */
|
||||
{
|
||||
unsigned char saved_dac = tx1_load_dac_volume();
|
||||
unsigned char saved_mic = tx1_load_mic_volume();
|
||||
unsigned char saved_hp = tx1_load_high_perf_mode();
|
||||
|
||||
if (saved_dac == 255) {
|
||||
saved_dac = (unsigned char)TX1_DAC_HID_LEVEL_DEFAULT;
|
||||
@@ -1462,10 +1489,14 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
saved_mic = (unsigned char)TX1_MIC_HID_LEVEL_DEFAULT;
|
||||
tx1_save_mic_volume(saved_mic);
|
||||
}
|
||||
high_perf_mode = (unsigned)saved_hp;
|
||||
SET_SHARED_GLOBAL(g_high_perf_mode, high_perf_mode);
|
||||
tx1_apply_dac_hid_level((unsigned)saved_dac);
|
||||
tx1_apply_mic_hid_level((unsigned)saved_mic);
|
||||
feature_volume = tx1_hid_level_to_bar((unsigned)saved_mic);
|
||||
debug_printf("TX1: Loaded dac_hid=%u mic_hid=%u\n", (unsigned)saved_dac, (unsigned)saved_mic);
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: Loaded dac_hid=%u mic_hid=%u high_perf=%u\n",
|
||||
(unsigned)saved_dac, (unsigned)saved_mic, high_perf_mode);
|
||||
}
|
||||
|
||||
while(1)
|
||||
@@ -1581,14 +1612,19 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
unsigned req_vol;
|
||||
GET_SHARED_GLOBAL(req_vol, g_request_volume_set);
|
||||
if (req_vol) {
|
||||
unsigned hid_lvl;
|
||||
unsigned user_hid;
|
||||
unsigned eff_hid;
|
||||
unsigned reg;
|
||||
unsigned hp;
|
||||
SET_SHARED_GLOBAL(g_request_volume_set, 0);
|
||||
GET_SHARED_GLOBAL(hid_lvl, g_volume_level);
|
||||
if (hid_lvl <= TX1_DAC_HID_LEVEL_MAX) {
|
||||
reg = (hid_lvl == 0) ? 0u : (unsigned)tx1_dac_level_to_reg[hid_lvl];
|
||||
GET_SHARED_GLOBAL(user_hid, g_volume_level);
|
||||
GET_SHARED_GLOBAL(hp, g_high_perf_mode);
|
||||
high_perf_mode = hp;
|
||||
if (user_hid <= TX1_DAC_HID_LEVEL_MAX) {
|
||||
eff_hid = tx1_effective_dac_hid_level(user_hid, hp);
|
||||
reg = tx1_dac_reg_from_hid_level(eff_hid);
|
||||
SET_SHARED_GLOBAL(g_dac_vol, reg);
|
||||
if (hid_lvl == 0) {
|
||||
if (eff_hid == 0) {
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, i2c); }
|
||||
} else {
|
||||
/* 改动原因:必须用 SY102 查表值直写 0x0034,不能用 dac_volume 线性公式 */
|
||||
@@ -1598,8 +1634,9 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
}
|
||||
}
|
||||
old_dac_vol = reg;
|
||||
tx1_save_dac_volume((unsigned char)hid_lvl);
|
||||
debug_printf("HID/panel SET_VOLUME: dac_hid=%u reg=0x%x\n", hid_lvl, reg);
|
||||
tx1_save_dac_volume((unsigned char)user_hid);
|
||||
debug_printf("HID/panel SET_VOLUME: user_hid=%u eff_hid=%u hp=%u reg=0x%x\n",
|
||||
user_hid, eff_hid, hp, reg);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2150,8 +2187,10 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
if (current_combo != COMBO_NONE && !combo_triggered) {
|
||||
combo_triggered = 1;
|
||||
if (current_combo == COMBO_GAME_MIC) {
|
||||
// Toggle high performance mode
|
||||
high_perf_mode = !high_perf_mode;
|
||||
SET_SHARED_GLOBAL(g_high_perf_mode, high_perf_mode);
|
||||
tx1_save_high_perf_mode((unsigned char)high_perf_mode);
|
||||
SET_SHARED_GLOBAL(g_request_volume_set, 1);
|
||||
gpio_leds_dirty = 1;
|
||||
debug_printf("TX1: GAME+MIC combo - high_perf_mode=%d\n", high_perf_mode);
|
||||
} else if (current_combo == COMBO_VOL_UP_DOWN) {
|
||||
@@ -2410,13 +2449,10 @@ void AudioHwRemote2(streaming chanend c, chanend cc_mic_level, client interface
|
||||
if (ex3d_enable) {
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D8_GREEN_BIT);
|
||||
}
|
||||
// D11_BLUE = MIC Level indicator (feature_mode == MIC_LEVEL)
|
||||
if (feature_mode == FEATURE_MODE_MIC_LEVEL) {
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D11_BLUE_BIT);
|
||||
}
|
||||
// D9_BLUE = High Performance indicator
|
||||
/* 改动原因:D11 蓝灯=高性能模式开;关时 DAC 降 6 格,灯灭 */
|
||||
GET_SHARED_GLOBAL(high_perf_mode, g_high_perf_mode);
|
||||
if (high_perf_mode) {
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D9_BLUE_BIT);
|
||||
led_tile0_shadow &= ~(1 << TX1_LED_D11_BLUE_BIT);
|
||||
}
|
||||
p_led_tile0 <: led_tile0_shadow;
|
||||
|
||||
|
||||
@@ -185,6 +185,25 @@ unsigned char tx1_load_mic_volume(void)
|
||||
return v;
|
||||
}
|
||||
|
||||
/* 改动原因:GAME+MIC 组合键切换高性能模式,0=DAC 降 6dB(6 格),1=正常音量;默认 0 */
|
||||
static unsigned char tx1_high_perf_lfs_path[] = "tx1_hi_perf";
|
||||
|
||||
void tx1_save_high_perf_mode(unsigned char enabled)
|
||||
{
|
||||
save_value(tx1_high_perf_lfs_path, (enabled != 0) ? 1 : 0);
|
||||
}
|
||||
|
||||
unsigned char tx1_load_high_perf_mode(void)
|
||||
{
|
||||
unsigned char v = load_value(tx1_high_perf_lfs_path);
|
||||
|
||||
if (v == 255) {
|
||||
v = 0;
|
||||
save_value(tx1_high_perf_lfs_path, v);
|
||||
}
|
||||
return (v != 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
/* 改动原因:Flash 存 save_code=(-threshold)+1,范围 1~36,避免 0 作未初始化哨兵(与 eq.c HID 一致) */
|
||||
static unsigned char tx1_lmt_thr_lfs_path[] = "tx1_lmt_thr";
|
||||
static unsigned char tx1_expand_gain_lfs_path[] = "tx1_exp_gain";
|
||||
|
||||
@@ -70,6 +70,10 @@ unsigned char tx1_load_dac_volume(void);
|
||||
void tx1_save_mic_volume(unsigned char level);
|
||||
unsigned char tx1_load_mic_volume(void);
|
||||
|
||||
/* 改动原因:GAME+MIC 高性能模式断电记忆,0=关(DAC -6dB),1=开(正常 DAC) */
|
||||
void tx1_save_high_perf_mode(unsigned char enabled);
|
||||
unsigned char tx1_load_high_perf_mode(void);
|
||||
|
||||
/* 改动原因:枪声 CMD_LMT_THRESHOLD(-35~0) 与脚步声 CMD_EXPAND_GAIN(0~20) 断电记忆,编码同 eq.c HID 0xB0 */
|
||||
void tx1_save_lmt_threshold_code(unsigned char save_code);
|
||||
unsigned char tx1_load_lmt_threshold_code(void);
|
||||
|
||||
Reference in New Issue
Block a user