13 Commits

Author SHA1 Message Date
Steven Dan
d0c20efd15 don't go through dnr process when it's not enabled 2026-04-11 21:52:20 +08:00
Steven Dan
e3fb9b0499 fix mic insertion issue 2026-04-11 21:49:09 +08:00
Steven Dan
f90a49d763 adc monitor for F1 2026-04-11 21:12:40 +08:00
Steven Dan
6678d21d9d output low for 100ms when insertion 2026-04-11 14:45:03 +08:00
Steven Dan
f6e4dd55ab 1.0.10 2026-04-11 11:47:26 +08:00
Steven Dan
961615b0f0 mute headphone when mic insertion 2026-04-11 11:46:44 +08:00
Steven Dan
42b7f4e7ce Reapply "mic detection"
This reverts commit 3880b56108.
2026-04-11 09:19:59 +08:00
Steven Dan
50a722b96a update dnr_init_flag 2026-04-10 22:02:36 +08:00
Steven Dan
85fce4673b add uac1 modes 2026-04-10 16:46:12 +08:00
Steven Dan
05a5ac80ef add more flash protect for key verification 2026-04-09 18:59:17 +08:00
Steven Dan
3880b56108 Revert "mic detection"
This reverts commit 35846cffd3.
2026-04-09 17:59:07 +08:00
Steven Dan
01360b1650 update f5 2026-04-09 16:00:53 +08:00
Steven Dan
4b4a76d7b0 update flash id 2026-04-09 16:00:29 +08:00
11 changed files with 299 additions and 73 deletions

View File

@@ -23,7 +23,7 @@
*/ */
#ifndef FLASH_MAX_UPGRADE_SIZE #ifndef FLASH_MAX_UPGRADE_SIZE
//#define FLASH_MAX_UPGRADE_SIZE (512 * 1024) //#define FLASH_MAX_UPGRADE_SIZE (512 * 1024)
#define FLASH_MAX_UPGRADE_SIZE (0x1a0000) #define FLASH_MAX_UPGRADE_SIZE (2200 * 1024)
#endif #endif
#define FLASH_ERROR() do {} while(0) #define FLASH_ERROR() do {} while(0)

View File

