udpate uac_vol

This commit is contained in:
Steven Dan
2026-01-13 14:01:56 +08:00
parent e07a05b748
commit 6252431771
3 changed files with 48 additions and 11 deletions

View File

@@ -15,6 +15,8 @@
#include "dbcalc.h" #include "dbcalc.h"
#include "xua_commands.h" #include "xua_commands.h"
#include "xc_ptr.h"
#define CS_XU_MIXSEL (0x06) #define CS_XU_MIXSEL (0x06)
/* From decouple.xc */ /* 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 */ /* Global var for current frequency, set to default freq */
unsigned int g_curSamFreq = DEFAULT_FREQ; unsigned int g_curSamFreq = DEFAULT_FREQ;
int g_uac_vol = 0;
#if 0 #if 0
unsigned int g_curSamFreq48000Family = DEFAULT_FREQ % 48000 == 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: case FU_USBOUT:
{ {
unsigned master_vol = volsOut[0] == 0x8000 ? 0 : db_to_mult(volsOut[0], 8, 29); 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++) 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 */ /* 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); unsigned vol = volsOut[channel] == 0x8000 ? 0 : db_to_mult(volsOut[channel], 8, 29);
x = longMul(master_vol, vol, 29) * !mutesOut[0] * !mutesOut[channel]; 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 (OUT_VOLUME_IN_MIXER)
if (!isnull(c_mix_ctl)) if (!isnull(c_mix_ctl))
{ {

View File

@@ -32,7 +32,7 @@ unsigned g_windows_detect_done = 0;
unsigned g_ex3d_key_verified = 0; unsigned g_ex3d_key_verified = 0;
enum { OS_WIN = 1, OS_OTHERS = 2 }; enum { OS_WIN = 1, OS_OTHERS = 2 };
extern unsigned g_uac_vol;
chanend_t uc_ex3d_to_ubm, uc_eq_data; chanend_t uc_ex3d_to_ubm, uc_eq_data;
#define UBM_TO_EX3D_CHANS (NUM_USB_CHAN_OUT) #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模式标志 #define MODE_UAC1 USB_IN_FLAG // 2 UAC1模式标志
//Tile 1 //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_keys = XS1_PORT_1F;
port_t p_leds = XS1_PORT_1G; 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 is_mute_t1 = 0;
static uint8_t mute_tmr; static uint8_t mute_tmr;
uint8_t tmp = 0; uint8_t tmp = 0;
int32_t sys_vol = 0;
static uint8_t is_stable = 1; static uint8_t is_stable = 1;
static uint8_t press_hold_cnt = 0; static uint8_t press_hold_cnt = 0;
// 改动原因添加LED闪烁相关变量用于保存原始LED状态 // 改动原因添加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(cc_mic_level, event_mic_vol)
, CASE_THEN(c_hidRcvData, event_hid) , CASE_THEN(c_hidRcvData, event_hid)
, CASE_THEN(timer, event_polling) , CASE_THEN(timer, event_polling)
, CASE_THEN(c_uac_vol, event_uac_vol)
) )
{ {
event_mic_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; 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: event_polling:
{ {
hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL); 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 #define KEY_POLLING_INTERVAL 10000000L // 100ms polling interval
// 改动原因添加cc_mic_level参数用于通过channel传输模式值到hid_button_task // 改动原因添加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; 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; 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 = ((port_ctrl_keys) & KEY_BITS);
last_ctrl_keys ^= KEY_MUTE; last_ctrl_keys ^= KEY_MUTE;
hwtimer_set_trigger_time(timer, hwtimer_get_time(timer) + KEY_POLLING_INTERVAL);
while (1) { while (1) {
SELECT_RES( SELECT_RES(
CASE_THEN(c_hidSendData, event_hid) CASE_THEN(c_hidSendData, event_hid)
, CASE_THEN(timer, event_polling)
) )
{ {
event_hid: event_hid:
@@ -1378,6 +1396,20 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level)
hidSetChangePending(1); hidSetChangePending(1);
continue; 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;
}
} }
} }
} }

View File

@@ -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(chanend c_dsp_to_ex3d, int worker_id);
//extern int dsp_worker_tile_1(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 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); extern void AudioHwRemote(chanend c);
#if AIZIP_DNR == 1 #if AIZIP_DNR == 1
extern void dnr_dsp_buffer_task(chanend cc_dsp_in, chanend cc_dsp_eof, chanend cc_mic_level); 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 #else
#define USER_MAIN_DECLARATIONS \ #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]: {\ #define USER_MAIN_CORES on tile[1]: {\
par\ par\
@@ -113,7 +113,7 @@ extern void key_receiver(chanend c_key);
for(int i=0;i<DSP_WORKER_COUNT;i++)\ for(int i=0;i<DSP_WORKER_COUNT;i++)\
uc_dsp_to_ex3d[i] = (chanend) c_dsp_to_ex3d[i];\ uc_dsp_to_ex3d[i] = (chanend) c_dsp_to_ex3d[i];\
}\ }\
hid_button_task(cc_mic_level, c_hidRcvData, c_hidSendData);\ hid_button_task(cc_mic_level, c_hidRcvData, c_hidSendData, c_uac_vol);\
}\ }\
}\ }\
on tile[0]: {\ on tile[0]: {\
@@ -127,7 +127,7 @@ extern void key_receiver(chanend c_key);
}\ }\
AudioHwRemote(c);\ AudioHwRemote(c);\
} \ } \
button_task(c_hidSendData, cc_mic_level);\ button_task(c_hidSendData, cc_mic_level, c_uac_vol);\
}\ }\
}\ }\
on tile[0]: {\ on tile[0]: {\