From 05a5ac80ef27b1420daa810648e449bbe86c011a Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Thu, 9 Apr 2026 18:57:24 +0800 Subject: [PATCH] add more flash protect for key verification --- .../src/extensions/audiohw.xc | 16 ++++++++++++ .../src/extensions/dsp.c | 6 +++++ .../src/extensions/dsp_core0.xc | 26 +++++++++++++++++-- .../src/extensions/main.xc | 1 + 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc index d89f366..248e797 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc @@ -431,6 +431,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); diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c index db9e6bc..c66b0e7 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp.c @@ -84,12 +84,18 @@ 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 + while (g_dnr_init_flag == 0) { + asm("nop"); + } +#endif // tile0 // load the license key // This function must be called before audio_ex3d_activate_key. diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc index c0674e6..8cedc5b 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/dsp_core0.xc @@ -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 diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc index e84c073..50cf2a5 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/main.xc @@ -570,6 +570,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];