@@ -38,7 +38,7 @@ endif()
# Firmware version (maps to BCD_DEVICE_J.M.N in USB descriptor) # Firmware version (maps to BCD_DEVICE_J.M.N in USB descriptor)
set(FW_VER_J 1) set(FW_VER_J 1)
set(FW_VER_M 0) set(FW_VER_M 0)
set(FW_VER_N 9) set(FW_VER_N 10)
set(FW_VERSION "v${FW_VER_J}.${FW_VER_M}.${FW_VER_N}") set(FW_VERSION "v${FW_VER_J}.${FW_VER_M}.${FW_VER_N}")
set(SW_USB_AUDIO_FLAGS ${EXTRA_BUILD_FLAGS} -Os set(SW_USB_AUDIO_FLAGS ${EXTRA_BUILD_FLAGS} -Os
@@ -86,25 +86,23 @@ set(APP_COMPILER_FLAGS_f5_music_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC
-DF5_MUSIC_UAC1=1 -DF5_MUSIC_UAC1=1
#-DUSE_EX3D #-DUSE_EX3D
-DMIXER=0 -DMIXER=0
#-ldnr_50ms -ldnr_50ms
#-DDNR_ENABLE=1 -DDNR_ENABLE=1
#-llib_ex3d_all #-llib_ex3d_all
-DEQ_EN=1 -DEQ_EN=1
-DEX3D_SF_NUM=3 -DEX3D_SF_NUM=3
-DNUM_USB_CHAN_OUT=8 -DNUM_USB_CHAN_OUT=8
-DNUM_USB_CHAN_OUT_FS=2 -DNUM_USB_CHAN_OUT_FS=2
-DNUM_USB_CHAN_IN=2 -DNUM_USB_CHAN_IN=2
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16 -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
-DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=16 -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24
-DSTREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS=16 -DINPUT_FORMAT_COUNT=1
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16 -DOUTPUT_FORMAT_COUNT=1
-DSTREAM_FORMAT_INPUT_2_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_3_RESOLUTION_BITS=16
#-DNUM_EX3D_CHAN_OUT=2 #-DNUM_EX3D_CHAN_OUT=2
-DMIN_VOLUME=0xE000 -DMIN_VOLUME=0xE000
-DINPUT_VOLUME_CONTROL=0 -DINPUT_VOLUME_CONTROL=0
-DOUTPUT_VOLUME_CONTROL=0 -DOUTPUT_VOLUME_CONTROL=0
-DDEBUG_MEMORY_LOG_ENABLED=1 #-DDEBUG_MEMORY_LOG_ENABLED=1
-DXUA_DFU_EN=0 -DXUA_DFU_EN=0
-DHID_CONTROLS_UAC1=1 -DHID_CONTROLS_UAC1=1
#-DIR_SWITCHING_MODE #-DIR_SWITCHING_MODE
@@ -131,9 +129,10 @@ set(APP_COMPILER_FLAGS_fact ${SW_USB_FACT_FLAGS} -DI2S_CHANS_DAC=2
-DINPUT_VOLUME_CONTROL=0 -DINPUT_VOLUME_CONTROL=0
-DOUTPUT_VOLUME_CONTROL=0 -DOUTPUT_VOLUME_CONTROL=0
-DDEBUG_MEMORY_LOG_ENABLED=1 -DDEBUG_MEMORY_LOG_ENABLED=1
-DHID_DFU_EN=1
-DXUA_DFU_EN=1 -DXUA_DFU_EN=1
#-DIR_SWITCHING_MODE #-DIR_SWITCHING_MODE
-DHID_CONTROLS=0) -DHID_CONTROLS=1)
@@ -196,11 +195,14 @@ set(APP_COMPILER_FLAGS_f3_f4_fps_uac2 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DHID_DFU_EN=1 -DHID_DFU_EN=1
-DIR_SWITCHING_MODE -DIR_SWITCHING_MODE
-DHID_CONTROLS=1) -DHID_CONTROLS=1)
set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2 set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DI2S_CHANS_ADC=2 -DI2S_CHANS_ADC=2
-DAUDIO_CLASS=1 -DAUDIO_CLASS=1
-DMIN_FREQ=48000 -DMIN_FREQ=48000
-DMAX_FREQ=48000 -DMAX_FREQ=48000
-DMCLK_441=512*44100
-DMCLK_48=512*48000
-DUAC1_MODE=1 -DUAC1_MODE=1
-DUSE_EX3D=1 -DUSE_EX3D=1
-DF6_F7_FPS_UAC1=1 -DF6_F7_FPS_UAC1=1

View File

@@ -1,3 +1,3 @@
xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_f4_fps_uac2/app_usb_aud_sy102_f3_f4_fps_uac2.xe -o %1 xflash bin/fact/app_usb_aud_sy102_fact.xe --loader loader.o --upgrade 2 bin/f5_music_uac1/app_usb_aud_sy102_f5_music_uac1.xe --upgrade 3 bin/f1_music_uac2/app_usb_aud_sy102_f1_music_uac2.xe --upgrade 1 bin/f3_f4_fps_uac2/app_usb_aud_sy102_f3_f4_fps_uac2.xe --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe -o %1
rem --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe rem --upgrade 4 bin/f6_f7_fps_uac1/app_usb_aud_sy102_f6_f7_fps_uac1.xe

View File

@@ -215,6 +215,32 @@
0x01, /* QSPI_WRSR */ \ 0x01, /* QSPI_WRSR */ \
0x01, /* QSPI_WIP_BIT_MASK */ \ 0x01, /* QSPI_WIP_BIT_MASK */ \
} }
#define FL_QUADDEVICE_ZB25VQ32D_2 \
{ \
0, /* XT25F16F - Just specify 0 as flash_id */ \
256, /* page size */ \
16384, /* num pages */ \
3, /* address size */ \
4, /* log2 clock divider */ \
0x9F, /* QSPI_RDID */ \
0, /* id dummy bytes */ \
3, /* id size in bytes */ \
0x5E6016, /* device id */ \
0x20, /* QSPI_SE */ \
4096, /* Sector erase is always 4KB */ \
0x06, /* QSPI_WREN */ \
0x04, /* QSPI_WRDI */ \
PROT_TYPE_SR, /* Protection via SR */ \
{{0x0,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
0x02, /* QSPI_PP */ \
0xEB, /* QSPI_READ_FAST */ \
1, /* 1 read dummy byte */ \
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
{4096,{0,{0}}}, /* regular sector sizes */ \
0x05, /* QSPI_RDSR */ \
0x01, /* QSPI_WRSR */ \
0x01, /* QSPI_WIP_BIT_MASK */ \
}
#define FL_QUADDEVICE_ZB25VQ32D \ #define FL_QUADDEVICE_ZB25VQ32D \
{ \ { \
@@ -226,7 +252,7 @@
0x9F, /* QSPI_RDID */ \ 0x9F, /* QSPI_RDID */ \
0, /* id dummy bytes */ \ 0, /* id dummy bytes */ \
3, /* id size in bytes */ \ 3, /* id size in bytes */ \
0x5E8016, /* device id */ \ 0x5E4016, /* device id */ \
0x20, /* QSPI_SE */ \ 0x20, /* QSPI_SE */ \
4096, /* Sector erase is always 4KB */ \ 4096, /* Sector erase is always 4KB */ \
0x06, /* QSPI_WREN */ \ 0x06, /* QSPI_WREN */ \
@@ -469,7 +495,7 @@
// DFU_FLASH_DEVICE is a comma-separated list of flash spec structures // DFU_FLASH_DEVICE is a comma-separated list of flash spec structures
// This define is used in lib_xua/lib_xua/src/dfu/flashlib_user.c // This define is used in lib_xua/lib_xua/src/dfu/flashlib_user.c
#define DFU_FLASH_DEVICE FL_QUADDEVICE_GD25Q32E, FL_QUADDEVICE_ZB25VQ32D, FL_QUADDEVICE_PY25Q32SH, FL_QUADDEVICE_PY25Q32H, FL_QUADDEVICE_XT25F16F, FL_QUADDEVICE_WINBOND_W25Q16JW, FL_QUADDEVICE_UC25HQ16B, FL_QUADDEVICE_WINBOND_W25Q32JVxxxM, FL_QUADDEVICE_MX25R3235, FL_QUADDEVICE_MX25L160E #define DFU_FLASH_DEVICE FL_QUADDEVICE_GD25Q32E, FL_QUADDEVICE_ZB25VQ32D, FL_QUADDEVICE_ZB25VQ32D_2, FL_QUADDEVICE_PY25Q32SH, FL_QUADDEVICE_PY25Q32H, FL_QUADDEVICE_XT25F16F, FL_QUADDEVICE_WINBOND_W25Q16JW, FL_QUADDEVICE_UC25HQ16B, FL_QUADDEVICE_WINBOND_W25Q32JVxxxM, FL_QUADDEVICE_MX25R3235, FL_QUADDEVICE_MX25L160E
//: //:
#include "user_main.h" #include "user_main.h"

View File

@@ -108,8 +108,10 @@ unsigned g_new_dac_mode = 0;
unsigned g_samfreq = 48000; unsigned g_samfreq = 48000;
unsigned g_dsd_mode = 0; unsigned g_dsd_mode = 0;
// mic detect events: mute_handler (tile[1]) → button_task (tile[0]) // mic detect events: mute_handler (tile[1]) → button_task (tile[0])
#define MIC_DET_MUTE 1 // mic插入或全拔出立即mute #define MIC_DET_MUTE 1 // mic插入或全拔出立即mute mic
#define MIC_DET_UNMUTE 2 // 插入1s后恢复音量 #define MIC_DET_UNMUTE 2 // 插入1s后恢复mic音量
#define MIC_DET_DAC_MUTE 3 // mic插入时mute DAC防pop
#define MIC_DET_DAC_UNMUTE 4 // 1s后恢复DAC音量
unsafe chanend uc_audiohw; // tile[1] end: AudioHwConfig → button_task (tile[0]) unsafe chanend uc_audiohw; // tile[1] end: AudioHwConfig → button_task (tile[0])
#if HID_DFU_EN #if HID_DFU_EN
@@ -154,7 +156,7 @@ port p_sda = PORT_I2C_SDA;
//out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚用于控制其电源状态 */ //out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚用于控制其电源状态 */
out port p_ctl_mute = PORT_CTL_MUTE; 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) */ /* Board setup for XU316 MC Audio (1v1) */
@@ -224,6 +226,8 @@ void mic_volume(unsigned level)
else if(level == NAU88L21_PGA_GAIN_REG_MAX_VALUE) else if(level == NAU88L21_PGA_GAIN_REG_MAX_VALUE)
{ {
// 内部最大值 (reg=38, +1.5dB数字增益仅firmware使用) // 内部最大值 (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);} unsafe {NAU88C22_REGWRITE(0x0035, (0xd2d2), (client interface i2c_master_if)i_i2c_client);}
} }
else else
@@ -403,6 +407,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
unsigned flag_mic_mute = 0; unsigned flag_mic_mute = 0;
unsigned flag_hp_mute = 0; unsigned flag_hp_mute = 0;
unsigned mic_det_muted = 0; // mic检测导致的mute不影响LED和g_mic_volume_level unsigned mic_det_muted = 0; // mic检测导致的mute不影响LED和g_mic_volume_level
unsigned dac_det_muted = 0; // mic插入时临时mute DAC防pop不影响LED
unsigned push_button_mic_mute_state_old = 1; // Active low unsigned push_button_mic_mute_state_old = 1; // Active low
unsigned push_button_hp_mute_state_old = 1; // Active low unsigned push_button_hp_mute_state_old = 1; // Active low
@@ -437,6 +442,22 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
unsigned char hp_mute_path[] = "hp_mute"; unsigned char hp_mute_path[] = "hp_mute";
unsigned char monitor_sw_path[] = "monitor_sw"; unsigned char monitor_sw_path[] = "monitor_sw";
unsigned host_os; unsigned host_os;
#if DNR_ENABLE
unsigned dnr_init_flag = 0;
while (dnr_init_flag == 0)
{
GET_SHARED_GLOBAL(dnr_init_flag, g_dnr_init_flag);
asm("nop");
}
#endif
#if USE_EX3D == 1
unsigned ex3d_key_verified = 0;
while (ex3d_key_verified == 0)
{
GET_SHARED_GLOBAL(ex3d_key_verified, g_ex3d_key_verified);
asm("nop");
}
#endif
delay_milliseconds(10); delay_milliseconds(10);
saved_mode = load_value(path); saved_mode = load_value(path);
@@ -475,11 +496,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
} }
else else
{ {
#if F5_MUSIC_UAC1
if (saved_mode >= 2) { if (saved_mode >= 2) {
SetRoleSwitchFlag(MODE_F6_F7_FPS_UAC1);
device_reboot();
while (1);
}
#elif F6_F7_FPS_UAC1
if (saved_mode <= 1) {
SetRoleSwitchFlag(MODE_F5_MUSIC_UAC1); SetRoleSwitchFlag(MODE_F5_MUSIC_UAC1);
device_reboot(); device_reboot();
while (1); while (1);
} }
#endif
} }
#endif #endif
@@ -489,8 +518,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if (saved_mode == 255) { if (saved_mode == 255) {
#if defined(F5_MUSIC_UAC1) #if defined(F5_MUSIC_UAC1)
saved_mode = 1; // f5: default music mode saved_mode = 1; // f5: default music mode
#elif defined(F6_F7_FPS_UAC1)
saved_mode = 2; // f6/f7: default game mode
#else #else
saved_mode = 1; // f6/f7: default off saved_mode = 1; // default off
#endif #endif
save_value(path, saved_mode); save_value(path, saved_mode);
debug_printf("Saved game_mode to flash: %d\n", saved_mode); debug_printf("Saved game_mode to flash: %d\n", saved_mode);
@@ -633,11 +664,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
mic_mute_blink_tick = 1; mic_mute_blink_tick = 1;
} }
if ((g_monitor_switch == 1) && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) { // 硬件耳返通路已禁用改为数字监听在tile1 UserBufferManagement中实现
unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); } // 初始化同步在上方已通过 cc_mic_level <: 0xFE 完成
} else {
unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); }
}
// DAC 默认音量mute 时写 0x0000 // DAC 默认音量mute 时写 0x0000
if(dac_level == DAC_LEVEL_MIN) if(dac_level == DAC_LEVEL_MIN)
@@ -706,6 +734,11 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
} }
#endif #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和算法 // 出厂默认AI降噪开启初始化LED和算法
#if DNR_ENABLE == 1 #if DNR_ENABLE == 1
if (flag_aidenoise_onoff) { if (flag_aidenoise_onoff) {
@@ -963,6 +996,18 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
mic_volume(codec_adc_pga_gain_reg_value); mic_volume(codec_adc_pga_gain_reg_value);
debug_printf("mic_det: unmute -> pga=%d\n", codec_adc_pga_gain_reg_value); debug_printf("mic_det: unmute -> pga=%d\n", codec_adc_pga_gain_reg_value);
} }
} else if (mic_det_cmd == MIC_DET_DAC_MUTE) {
dac_det_muted = 1;
// mute DAC硬件不改变dac_level/g_volume_level和LED
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
debug_printf("mic_det: dac mute\n");
} else if (mic_det_cmd == MIC_DET_DAC_UNMUTE) {
dac_det_muted = 0;
// 恢复DAC音量但如果用户手动hp_mute或dac_level==0则不恢复
if (!flag_hp_mute && dac_level > DAC_LEVEL_MIN) {
dac_volume(dac_level - DAC_LEVEL_MAX);
debug_printf("mic_det: dac unmute -> level=%d\n", dac_level);
}
} }
break; break;
} }
@@ -1090,6 +1135,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
active_mode = 1; active_mode = 1;
need_reboot = 1; need_reboot = 1;
SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2); SetRoleSwitchFlag(MODE_F1_MUSIC_UAC2);
#elif (F6_F7_FPS_UAC1 == 1)
// UAC1 FPS firmware: music needs F5, reboot if not already music
if (active_mode != 1) {
active_mode = 1;
need_reboot = 1;
SetRoleSwitchFlag(MODE_F5_MUSIC_UAC1);
}
#elif (F5_MUSIC_UAC1 == 1)
// UAC1 Music firmware: already on music FW, toggle locally
if (active_mode != 1) {
active_mode = 1;
mode_btn_change = 1;
}
#else #else
active_mode = (active_mode == 1) ? 0 : 1; active_mode = (active_mode == 1) ? 0 : 1;
mode_btn_change = 1; mode_btn_change = 1;
@@ -1107,6 +1165,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
active_mode = 2; active_mode = 2;
need_reboot = 1; need_reboot = 1;
SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2);
#elif (F5_MUSIC_UAC1 == 1)
// UAC1 Music firmware: game needs F6/F7, reboot if not already game
if (active_mode != 2) {
active_mode = 2;
need_reboot = 1;
SetRoleSwitchFlag(MODE_F6_F7_FPS_UAC1);
}
#elif (F6_F7_FPS_UAC1 == 1)
// UAC1 FPS firmware: already on FPS FW, switch locally (IR_OFF)
if (active_mode != 2) {
active_mode = 2;
mode_btn_change = 1;
}
#else #else
active_mode = (active_mode == 2) ? 0 : 2; active_mode = (active_mode == 2) ? 0 : 2;
mode_btn_change = 1; mode_btn_change = 1;
@@ -1129,8 +1200,20 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
active_mode = 3; active_mode = 3;
need_reboot = 1; need_reboot = 1;
SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2); SetRoleSwitchFlag(MODE_F3_F4_FPS_UAC2);
#elif (F5_MUSIC_UAC1 == 1)
// UAC1 Music firmware: AI71 needs F6/F7 FPS, reboot if not already AI71
if (active_mode != 3) {
active_mode = 3;
need_reboot = 1;
SetRoleSwitchFlag(MODE_F6_F7_FPS_UAC1);
}
#elif (F6_F7_FPS_UAC1 == 1)
// UAC1 FPS firmware: already on FPS FW, switch locally (IR_GAME)
if (active_mode != 3) {
active_mode = 3;
mode_btn_change = 1;
}
#else #else
// FPS firmware: switch algorithm locally (toggle off or activate) // FPS firmware: switch algorithm locally (toggle off or activate)
active_mode = (active_mode == 3) ? 0 : 3; active_mode = (active_mode == 3) ? 0 : 3;
mode_btn_change = 1; mode_btn_change = 1;
@@ -1164,6 +1247,26 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
active_mode = target; active_mode = target;
mode_btn_change = 1; mode_btn_change = 1;
} }
#elif (F5_MUSIC_UAC1 == 1)
// UAC1 Music FW: mode 1 local, mode 2/3 need F6/F7 reboot
if (target >= 2) {
active_mode = target;
need_reboot = 1;
SetRoleSwitchFlag(MODE_F6_F7_FPS_UAC1);
} else if (target != active_mode) {
active_mode = target;
mode_btn_change = 1;
}
#elif (F6_F7_FPS_UAC1 == 1)
// UAC1 FPS FW: mode 2/3 local, mode 1 needs F5 reboot
if (target <= 1) {
active_mode = target;
need_reboot = 1;
SetRoleSwitchFlag(MODE_F5_MUSIC_UAC1);
} else if (target != active_mode) {
active_mode = target;
mode_btn_change = 1;
}
#else #else
active_mode = target; active_mode = target;
mode_btn_change = 1; mode_btn_change = 1;
@@ -1562,7 +1665,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 增加音量 // 增加音量
++dac_level; ++dac_level;
g_volume_level = dac_level; g_volume_level = dac_level;
dac_volume(dac_level - DAC_LEVEL_MAX); if (!dac_det_muted)
dac_volume(dac_level - DAC_LEVEL_MAX);
save_value(dac_vol_path, dac_level); save_value(dac_vol_path, dac_level);
uint8_t new_led_count = dac_gain_to_led[dac_level]; uint8_t new_led_count = dac_gain_to_led[dac_level];
@@ -1581,10 +1685,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 减小音量 // 减小音量
--dac_level; --dac_level;
g_volume_level = dac_level; g_volume_level = dac_level;
if(dac_level == DAC_LEVEL_MIN) if (!dac_det_muted) {
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } if(dac_level == DAC_LEVEL_MIN)
else unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
dac_volume(dac_level - DAC_LEVEL_MAX); else
dac_volume(dac_level - DAC_LEVEL_MAX);
}
save_value(dac_vol_path, dac_level); save_value(dac_vol_path, dac_level);
uint8_t new_led_count = dac_gain_to_led[dac_level]; uint8_t new_led_count = dac_gain_to_led[dac_level];
@@ -1656,10 +1762,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
} }
else else
{ {
if(dac_level == DAC_LEVEL_MIN) if (!dac_det_muted) {
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } if(dac_level == DAC_LEVEL_MIN)
else unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
dac_volume(dac_level - DAC_LEVEL_MAX); else
dac_volume(dac_level - DAC_LEVEL_MAX);
}
g_volume_level = dac_level; g_volume_level = dac_level;
hp_mute_blink_tick = 0; hp_mute_blink_tick = 0;
for(int i = 0; i < 15; i++) for(int i = 0; i < 15; i++)
@@ -1712,10 +1820,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if (new_level <= DAC_LEVEL_MAX) { if (new_level <= DAC_LEVEL_MAX) {
uint8_t new_led_count; uint8_t new_led_count;
dac_level = new_level; dac_level = new_level;
if (dac_level == DAC_LEVEL_MIN) if (!dac_det_muted) {
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); } if (dac_level == DAC_LEVEL_MIN)
else unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
dac_volume(dac_level - DAC_LEVEL_MAX); else
dac_volume(dac_level - DAC_LEVEL_MAX);
}
save_value(dac_vol_path, (unsigned char)dac_level); save_value(dac_vol_path, (unsigned char)dac_level);
// 更新DAC音量指示LED // 更新DAC音量指示LED
new_led_count = dac_gain_to_led[dac_level]; new_led_count = dac_gain_to_led[dac_level];
@@ -1764,12 +1874,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if (g_request_monitor_switch_set) { if (g_request_monitor_switch_set) {
g_request_monitor_switch_set = 0; g_request_monitor_switch_set = 0;
unsigned new_mon = g_monitor_switch; unsigned new_mon = g_monitor_switch;
// 根据当前mic状态和新的耳返开关值更新reg 0x30 // 同步数字监听开关到tile1
if (new_mon && !flag_mic_mute && codec_adc_pga_gain_reg_value >= 2) { cc_mic_level <: 0xFE;
unsafe { NAU88C22_REGWRITE(0x0030, 0xff00, (client interface i2c_master_if)i_i2c_client); } cc_mic_level <: (unsigned)new_mon;
} else { debug_printf("HID monitor sync: sw=%d\n", new_mon);
unsafe { NAU88C22_REGWRITE(0x0030, 0x0000, (client interface i2c_master_if)i_i2c_client); }
}
save_value(monitor_sw_path, (unsigned char)new_mon); save_value(monitor_sw_path, (unsigned char)new_mon);
debug_printf("HID SET_MONITOR_SWITCH: %d\n", new_mon); debug_printf("HID SET_MONITOR_SWITCH: %d\n", new_mon);
} }
@@ -2018,6 +2126,8 @@ void mute_handler(chanend c_mic_det)
unsigned mic1_in = (det_val >> 1) & 1; // bit1: 1=inserted unsigned mic1_in = (det_val >> 1) & 1; // bit1: 1=inserted
unsigned mic2_in = ((det_val >> 2) & 1) ^ 1; // bit2: 0=inserted, invert unsigned mic2_in = ((det_val >> 2) & 1) ^ 1; // bit2: 0=inserted, invert
unsigned any_mic_in = mic1_in || mic2_in; unsigned any_mic_in = mic1_in || mic2_in;
unsigned prev_mic1_in = mic1_in;
unsigned prev_mic2_in = mic2_in;
unsigned prev_any_mic_in = any_mic_in; unsigned prev_any_mic_in = any_mic_in;
// 如果开机时全拔出发送mute // 如果开机时全拔出发送mute
@@ -2042,13 +2152,28 @@ void mute_handler(chanend c_mic_det)
mic2_in = ((det_val >> 2) & 1) ^ 1; mic2_in = ((det_val >> 2) & 1) ^ 1;
any_mic_in = mic1_in || mic2_in; any_mic_in = mic1_in || mic2_in;
if (any_mic_in != prev_any_mic_in) { // 检测单个mic插拔事件
// 状态变化立即mute防止pop音 unsigned mic1_changed = (mic1_in != prev_mic1_in);
unsigned mic2_changed = (mic2_in != prev_mic2_in);
unsigned any_changed = mic1_changed || mic2_changed;
if (any_changed) {
// 状态变化立即mute mic和DAC防止pop音
p_ctl_mute <: 0;
c_mic_det <: (unsigned)MIC_DET_MUTE; c_mic_det <: (unsigned)MIC_DET_MUTE;
debug_printf("mic det change: mic1=%d mic2=%d -> mute\n", mic1_in, mic2_in); // 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 -> mute all & reconfig\n", mic1_in, mic2_in);
p_ctl_det :> det_val;
// 等1s让插拔稳定 // 等1s让插拔稳定
delay_milliseconds(1000); delay_milliseconds(900);
p_ctl_mute <: 0xf;
// 重新读取稳定状态 // 重新读取稳定状态
p_ctl_det :> det_val; p_ctl_det :> det_val;
@@ -2056,13 +2181,18 @@ void mute_handler(chanend c_mic_det)
mic2_in = ((det_val >> 2) & 1) ^ 1; mic2_in = ((det_val >> 2) & 1) ^ 1;
any_mic_in = mic1_in || mic2_in; any_mic_in = mic1_in || mic2_in;
if (any_mic_in) { // 恢复DAC状态
// 有mic插入恢复音量 c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE;
c_mic_det <: (unsigned)MIC_DET_UNMUTE;
debug_printf("mic stable inserted -> unmute\n");
}
// 全拔出则保持mute不发UNMUTE
if (any_mic_in) {
// 有mic插入恢复mic音量状态
c_mic_det <: (unsigned)MIC_DET_UNMUTE;
debug_printf("mic stable -> unmute\n");
}
// 全拔出则保持mic mute
prev_mic1_in = mic1_in;
prev_mic2_in = mic2_in;
prev_any_mic_in = any_mic_in; prev_any_mic_in = any_mic_in;
// 重新同步timer // 重新同步timer

View File

@@ -14,7 +14,7 @@
#if HID_DFU_EN #if HID_DFU_EN
#ifndef DFU_FLASH_MAX_UPGRADE_SIZE #ifndef DFU_FLASH_MAX_UPGRADE_SIZE
#define DFU_FLASH_MAX_UPGRADE_SIZE (1600 * 1024) #define DFU_FLASH_MAX_UPGRADE_SIZE (2200 * 1024)
#endif #endif
#define DFU_FLASH_ERROR() #define DFU_FLASH_ERROR()

View File

@@ -16,12 +16,17 @@
#if DNR_ENABLE == 1 #if DNR_ENABLE == 1
unsigned g_dsp_eof = 0; unsigned g_dsp_eof = 0;
extern float g_dnr_level;
void dnr_exchange_buffer(int32_t *data) { void dnr_exchange_buffer(int32_t *data) {
static unsigned buff_index = 0; static unsigned buff_index = 0;
write_to_sample_in_buf(data[1], buff_index, 0); int dnr_level = (int)g_dnr_level;
read_from_sample_out_buf(&data[1],buff_index, 0); 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]; data[0] = data[1];
buff_index++; buff_index++;
#if DNR_11MS #if DNR_11MS
if (buff_index == 128) if (buff_index == 128)

View File

@@ -67,6 +67,9 @@ unsigned g_dnr_on_off_t1 = DNR_OFF; // Default DNR off
#define MUTE_OFF 0 #define MUTE_OFF 0
unsigned g_mute_on_off_t1 = MUTE_ON; 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_mute_on_off_t0 = MUTE_OFF;
unsigned g_game_mode = 0; unsigned g_game_mode = 0;
@@ -84,12 +87,21 @@ chanend_t uc_dsp_to_dnr_t1;
//chanend_t uc_dsp_to_dnr_t0; //chanend_t uc_dsp_to_dnr_t0;
chanend_t uc_key_to_ubm_t0; chanend_t uc_key_to_ubm_t0;
volatile EXTERN DS_BOOL m_hThread; volatile EXTERN DS_BOOL m_hThread;
extern unsigned g_dnr_init_flag;
void SetEqDataChan (chanend_t c) { void SetEqDataChan (chanend_t c) {
uc_eq_data = c; uc_eq_data = c;
} }
void key_receiver(chanend_t c) void key_receiver(chanend_t c)
{ {
debug_printf("===> key_receiver\n"); debug_printf("===> key_receiver\n");
#if DNR_ENABLE
unsigned dnr_init_flag = 0;
while (dnr_init_flag == 0) {
GET_SHARED_GLOBAL(dnr_init_flag, g_dnr_init_flag);
asm("nop");
}
#endif
// tile0 // tile0
// load the license key // load the license key
// This function must be called before audio_ex3d_activate_key. // This function must be called before audio_ex3d_activate_key.
@@ -135,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 void buffer_exchange(chanend_t c_data, unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[], unsigned sample_freq);
extern unsigned int is_eq_disabled(void); extern unsigned int is_eq_disabled(void);
extern unsigned int g_eq_enable; extern unsigned int g_eq_enable;
void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[]) void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudioToUsb[])
{ {
uint32_t is_3d; uint32_t is_3d;
uint32_t is_dnr; unsigned is_monitor;
uint32_t is_mute;
#if UAC1_MODE #if UAC1_MODE
return; return;
#endif #endif
@@ -151,8 +163,6 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#endif #endif
GET_SHARED_GLOBAL(is_3d, g_3d_on_off_t1); 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) #if (HID_CONTROLS > 0)
AUDIO_T absVal, maxVal; AUDIO_T absVal, maxVal;
#endif #endif
@@ -243,6 +253,11 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
#elif DNR_ENABLE == 1 #elif DNR_ENABLE == 1
buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq); buffer_exchange(uc_eq_data, sampsFromUsbToAudio, sampsFromAudioToUsb, ubm_sample_freq);
#endif #endif
GET_SHARED_GLOBAL(is_monitor, g_monitor_switch_t1);
if (is_monitor) {
sampsFromUsbToAudio[0] += (sampsFromAudioToUsb[0]);
sampsFromUsbToAudio[1] += (sampsFromAudioToUsb[1]);
}
} }
@@ -499,10 +514,10 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
// if (cur_mode == IR_MUSIC) { // if (cur_mode == IR_MUSIC) {
// sfIdxName = spatial_music; // sfIdxName = spatial_music;
// } else { // } else {
// sfIdxName = spatial_movie; // sfIdxName = spatial_movie;
// } // }
// } // }
#else #else
const char * sfIdxName = "EXTREME"; const char * sfIdxName = "EXTREME";
#endif #endif
int32_t NameLen = strlen(sfIdxName); int32_t NameLen = strlen(sfIdxName);
@@ -868,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); tmp = chan_in_word(cc_mic_level);
debug_printf("event_mic_vol received: 0x%02X\n", tmp); debug_printf("event_mic_vol received: 0x%02X\n", tmp);
#if USE_EX3D == 1
if (tmp == 0xFC) { if (tmp == 0xFC) {
// 音频模式命令:来自 audiohw.xc button_task 的模式切换 // 音频模式命令:来自 audiohw.xc button_task 的模式切换
// 必须先读取payload无论是否启用EX3D
current_mode_local = chan_in_word(cc_mic_level); current_mode_local = chan_in_word(cc_mic_level);
if (current_mode_local > 3) current_mode_local = 0; if (current_mode_local > 3) current_mode_local = 0;
debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local); debug_printf("hid_button_task received audio_mode: %d\n", current_mode_local);
#if USE_EX3D == 1
if (current_mode_local == 0) { if (current_mode_local == 0) {
// 无音效模式关闭EX3D和EQ算法 // 无音效模式关闭EX3D和EQ算法
audio_ex3d_set_onoff(0); audio_ex3d_set_onoff(0);
@@ -888,7 +903,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
} else if (current_mode_local == 1) { } else if (current_mode_local == 1) {
// 音乐模式EX3D关闭EQ开启 // 音乐模式EX3D关闭EQ开启
audio_ex3d_set_onoff(0); audio_ex3d_set_onoff(0);
g_eq_enable = 1; //g_eq_enable = 1;
#if IR_SWITCHING_MODE #if IR_SWITCHING_MODE
is_3d_on = IR_OFF; is_3d_on = IR_OFF;
#else #else
@@ -896,8 +911,15 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
#endif #endif
debug_printf("Mode 1: MUSIC, EQ ON, EX3D OFF\n"); debug_printf("Mode 1: MUSIC, EQ ON, EX3D OFF\n");
} else if (current_mode_local == 2) { } else if (current_mode_local == 2) {
#if (F6_F7_FPS_UAC1 == 1)
// UAC1 Game模式: EX3D关闭, EQ开启, IR_OFF
//g_eq_enable = 1;
audio_ex3d_set_onoff(0);
is_3d_on = IR_OFF;
debug_printf("Mode 2: UAC1 GAME, EQ ON, EX3D OFF (IR_OFF)\n");
#else
// 游戏模式 (IR_GAME, stereo): SF index 0EQ开启 // 游戏模式 (IR_GAME, stereo): SF index 0EQ开启
g_eq_enable = 1; //g_eq_enable = 1;
#if IR_SWITCHING_MODE #if IR_SWITCHING_MODE
audio_ex3d_set_sf(0); // SF 0 = STEREO GAME audio_ex3d_set_sf(0); // SF 0 = STEREO GAME
is_3d_on = IR_GAME; is_3d_on = IR_GAME;
@@ -906,7 +928,16 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
#endif #endif
audio_ex3d_set_onoff(1); audio_ex3d_set_onoff(1);
debug_printf("Mode 2: GAME (IR_GAME) ON, sf=0, EQ ON\n"); debug_printf("Mode 2: GAME (IR_GAME) ON, sf=0, EQ ON\n");
#endif
} else if (current_mode_local == 3) { } else if (current_mode_local == 3) {
#if (F6_F7_FPS_UAC1 == 1)
// UAC1 AI71模式: EX3D开启, SF index 0 (stereo game), EQ开启, IR_GAME
//g_eq_enable = 1;
audio_ex3d_set_sf(0); // SF 0 = STEREO GAME
is_3d_on = IR_GAME;
audio_ex3d_set_onoff(1);
debug_printf("Mode 3: UAC1 AI71 (IR_GAME) ON, sf=0, EQ ON\n");
#else
// AI7.1模式 (IR_7_1_GAME, 7.1): SF index 1EQ开启 // AI7.1模式 (IR_7_1_GAME, 7.1): SF index 1EQ开启
g_eq_enable = 1; g_eq_enable = 1;
#if IR_SWITCHING_MODE #if IR_SWITCHING_MODE
@@ -917,18 +948,28 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
#endif #endif
audio_ex3d_set_onoff(1); audio_ex3d_set_onoff(1);
debug_printf("Mode 3: AI7.1 (IR_7_1_GAME) ON, sf=1, EQ ON\n"); debug_printf("Mode 3: AI7.1 (IR_7_1_GAME) ON, sf=1, EQ ON\n");
#endif
} }
SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on); SET_SHARED_GLOBAL(g_3d_on_off_t1, is_3d_on);
#endif
} else if (tmp == 0xFD) { } else if (tmp == 0xFD) {
// 脚步增强按键发来的 expand gain 命令 // 脚步增强按键发来的 expand gain 命令
// 必须先读取payload无论是否启用EX3D
int32_t gain = (int32_t)chan_in_word(cc_mic_level); int32_t gain = (int32_t)chan_in_word(cc_mic_level);
#if USE_EX3D == 1
if ((0 <= gain) && (gain <= 20)) { if ((0 <= gain) && (gain <= 20)) {
Ex3dExpandGain = gain; Ex3dExpandGain = gain;
EX3DAudio_SetExpandGain(Ex3dExpandGain); EX3DAudio_SetExpandGain(Ex3dExpandGain);
debug_printf("Button set CMD_EXPAND_GAIN: %d\n", gain); 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 { } else {
// Mic 静音状态命令 // Mic 静音状态命令(所有模式都需要处理)
switch (tmp) { switch (tmp) {
case MUTED_MIC: case MUTED_MIC:
SET_SHARED_GLOBAL(g_mute_on_off_t1, MUTE_ON); SET_SHARED_GLOBAL(g_mute_on_off_t1, MUTE_ON);
@@ -945,7 +986,6 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
break; break;
} }
} }
#endif
} }
continue; continue;
@@ -1367,4 +1407,4 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
return 0; return 0;
} }
#endif #endif

