@@ -75,7 +75,7 @@ unsigned g_game_mode = 0;
// On UserBufferManagement Tile (1)
static unsigned frame_index = 0 ;
//static unsigned dnr_frame_idx = 0;
static int32_t ubm_egress [ UBM_TO_EX3D_CHANS ] [ DSP_BLOCK_LENGTH ] ; //leaving ubm
static int32_t ubm_egress [ UBM_TO_EX3D_CHANS ] [ DSP_BLOCK_LENGTH ] ; //leaving ubm
static int32_t ubm_ingress [ EX3D_TO_UBM_CHANS ] [ DSP_BLOCK_LENGTH ] ; //entering ubm
# if AIZIP_DNR == 1
static int32_t ubm_micIn [ DSP_CH_NUM ] [ DNR_DSP_FRAME_SIZE ] ; //leaving ubm
@@ -89,7 +89,7 @@ void SetEqDataChan (chanend_t c) {
uc_eq_data = c ;
}
void key_receiver ( chanend_t c )
{
{
debug_printf ( " ===> key_receiver \n " ) ;
// tile0
// load the license key
@@ -189,7 +189,7 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
for ( int ch = 0 ; ch < DSP_MIXER_OUTPUT_CHANNEL_COUNT ; ch + + ) {
sampsFromUsbToAudio [ ch ] = ubm_ingress [ ch ] [ frame_index ] ;
//sampsFromAudioToUsb[ch] = sampsFromUsbToAudio[ch]; //loopback
}
}
frame_index + + ;
@@ -198,7 +198,7 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
frame_index = 0 ;
chan_out_buf_word ( uc_ex3d_to_ubm , ( const uint32_t * ) ubm_egress , UBM_TO_EX3D_CHANS * DSP_BLOCK_LENGTH ) ;
// And get a stereo frames worth of data back from the mixer process
chan_in_buf_word ( uc_ex3d_to_ubm , ( uint32_t * ) ubm_ingress , EX3D_TO_UBM_CHANS * DSP_BLOCK_LENGTH ) ;
chan_in_buf_word ( uc_ex3d_to_ubm , ( uint32_t * ) ubm_ingress , EX3D_TO_UBM_CHANS * DSP_BLOCK_LENGTH ) ;
# if AIZIP_DNR == 1
chan_out_buf_word ( uc_dsp_to_dnr_t1 , ( const uint32_t * ) ( & ubm_micIn [ 0 ] ) , DSP_BLOCK_LENGTH ) ;
chan_out_buf_word ( uc_dsp_to_dnr_t1 , ( const uint32_t * ) ( & ubm_micIn [ 1 ] ) , DSP_BLOCK_LENGTH ) ;
@@ -206,12 +206,18 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
chan_in_buf_word ( uc_dsp_to_dnr_t1 , ( uint32_t * ) ( & ubm_micOut [ 1 ] ) , DSP_BLOCK_LENGTH ) ;
# endif
} ;
buffer_exchange ( uc_eq_data , sampsFromUsbToAudio ) ;
sampsFromAudioToUsb [ 0 ] = sampsFromUsbToAudio [ 0 ] ;
sampsFromAudioToUsb [ 1 ] = sampsFromUsbToAudio [ 1 ] ;
}
# ifndef HID_MAX_DATA_BYTES
# define HID_MAX_DATA_BYTES ( 64 )
# endif
unsigned hidSendData [ HID_MAX_DATA_BYTES / 4 ] ;
# if (HID_CONTROLS == 1)
# include "user_hid.h"
static unsigned char lastHidData ;
@@ -252,7 +258,6 @@ typedef enum {
# define CMD_CLR_FWD_TO_2ND_DEV(item) ((item) & ~0x0800)
# define CMD_MASK (~(CMD_SET(0)|CMD_GET(0)|CMD_PARAM(0)|CMD_FWD(0)|CMD_FWD_TO_2ND_DEV(0)))
# define CMD_ITEM(cmd) ((cmd) & CMD_MASK)
unsigned hidSendData [ HID_MAX_DATA_BYTES / 4 ] ;
void UserHIDInit ( void ) {
return ;
@@ -269,7 +274,7 @@ size_t UserHIDGetData( const unsigned id, unsigned char hidData[HID_MAX_DATA_BYT
Length = HID_MAX_DATA_BYTES ;
}
return Length ;
return Length ;
}
void hid_receive_task_in_c ( unsigned char * RcvData , unsigned * SendData )
{
@@ -277,7 +282,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
unsigned * pRcvBuf = ( unsigned * ) ( RcvData + 4 ) ;
unsigned * pSendBuf = SendData ;
unsigned angle ;
command_code = pRcvBuf [ 0 ] ;
cmdItem = CMD_ITEM ( command_code ) ;
@@ -287,7 +292,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
debug_printf ( " CMD_OPEN \r \n " ) ;
break ;
case CMD_ONOFF :
case CMD_ONOFF :
if ( CMD_SET ( CMD_ONOFF ) = = command_code ) {
// set DrAX on/off
//audio_ex3d_onoff(pRcvBuf[1]);
@@ -342,7 +347,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
debug_printf ( " Set CMD_ANGLE : %u \r \n " , pRcvBuf [ 1 ] ) ;
} else {
debug_printf ( " Get CMD_ANGLE : %u \r \n " , pRcvBuf [ 1 ] ) ;
uint32_t ChNum = pRcvBuf [ 1 ] ;
if ( ChNum < NUM_USB_CHAN_OUT ) {
angle = EX3D_VAngle [ ChNum ] < < 16 ;
@@ -381,7 +386,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
debug_printf ( " Set CMD_MUTE : %u \r \n " , pRcvBuf [ 1 ] ) ;
} else {
debug_printf ( " Get CMD_MUTE : %u \r \n " , pRcvBuf [ 1 ] ) ;
uint32_t ChNum = pRcvBuf [ 1 ] ;
if ( ChNum < NUM_USB_CHAN_OUT ) {
pSendBuf [ idx ] = EX3D_Mute [ ChNum ] ;
@@ -402,12 +407,12 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
}
break ;
case CMD_SOUND_FIELD_NAME :
case CMD_SOUND_FIELD_NAME :
if ( CMD_GET ( CMD_SOUND_FIELD_NAME ) = = command_code ) {
int32_t sfIdx = pRcvBuf [ 1 ] ;
debug_printf ( " Get CMD_SOUND_FIELD_NAME : " ) ;
if ( sfIdx < EX3D_SF_NUM ) {
# if defined(SPATIAL_VIDEO)
# if defined(SPATIAL_VIDEO)
const char * sfIdxName = " SPATIAL VIDEO " ; //sfDispName[sfIdx];
# elif defined(SPATIAL_MUSIC)
const char * sfIdxName = " SPATIAL MUSIC " ; //sfDispName[sfIdx];
@@ -415,7 +420,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
const char * sfIdxName = " SPATIAL GAME " ; //sfDispName[sfIdx];
# elif defined(SPATIAL_MOVIE)
const char * sfIdxName = " SPATIAL MOVIE " ; //sfDispName[sfIdx];
# else
# else
const char * sfIdxName = " EXTREME " ;
# endif
int32_t NameLen = strlen ( sfIdxName ) ;
@@ -472,7 +477,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_ON_GAIN : %d \r \n " , Ex3dOnGain ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dOnGain , 4 ) ;
}
}
break ;
case CMD_OFF_GAIN :
@@ -489,7 +494,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_OFF_GAIN : %d \r \n " , Ex3dOffGain ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dOffGain , 4 ) ;
}
}
break ;
case CMD_LFE :
@@ -506,7 +511,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_LFE : %d \r \n " , Ex3dLfeGain ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dLfeGain , 4 ) ;
}
}
break ;
case CMD_LMT_THRESHOLD :
@@ -529,7 +534,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_LMT_THRESHOLD : %d \r \n " , Ex3dLimiterThreshold ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dLimiterThreshold , 4 ) ;
}
}
break ;
case CMD_LMT_ATTACKK_TIME :
@@ -546,7 +551,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_LMT_ATTACKK_TIME : %d \r \n " , Ex3dLimiterAttackTime ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dLimiterAttackTime , 4 ) ;
}
}
break ;
case CMD_LMT_RELEASE_TIME :
@@ -563,7 +568,7 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_LMT_RELEASE_TIME : %d \r \n " , Ex3dLimiterReleaseTime ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dLimiterReleaseTime , 4 ) ;
}
}
break ;
// dhlee++
@@ -582,8 +587,8 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_EXPAND_GAIN : %d \r \n " , Ex3dExpandGain ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dExpandGain , 4 ) ;
}
break ;
}
break ;
case CMD_REDUCE_GAIN :
if ( CMD_SET ( CMD_REDUCE_GAIN ) = = command_code ) {
@@ -599,8 +604,8 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
} else { // Get
debug_printf ( " Get CMD_REDUCE_GAIN : %d \r \n " , Ex3dReduceGain ) ;
memcpy ( & pSendBuf [ idx ] , & Ex3dReduceGain , 4 ) ;
}
break ;
}
break ;
default :
@@ -714,10 +719,10 @@ void update_button(unsigned char b)
# define BLUE_LED_PIN 0 // 3D LED (蓝色LED) - bit 0 of leds2_val, 0b11111110
// 改动原因: 定义模式切换标志值, 用于在SPATIAL_GAME、STEREO_8K、STEREO_2K、UAC1之间循环切换
# define MODE_STEREO_2K USB _IN_FLAG // 2 STEREO_2K模式标志
# define MODE_STEREO_2K UAC1 _IN_FLAG // 4 STEREO_2K模式标志
# define MODE_SPATIAL_GAME COAX_IN_FLAG //1 SPATIAL_GAME模式标志
# define MODE_STEREO_8K OPT_IN_FLAG // 3 STEREO_8K模式标志
# define MODE_UAC1 UAC1 _IN_FLAG // 4 UAC1模式标志
# 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 , chanend_t c_uac_vol )
@@ -755,7 +760,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
unsigned char RcvData [ 64 ] = { 0 } ;
unsigned SendData [ HID_MAX_DATA_BYTES / 4 ] ;
SendData [ 0 ] = 1 ;
SendData [ 0 ] = 1 ;
for ( unsigned char i = 1 ; i < ( HID_MAX_DATA_BYTES / 4 ) ; i + + ) SendData [ i ] = 0 ;
// 改动原因: 从button_task接收模式值( 通过cc_mic_level channel传输)
@@ -780,9 +785,10 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
port_out ( p_leds , leds1_val ) ;
port_out ( p_leds2 , leds2_val ) ;
debug_printf ( " LED init: default OFF state, waiting for mode from button_task \n " ) ;
// delay_milliseconds(200);
uint32_t last_status = port_in ( p_keys ) ;
hwtimer_set_trigger_time ( timer , hwtimer_get_time ( timer ) + KEY_POLLING_INTERVAL ) ;
while ( 1 ) {
while ( 1 ) {
SELECT_RES (
CASE_THEN ( cc_mic_level , event_mic_vol )
, CASE_THEN ( c_hidRcvData , event_hid )
@@ -802,7 +808,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
current_mode_local = 0 ; // 如果值无效, 重置为STEREO_2K
}
debug_printf ( " hid_button_task received audio_mode: %d (0=NO_EFFECT, 1=STEREO_2K, 2=SPATIAL_GAME, 3=STEREO_8K) \n " , current_mode_local ) ;
// 改动原因: 根据接收到的模式值初始化LED和算法状态
if ( current_mode_local = = 0 ) {
// 无音效模式:灯灭,算法关闭
@@ -857,7 +863,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
ret = i2c_codec_mic_vol_down ( ) ;
debug_printf ( " KEY_MIC_VOL_DN \n " ) ;
break ;
case MUTED_MIC :
SET_SHARED_GLOBAL ( g_mute_on_off_t1 , MUTE_ON ) ;
debug_printf ( " MUTED_MIC \n " ) ;
@@ -884,10 +890,12 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
RcvData [ i ] = chan_in_byte ( c_hidRcvData ) ;
}
if ( RcvData [ 0 ] = = 0x01 ) { // REPORT ID 1
# if (HID_CONTROLS == 1)
hid_receive_task_in_c ( RcvData , SendData ) ;
for ( int i = 0 ; i < ( HID_MAX_DATA_BYTES / 4 ) ; i + + ) {
chan_out_word ( c_hidSendData , SendData [ i ] ) ;
}
# endif
}
}
continue ;
@@ -917,7 +925,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
hwtimer_set_trigger_time ( timer , hwtimer_get_time ( timer ) + KEY_POLLING_INTERVAL ) ;
//uint32_t key_in = port_in_when_pinsneq(p_keys, PORT_UNBUFFERED, last_status);
uint32_t key_in = port_in ( p_keys ) ;
// debug_printf("event_polling: key_in=0x%08X, last_status=0x%08X, is_stable=%d, press_hold_cnt=%d\n",
// debug_printf("event_polling: key_in=0x%08X, last_status=0x%08X, is_stable=%d, press_hold_cnt=%d\n",
// key_in, last_status, is_stable, press_hold_cnt);
if ( key_in ! = last_status ) {
if ( ( key_in = = 0 ) & & ( is_stable ) ) {
@@ -929,7 +937,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
if ( press_hold_cnt > 0 ) {
// 改动原因: 短按切换模式( 0=无音效, 1=STEREO_2K, 2=SPATIAL_GAME, 3=STEREO_8K)
// 循环切换: 0→1→2→3→0
#if 0
# if UAC1_MODE
unsigned old_mode = current_mode_local ;
current_mode_local = ( current_mode_local + 1 ) % 4 ; // 循环切换 0→1→2→3→0
debug_printf ( " Short press: switching mode from %d to %d \n " , old_mode , current_mode_local ) ;
@@ -972,14 +980,15 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
leds2_val | = ( 1 < < GREEN_LED_PIN ) ; // Green LED off
debug_printf ( " Mode 3 (STEREO_8K): algorithm ON, BLUE LED blinking \n " ) ;
}
// 更新LED输出
port_out ( p_leds2 , leds2_val ) ;
port_out ( p_leds , leds1_val ) ;
# endif
unsigned endData [ 1 ] = { 0xffffffff } ;
debug_printf ( " endData[0]: %d \n " , endData [ 0 ] ) ;
debug_printf ( " endData[0]: %d %d \n " , endData [ 0 ] , current_mode_local );
chan_out_word ( c_hidSendData , endData [ 0 ] ) ;
chan_out_word ( c_hidSendData , current_mode_local ) ;
}
}
} else {
@@ -991,12 +1000,12 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
// saved_leds2_val = leds2_val;
// saved_leds1_val = leds1_val;
// debug_printf("Long press detected\n");
}
}
}
last_status = key_in ;
// 改动原因: STEREO_8K模式下, 蓝灯闪烁( 每500ms切换一次状态)
if ( current_mode_local = = 3 ) {
blink_counter + + ;
@@ -1012,10 +1021,10 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
}
port_out ( p_leds2 , leds2_val ) ;
}
}
}
else {
blink_counter = 0 ;
}
}
#if 0
if (current_mode_local == 0) {
leds2_val |= (1<<BLUE_LED_PIN); // Blue LED off
@@ -1062,12 +1071,11 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
static unsigned isMute = 0 ;
uint8_t tmp = 0 ;
# if (HID_CONTROLS == 1)
unsigned hidData0 ;
# endif
unsigned ex3d_key_verified ;
delay_milliseconds ( 300 ) ;
debug_printf ( " button task start \n " ) ;
debug_printf ( " button task start \n " ) ;
// 改动原因: 区分Windows模式和UAC1模式, 分别从不同的flash文件加载
// Windows模式: 从 "game_mode" 加载(模式值 0-3)
@@ -1075,12 +1083,12 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
unsigned char saved_mode ;
unsigned char saved_uac1_mode = 0 ;
unsigned char path [ ] = " game_mode " ;
unsigned host_os ;
GET_SHARED_GLOBAL ( host_os , g_host_os ) ;
saved_mode = load_value ( path ) ;
debug_printf ( " Loaded game_mode from flash: %d \n " , saved_mode ) ;
# if defined(UAC1_MODE)
if ( saved_mode = = 255 ) {
saved_mode = 0 ;
@@ -1101,19 +1109,24 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
debug_printf ( " Saved game_mode to flash: %d \n " , saved_mode ) ;
}
# endif
if ( host_os = = OS_OTHERS ) {
printf ( " host_os: %d \n " , host_os ) ;
#if 0
if ((host_os == OS_OTHERS) || (host_os == 0)) {
// 改动原因: 检测到非Windows系统, 切换到UAC1模式
debug_printf ( " Detected non-Windows OS (OS_OTHERS), switching to UAC1 mode \n " ) ;
#if !UAC1_MODE
printf("Detected non-Windows OS (OS_OTHERS), switching to UAC1 mode\n");
SetRoleSwitchFlag(MODE_UAC1);
debug_printf("Set role switch flag: 0x%04X (UAC1), device will restart\n", MODE_UAC1);
// 设备会重启,退出函数
device_reboot();
while(1);
#endif
}
else {
debug_printf ( " Detected Windows OS (OS_WIN) \n " ) ;
# if UAC1_MODE == 1
#endif
# if UAC1_MODE == 1
if ( host_os = = OS_WIN ) {
printf ( " Detected Windows OS (OS_WIN) saved_mode: %d \n " , saved_mode ) ;
{
@@ -1122,23 +1135,25 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
SetRoleSwitchFlag ( MODE_STEREO_2K ) ;
break ;
case 1 :
SetRoleSwitchFlag ( MODE_SPATIAL_GAME ) ;
SetRoleSwitchFlag ( MODE_STEREO_2K ) ;
break ;
case 2 :
SetRoleSwitchFlag ( MODE_STEREO_8K ) ;
SetRoleSwitchFlag ( MODE_SPATIAL_GAME ) ;
break ;
case 3 :
SetRoleSwitchFlag ( MODE_STEREO_2 K ) ;
SetRoleSwitchFlag ( MODE_STEREO_8 K ) ;
break ;
default :
SetRoleSwitchFlag ( MODE_STEREO_2K ) ;
break ;
}
}
debug_printf ( " Switch to saved mode: %d, device will restart. \n " , saved_mode ) ;
delay_milliseconds ( 200 ) ;
// device_reboot();
// while (1);
device_reboot( ) ;
while ( 1 ) ;
}
}
# endif
# if defined(STEREO_2K)
@@ -1159,18 +1174,16 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
}
# endif
}
g_windows_detect_done = 1 ;
// 改动原因: 更新全局变量g_game_mode为保存的模式值
SET_SHARED_GLOBAL ( g_game_mode , saved_mode ) ;
debug_printf ( " Set new g_game_mode to %d \n " , saved_mode ) ;
chan_out_byte ( cc_mic_level , 0xFC ) ; // 音频模式传输命令
chan_out_byte ( cc_mic_level , saved_mode ) ; // 音频模式值( 0=无音效, 1=STEREO_2K, 2=SPATIAL_GAME, 3=STEREO_8K)
debug_printf ( " Sent audio_mode %d to hid_button_task via cc_mic_level channel \n " , saved_mode ) ;
port_enable ( p_ctrl_keys ) ;
port_ctrl_keys = port_in ( p_ctrl_keys ) ;
if ( ( port_ctrl_keys & KEY_MUTE ) = = 0 ) {
@@ -1186,16 +1199,16 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
}
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 ) {
SELECT_RES (
CASE_THEN ( c_hidSendData , event_hid )
, CASE_THEN ( timer , event_polling )
)
)
{
event_hid :
event_hid :
{
unsigned hidData0 = chan_in_word ( c_hidSendData ) ;
unsigned * reportData = hidSendData ;
@@ -1205,22 +1218,20 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
// 改动原因: 收到0xffffffff后, 循环切换模式并保存到flash, 然后设置切换标志
// 注意: UAC1模式下不会收到此命令( hid_button_task不发送)
// 读取当前g_game_mode值
unsigned current_mode ;
GET_SHARED_GLOBAL ( current_mode , g_game_mode ) ;
unsigned current_mode = chan_in_word ( c_hidSendData ) ;
// 改动原因: Windows模式下只循环切换0→1→2→3→0( 不包括UAC1模式4)
// 循环切换模式: 0(STEREO_2K) -> 1(SPATIAL_GAME) -> 2(STEREO_8K) -> 3(无音效) -> 0
unsigned new_mode ;
unsigned mode_flag ;
debug_printf ( " current_mode: %d \n " , current_mode ) ;
# if UAC1_MODE != 1
if ( current_mode = = 0 ) {
// 当前是STEREO_2K, 切换到STEREO_2K
new_mode = 1 ;
mode_flag = MODE_STEREO_2K ;
debug_printf ( " Switching from STEREO_2K (0) to STEREO_2K (1) \n " ) ;
} else if ( current_mode = = 1 ) {
// 当前是STEREO_2K, 切换到SPATIAL_GAME
// 当前是STEREO_2K, 切换到SPATIAL_GAME
new_mode = 2 ;
mode_flag = MODE_SPATIAL_GAME ;
debug_printf ( " Switching from STEREO_2K (1) to SPATIAL_GAME (2) \n " ) ;
@@ -1240,31 +1251,48 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
unsigned char path [ ] = " game_mode " ;
save_value ( path , ( unsigned char ) new_mode ) ;
debug_printf ( " Saved game_mode %d to flash \n " , new_mode ) ;
debug_printf ( " Set role switch flag: 0x%04X \n " , mode_flag ) ;
// 设置角色切换标志,触发模式切换
SetRoleSwitchFlag ( mode_flag ) ;
delay_milliseconds ( 20 ) ;
device_reboot ( ) ;
while ( 1 ) ;
// 改动原因: 判断是否需要切换固件, mode 0和mode 1都使用STEREO_2K固件, 不需要reboot
// 只有在需要切换固件时才reboot, 同一固件内的模式切换( 如0<->1) 只更新模式和算法状态
# if !UAC1_MODE
if ( new_mode ! = 1 ) {
// 改动原因: 需要切换固件, 执行reboot
debug_printf ( " Set role switch flag: 0x%04X, switching firmware, rebooting... \n " , mode_flag ) ;
SetRoleSwitchFlag ( mode_flag ) ;
delay_milliseconds ( 20 ) ;
device_reboot ( ) ;
while ( 1 ) ;
} else {
// 改动原因: 不需要切换固件, 只更新模式和算法状态( 如mode 0<->1切换) , 不reboot
debug_printf ( " Same firmware mode (0x%04X), updating mode and algorithm state without reboot \n " , mode_flag ) ;
SET_SHARED_GLOBAL ( g_game_mode , new_mode ) ;
// 改动原因: 通过channel发送新的audio_mode给hid_button_task, 更新LED和算法状态
chan_out_byte ( cc_mic_level , 0xFC ) ; // 音频模式传输命令
chan_out_byte ( cc_mic_level , new_mode ) ; // 音频模式值
debug_printf ( " Sent audio_mode %d to hid_button_task via cc_mic_level channel \n " , new_mode ) ;
}
# endif
break ;
}
# if (HID_CONTROLS == 1)
for ( int i = 1 ; i < ( HID_MAX_DATA_BYTES / 4 ) ; i + + ) {
reportData [ i ] = chan_in_word ( c_hidSendData ) ;
}
hidSetChangePending ( 1 ) ;
# endif
continue ;
}
event_polling :
{
hwtimer_set_trigger_time ( timer , hwtimer_get_time ( timer ) + KEY_POLLING_INTERVAL ) ;
// 改动原因: 将按键处理逻辑从dnr_dsp_buffer_task合并到button_task, 统一管理所有按键事件
// 改动原因: 按键检测间隔从100ms改为10ms, 提高响应速度, 每次轮询都检测按键状态
hidData0 = 0 ;
curr_ctrl_keys = ( port_in ( p_ctrl_keys ) ) & KEY_BITS ;
// 改动原因:使用防抖机制,连续检测到相同状态变化才响应,避免按键抖动
if ( curr_ctrl_keys ! = last_ctrl_keys ) {
debounce_cnt + + ; // 状态变化计数器递增
@@ -1287,7 +1315,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
}
if ( tmp ) {
chan_out_byte ( cc_mic_level , tmp ) ; // 发送到hid_button_task处理
}
}
break ;
case KEY_MUTE :
// 改动原因: 处理静音按键, 更新静音状态并通知hid_button_task和dnr_dsp_buffer_task
@@ -1305,6 +1333,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
debug_printf ( " MUTE: muted \n " ) ;
}
break ;
# if (HID_CONTROLS == 1)
case KEY_PLAY_VOL_DN :
// 改动原因: 处理播放音量减按键, 发送HID控制命令
if ( ( curr_ctrl_keys & KEY_PLAY_VOL_DN ) = = 0 ) {
@@ -1318,6 +1347,7 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
update_button ( HID_CONTROL_VOLUP ) ; // 更新HID报告
}
break ;
# endif
default :
break ;
}
@@ -1326,15 +1356,15 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
} else {
debounce_cnt = 0 ; // 状态未变化,重置防抖计数器
}
GET_SHARED_GLOBAL ( uac_vol , g_uac_vol ) ;
if ( uac_vol ! = last_uac_vol ) {
unsigned conv_vol = ( 0xffffffff - uac_vol + 1 ) > > 8 ;
//debug_printf("vol: - %d\n", conv_vol);
//debug_printf("vol: - %d\n", conv_vol);
chan_out_word ( c_uac_vol , conv_vol ) ;
last_uac_vol = uac_vol ;
}
# if EQ_EN
// 改动原因: EQ模式切换处理( 每100ms检查一次) , 从AudioHwRemote2整合到button_task
{
@@ -1356,12 +1386,12 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
SET_SHARED_GLOBAL ( g_force_request_eq_mode_change , 0 ) ;
}
}
// 改动原因: EQ参数存储处理( 每500ms保存一次) , 从AudioHwRemote2整合到button_task
eq_sync_counter + + ;
if ( eq_sync_counter > = 5 ) { // 5 * 100ms = 500ms
eq_sync_counter = 0 ;
// 使用单参数存储系统保存脏参数( 独立保存EQ参数)
if ( eq_save_dirty_params ( ) = = 0 ) {
//debug_printf("Single EQ parameters synced to Flash successfully\n");
@@ -1384,9 +1414,9 @@ void button_task(chanend_t c_hidSendData, chanend_t cc_mic_level, chanend_t c_ua
}
}
# endif
continue ;
}
}
}
}
}
@@ -1427,9 +1457,9 @@ void ex3d_task(){
# error you need to define SPATIAL_DRAMA or STEREO_8K....
# endif
int dsp_worker ( chanend_t c_dsp_to_ex3d ,
int dsp_worker ( chanend_t c_dsp_to_ex3d ,
td_block_fir_filter_t * filters [ DSP_WORKER_FILTER_PER_DATA_CH * DSP_WORKER_DATA_CH_COUNT ] ) {
int32_t sample_buffer [ DSP_WORKER_DATA_CH_COUNT ] [ TD_DATA_BUFFER_ELEMENTS ] ;
td_block_fir_data_t fir_data [ DSP_WORKER_DATA_CH_COUNT ] ;
@@ -1438,7 +1468,7 @@ int dsp_worker(chanend_t c_dsp_to_ex3d,
int32_t input [ DSP_WORKER_DATA_CH_COUNT ] [ DSP_BLOCK_LENGTH ] ;
int32_t output [ DSP_WORKER_FILTER_PER_DATA_CH * DSP_WORKER_DATA_CH_COUNT ] [ DSP_BLOCK_LENGTH ] ;
memset ( sample_buffer , 0 , sizeof ( sample_buffer ) ) ;
while ( 1 ) {
for ( int ch = 0 ; ch < DSP_WORKER_DATA_CH_COUNT ; ch + + ) {
@@ -1467,25 +1497,25 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
# if defined(STEREO_2K)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_STEREO_2K_v090h090_left , 0
& td_block_fir_filter_SPATIAL_STEREO_2K_v090h090_left , 0
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
0 , & td_block_fir_filter_SPATIAL_STEREO_2K_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_STEREO_2K_v090h270_left , 0
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
0 , & td_block_fir_filter_SPATIAL_STEREO_2K_v090h270_right
} ;
@@ -1496,25 +1526,25 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
# elif defined(STEREO_8K)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_STEREO_8K_v090h090_left , 0
& td_block_fir_filter_SPATIAL_STEREO_8K_v090h090_left , 0
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
0 , & td_block_fir_filter_SPATIAL_STEREO_8K_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_STEREO_8K_v090h270_left , 0
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
0 , & td_block_fir_filter_SPATIAL_STEREO_8K_v090h270_right
} ;
@@ -1524,32 +1554,32 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
}
# elif defined(SPATIAL_DRAMA)
# elif defined(SPATIAL_DRAMA)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h315_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h045_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h135_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h000_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_lfe_left , & td_block_fir_filter_SPATIAL_71_DRAMA_lfe_right
& td_block_fir_filter_SPATIAL_71_DRAMA_lfe_left , & td_block_fir_filter_SPATIAL_71_DRAMA_lfe_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_left , & td_block_fir_filter_SPATIAL_71_DRAMA_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
@@ -1557,32 +1587,32 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
exit ( 1 ) ;
}
# elif defined(SPATIAL_GAME)
# elif defined(SPATIAL_GAME)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_GAME_v090h225_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_GAME_v090h315_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h315_right
& td_block_fir_filter_SPATIAL_71_GAME_v090h225_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_GAME_v090h315_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h315_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_GAME_v090h045_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h045_right ,
& td_block_fir_filter_SPATIAL_71_GAME_v090h135_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h135_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_GAME_v090h000_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h000_right ,
& td_block_fir_filter_SPATIAL_71_GAME_lfe_left , & td_block_fir_filter_SPATIAL_71_GAME_lfe_right
& td_block_fir_filter_SPATIAL_71_GAME_lfe_left , & td_block_fir_filter_SPATIAL_71_GAME_lfe_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_GAME_v090h270_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_GAME_v090h270_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_GAME_v090h090_left , & td_block_fir_filter_SPATIAL_71_GAME_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
@@ -1590,32 +1620,32 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
exit ( 1 ) ;
}
# elif defined(SPATIAL_MOVIE)
# elif defined(SPATIAL_MOVIE)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_right
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h315_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h045_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h135_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h000_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_lfe_left , & td_block_fir_filter_SPATIAL_71_MOVIE_lfe_right
& td_block_fir_filter_SPATIAL_71_MOVIE_lfe_left , & td_block_fir_filter_SPATIAL_71_MOVIE_lfe_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_left , & td_block_fir_filter_SPATIAL_71_MOVIE_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
@@ -1623,32 +1653,32 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
exit ( 1 ) ;
}
# elif defined(SPATIAL_MUSIC)
# elif defined(SPATIAL_MUSIC)
if ( worker_id = = 0 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_right
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h225_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h315_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 1 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h045_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h135_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 2 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h000_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_lfe_left , & td_block_fir_filter_SPATIAL_71_MUSIC_lfe_right
& td_block_fir_filter_SPATIAL_71_MUSIC_lfe_left , & td_block_fir_filter_SPATIAL_71_MUSIC_lfe_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;
} else if ( worker_id = = 3 ) {
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
td_block_fir_filter_t * filters [ DSP_WORKER_DATA_CH_COUNT * DSP_WORKER_FILTER_PER_DATA_CH ] =
{
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h270_right ,
& td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_left , & td_block_fir_filter_SPATIAL_71_MUSIC_v090h090_right
} ;
dsp_worker ( c_dsp_to_ex3d , filters ) ;