Compare commits
4 Commits
f6e4dd55ab
...
synido_sy1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d0c20efd15 | ||
|
|
e3fb9b0499 | ||
|
|
f90a49d763 | ||
|
|
6678d21d9d |
@@ -156,7 +156,7 @@ port p_sda = PORT_I2C_SDA;
|
||||
//out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚,用于控制其电源状态 */
|
||||
|
||||
out port p_ctl_mute = PORT_CTL_MUTE;
|
||||
in port p_ctl_det = PORT_CTL_DET;
|
||||
port p_ctl_det = PORT_CTL_DET;
|
||||
|
||||
|
||||
/* Board setup for XU316 MC Audio (1v1) */
|
||||
@@ -226,6 +226,8 @@ void mic_volume(unsigned level)
|
||||
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);}
|
||||
}
|
||||
else
|
||||
@@ -662,11 +664,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
mic_mute_blink_tick = 1;
|
||||
}
|
||||
|
||||
if ((g_monitor_switch == 1) && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) {
|
||||
unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); }
|
||||
} else {
|
||||
unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
}
|
||||
// 硬件耳返通路已禁用,改为数字监听(在tile1 UserBufferManagement中实现)
|
||||
// 初始化同步在上方已通过 cc_mic_level <: 0xFE 完成
|
||||
|
||||
// DAC 默认音量(mute 时写 0x0000)
|
||||
if(dac_level == DAC_LEVEL_MIN)
|
||||
@@ -735,6 +734,11 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
#endif
|
||||
|
||||
// 初始化数字监听开关同步到tile1
|
||||
cc_mic_level <: 0xFE;
|
||||
cc_mic_level <: (unsigned)g_monitor_switch;
|
||||
debug_printf("Init monitor sync: sw=%d\n", g_monitor_switch);
|
||||
|
||||
// 出厂默认:AI降噪开启,初始化LED和算法
|
||||
#if DNR_ENABLE == 1
|
||||
if (flag_aidenoise_onoff) {
|
||||
@@ -1870,12 +1874,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
if (g_request_monitor_switch_set) {
|
||||
g_request_monitor_switch_set = 0;
|
||||
unsigned new_mon = g_monitor_switch;
|
||||
// 根据当前mic状态和新的耳返开关值更新reg 0x30
|
||||
if (new_mon && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) {
|
||||
unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); }
|
||||
} else {
|
||||
unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
}
|
||||
// 同步数字监听开关到tile1
|
||||
cc_mic_level <: 0xFE;
|
||||
cc_mic_level <: (unsigned)new_mon;
|
||||
debug_printf("HID monitor sync: sw=%d\n", new_mon);
|
||||
save_value(monitor_sw_path, (unsigned char)new_mon);
|
||||
debug_printf("HID SET_MONITOR_SWITCH: %d\n", new_mon);
|
||||
}
|
||||
@@ -2150,25 +2152,28 @@ void mute_handler(chanend c_mic_det)
|
||||
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
||||
any_mic_in = mic1_in || mic2_in;
|
||||
|
||||
// 检测单个mic插入事件(从拔出变为插入)
|
||||
unsigned mic1_inserted = (mic1_in && !prev_mic1_in);
|
||||
unsigned mic2_inserted = (mic2_in && !prev_mic2_in);
|
||||
unsigned any_inserted = mic1_inserted || mic2_inserted;
|
||||
unsigned state_changed = (any_mic_in != prev_any_mic_in) || any_inserted;
|
||||
// 检测单个mic插拔事件
|
||||
unsigned mic1_changed = (mic1_in != prev_mic1_in);
|
||||
unsigned mic2_changed = (mic2_in != prev_mic2_in);
|
||||
unsigned any_changed = mic1_changed || mic2_changed;
|
||||
|
||||
if (state_changed) {
|
||||
// 状态变化:立即mute mic防止pop音
|
||||
if (any_changed) {
|
||||
// 状态变化:立即mute mic和DAC防止pop音
|
||||
p_ctl_mute <: 0;
|
||||
c_mic_det <: (unsigned)MIC_DET_MUTE;
|
||||
// c_mic_det <: (unsigned)MIC_DET_DAC_MUTE;
|
||||
|
||||
// 如果有mic插入,同时mute DAC防pop
|
||||
if (any_inserted) {
|
||||
c_mic_det <: (unsigned)MIC_DET_DAC_MUTE;
|
||||
}
|
||||
// 配置ADC
|
||||
//c_mic_det <: (unsigned)MIC_DET_REINIT_CODEC;
|
||||
p_ctl_det <: 0;
|
||||
delay_milliseconds(100);
|
||||
|
||||
debug_printf("mic det change: mic1=%d mic2=%d inserted=%d -> mute\n", mic1_in, mic2_in, any_inserted);
|
||||
//debug_printf("mic det change: mic1=%d mic2=%d -> mute all & reconfig\n", mic1_in, mic2_in);
|
||||
p_ctl_det :> det_val;
|
||||
|
||||
// 等1s让插拔稳定
|
||||
delay_milliseconds(1000);
|
||||
delay_milliseconds(900);
|
||||
p_ctl_mute <: 0xf;
|
||||
|
||||
// 重新读取稳定状态
|
||||
p_ctl_det :> det_val;
|
||||
@@ -2176,17 +2181,15 @@ void mute_handler(chanend c_mic_det)
|
||||
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
||||
any_mic_in = mic1_in || mic2_in;
|
||||
|
||||
// 恢复DAC(插入时的临时mute已满1s)
|
||||
if (any_inserted) {
|
||||
c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE;
|
||||
}
|
||||
// 恢复DAC状态
|
||||
c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE;
|
||||
|
||||
if (any_mic_in) {
|
||||
// 有mic插入,恢复mic音量
|
||||
// 有mic插入,恢复mic音量状态
|
||||
c_mic_det <: (unsigned)MIC_DET_UNMUTE;
|
||||
debug_printf("mic stable inserted -> unmute\n");
|
||||
debug_printf("mic stable -> unmute\n");
|
||||
}
|
||||
// 全拔出则保持mic mute,不发UNMUTE
|
||||
// 全拔出则保持mic mute
|
||||
|
||||
prev_mic1_in = mic1_in;
|
||||
prev_mic2_in = mic2_in;
|
||||
|
||||
@@ -16,12 +16,17 @@
|
||||
|
||||
#if DNR_ENABLE == 1
|
||||
unsigned g_dsp_eof = 0;
|
||||
extern float g_dnr_level;
|
||||
void dnr_exchange_buffer(int32_t *data) {
|
||||
static unsigned buff_index = 0;
|
||||
write_to_sample_in_buf(data[1], buff_index, 0);
|
||||
read_from_sample_out_buf(&data[1],buff_index, 0);
|
||||
int dnr_level = (int)g_dnr_level;
|
||||
if (dnr_level != 0) {
|
||||
write_to_sample_in_buf(data[1], buff_index, 0);
|
||||
read_from_sample_out_buf(&data[1],buff_index, 0);
|
||||
}
|
||||
data[0] = data[1];
|
||||
|
||||
|
||||
buff_index++;
|
||||
#if DNR_11MS
|
||||
if (buff_index == 128)
|
||||
|
||||
@@ -67,6 +67,9 @@ unsigned g_dnr_on_off_t1 = DNR_OFF; // Default DNR off
|
||||
#define MUTE_OFF 0
|
||||
unsigned g_mute_on_off_t1 = MUTE_ON;
|
||||
|
||||
// 数字监听 tile1 共享变量(由 tile0 通过 cc_mic_level 通道同步)
|
||||
unsigned g_monitor_switch_t1 = 0; // 耳返开关 tile1 副本(0=关闭,1=开启)
|
||||
|
||||
unsigned g_mute_on_off_t0 = MUTE_OFF;
|
||||
|
||||
unsigned g_game_mode = 0;
|
||||
@@ -144,11 +147,11 @@ 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[], unsigned sample_freq);
|
||||
extern unsigned int is_eq_disabled(void);
|
||||
extern unsigned int g_eq_enable;
|
||||
|
||||
void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[])
|
||||
{
|
||||
uint32_t is_3d;
|
||||
uint32_t is_dnr;
|
||||
uint32_t is_mute;
|
||||
unsigned is_monitor;
|
||||
#if UAC1_MODE
|
||||
return;
|
||||
#endif
|
||||
@@ -160,8 +163,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
|
||||
#endif
|
||||
|
||||
GET_SHARED_GLOBAL(is_3d, g_3d_on_off_t1);
|
||||
GET_SHARED_GLOBAL(is_dnr, g_dnr_on_off_t1);
|
||||
GET_SHARED_GLOBAL(is_mute, g_mute_on_off_t1);
|
||||
#if (HID_CONTROLS > 0)
|
||||
AUDIO_T absVal, maxVal;
|
||||
#endif
|
||||
@@ -252,6 +253,11 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
|
||||
#elif DNR_ENABLE == 1
|
||||
buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq);
|
||||
#endif
|
||||
GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);
|
||||
if (is_monitor) {
|
||||
sampsFromUsbToAudio[0] += (sampsFromAudioToUsb[0]);
|
||||
sampsFromUsbToAudio[1] += (sampsFromAudioToUsb[1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -877,13 +883,13 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
tmp = chan_in_word(cc_mic_level);
|
||||
debug_printf("event_mic_vol received: 0x%02X\n", tmp);
|
||||
|
||||
#if USE_EX3D == 1
|
||||
if (tmp == 0xFC) {
|
||||
// 音频模式命令:来自 audiohw.xc button_task 的模式切换
|
||||
// 必须先读取payload,无论是否启用EX3D
|
||||
current_mode_local = chan_in_word(cc_mic_level);
|
||||
if (current_mode_local > 3) current_mode_local = 0;
|
||||
debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local);
|
||||
|
||||
#if USE_EX3D == 1
|
||||
if (current_mode_local == 0) {
|
||||
// 无音效模式:关闭EX3D和EQ算法
|
||||
audio_ex3d_set_onoff(0);
|
||||
@@ -945,16 +951,25 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
#endif
|
||||
}
|
||||
SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on);
|
||||
#endif
|
||||
} else if (tmp == 0xFD) {
|
||||
// 脚步增强按键发来的 expand gain 命令
|
||||
// 必须先读取payload,无论是否启用EX3D
|
||||
int32_t gain = (int32_t)chan_in_word(cc_mic_level);
|
||||
#if USE_EX3D == 1
|
||||
if ((0 <= gain) && (gain <= 20)) {
|
||||
Ex3dExpandGain = gain;
|
||||
EX3DAudio_SetExpandGain(Ex3dExpandGain);
|
||||
debug_printf("Button set CMD_EXPAND_GAIN: %d\n", gain);
|
||||
}
|
||||
#endif
|
||||
} else if (tmp == 0xFE) {
|
||||
// 数字监听开关同步命令:来自 tile0(所有模式都需要处理)
|
||||
unsigned mon_sw = chan_in_word(cc_mic_level);
|
||||
SET_SHARED_GLOBAL(g_monitor_switch_t1, mon_sw);
|
||||
debug_printf("Monitor sync: sw=%d\n", mon_sw);
|
||||
} else {
|
||||
// Mic 静音状态命令
|
||||
// Mic 静音状态命令(所有模式都需要处理)
|
||||
switch (tmp) {
|
||||
case MUTED_MIC:
|
||||
SET_SHARED_GLOBAL(g_mute_on_off_t1, MUTE_ON);
|
||||
@@ -971,7 +986,6 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
continue;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user