View File

@@ -36,6 +36,8 @@ extern uint32_t get_reference_time(void);
extern void update_eq_post_gain(void); extern void update_eq_post_gain(void);
extern unsigned int g_eq_sample_rate; extern unsigned int g_eq_sample_rate;
extern unsigned g_windows_detect_done; extern unsigned g_windows_detect_done;
extern unsigned g_dnr_init_flag;
extern unsigned g_ex3d_key_verified;
#pragma unsafe arrays #pragma unsafe arrays
void dsp_core0(void) void dsp_core0(void)
@@ -55,11 +57,31 @@ void dsp_core0(void)
// EQ Flash存储初始化标志 // EQ Flash存储初始化标志
delay_milliseconds(300); delay_milliseconds(300);
unsigned windows_detect_done; unsigned windows_detect_done, dnr_init_flag, ex3d_key_verified;
GET_SHARED_GLOBAL(windows_detect_done, g_windows_detect_done); GET_SHARED_GLOBAL(windows_detect_done, g_windows_detect_done);
while (windows_detect_done == 0) { #if DNR_ENABLE
GET_SHARED_GLOBAL(dnr_init_flag, g_dnr_init_flag);
#endif
#if USE_EX3D
GET_SHARED_GLOBAL(ex3d_key_verified, g_ex3d_key_verified);
#endif
while ((windows_detect_done == 0)
#if DNR_ENABLE
|| (dnr_init_flag == 0)
#endif
#if USE_EX3D
|| (ex3d_key_verified == 0)
#endif
) {
asm("nop"); asm("nop");
GET_SHARED_GLOBAL(windows_detect_done, g_windows_detect_done); GET_SHARED_GLOBAL(windows_detect_done, g_windows_detect_done);
#if DNR_ENABLE
GET_SHARED_GLOBAL(dnr_init_flag, g_dnr_init_flag);
#endif
#if USE_EX3D
GET_SHARED_GLOBAL(ex3d_key_verified, g_ex3d_key_verified);
#endif
} }
#if EQ_EN #if EQ_EN

View File

@@ -13,7 +13,7 @@ swlock_t lfs_lock = SWLOCK_INITIAL_VALUE;
static rtos_qspi_flash_t qspi_flash_ctx_s; static rtos_qspi_flash_t qspi_flash_ctx_s;
#define FLASH_CLKBLK XS1_CLKBLK_3 #define FLASH_CLKBLK XS1_CLKBLK_3
#ifndef FS_BASE_ADDR #ifndef FS_BASE_ADDR
#define FS_BASE_ADDR 0x1a0000 #define FS_BASE_ADDR (2500 * 1024)
#endif #endif
#define SECTOR_SIZE 4096 #define SECTOR_SIZE 4096
rtos_qspi_flash_t *qspi_flash_ctx = &qspi_flash_ctx_s; rtos_qspi_flash_t *qspi_flash_ctx = &qspi_flash_ctx_s;

View File

@@ -571,6 +571,7 @@ int main()
unsafe { unsafe {
SetEqDataChan(c_eq_data); SetEqDataChan(c_eq_data);
delay_milliseconds(200);
key_sender(c_key); key_sender(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];