From 62524317711f09e34b1555b48e3cd63b8fc90cdf Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Tue, 13 Jan 2026 14:01:56 +0800 Subject: [PATCH] udpate uac_vol --- .../src/core/endpoint0/xua_ep0_uacreqs.xc | 9 ++++- .../src/extensions/dsp.c | 40 +++++++++++++++++-- .../src/extensions/user_main.h | 10 ++--- 3 files changed, 48 insertions(+), 11 deletions(-) diff --git a/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc b/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc index e70a5d0..9b491dd 100644 --- a/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc +++ b/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_uacreqs.xc @@ -15,6 +15,8 @@ #include "dbcalc.h" #include "xua_commands.h" +#include "xc_ptr.h" + #define CS_XU_MIXSEL (0x06) /* From decouple.xc */ @@ -48,6 +50,8 @@ extern unsigned char mixSel[MAX_MIX_COUNT][MIX_INPUTS]; /* Global var for current frequency, set to default freq */ unsigned int g_curSamFreq = DEFAULT_FREQ; + +int g_uac_vol = 0; #if 0 unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 0; @@ -126,7 +130,7 @@ static void updateMasterVol(int unitID, chanend ?c_mix_ctl) case FU_USBOUT: { unsigned master_vol = volsOut[0] == 0x8000 ? 0 : db_to_mult(volsOut[0], 8, 29); - +SET_SHARED_GLOBAL(g_uac_vol, volsOut[0]); for (int i = 1; i < (NUM_USB_CHAN_OUT + 1); i++) { /* Calc multipliers with 29 fractional bits from a db value with 8 fractional bits */ @@ -213,7 +217,8 @@ static void updateVol(int unitID, int channel, chanend ?c_mix_ctl) unsigned vol = volsOut[channel] == 0x8000 ? 0 : db_to_mult(volsOut[channel], 8, 29); x = longMul(master_vol, vol, 29) * !mutesOut[0] * !mutesOut[channel]; - + if (channel == 1) + SET_SHARED_GLOBAL(g_uac_vol, volsOut[channel]); // only update the front left channel #if (OUT_VOLUME_IN_MIXER) if (!isnull(c_mix_ctl)) { diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c index 8ed7cb1..b6c9bdf 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/dsp.c @@ -32,7 +32,7 @@ unsigned g_windows_detect_done = 0; unsigned g_ex3d_key_verified = 0; enum { OS_WIN = 1, OS_OTHERS = 2 }; - +extern unsigned g_uac_vol; chanend_t uc_ex3d_to_ubm, uc_eq_data; #define UBM_TO_EX3D_CHANS (NUM_USB_CHAN_OUT) @@ -719,7 +719,7 @@ void hid_update(unsigned char hid_data) { #define MODE_UAC1 USB_IN_FLAG // 2 UAC1模式标志 //Tile 1 -void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c_hidSendData) +void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c_hidSendData, chanend_t c_uac_vol) { port_t p_keys = XS1_PORT_1F; port_t p_leds = XS1_PORT_1G; @@ -732,6 +732,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c static uint8_t is_mute_t1 = 0; static uint8_t mute_tmr; uint8_t tmp = 0; + int32_t sys_vol = 0; static uint8_t is_stable = 1; static uint8_t press_hold_cnt = 0; // 改动原因:添加LED闪烁相关变量,用于保存原始LED状态 @@ -779,6 +780,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c CASE_THEN(cc_mic_level, event_mic_vol) , CASE_THEN(c_hidRcvData, event_hid) , CASE_THEN(timer, event_polling) + , CASE_THEN(c_uac_vol, event_uac_vol) ) { event_mic_vol: @@ -889,6 +891,19 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c } continue; + event_uac_vol: + { + sys_vol = chan_in_word(c_uac_vol); + sys_vol = sys_vol * (-1); + // Ex3dLimiterThreshold + // Ex3dOnGain + // Ex3dExpandGain + // Ex3dReduceGain + // Ex3dReduceGain = Ex3dLimiterThreshold - (sys_vol + Ex3dOnGain + Ex3dExpandGain) + printf("sys_vol:%d\n", sys_vol); + printf("on gain:%d\n", Ex3dOnGain); + printf("limiter Th:%f\n", Ex3dLimiterThreshold); + } event_polling: { hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL); @@ -1150,8 +1165,10 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c } #define KEY_POLLING_INTERVAL 10000000L // 100ms polling interval // 改动原因:添加cc_mic_level参数,用于通过channel传输模式值到hid_button_task -void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level) +void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_uac_vol) { + hwtimer_t timer = hwtimer_alloc(); + static int uac_vol=0, last_uac_vol=0; port_t p_ctrl_keys = XS1_PORT_8C; uint32_t port_ctrl_keys = 0, curr_ctrl_keys = 0, last_ctrl_keys = 0, keys_changed = 0; @@ -1303,11 +1320,12 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level) last_ctrl_keys = ((port_ctrl_keys) & KEY_BITS); last_ctrl_keys ^= KEY_MUTE; - + hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL); while (1) { SELECT_RES( CASE_THEN(c_hidSendData, event_hid) + , CASE_THEN(timer, event_polling) ) { event_hid: @@ -1376,6 +1394,20 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level) reportData[i] = chan_in_word(c_hidSendData); } hidSetChangePending(1); + continue; + } + event_polling: + { + hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL); + + GET_SHARED_GLOBAL(uac_vol, g_uac_vol); + if (uac_vol != last_uac_vol) { + unsigned conv_vol = (0xffffffff - uac_vol + 1) >> 8; + //printf("vol: - %d\n", conv_vol); + chan_out_word(c_uac_vol, conv_vol); + last_uac_vol = uac_vol; + } + continue; } } diff --git a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/user_main.h b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/user_main.h index 2733054..30eab2a 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/user_main.h +++ b/sw_usb_audio/app_usb_aud_phaten_golden/src/extensions/user_main.h @@ -24,9 +24,9 @@ extern port p_sda; extern int dsp_worker_tile(chanend c_dsp_to_ex3d, int worker_id); //extern int dsp_worker_tile_1(chanend c_dsp_to_ex3d, int worker_id); -extern void button_task(chanend c_hidSendData, chanend cc_mic_level); +extern void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol); extern void ex3d_task(); -extern void hid_button_task(chanend cc_mic_level, chanend c_hid, chanend c_hidSendData); +extern void hid_button_task(chanend cc_mic_level, chanend c_hid, chanend c_hidSendData, chanend c_uac_vol); extern void AudioHwRemote(chanend c); #if AIZIP_DNR == 1 extern void dnr_dsp_buffer_task(chanend cc_dsp_in, chanend cc_dsp_eof, chanend cc_mic_level); @@ -98,7 +98,7 @@ extern void key_receiver(chanend c_key); #else #define USER_MAIN_DECLARATIONS \ - chan c_dsp_to_ex3d[DSP_WORKER_COUNT]; chan c; chan cc_mic_level; chan c_key; chan c_hidSendData; chan c_hidRcvData; chan c_eq_data; + chan c_dsp_to_ex3d[DSP_WORKER_COUNT]; chan c; chan cc_mic_level; chan c_key; chan c_hidSendData; chan c_hidRcvData; chan c_eq_data; chan c_uac_vol; #define USER_MAIN_CORES on tile[1]: {\ par\ @@ -113,7 +113,7 @@ extern void key_receiver(chanend c_key); for(int i=0;i