Compare commits
9 Commits
nsync_6ch_
...
f6e4dd55ab
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6e4dd55ab | ||
|
|
961615b0f0 | ||
|
|
42b7f4e7ce | ||
|
|
50a722b96a | ||
|
|
85fce4673b | ||
|
|
05a5ac80ef | ||
|
|
3880b56108 | ||
|
|
01360b1650 | ||
|
|
4b4a76d7b0 |
@@ -23,7 +23,7 @@
|
||||
*/
|
||||
#ifndef FLASH_MAX_UPGRADE_SIZE
|
||||
//#define FLASH_MAX_UPGRADE_SIZE (512 * 1024)
|
||||
#define FLASH_MAX_UPGRADE_SIZE (0x1a0000)
|
||||
#define FLASH_MAX_UPGRADE_SIZE (2200 * 1024)
|
||||
#endif
|
||||
|
||||
#define FLASH_ERROR() do {} while(0)
|
||||
|
||||
@@ -38,7 +38,7 @@ endif()
|
||||
# Firmware version (maps to BCD_DEVICE_J.M.N in USB descriptor)
|
||||
set(FW_VER_J 1)
|
||||
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(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
|
||||
#-DUSE_EX3D
|
||||
-DMIXER=0
|
||||
#-ldnr_50ms
|
||||
#-DDNR_ENABLE=1
|
||||
-ldnr_50ms
|
||||
-DDNR_ENABLE=1
|
||||
#-llib_ex3d_all
|
||||
-DEQ_EN=1
|
||||
-DEX3D_SF_NUM=3
|
||||
-DNUM_USB_CHAN_OUT=8
|
||||
-DNUM_USB_CHAN_OUT_FS=2
|
||||
-DNUM_USB_CHAN_IN=2
|
||||
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_OUTPUT_2_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_OUTPUT_3_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_INPUT_2_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_INPUT_3_RESOLUTION_BITS=16
|
||||
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24
|
||||
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24
|
||||
-DINPUT_FORMAT_COUNT=1
|
||||
-DOUTPUT_FORMAT_COUNT=1
|
||||
#-DNUM_EX3D_CHAN_OUT=2
|
||||
-DMIN_VOLUME=0xE000
|
||||
-DINPUT_VOLUME_CONTROL=0
|
||||
-DOUTPUT_VOLUME_CONTROL=0
|
||||
-DDEBUG_MEMORY_LOG_ENABLED=1
|
||||
#-DDEBUG_MEMORY_LOG_ENABLED=1
|
||||
-DXUA_DFU_EN=0
|
||||
-DHID_CONTROLS_UAC1=1
|
||||
#-DIR_SWITCHING_MODE
|
||||
@@ -131,9 +129,10 @@ set(APP_COMPILER_FLAGS_fact ${SW_USB_FACT_FLAGS} -DI2S_CHANS_DAC=2
|
||||
-DINPUT_VOLUME_CONTROL=0
|
||||
-DOUTPUT_VOLUME_CONTROL=0
|
||||
-DDEBUG_MEMORY_LOG_ENABLED=1
|
||||
-DHID_DFU_EN=1
|
||||
-DXUA_DFU_EN=1
|
||||
#-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
|
||||
-DIR_SWITCHING_MODE
|
||||
-DHID_CONTROLS=1)
|
||||
|
||||
set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
|
||||
-DI2S_CHANS_ADC=2
|
||||
-DAUDIO_CLASS=1
|
||||
-DMIN_FREQ=48000
|
||||
-DMAX_FREQ=48000
|
||||
-DMCLK_441=512*44100
|
||||
-DMCLK_48=512*48000
|
||||
-DUAC1_MODE=1
|
||||
-DUSE_EX3D=1
|
||||
-DF6_F7_FPS_UAC1=1
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -215,6 +215,32 @@
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
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 \
|
||||
{ \
|
||||
@@ -226,7 +252,7 @@
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0x5E8016, /* device id */ \
|
||||
0x5E4016, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
@@ -469,7 +495,7 @@
|
||||
|
||||
// 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
|
||||
#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"
|
||||
|
||||
|
||||
@@ -108,8 +108,10 @@ unsigned g_new_dac_mode = 0;
|
||||
unsigned g_samfreq = 48000;
|
||||
unsigned g_dsd_mode = 0;
|
||||
// mic detect events: mute_handler (tile[1]) → button_task (tile[0])
|
||||
#define MIC_DET_MUTE 1 // mic插入或全拔出,立即mute
|
||||
#define MIC_DET_UNMUTE 2 // 插入1s后恢复音量
|
||||
#define MIC_DET_MUTE 1 // mic插入或全拔出,立即mute mic
|
||||
#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])
|
||||
#if HID_DFU_EN
|
||||
@@ -403,6 +405,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
unsigned flag_mic_mute = 0;
|
||||
unsigned flag_hp_mute = 0;
|
||||
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_hp_mute_state_old = 1; // Active low
|
||||
@@ -437,6 +440,22 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
unsigned char hp_mute_path[] = "hp_mute";
|
||||
unsigned char monitor_sw_path[] = "monitor_sw";
|
||||
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);
|
||||
saved_mode = load_value(path);
|
||||
@@ -475,11 +494,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
else
|
||||
{
|
||||
#if F5_MUSIC_UAC1
|
||||
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);
|
||||
device_reboot();
|
||||
while (1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -489,8 +516,10 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
if (saved_mode == 255) {
|
||||
#if defined(F5_MUSIC_UAC1)
|
||||
saved_mode = 1; // f5: default music mode
|
||||
#elif defined(F6_F7_FPS_UAC1)
|
||||
saved_mode = 2; // f6/f7: default game mode
|
||||
#else
|
||||
saved_mode = 1; // f6/f7: default off
|
||||
saved_mode = 1; // default off
|
||||
#endif
|
||||
save_value(path, saved_mode);
|
||||
debug_printf("Saved game_mode to flash: %d\n", saved_mode);
|
||||
@@ -963,6 +992,18 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
mic_volume(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;
|
||||
}
|
||||
@@ -1090,6 +1131,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
active_mode = 1;
|
||||
need_reboot = 1;
|
||||
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
|
||||
active_mode = (active_mode == 1) ? 0 : 1;
|
||||
mode_btn_change = 1;
|
||||
@@ -1107,6 +1161,19 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
active_mode = 2;
|
||||
need_reboot = 1;
|
||||
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
|
||||
active_mode = (active_mode == 2) ? 0 : 2;
|
||||
mode_btn_change = 1;
|
||||
@@ -1129,8 +1196,20 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
active_mode = 3;
|
||||
need_reboot = 1;
|
||||
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
|
||||
|
||||
// FPS firmware: switch algorithm locally (toggle off or activate)
|
||||
active_mode = (active_mode == 3) ? 0 : 3;
|
||||
mode_btn_change = 1;
|
||||
@@ -1164,6 +1243,26 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
active_mode = target;
|
||||
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
|
||||
active_mode = target;
|
||||
mode_btn_change = 1;
|
||||
@@ -1562,7 +1661,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
// 增加音量
|
||||
++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);
|
||||
|
||||
uint8_t new_led_count = dac_gain_to_led[dac_level];
|
||||
@@ -1581,10 +1681,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
// 减小音量
|
||||
--dac_level;
|
||||
g_volume_level = dac_level;
|
||||
if(dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
if (!dac_det_muted) {
|
||||
if(dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
}
|
||||
save_value(dac_vol_path, dac_level);
|
||||
|
||||
uint8_t new_led_count = dac_gain_to_led[dac_level];
|
||||
@@ -1656,10 +1758,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
}
|
||||
else
|
||||
{
|
||||
if(dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
if (!dac_det_muted) {
|
||||
if(dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
}
|
||||
g_volume_level = dac_level;
|
||||
hp_mute_blink_tick = 0;
|
||||
for(int i = 0; i < 15; i++)
|
||||
@@ -1712,10 +1816,12 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
|
||||
if (new_level <= DAC_LEVEL_MAX) {
|
||||
uint8_t new_led_count;
|
||||
dac_level = new_level;
|
||||
if (dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
if (!dac_det_muted) {
|
||||
if (dac_level == DAC_LEVEL_MIN)
|
||||
unsafe { NAU88C22_REGWRITE(0x0034, 0x0000, (client interface i2c_master_if)i_i2c_client); }
|
||||
else
|
||||
dac_volume(dac_level - DAC_LEVEL_MAX);
|
||||
}
|
||||
save_value(dac_vol_path, (unsigned char)dac_level);
|
||||
// 更新DAC音量指示LED
|
||||
new_led_count = dac_gain_to_led[dac_level];
|
||||
@@ -2018,6 +2124,8 @@ void mute_handler(chanend c_mic_det)
|
||||
unsigned mic1_in = (det_val >> 1) & 1; // bit1: 1=inserted
|
||||
unsigned mic2_in = ((det_val >> 2) & 1) ^ 1; // bit2: 0=inserted, invert
|
||||
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;
|
||||
|
||||
// 如果开机时全拔出,发送mute
|
||||
@@ -2042,10 +2150,22 @@ void mute_handler(chanend c_mic_det)
|
||||
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
||||
any_mic_in = mic1_in || mic2_in;
|
||||
|
||||
if (any_mic_in != prev_any_mic_in) {
|
||||
// 状态变化:立即mute防止pop音
|
||||
// 检测单个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;
|
||||
|
||||
if (state_changed) {
|
||||
// 状态变化:立即mute mic防止pop音
|
||||
c_mic_det <: (unsigned)MIC_DET_MUTE;
|
||||
debug_printf("mic det change: mic1=%d mic2=%d -> mute\n", mic1_in, mic2_in);
|
||||
|
||||
// 如果有mic插入,同时mute DAC防pop
|
||||
if (any_inserted) {
|
||||
c_mic_det <: (unsigned)MIC_DET_DAC_MUTE;
|
||||
}
|
||||
|
||||
debug_printf("mic det change: mic1=%d mic2=%d inserted=%d -> mute\n", mic1_in, mic2_in, any_inserted);
|
||||
|
||||
// 等1s让插拔稳定
|
||||
delay_milliseconds(1000);
|
||||
@@ -2056,13 +2176,20 @@ 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;
|
||||
}
|
||||
|
||||
if (any_mic_in) {
|
||||
// 有mic插入,恢复音量
|
||||
// 有mic插入,恢复mic音量
|
||||
c_mic_det <: (unsigned)MIC_DET_UNMUTE;
|
||||
debug_printf("mic stable inserted -> unmute\n");
|
||||
}
|
||||
// 全拔出则保持mute,不发UNMUTE
|
||||
// 全拔出则保持mic mute,不发UNMUTE
|
||||
|
||||
prev_mic1_in = mic1_in;
|
||||
prev_mic2_in = mic2_in;
|
||||
prev_any_mic_in = any_mic_in;
|
||||
|
||||
// 重新同步timer
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#if HID_DFU_EN
|
||||
|
||||
#ifndef DFU_FLASH_MAX_UPGRADE_SIZE
|
||||
#define DFU_FLASH_MAX_UPGRADE_SIZE (1600 * 1024)
|
||||
#define DFU_FLASH_MAX_UPGRADE_SIZE (2200 * 1024)
|
||||
#endif
|
||||
|
||||
#define DFU_FLASH_ERROR()
|
||||
|
||||
@@ -84,12 +84,21 @@ chanend_t uc_dsp_to_dnr_t1;
|
||||
//chanend_t uc_dsp_to_dnr_t0;
|
||||
chanend_t uc_key_to_ubm_t0;
|
||||
volatile EXTERN DS_BOOL m_hThread;
|
||||
extern unsigned g_dnr_init_flag;
|
||||
void SetEqDataChan (chanend_t c) {
|
||||
uc_eq_data = c;
|
||||
}
|
||||
void key_receiver(chanend_t c)
|
||||
{
|
||||
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
|
||||
// load the license key
|
||||
// This function must be called before audio_ex3d_activate_key.
|
||||
@@ -499,10 +508,10 @@ void hid_receive_task_in_c(unsigned char * RcvData, unsigned * SendData)
|
||||
// if (cur_mode == IR_MUSIC) {
|
||||
// sfIdxName = spatial_music;
|
||||
// } else {
|
||||
// sfIdxName = spatial_movie;
|
||||
// sfIdxName = spatial_movie;
|
||||
// }
|
||||
// }
|
||||
#else
|
||||
#else
|
||||
const char * sfIdxName = "EXTREME";
|
||||
#endif
|
||||
int32_t NameLen = strlen(sfIdxName);
|
||||
@@ -888,7 +897,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
} else if (current_mode_local == 1) {
|
||||
// 音乐模式:EX3D关闭,EQ开启
|
||||
audio_ex3d_set_onoff(0);
|
||||
g_eq_enable = 1;
|
||||
//g_eq_enable = 1;
|
||||
#if IR_SWITCHING_MODE
|
||||
is_3d_on = IR_OFF;
|
||||
#else
|
||||
@@ -896,8 +905,15 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
#endif
|
||||
debug_printf("Mode 1: MUSIC, EQ ON, EX3D OFF\n");
|
||||
} 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 0,EQ开启
|
||||
g_eq_enable = 1;
|
||||
//g_eq_enable = 1;
|
||||
#if IR_SWITCHING_MODE
|
||||
audio_ex3d_set_sf(0); // SF 0 = STEREO GAME
|
||||
is_3d_on = IR_GAME;
|
||||
@@ -906,7 +922,16 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
#endif
|
||||
audio_ex3d_set_onoff(1);
|
||||
debug_printf("Mode 2: GAME (IR_GAME) ON, sf=0, EQ ON\n");
|
||||
#endif
|
||||
} 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 1,EQ开启
|
||||
g_eq_enable = 1;
|
||||
#if IR_SWITCHING_MODE
|
||||
@@ -917,6 +942,7 @@ void hid_button_task(chanend_t cc_mic_level, chanend_t c_hidRcvData, chanend_t c
|
||||
#endif
|
||||
audio_ex3d_set_onoff(1);
|
||||
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);
|
||||
} else if (tmp == 0xFD) {
|
||||
@@ -1367,4 +1393,4 @@ int dsp_worker_tile(chanend_t c_dsp_to_ex3d, int worker_id){
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -36,6 +36,8 @@ extern uint32_t get_reference_time(void);
|
||||
extern void update_eq_post_gain(void);
|
||||
extern unsigned int g_eq_sample_rate;
|
||||
extern unsigned g_windows_detect_done;
|
||||
extern unsigned g_dnr_init_flag;
|
||||
extern unsigned g_ex3d_key_verified;
|
||||
|
||||
#pragma unsafe arrays
|
||||
void dsp_core0(void)
|
||||
@@ -55,11 +57,31 @@ void dsp_core0(void)
|
||||
// EQ Flash存储初始化标志
|
||||
|
||||
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);
|
||||
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");
|
||||
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
|
||||
|
||||
@@ -13,7 +13,7 @@ swlock_t lfs_lock = SWLOCK_INITIAL_VALUE;
|
||||
static rtos_qspi_flash_t qspi_flash_ctx_s;
|
||||
#define FLASH_CLKBLK XS1_CLKBLK_3
|
||||
#ifndef FS_BASE_ADDR
|
||||
#define FS_BASE_ADDR 0x1a0000
|
||||
#define FS_BASE_ADDR (2500 * 1024)
|
||||
#endif
|
||||
#define SECTOR_SIZE 4096
|
||||
rtos_qspi_flash_t *qspi_flash_ctx = &qspi_flash_ctx_s;
|
||||
|
||||
@@ -571,6 +571,7 @@ int main()
|
||||
|
||||
unsafe {
|
||||
SetEqDataChan(c_eq_data);
|
||||
delay_milliseconds(200);
|
||||
key_sender(c_key);
|
||||
for (int i = 0; i < DSP_WORKER_COUNT; i++)
|
||||
uc_dsp_to_ex3d[i] = (chanend)c_dsp_to_ex3d[i];
|
||||
|
||||
Reference in New Issue
Block a user