Переглянути джерело

完成大致的基本功能,硬件跑通

caihoucong 1 місяць тому
батько
коміт
6967758f53
59 змінених файлів з 2027 додано та 739 видалено
  1. 15 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_audio.c
  2. 3 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_audio.h
  3. 36 1
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_fmrx.c
  4. 4 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_fmrx.h
  5. 5 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_i2c.c
  6. 24 2
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_key.c
  7. 81 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_sys.c
  8. 1 0
      sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_sys.h
  9. 11 1
      sdk_560x_01x_s2256_20241227/app/platform/bsp/hlw_bt.c
  10. 13 1
      sdk_560x_01x_s2256_20241227/app/platform/functions/func.c
  11. 65 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_fmrx.c
  12. 4 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_hlw.c
  13. 8 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_hlw.h
  14. 75 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_idle.c
  15. 3 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_lowpwr.c
  16. 579 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_qn8035.c
  17. 151 0
      sdk_560x_01x_s2256_20241227/app/platform/functions/func_qn8035.h
  18. 1 1
      sdk_560x_01x_s2256_20241227/app/platform/header/config_extra.h
  19. 7 7
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/Settings/Boombox.setting
  20. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.bin
  21. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.dcf
  22. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.rv32
  23. 544 556
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/map.txt
  24. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/res.bin
  25. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/res/poweron.mp3
  26. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_audio.o
  27. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_charge.o
  28. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_fmrx.o
  29. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_i2c.o
  30. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_key.o
  31. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_led.o
  32. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_music.o
  33. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_sys.o
  34. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func.o
  35. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_bt.o
  36. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_fmrx.o
  37. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_hlw.o
  38. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_idle.o
  39. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_lowpwr.o
  40. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_music.o
  41. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_qn8035.o
  42. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/config.o
  43. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/display/ledseg/display_ledseg.o
  44. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_clock.o
  45. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_fmrx.o
  46. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_idle.o
  47. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/plugin/plugin.o
  48. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/port/port_key.o
  49. BIN
      sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/port/port_led.o
  50. 4 0
      sdk_560x_01x_s2256_20241227/app/projects/standard/app.cbp
  51. 36 25
      sdk_560x_01x_s2256_20241227/app/projects/standard/app.depend
  52. 270 125
      sdk_560x_01x_s2256_20241227/app/projects/standard/app.layout
  53. 24 13
      sdk_560x_01x_s2256_20241227/app/projects/standard/config.h
  54. 8 0
      sdk_560x_01x_s2256_20241227/app/projects/standard/display/ledseg/display_ledseg.c
  55. 1 0
      sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_bt.c
  56. 5 1
      sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_clock.c
  57. 44 1
      sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_fmrx.c
  58. 1 1
      sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_idle.c
  59. 4 4
      sdk_560x_01x_s2256_20241227/app/projects/standard/port/port_key.c

+ 15 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_audio.c

@@ -46,6 +46,10 @@ void tom_cat_sdadc_process(u8 *ptr, u32 samples, int ch_mode);
     #define karaok_sdadc_callback   sdadc_dummy
 #endif
 
+#if FMRX_QN8035_EN
+#define fmrx_sdadc_callback     fmrx_sdadc_process
+#endif // FMRX_QN8035_EN
+
 
 //AUX analog gain -42DB~+3DB
 //MIC analog gain: 0~13(共14级), step 3DB (3db ~ +42db)
@@ -59,6 +63,9 @@ const sdadc_cfg_t rec_cfg_tbl[] = {
     {MIC_CHANNEL_CFG,   SPR_44100,  (12 << 6),   ADC2SRC_EN,     0,      256,    karaok_sdadc_callback},         /* KARAOK  */
     {MIC_CHANNEL_CFG,   SPR_44100,  (12 << 6),   ADC2DAC_EN,     0,      128,    mic_trim_sdadc_callback},
     {MIC_CHANNEL_CFG,   SPR_16000,  (12 << 6),   ADC2DAC_EN,     0,      256,    tom_cat_sdadc_callback},
+#if FMRX_QN8035_EN
+    {FMRX_CHANNEL_CFG, SPR_44100,   (2 << 6),    ADC2DAC_EN,     0,      256,    fmrx_sdadc_callback},
+#endif // FMRX_QN8035_EN
 };
 
 const u8 btmic_ch_tbl[] = {0, CH_MIC_PF2, CH_MIC_PF3};
@@ -76,6 +83,14 @@ void audio_path_init(u8 path_idx)
     }
 #endif // FUNC_AUX_EN
 
+#if FMRX_QN8035_EN
+    if (path_idx == AUDIO_PATH_FM)
+    {
+        memcpy(&cfg, &rec_cfg_tbl[AUDIO_PATH_FM], sizeof(sdadc_cfg_t));
+        cfg.gain = ((u16)FMRX_AUX_ANL_GAIN << 5);
+    }
+#endif // FMRX_QN8035_EN
+
     if (path_idx == AUDIO_PATH_BTMIC || path_idx == AUDIO_PATH_KARAOK) {
         if (path_idx == AUDIO_PATH_BTMIC) {
             if (sys_cb.hfp_karaok_en) {

+ 3 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_audio.h

@@ -8,6 +8,9 @@
 #define AUDIO_PATH_KARAOK          4
 #define AUDIO_PATH_MICTRIM         5
 #define AUDIO_PATH_TOM_CAT         6
+#if FMRX_QN8035_EN
+#define AUDIO_PATH_FM              7
+#endif // FMRX_QN8035_EN
 
 void audio_path_init(u8 path_idx);
 void audio_path_exit(u8 path_idx);

+ 36 - 1
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_fmrx.c

@@ -4,9 +4,11 @@
 AT(.com_text.fmrx.isr)
 void fmrx_tmr1ms_isr(void)
 {
+#if !FMRX_QN8035_EN
     if (func_cb.sta == FUNC_FMRX) {
         fmrx_dac_sync();
     }
+#endif // FMRX_QN8035_EN
 }
 
 AT(.text.bsp.fmrx)
@@ -173,17 +175,21 @@ u8 fmrx_auto_narrow_filter(void)
 AT(.text.bsp.fmrx)
 void fmrx_threshold_init(void)
 {
+#if FMRX_QN8035_EN
     fmrx_thd.r_val = FMRX_THRESHOLD_VAL;
     fmrx_thd.z_val = FMRX_THRESHOLD_Z;
     fmrx_thd.fz_val = FMRX_THRESHOLD_FZ;
     fmrx_thd.d_val = FMRX_THRESHOLD_D;
+#endif // FMRX_QN8035_EN
 }
 
 AT(.text.bsp.fmrx)
 void bsp_fmrx_init(void)
 {
     printf("%s\n", __func__);
-
+#if FMRX_QN8035_EN
+    qn8035_init();
+#else
     fmrx_power_on(FMRX_THRESHOLD_VAL);
 #if FMRX_REC_EN
     rec_src.spr = SPR_44100;
@@ -198,32 +204,53 @@ void bsp_fmrx_init(void)
     rec_src.source_start = fmrx_rec_start;
     rec_src.source_stop  = fmrx_rec_stop;
 #endif
+#endif // FMRX_QN8035_EN
 }
 
 
 AT(.text.bsp.fmrx)
 void bsp_fmrx_exit(void)
 {
+#if FMRX_QN8035_EN
+    qn8035_off();
+#else
     fmrx_power_off();
+#endif // FMRX_QN8035_EN
+}
+
+AT(.text.bsp.fmrx)
+void bsp_fmrx_set_volume(u8 vol)
+{
+#if FMRX_QN8035_EN
+    qn8035_set_vol(vol);
+#endif
 }
 
 
 AT(.text.bsp.fmrx)
 void bsp_fmrx_set_freq(u16 freq)
 {
+#if FMRX_QN8035_EN
+    qnd8035_set_freq(freq);
+#else
     fmrx_set_freq(freq);
     fmrx_set_audio_channel_dual(FMRX_AUDIO_CHANNEL);  //FFM输出声道选则,一般单声道比双声道噪音会小些  //0 Mono  //1 Dual
     if (xcfg_cb.fmrx_cs_filter_fixed) {
         //若指标测试时发射机调制深度加大,FM收到后有失真,可以继续加大cs_filter值即可减少失真, 但也要留意,cs_filter值越大,理论上引入的噪声越多。
         fmrx_set_cs_filter(xcfg_cb.fmrx_cs_filter_sel);
     }
+#endif // FMRX_QN8035_EN
 }
 
 
 AT(.text.bsp.fmrx)
 u8 bsp_fmrx_check_freq(u16 freq)
 {
+#if FMRX_QN8035_EN
+    return qn8035_seek(freq);
+#else
     return fmrx_check_freq(freq);
+#endif // FMRX_QN8035_EN
 }
 
 AT(.text.bsp.fmrx)
@@ -236,5 +263,13 @@ void bsp_fmrx_logger_out(void)
     fmrx_logger_out();
 }
 
+#if FMRX_QN8035_EN
+AT(.text.bsp.fmrx)
+void fmrx_sdadc_process(u8 *ptr, u32 samples, int ch_mode)
+{
+    sdadc_pcm_2_dac(ptr, samples, ch_mode);
+}
+#endif // FMRX_QN8035_EN
+
 #endif // FUNC_FMRX_EN
 

+ 4 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_fmrx.h

@@ -21,4 +21,8 @@ void fmrx_test_channel_switch(u8 dir);
 #endif
 
 
+#if FMRX_QN8035_EN
+void fmrx_sdadc_process(u8 *ptr, u32 samples, int ch_mode);
+#endif // FMRX_QN8035_EN
+
 #endif // _BSP_FMRX_H

+ 5 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_i2c.c

@@ -1,4 +1,5 @@
 #include "include.h"
+#include "func_hlw.h"
 
 #if I2C_EN
 //AT(.text.bsp.i2c)
@@ -63,6 +64,7 @@ void bsp_i2c_start(void)
         delay_us(5);
     }
 #endif // I2C_MUX_SD_EN
+    hlw_cb.linein_test_en = false;
 
     I2C_SDA_SCL_OUT();
     I2C_SDA_SCL_H();
@@ -82,6 +84,9 @@ void bsp_i2c_stop(void)
     I2C_SCL_H();
     bsp_i2c_delay();
     I2C_SDA_H();
+
+    hlw_cb.linein_test_en = true;
+    I2C_SDA_IN();
 }
 
 //tx 1byte

+ 24 - 2
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_key.c

@@ -1,4 +1,7 @@
 #include "include.h"
+#if HLW_UI
+#include "func_hlw.h"
+#endif // HLW_UI
 
 #define VBG_VOLTAGE          sys_trim.vbg
 
@@ -494,7 +497,7 @@ void power_on_check(void)
     u32 pwron_press_nms;
     u32 rtccon9 = RTCCON9;                          //wakeup pending
 //    u32 rtccon10 = RTCCON10;
-//    printf("power_on_check: %08x, %08x\n", rtccon9, rtccon10);
+    printf("power_on_check: %08x\n", rtccon9);
 
     RTCCON9 = 0x3ff;                                //Clr pending
     RTCCON10 = 0x7ff;                               //Clr pending
@@ -506,7 +509,7 @@ void power_on_check(void)
         }
         return;                                     //长按PWRKEY 10S复位后直接开机。
     }
-
+#if !HLW_UI
     if (rtccon9 & BIT(0)) {
         printf("alarm wakeup\n");
 #if PWR_RC_32K_EN
@@ -521,6 +524,15 @@ void power_on_check(void)
 #endif // PWR_RC_32K_EN
         return;
     }
+#endif // HLW_UI
+
+#if HLW_UI
+    if(rtccon9 & BIT(3))
+    {
+        hlw_cb.charge_poweron_flag = true;
+        return;
+    }
+#endif // HLW_UI
 
 #if USER_PWRKEY
     int up_cnt = 0, ticks = 0;
@@ -539,6 +551,13 @@ void power_on_check(void)
     if (is_powron_frist_enable(rtccon9)) {
         return;
     }
+#if 0
+    if(linein_detect_init_hlw())
+    {
+        printf("linein poweroff\n");
+        goto __poweroff;
+    }
+#endif // 0
 
     while (1) {
         WDT_CLR();
@@ -583,6 +602,7 @@ void power_on_check(void)
 #endif // LINEIN_2_PWRDOWN_EN
 
 #if CHARGE_EN
+#if !HLW_UI
         if (xcfg_cb.charge_en) {
 			charge_cnt++;
 			if ((charge_cnt % 20) == 0) {
@@ -598,6 +618,7 @@ void power_on_check(void)
                 sfunc_pwrdown(0);
             }
         }
+#endif // HLW_UI
 #endif // CHARGE_EN
 
         if (sys_cb.poweron_flag) {
@@ -624,6 +645,7 @@ __pwron:
                     if ((!SOFT_POWER_ON_OFF) || ((!xcfg_cb.user_pwrkey_en) && (!PWRKEY_2_HW_PWRON))) {
                         goto __pwron;       //没有软开关机功能,直接开机。
                     }
+__poweroff:
                     saradc_exit(adc_cb.channel);
                     sfunc_pwrdown(1);
                 }

+ 81 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_sys.c

@@ -1,4 +1,7 @@
 #include "include.h"
+#if HLW_UI
+#include "func_hlw.h"
+#endif // HLW_UI
 
 extern u32 __comm_start, __comm_end;
 extern u32 __bss_size, __bss_end, __bss_start;
@@ -309,6 +312,39 @@ void linein_detect(void)
 }
 #endif // LINEIN_DETECT_EN
 
+#if HLW_UI
+u8 linein_detect_init_hlw(void)
+{
+    //return 0;
+    I2C_SDA_IN();
+    delay_5ms(10);
+    printf("I2C_SDA_IS_H() %d\n", I2C_SDA_IS_H());
+    if(!I2C_SDA_IS_H())
+    {
+        return 1;
+    }
+
+    return 0;
+}
+
+AT(.com_text.detect)
+void linein_detect_hlw(void)
+{
+    if(hlw_cb.linein_test_en)
+    {
+        //printf("I2C_SDA_IS_H() %d\n", I2C_SDA_IS_H());
+        if(!I2C_SDA_IS_H())
+        {
+            if(func_cb.sta != FUNC_IDLE)
+            {
+                sys_cb.pwrdwn_tone_en = 1;
+                func_cb.sta = FUNC_PWROFF;
+            }
+        }
+    }
+}
+#endif // HLW_UI
+
 #if EARPHONE_DETECT_EN
 AT(.com_text.detect)
 void earphone_detect(void)
@@ -534,6 +570,20 @@ void usr_tmr5ms_isr(void)
 #if DAC_DNR_EN
         dac_dnr_detect();
 #endif // DAC_DNR_EN
+        linein_detect_hlw();
+#if CHARGE_EN
+        if (xcfg_cb.charge_en)
+        {
+            if (CHARGE_DC_IN()) {
+                if (sys_cb.dc_in_filter < 10) {
+                    sys_cb.dc_in_filter++;
+                }
+            } else {
+                sys_cb.dc_in_filter = 0;
+            }
+        }
+#endif // CHARGE_EN
+
     } else {
         //dac_pcm_pow_calc 需要避免和 dac_dnr_detect 在同一时间调用 (两个函数用到同一硬件模块),否则能量值不准
         //dac_pcm_pow_calc 可以在这里调用,硬件计算能量,很快,us级别
@@ -876,6 +926,7 @@ static void bsp_var_init(void)
     sys_cb.sleep_en = 0;
     sys_cb.lpwr_warning_times = LPWR_WARING_TIMES;
     sfunc_bt_call_flag = 0;
+    sys_cb.dc_in_filter = 0;
 
 #if HLW_UI
     hlw_func_var_init();
@@ -1316,8 +1367,17 @@ void bsp_sys_init(void)
 
     /// enable user timer for display & dac
     sys_set_tmr_enable(1, 1);
+
+#if HLW_UI
+    if(!hlw_cb.charge_poweron_flag)
+#endif // HLW_UI
+    {
     led_power_up();
     gui_display(DISP_POWERON);
+#if FMRX_QN8035_EN
+    qn8035_is_online();
+#endif // FMRX_QN8035_EN
+    }
 
     bt_init();
     if (xcfg_cb.spk_mute_en * LOUDSPEAKER_MUTE_EN) {
@@ -1351,7 +1411,12 @@ void bsp_sys_init(void)
     if (SD_INSERT_EXCEPTION_RESET && is_sd_insert_reset()) {
         printf("sd insert exception reset, NO need to play power_on.mp3\n");
     } else {
+#if HLW_UI
+        if(!hlw_cb.charge_poweron_flag)
+#endif // HLW_UI
+        {
         mp3_res_play(RES_BUF_POWERON_MP3, RES_LEN_POWERON_MP3);
+        }
     }
 
 #endif // WARNING_POWER_ON
@@ -1395,6 +1460,22 @@ void bsp_sys_init(void)
             } else
 #endif
                 func_cb.sta = FUNC_BT;
+#if HLW_UI
+                printf("hlw_cb.charge_poweron_flag %d\n", hlw_cb.charge_poweron_flag);
+                if(hlw_cb.charge_poweron_flag)
+                {
+                    func_cb.sta = FUNC_IDLE;
+                    if (!CHARGE_DC_IN())
+                    {
+                        func_cb.sta = FUNC_PWROFF;
+                    }
+                }
+
+                if(func_cb.sta != FUNC_IDLE)
+                {
+                    hlw_cb.linein_test_en = true;
+                }
+#endif // HLW_UI
             }
         }
     }

+ 1 - 0
sdk_560x_01x_s2256_20241227/app/platform/bsp/bsp_sys.h

@@ -98,6 +98,7 @@ volatile u8  pwrdwn_hw_flag;    //模拟硬开关,关机标志
     u32 pwroff_rtcclk;          //校准时得到的平均RC频率,提供给下一次校准使用
     u32 pwroff_rtccnt;          //记录软关机时的rtccnt值,用于算出软关机到开机变化的rtccnt值
 #endif
+    u8 dc_in_filter;
 } sys_cb_t;
 extern sys_cb_t sys_cb;
 extern volatile int micl2gnd_flag;

+ 11 - 1
sdk_560x_01x_s2256_20241227/app/platform/bsp/hlw_bt.c

@@ -17,7 +17,11 @@
 
 void hlw_bt_init(void)
 {
-    if(bt_nor_get_link_info(NULL))
+    u8 pairlist_exist_flag = bt_nor_get_link_info(NULL);
+
+    TRACE("%s scan_status %d\n", __func__, pairlist_exist_flag);
+
+    if(pairlist_exist_flag)
     {
         //hlw_bt_mode_set(0x02);
     }
@@ -33,12 +37,14 @@ set bt mode,    0:不可见不可连   2:可连不可见   3:可见可连
 */
 void hlw_bt_mode_set(u8 scan_status)
 {
+    TRACE("%s scan_status %d\n", __func__, scan_status);
     bt_set_scan_do(scan_status);
 }
 
 
 void hlw_bt_enter_pairmode_handle(void)
 {
+    TRACE("%s\n", __func__);
     hlw_bt_mode_set(0x03);
 }
 
@@ -67,6 +73,8 @@ void hlw_bt_reconnect_fail_handle(void)
         hlw_cb.reconnect_flag = false;
     }
 
+    TRACE("%s flag %d\n", __func__, hlw_cb.reconnect_flag);
+
     if(!hlw_cb.reconnect_flag)
     {
         hlw_bt_enter_pairmode_handle();
@@ -143,6 +151,8 @@ void hlw_bt_disconnect_process_do(void)
 {
     hlw_cb.disconnect_flag = 0;
 
+    TRACE("%s con num %d dis reason %d\n", __func__, hlw_cb.curr_connect_cnt, hlw_cb.disconnect_reason);
+
 #if BT_2ACL_EN
     if(hlw_cb.curr_connect_cnt == 1)
     {

+ 13 - 1
sdk_560x_01x_s2256_20241227/app/platform/functions/func.c

@@ -151,6 +151,16 @@ void func_process(void)
     }
 #endif // CHARGE_EN
 
+#if CHARGE_EN
+    if (xcfg_cb.charge_en) {
+        if (CHARGE_DC_IN() && (sys_cb.dc_in_filter == 10))
+        {
+            sys_cb.dc_in_filter = 10 + 1;
+            func_cb.sta = FUNC_IDLE;
+        }
+    }
+#endif // CHARGE_EN
+
 #if SYS_KARAOK_EN
     karaok_process();
 #endif
@@ -168,7 +178,7 @@ void func_process(void)
 AT(.text.func.msg)
 void func_message(u16 msg)
 {
-#if HLW_UI
+#if 0//HLW_UI
     if(msg != 0)
     {
         printf("msg 0x%x\n", msg);
@@ -184,6 +194,7 @@ void func_message(u16 msg)
 #endif // HLW_UI
             sys_cb.maxvol_fade = 1;
         case KU_VOL_UP_NEXT:
+        case KD_VOL_UP_NEXT:
         case KU_VOL_UP:
         case KU_VOL_NEXT_PREV:
             if(bsp_bt_hid_vol_change(HID_KEY_VOL_UP)){
@@ -221,6 +232,7 @@ void func_message(u16 msg)
         case KL_PREV_VOL_DOWN:
         case KH_PREV_VOL_DOWN:
         case KU_VOL_DOWN_PREV:
+        case KD_VOL_DOWN_PREV:
         case KU_VOL_DOWN:
 #if !HLW_UI
         case KL_VOL_DOWN:

+ 65 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_fmrx.c

@@ -1,6 +1,9 @@
 #include "include.h"
 #include "func.h"
 #include "func_fmrx.h"
+#if HLW_UI
+#include "func_hlw.h"
+#endif // HLW_UI
 
 fmrx_cb_t fmrx_cb AT(.buf.fmrx.cb);
 
@@ -38,12 +41,20 @@ void func_fmrx_mp3_res_play(u32 addr, u32 len)
     if (fmrx_cb.sta == FMRX_PAUSE) {
         mp3_res_play(addr, len);
     } else {
+#if FMRX_QN8035_EN
+        bsp_aux_stop(FMRX_CHANNEL_CFG, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#else
         dac_fade_out();
         dac_fade_wait();
         fmrx_digital_stop();
+#endif // FMRX_QN8035_EN
         mp3_res_play(addr, len);
+#if FMRX_QN8035_EN
+        bsp_aux_start(FMRX_CHANNEL_CFG, FMRX_AUX_ANL_GAIN, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#else
         fmrx_digital_start();
         dac_fade_in();
+#endif // FMRX_QN8035_EN
     }
 }
 
@@ -52,14 +63,22 @@ AT(.text.func.fmrx)
 void func_fmrx_pause_play(void)
 {
     if (fmrx_cb.sta == FMRX_PLAY) {
+#if FMRX_QN8035_EN
+        bsp_aux_stop(FMRX_CHANNEL_CFG, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#else
         dac_fade_out();
         dac_fade_wait();
         fmrx_digital_stop();
+#endif // FMRX_QN8035_EN
         fmrx_cb.sta = FMRX_PAUSE;
         led_idle();
     } else if (fmrx_cb.sta == FMRX_PAUSE) {
+#if FMRX_QN8035_EN
+        bsp_aux_start(FMRX_CHANNEL_CFG, FMRX_AUX_ANL_GAIN, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#else
         fmrx_digital_start();
         dac_fade_in();
+#endif
         fmrx_cb.sta = FMRX_PLAY;
         led_fm_play();
     }
@@ -104,7 +123,18 @@ u16 get_ch_freq(u8 ch)
 AT(.text.func.fmrx)
 void reset_fm_cb(void)
 {
+#if HLW_UI
+    if(hlw_cb.search_freq_type == FM_SEARCH_MIN_MAX)
+    {
+        fmrx_cb.freq = FM_FREQ_MIN;
+    }
+    else if(hlw_cb.search_freq_type == FM_SEARCH_MAX_MIN)
+    {
+        fmrx_cb.freq = FM_FREQ_MAX;
+    }
+#else
     fmrx_cb.freq = FM_FREQ_MIN;
+#endif // HLW_UI
     fmrx_cb.ch_cnt = 0;
     fmrx_cb.ch_cur = 1;
     memset(fmrx_cb.buf, 0, 26);
@@ -312,10 +342,27 @@ void func_fmrx_process(void)
                 dac_fade_out();
                 plugin_fm_seek_continue();
             }
+#if HLW_UI
+            if(hlw_cb.search_freq_type == FM_SEARCH_MIN_MAX)
+            {
+                fmrx_cb.freq += 10;
+                if (fmrx_cb.freq > FM_FREQ_MAX) {
+                    fmrx_cb.sta = FMRX_SEEK_STOP;
+                }
+            }
+            else if(hlw_cb.search_freq_type == FM_SEARCH_MAX_MIN)
+            {
+                fmrx_cb.freq -= 10;
+                if (fmrx_cb.freq < FM_FREQ_MIN) {
+                    fmrx_cb.sta = FMRX_SEEK_STOP;
+                }
+            }
+#else
             fmrx_cb.freq += 10;
             if (fmrx_cb.freq > FM_FREQ_MAX) {
                 fmrx_cb.sta = FMRX_SEEK_STOP;
             }
+#endif // HLW_UI
             break;
 
         case FMRX_SEEK_STOP:
@@ -370,6 +417,21 @@ void func_fmrx_enter(void)
 #endif
 
     MEMCON &= ~0x3ff;                   // ram & rom memory always work
+
+#if FMRX_QN8035_EN
+    WDT_CLR();
+    #if (FMRX_CLOCK == FM_USE_IO_32KHZ_CLK)
+    FUNCMCON0 = 0x0f;
+    sys_clk_output(3, FMRX_CLKOMAP);
+    #elif (FMRX_CLOCK == FM_USE_IO_12MHZ_CLK)
+    FUNCMCON0 = 0x0f;
+    sys_clk_output(4, FMRX_CLKOMAP);
+    #endif
+
+    bsp_fmrx_set_volume(16);
+    bsp_aux_start(FMRX_CHANNEL_CFG, FMRX_AUX_ANL_GAIN, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#endif // FMRX_QN8035_EN
+
     led_fm_play();
 
     fmrx_cb.sta = FMRX_PLAY;
@@ -386,6 +448,9 @@ void func_fmrx_enter(void)
 AT(.text.func.fmrx)
 void func_fmrx_exit(void)
 {
+#if FMRX_QN8035_EN
+    bsp_aux_stop(FMRX_CHANNEL_CFG, ((u8)FMRX_2_SDADC_EN << 7) | AUDIO_PATH_FM);
+#endif
     dac_fade_out();
     func_fmrx_exit_display();
     if (fmrx_cb.sta > FMRX_IDLE) {

+ 4 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_hlw.c

@@ -27,5 +27,9 @@ void hlw_func_var_init(void)
     hlw_cb.disconnect_flag = 0;
     hlw_cb.disconnect_count = 0;
     hlw_cb.disconnect_reason = 0;
+
+    hlw_cb.search_freq_type = FM_SEARCH_MIN_MAX;
+    hlw_cb.charge_poweron_flag = false;
+    hlw_cb.linein_test_en = false;
 }
 #endif // HLW_UI

+ 8 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_hlw.h

@@ -10,12 +10,20 @@ typedef struct {
     u8 disconnect_flag;
     u8 disconnect_count;
     u8 disconnect_reason;
+
+    u8 search_freq_type;
+    u8 charge_poweron_flag;
+    u8 linein_test_en;
 }hlw_cb_t;
 
 
 extern hlw_cb_t hlw_cb;
 
 
+#define FM_SEARCH_MIN_MAX       0
+#define FM_SEARCH_MAX_MIN       1
+
+
 void hlw_func_var_init(void);
 
 #endif // HLW_UI

+ 75 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_idle.c

@@ -4,6 +4,59 @@
 
 #if FUNC_IDLE_EN
 
+
+#if HLW_UI
+AT(.text.func.idle)
+void func_idle_charge_init(void)
+{
+    GPIOBFEN &= ~BIT(1);
+    GPIOBDIR &= ~BIT(1);
+    GPIOBDE |= BIT(1);
+    //GPIOBCLR = BIT(1);
+    GPIOBSET = BIT(1);
+}
+
+AT(.text.func.idle)
+void func_idle_charge_enable_control(u8 enable_charge)
+{
+    if(enable_charge)
+    {
+        //low
+        //GPIOBCLR = BIT(1);
+        GPIOBSET = BIT(1);
+    }
+    else
+    {
+        //high
+        //GPIOBSET = BIT(1);
+        GPIOBCLR = BIT(1);
+    }
+}
+
+AT(.text.func.idle)
+void func_idle_charge_detect_init(void)
+{
+    GPIOEFEN &= ~BIT(0);
+    GPIOEDE |= BIT(0);
+    GPIOEPU  |= BIT(0);
+    GPIOEDIR |= BIT(0);
+}
+
+AT(.text.func.idle)
+u8 func_idle_charge_detect_process(void)
+{
+    if(GPIOE & BIT(0))
+    {
+        return 1;
+    }
+
+    return 0;
+}
+
+
+#endif // HLW_UI
+
+
 AT(.text.func.idle)
 void func_idle_process(void)
 {
@@ -18,6 +71,13 @@ static void func_idle_enter(void)
     }
 #endif
     led_idle();
+#if HLW_UI
+    gui_display(DISP_IDLE);
+    func_idle_charge_init();
+    func_idle_charge_enable_control(true);
+    func_idle_charge_detect_init();
+    delay_5ms(20);
+#endif // HLW_UI
 }
 
 static void func_idle_exit(void)
@@ -36,6 +96,21 @@ void func_idle(void)
         func_idle_process();
         func_idle_message(msg_dequeue());
         func_idle_display();
+#if HLW_UI
+        if(func_idle_charge_detect_process())
+        {
+            printf("full bat poweroff\n");
+            func_cb.sta = FUNC_PWROFF;
+            break;
+        }
+
+        if(!CHARGE_DC_IN())
+        {
+            printf("5V ba diao\n");
+            func_cb.sta = FUNC_PWROFF;
+            break;
+        }
+#endif // HLW_UI
     }
 
     func_idle_exit();

+ 3 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_lowpwr.c

@@ -624,6 +624,9 @@ void func_pwroff(int pwroff_tone_en)
 {
     printf("%s\n", __func__);
     led_power_down();
+#if HLW_UI
+    gui_display(DISP_OFF);
+#endif // HLW_UI
 #if WARNING_POWER_OFF
     if (SOFT_POWER_ON_OFF) {
         if (pwroff_tone_en == 1) {

+ 579 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_qn8035.c

@@ -0,0 +1,579 @@
+#include "include.h"
+#include "func_qn8035.h"
+
+#if HLW_UI
+
+
+
+
+#define HLW_FUNC_TRACE_EN                1
+
+#if HLW_FUNC_TRACE_EN
+#define TRACE(...)              printf(__VA_ARGS__)
+#define TRACE_R(...)            print_r(__VA_ARGS__)
+#else
+#define TRACE(...)
+#define TRACE_R(...)
+#endif
+
+
+#if FMRX_QN8035_EN
+
+
+u8  qnd_PreNoiseFloor = 40;
+u32 osc_setup_ticks;
+
+AT(.text.qn8035)
+static u8 QND_ReadReg(u8 adr)
+{
+   	u8 rdat;
+
+    bsp_i2c_start();
+    bsp_i2c_tx_byte(0x20);
+    bsp_i2c_rx_ack();
+    bsp_i2c_tx_byte(adr);
+    bsp_i2c_rx_ack();
+    bsp_i2c_stop();
+    delay_us(60);
+
+    bsp_i2c_start();
+    bsp_i2c_tx_byte(0x21);
+    bsp_i2c_rx_ack();
+    rdat = bsp_i2c_rx_byte();
+    bsp_i2c_tx_nack();
+    bsp_i2c_stop();
+    delay_us(60);
+
+    return rdat;
+}
+
+AT(.text.qn8035)
+static void QND_WriteReg(u8 adr, u8 value)
+{
+    bsp_i2c_start();
+    bsp_i2c_tx_byte(0x20);
+    bsp_i2c_rx_ack();
+    bsp_i2c_tx_byte(adr);
+    bsp_i2c_rx_ack();
+    bsp_i2c_tx_byte(value);
+    bsp_i2c_rx_ack();
+    bsp_i2c_stop();
+    delay_us(60);
+}
+
+AT(.text.qn8035)
+static u16 FREQ2CHREG(u16 freq)
+{
+    return 	(freq - 6000) / 5;
+}
+
+AT(.text.qn8035)
+static void QNF_SetMute(u8 On)
+{
+    QND_WriteReg(REG_DAC, On?0x1B:0x10);
+}
+
+/**********************************************************************
+u8 QNF_SetCh(u16 freq)
+**********************************************************************
+Description: set channel frequency
+
+Parameters:
+    freq:  channel frequency to be set
+Return Value:
+    1: success
+**********************************************************************/
+#if USING_VALID_CH
+AT(.text.qn8035)
+static void QNF_SetCh(u16 freq)
+{
+    u8 temp;
+
+	freq = FREQ2CHREG(freq);
+	//writing lower 8 bits of CCA channel start index
+	QND_WriteReg(CH_START, (u8)freq);
+	//writing lower 8 bits of CCA channel stop index
+	QND_WriteReg(CH_STOP, (u8)freq);
+	//writing lower 8 bits of channel index
+	QND_WriteReg(CH, (u8)freq);
+	//writing higher bits of CCA channel start,stop and step index
+	temp = (u8) ((freq >> 8) & CH_CH);
+	temp |= ((u8)(freq >> 6) & CH_CH_START);
+	temp |= ((u8) (freq >> 4) & CH_CH_STOP);
+	temp |= QND_STEP_CONSTANT;
+	QND_WriteReg(CH_STEP, temp);
+}
+#else
+AT(.text.qn8035)
+static void QNF_SetCh(u16 start, u16 stop, u8 step)
+{
+    u8 temp;
+
+	start = FREQ2CHREG(start);
+	stop = FREQ2CHREG(stop);
+	//writing lower 8 bits of CCA channel start index
+	QND_WriteReg(CH_START, (u8)start);
+	//writing lower 8 bits of CCA channel stop index
+	QND_WriteReg(CH_STOP, (u8)stop);
+	//writing lower 8 bits of channel index
+	QND_WriteReg(CH, (u8)start);
+	//writing higher bits of CCA channel start,stop and step index
+	temp = (u8) ((start >> 8) & CH_CH);
+	temp |= ((u8)(start >> 6) & CH_CH_START);
+	temp |= ((u8) (stop >> 4) & CH_CH_STOP);
+	temp |= (step << 6);
+	QND_WriteReg(CH_STEP, temp);
+}
+#endif // USING_VALID_CH
+
+/**********************************************************************
+void QND_Init()
+**********************************************************************
+Description: Initialize device to make it ready to have all functionality ready for use.
+
+Parameters:
+    None
+Return Value:
+    1: Device is ready to use.
+    0: Device is not ready to serve function.
+**********************************************************************/
+AT(.text.qn8035)
+void qn8035_xosc_setup(void)
+{
+#if (FMRX_CLOCK == FM_USE_CRYSTAL)
+    QND_WriteReg(0x00, 0x81);
+    delay_5ms(5);
+
+    QNF_SetMute(1);
+    QND_WriteReg(0x58, 0x93);           //mod PLL setting
+
+    osc_setup_ticks = tick_get();       //qn8075,使用独立晶振时,等待起振时间需要2S
+#endif
+}
+
+AT(.text.qn8035)
+void qn8035_init(void)
+{
+#if ((FMRX_CLOCK == FM_USE_CRYSTAL_32K) || (FMRX_CLOCK == FM_USE_CRYSTAL_12M))
+    ///qn8075,使用独立晶振时,等待起振时间需要2S
+    while (!tick_check_expire(osc_setup_ticks, 2000)) {
+        delay_5ms(2);
+        WDT_CLR();
+    }
+#endif
+
+    QND_WriteReg(0x00, 0x81);
+    delay_ms(2);
+
+#if (FMRX_CLOCK == FM_USE_IO_32KHZ_CLK)
+    QND_WriteReg(0x01, QND_DIGITAL_CLOCK);   //方波
+#elif (FMRX_CLOCK == FM_SHARE_CRYSTAL_32KHz)
+    QND_WriteReg(0x01, QND_SINE_WAVE_CLOCK); //正弦波
+#elif ((FMRX_CLOCK == FM_USE_CRYSTAL_32K) || (FMRX_CLOCK == FM_USE_CRYSTAL_12M))
+    QNF_SetMute(1);
+    QND_WriteReg(0x58, 0x93);//mod PLL setting
+    delay_5ms(25);
+    QND_WriteReg(XTAL_DIV0, QND_XTAL_DIV0);//01
+    QND_WriteReg(XTAL_DIV1, QND_XTAL_DIV1);//08
+    QND_WriteReg(XTAL_DIV2, QND_XTAL_DIV2);//5c
+#endif
+
+    QND_WriteReg(0x54, 0x47);//mod PLL setting
+    //select SNR as filter3,SM step is 2db
+    QND_WriteReg(0x19, 0xc4);
+    QND_WriteReg(0x40,0x70);	//set SNR as SM,SNC,HCC MPX   /////没有
+    QND_WriteReg(0x33, 0x9c);//9e;//set HCC and SM Hystersis 5db
+    QND_WriteReg(0x2d, 0xD6);//notch filter threshold adjusting
+    QND_WriteReg(0x43, 0x10);//notch filter threshold enable
+    QND_WriteReg(0x47,0x39);
+    //enter receiver mode directly
+    QND_WriteReg(0x00, 0x11);
+    //Enable the channel condition filter3 adaptation,Let ccfilter3 adjust freely
+    QND_WriteReg(0x1D,0xA9);
+    QND_WriteReg(0x4f, 0x40);//dsiable auto tuning
+    QND_WriteReg(0x34,SMSTART_VAL); ///set SMSTART
+    QND_WriteReg(0x35,SNCSTART_VAL); ///set SNCSTART
+    QND_WriteReg(0x36,HCCSTART_VAL); ///set HCCSTART
+    QNF_SetMute(1);
+}
+
+/************************************************************************
+void QND_RXConfigAudio(u8 optiontype, u8 option )
+*************************************************************************
+Description: config audio
+Parameters:
+  optiontype: option
+    QND_CONFIG_MONO; ‘option’control mono, 0: stereo receive mode ,1: mono receiver mode
+    QND_CONFIG_MUTE; ‘option’control mute, 0:mute disable,1:mute enable
+    QND_CONFIG_VOLUME: 'option' control the volume gain,range : 0~47(-47db~0db)
+
+Return Value:
+    none
+**********************************************************************/
+AT(.text.qn8035)
+static void QND_RXConfigAudio(u8 option)
+{
+    u8 regVal;
+
+    regVal = QND_ReadReg(VOL_CTL);
+	regVal = (regVal & 0xC0) | (option / 6) | ((5-option%6)<<3);
+	QND_WriteReg(VOL_CTL, regVal);
+}
+
+/*----------------------------------------------------------------------------*/
+/**@brief FM模块QN8035设置音量
+   @param volume 音量值
+   @return 无
+   @note 音量范围0~15
+*/
+/*----------------------------------------------------------------------------*/
+AT(.text.qn8035)
+void qn8035_set_vol(u8 volume)
+{
+    volume = volume*3;
+    if(volume > 47) {
+        volume = 47;    //qn8035 volume range is from 0~47
+    }
+    QND_RXConfigAudio(volume);
+
+    if(volume == 0) {
+        QNF_SetMute(1);
+    } else {
+        QNF_SetMute(0);
+    }
+}
+
+/*----------------------------------------------------------------------------*/
+/**@brief FM模块QN8035关闭
+   @param 无
+   @return 无
+   @note
+*/
+/*----------------------------------------------------------------------------*/
+AT(.text.qn8035)
+void qn8035_off(void)
+{
+    QND_WriteReg(0x00, 0x01);
+    delay_5ms(4);
+
+    QND_WriteReg(0x00, 0x01);
+    delay_5ms(2);
+
+    QND_WriteReg(0x00, 0x01);
+    delay_5ms(2);
+}
+
+
+/**********************************************************************
+void qnd8035_set_freq(u16 freq)
+**********************************************************************
+Description: Tune to the specific channel. call QND_SetSysMode() before
+call this function
+Parameters:
+ch
+Set the frequency (10kHz) to be tuned,
+eg: 101.30MHz will be set to 10130.
+Return Value:
+None
+**********************************************************************/
+AT(.text.qn8035)
+void qnd8035_set_freq(u16 freq)
+{
+    u8 reg;
+
+    //increase reference PLL charge pump current.
+    QND_WriteReg(REG_REF,0x7A);
+
+    /********** QNF_RXInit ****************/
+    QND_WriteReg(0x1B,0x70);  //Let NFILT adjust freely
+    //QNF_SetRegBit(0x2C,0x3F,0x12);  ///When SNR<ccth31, ccfilt3 will work
+    //setting the threshold of Filter3 will be worked.
+    QND_WriteReg(0x2C,0x52);
+    //QNF_SetRegBit(0x1D,0x40,0x00);  ///Let ccfilter3 adjust freely
+    //QNF_SetRegBit(0x41,0x0F,0x0A);  ///Set a hcc index to trig ccfilter3's adjust
+    QND_WriteReg(0x45,0x50);        ///Set aud_thrd will affect ccfilter3's tap number
+    //QNF_SetRegBit(0x40,0x70,0x70);  ///snc/hcc/sm snr_rssi_sel; snc_start=0x40; hcc_start=0x30; sm_start=0x20
+    QND_WriteReg(0x40,0x70);
+    //QNF_SetRegBit(0x19,0x80,0x80);  ///Use SNR for ccfilter selection criterion
+    //selecting SNR as filter3 filter condition
+    //QND_WriteReg(0x19, 0xC2);
+    //QNF_SetRegBit(0x3E,0x80,0x80);  ///it is decided by programming this register
+    //QNF_SetRegBit(0x41,0xE0,0xC0);  ///DC notching High pass filter bandwidth; remove low freqency dc signals
+
+#if 1//INVERSE_IMR
+    reg = QND_ReadReg(CCA)&~0x40;
+    if((freq == 9340) || (freq == 9390) || (freq == 9530)/*||(freq == 9980)||(freq == 10480)*/) {
+        reg |= 0x40;	// inverse IMR.
+    } else {
+        reg &= ~0x40;
+    }
+    QND_WriteReg(CCA, reg);
+#endif
+    QND_WriteReg(0x41,0xCA);
+    QND_WriteReg(0x34,SMSTART_VAL);     ///set SMSTART
+    QND_WriteReg(0x35,SNCSTART_VAL);    ///set SNCSTART
+    QND_WriteReg(0x36,HCCSTART_VAL);    ///set HCCSTART
+    /********** End of QNF_RXInit ****************/
+
+    QNF_SetMute(1);
+#if USING_VALID_CH
+    QNF_SetCh(freq);
+#else
+    QNF_SetCh(freq, freq, 1);
+#endif
+    //enable CCA mode with user write into frequency
+    QND_WriteReg(0x00, 0x13);
+    //Auto tuning
+    QND_WriteReg(0x4F, 0x80);
+    reg = QND_ReadReg(0x4F);
+    reg >>= 1;
+    QND_WriteReg(0x4F, reg);
+    ///avoid the "POP" noise.
+    delay_5ms(30);  //150ms
+    ///decrease reference PLL charge pump current.
+    QND_WriteReg(REG_REF,0x70);
+    QNF_SetMute(0);
+}
+
+/***********************************************************************
+Description: scan a noise floor from 87.5M to 108M by step 200K
+Parameters:
+Return Value:
+ 1: scan a noise floor successfully.
+ 0: chip would not normally work.
+**********************************************************************/
+AT(.text.qn8035)
+static u8 QND_ScanNoiseFloor(u16 start,u16 stop)
+{
+    u8 regValue;
+    u8 qnd_NoiseFloor;
+    u8 timeOut = 100;
+
+    QND_WriteReg(CCA_SNR_TH_1,0x00);
+    QND_WriteReg(CCA_SNR_TH_2,0x05);
+    QND_WriteReg(0x40,0xf0);
+    //config CCS frequency rang by step 200KHZ
+    QNF_SetCh(start,stop,2);
+    /*
+    QND_WriteReg(CH_START,0x26);
+    QND_WriteReg(CH_STOP,0xc0);
+    QND_WriteReg(CH_STEP,0xb8);
+    */
+    //enter CCA mode,channel index is decided by internal CCA
+    QND_WriteReg(SYSTEM1,0x12);
+
+    while(1) {
+        regValue = QND_ReadReg(SYSTEM1);
+
+        //if it seeks a potential channel, the loop will be quited
+        if((regValue & CHSC) == 0) break;
+        delay_5ms(4);
+        WDT_CLR();
+        //if it was time out,chip would not normally work.
+        if((timeOut--) == 0) {
+            QND_WriteReg(0x40,0x70);
+            return 0;
+        }
+    }
+
+    QND_WriteReg(0x40,0x70);
+    delay_ms(5);
+    qnd_NoiseFloor = QND_ReadReg(0x3f);
+    if(((qnd_PreNoiseFloor-qnd_NoiseFloor) >= 2) ||((qnd_NoiseFloor-qnd_PreNoiseFloor) >= 2)) {
+        qnd_PreNoiseFloor = qnd_NoiseFloor;
+    }
+    return 1;
+}
+/***********************************************************************
+void QND_RXSetTH(u8 th)
+***********************************************************************
+Description: Setting the threshold value of automatic scan channel
+th:
+  Setting threshold for quality of channel to be searched,
+  the range of th value:CCA_SENSITIVITY_LEVEL_0 ~ CCA_SENSITIVITY_LEVEL_9
+Return Value:
+  None
+***********************************************************************/
+AT(.text.qn8035)
+static void QND_RXSetTH(u8 th)
+{
+    u8 rssi_th,cca_snr_th_1,cca_snr_th_2 = 0x05;
+    rssi_th = (qnd_PreNoiseFloor-26);//27
+    ///increase reference PLL charge pump current.
+    QND_WriteReg(REG_REF,0x7A);
+    //NFILT program is enabled
+    QND_WriteReg(0x1B,0x78);
+    //using Filter3
+    QND_WriteReg(CCA1,0x75);
+    //setting CCA IF counter error range value(256).
+    QND_WriteReg(CCA_CNT2,0x05);//
+#if PILOT_CCA
+    QND_WriteReg(PLT1,0x00);
+#endif
+    cca_snr_th_1 = 0x40;//0x00
+	//selection the time of CCA FSM wait SNR calculator to settle:20ms
+	//0x00:	    20ms(default)
+	//0x40:	    40ms
+	//0x80:	    60ms
+	//0xC0:	    100m
+	//    QNF_SetRegBit(CCA_SNR_TH_1 , 0xC0, 0x00);
+    //selection the time of CCA FSM wait RF front end and AGC to settle:20ms
+    //0x00:     10ms
+	//0x40:     20ms(default)
+    //0x80:     40ms
+	//0xC0:     60ms
+	//    QNF_SetRegBit(CCA_SNR_TH_2, 0xC0, 0x40);
+	//    QNF_SetRegBit(CCA, 30);
+       //setting CCA RSSI threshold is 30
+	//QND_WriteReg(CCA,QND_ReadReg(CCA)&0xC0|25);  // 20 ~ 30
+    cca_snr_th_2 |= 0xc0;
+    QND_WriteReg(CCA_SNR_TH_2,cca_snr_th_2);
+
+    QND_WriteReg(CCA, (QND_ReadReg(CCA) & 0xc0) | rssi_th);
+#if PILOT_CCA                             //6
+    QND_WriteReg(CCA_SNR_TH_1,cca_snr_th_1|(7 +th)); //setting SNR threshold for CCA
+#else
+    QND_WriteReg(CCA_SNR_TH_1,cca_snr_th_1|(9+th)); //setting SNR threshold for CCA
+#endif
+}
+
+/***********************************************************************
+u16 QND_RXValidCH(u16 freq, u8 step);
+***********************************************************************
+Description: to validate a ch (frequency)(if it's a valid channel)
+Freq: specific channel frequency, unit: 10Khz
+  eg: 108.00MHz will be set to 10800.
+Step:
+  FM:
+  QND_FMSTEP_100KHZ: set leap step to 100kHz
+  QND_FMSTEP_200KHZ: set leap step to 200kHz
+  QND_FMSTEP_50KHZ:  set leap step to 50kHz
+Return Value:
+  0: not a valid channel
+  other: a valid channel at this frequency
+***********************************************************************/
+AT(.text.qn8035)
+static u8 QND_RXValidCH(u16 freq)
+{
+ 	u8 regValue;
+  	u8 timeOut;
+  	u8 isValidChannelFlag;
+  	u8 readCnt,stereoCount=0;
+
+    //printf("qn8035: %d\n", freq);
+    if(freq == 8750) {
+        QND_ScanNoiseFloor(8750,8800);
+        QND_RXSetTH(0);
+    } else if( ((freq - 8810) % 200) == 0) {
+        QND_ScanNoiseFloor(freq,freq+190);
+        QND_RXSetTH(0);
+    }
+
+#if USING_VALID_CH
+  	QNF_SetCh(freq);
+#else
+    QNF_SetCh(freq,freq,1);
+#endif
+
+    //Auto tuning
+    QND_WriteReg(0x00, 0x11);
+    QND_WriteReg(0x4f, 0x80);
+    delay_5ms(4);
+    regValue = QND_ReadReg(0x4f);
+    regValue = (regValue >> 1);
+    QND_WriteReg(0x4f, regValue);
+
+  	//QNF_SetRegBit(SYSTEM1,0x03,0x02);//enter channel scan mode,channel frequency is decided by internal CCA
+  	//entering into RX mode and CCA mode,channels index decide by CCA.
+    timeOut = 20;
+
+    QND_WriteReg(0x00, 0x12);
+
+    while(1)
+    {
+        regValue = QND_ReadReg(SYSTEM1);
+        //if it seeks a potential channel, the loop will be quited
+        if((regValue & CHSC) == 0) break;
+        delay_5ms(4);
+        WDT_CLR();
+        //if it was time out,chip would not normally work.
+        if((timeOut--) == 0)
+        {
+            return 0;
+        }
+    }
+
+    //reading out the rxcca_fail flag of RXCCA status
+    //isValidChannelFlag = (QND_ReadReg(STATUS1) & RXCCA_FAIL ? 0:1) && timeOut;
+
+    isValidChannelFlag = (QND_ReadReg(STATUS1) & RXCCA_FAIL ? 0:1);
+
+    if(isValidChannelFlag)
+    {
+#if PILOT_CCA
+    	delay_5ms(2);
+    	u8 snr = QND_ReadReg(SNR);
+        if(snr> 20) {
+            return 1;
+        }
+    	for(readCnt=10;readCnt>0;readCnt--)
+    	{
+            delay_ms(5);
+      		stereoCount += ((QND_ReadReg(STATUS1) & ST_MO_RX) ? 0:1);
+      		if(stereoCount >= 3) return 1;
+    	}
+#else
+    	return 1;
+#endif
+  	}
+  	return 0;
+}
+
+AT(.text.qn8035)
+u8 qn8035_seek(u16 freq)
+{
+    QNF_SetMute(1);
+    return QND_RXValidCH(freq);//qn8035 step frequency unit is 10KHZ
+}
+
+AT(.text.qn8035)
+void qn8035_mute(void)
+{
+    QNF_SetMute(1);
+}
+
+AT(.text.qn8035)
+void qn8035_unmute(void)
+{
+    QNF_SetMute(0);
+}
+
+
+/*----------------------------------------------------------------------------*/
+/**@brief FM模块QN8035检测
+   @param 无
+   @return 检测到QN8035模块返回1,否则返回0
+   @note
+*/
+/*----------------------------------------------------------------------------*/
+AT(.text.qn8035)
+bool qn8035_is_online(void)
+{
+  	u8 temp;
+  	QND_ReadReg(0x06);
+    for(u8 i = 0; i < 3; i++) {
+        temp = QND_ReadReg(0x06) & 0xFC;
+        printf("\nqn8035 id = %02x\n",temp);
+        if (temp == CHIPID_QN8035) {
+            qn8035_xosc_setup();
+            return true;
+        }
+    }
+    return false;
+}
+
+
+#endif // FM_QN8035
+
+
+#endif // HLW_UI

+ 151 - 0
sdk_560x_01x_s2256_20241227/app/platform/functions/func_qn8035.h

@@ -0,0 +1,151 @@
+#ifndef _FUNC_QN8035_H
+#define _FUNC_QN8035_H
+
+#if HLW_UI
+#if FMRX_QN8035_EN
+
+//假台多可以打开
+#define PILOT_CCA                       1  // 0: disable stereo judgement for the country has many mono FM stations
+#define USING_VALID_CH                  0
+#define CCA_PILOT_SNR_FILTER            35
+
+
+/**********************************QN8035's clock source selection**************
+1.QN8035's default clock source is 32768HZ.
+2.setting QN8035's clock source and clock source type(like sine-wave clock or digital clock).
+3.user need to modify clock source according to actual hardware platform.
+4.clock formula,the details please refer to the QN8035's datasheet
+  XTAL_DIV = Round(Clock/32768);
+  PLL_DLT = Round((28500000*512*XTAL_DIV)/Clock)-442368
+*******************************************************************************/
+#define QND_SINE_WAVE_CLOCK             0x00    //inject sine-wave clock
+#define QND_DIGITAL_CLOCK               0x80    //inject digital clock,default is inject digital clock
+
+#if (FMRX_CLOCK == FM_USE_CRYSTAL_12M)
+//crystal clock is 12MHZ
+#define QND_XTAL_DIV0                   0x6E
+#define QND_XTAL_DIV1                   0x01
+#define QND_XTAL_DIV2                   0x54
+#else
+//crystal clock is 32768HZ
+#define QND_XTAL_DIV0                   0x01
+#define QND_XTAL_DIV1                   0x08
+#define QND_XTAL_DIV2                   0x5C
+#endif
+
+//crystal clock is 24MHZ
+//#define QND_XTAL_DIV0                   0xDC
+//#define QND_XTAL_DIV1                   0x02
+//#define QND_XTAL_DIV2                   0x54   //3
+
+
+//following is definition step
+#define QND_STEP_CONSTANT               0x40 //(QND_FSTEP_100KHZ << 6)
+#define CHIPID_QN8035                   0x84
+
+
+/*******************************************************************************
+Performance configuration
+*******************************************************************************/
+#define SMSTART_VAL                     15//10
+#define HCCSTART_VAL                    20//13
+#define SNCSTART_VAL                    51
+
+/*******************************************************************************
+limitation configuration
+*******************************************************************************/
+#define QND_READ_RSSI_DELAY             100
+#define SLEEP_TO_WAKEUP_DELAY_TIME      500
+#define CH_SETUP_DELAY_TIME             300
+/***************************************End************************************/
+
+/*******************************************************************************
+ definition register
+*******************************************************************************/
+#define SYSTEM1         				0x00
+#define CCA             				0x01
+#define SNR            					0x02
+#define RSSISIG         				0x03
+#define STATUS1         				0x04
+#define CID1            				0x05
+#define CID2            				0x06
+#define	CH								0x07
+#define	CH_START						0x08
+#define	CH_STOP							0x09
+#define	CH_STEP							0x0A
+#define	RDSD0							0x0B
+#define	RDSD1							0x0C
+#define	RDSD2							0x0D
+#define	RDSD3							0x0E
+#define	RDSD4							0x0F
+#define	RDSD5							0x10
+#define	RDSD6							0x11
+#define	RDSD7							0x12
+#define	STATUS2							0x13
+#define	VOL_CTL							0x14
+#define	XTAL_DIV0						0x15
+#define	XTAL_DIV1						0x16
+#define	XTAL_DIV2						0x17
+#define INT_CTRL						0x18
+#define SMP_HLD_THRD					0x19
+#define	RXAGC_GAIN						0x1A
+#define GAIN_SEL						0x1B
+#define	SYSTEM_CTL1						0x1C
+#define	SYSTEM_CTL2						0x1D
+#define RDSCOSTAS						0x1E
+#define REG_TEST						0x1F
+#define STATUS4							0x20
+#define	CCA1							0x27
+#define PLT1                            0X2F
+#define	PLT2                            0x30
+#define	SMSTART							0x34
+#define	SNCSTART						0x35
+#define	HCCSTART						0x36
+#define	CCA_CNT1					    0x37
+#define	CCA_CNT2					    0x38
+#define	CCA_SNR_TH_1					0x39
+#define	CCA_SNR_TH_2					0x3A
+#define NCCFIR3         				0x40
+#define REG_REF                         0x49
+#define REG_DAC							0x4C
+/***************************************End************************************/
+
+/*******************************************************************************
+ definition operation bit of register
+*******************************************************************************/
+#define CCA_CH_DIS      				0x01
+#define CHSC            				0x02
+#define RDSEN           				0x08
+#define CH_CH		    				0x03
+#define CH_CH_START     				0x0c
+#define CH_CH_STOP      				0x30
+#define STNBY_MODE           		    0x20
+#define RX_MODE         				0x10
+#define IMR             				0x40
+#define RDS_RXUPD       				0x80
+#define ST_MO_RX                        0x01
+#define STNBY_RX_MASK                   0x30
+#define RXCCA_MASK                      0x03
+#define RX_CCA                          0x02
+#define RXCCA_FAIL                      0x08
+#define RX_MONO                         0x04
+#define ICPREF                          0x0F
+/***************************************End************************************/
+
+#define QNM_GetMonoMode()               QND_ReadReg(STATUS1) & ST_MO_RX
+#define QNM_GetRssi()                   QND_ReadReg(RSSISIG)
+
+bool qn8035_is_online(void);
+void qn8035_init(void);
+void qn8035_off(void);
+void qnd8035_set_freq(u16 freq);
+u8 qn8035_seek(u16 freq);
+void qn8035_set_vol(u8 volume);
+void qn8035_unmute(void);
+void qn8035_mute(void);
+
+
+
+#endif // FM_QN8035
+#endif // HLW_UI
+#endif // _FUNC_QN8035_H

+ 1 - 1
sdk_560x_01x_s2256_20241227/app/platform/header/config_extra.h

@@ -278,7 +278,7 @@
 #endif // SLEEP_DAC_OFF_EN
 
 #ifndef PWRON_FRIST_BAT_EN
-#define PWRON_FRIST_BAT_EN          1
+#define PWRON_FRIST_BAT_EN          0
 #endif // PWRON_FRIST_BAT_EN
 
 #if !LED_DISP_EN

+ 7 - 7
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/Settings/Boombox.setting

@@ -37,14 +37,14 @@
         <add key="dacvdd_bypass_en" value="True" />
         <add key="dac_max_gain" value="0DB" />
         <add key="bt_call_max_gain" value="-1DB" />
-        <add key="charge_en" value="False" />
+        <add key="charge_en" value="True" />
         <add key="charge_trick_en" value="True" />
-        <add key="charge_dc_reset" value="True" />
-        <add key="charge_dc_not_pwron" value="True" />
-        <add key="charge_stop_curr" value="2" />
-        <add key="charge_constant_curr" value="12" />
-        <add key="charge_trickle_curr" value="2" />
-        <add key="charge_full_bled" value="3" />
+        <add key="charge_dc_reset" value="False" />
+        <add key="charge_dc_not_pwron" value="False" />
+        <add key="charge_stop_curr" value="0" />
+        <add key="charge_constant_curr" value="0" />
+        <add key="charge_trickle_curr" value="0" />
+        <add key="charge_full_bled" value="0" />
         <add key="bt_name" value="ikF-FM听力蓝牙耳机" />
         <add key="bt_addr_mode" value="保持地址" />
         <add key="bt_addr" value="41:42:00:00:00:01" />

BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.bin


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.dcf


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/app.rv32


Різницю між файлами не показано, бо вона завелика
+ 544 - 556
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/map.txt


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/res.bin


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/bin/res/poweron.mp3


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_audio.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_charge.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_fmrx.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_i2c.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_key.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_led.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_music.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/bsp/bsp_sys.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_bt.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_fmrx.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_hlw.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_idle.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_lowpwr.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_music.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/platform/functions/func_qn8035.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/config.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/display/ledseg/display_ledseg.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_clock.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_fmrx.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/message/msg_idle.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/plugin/plugin.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/port/port_key.o


BIN
sdk_560x_01x_s2256_20241227/app/projects/standard/Output/obj/projects/standard/port/port_led.o


+ 4 - 0
sdk_560x_01x_s2256_20241227/app/projects/standard/app.cbp

@@ -267,6 +267,10 @@
 			<Option compilerVar="CC" />
 		</Unit>
 		<Unit filename="../../platform/functions/func_music.h" />
+		<Unit filename="../../platform/functions/func_qn8035.c">
+			<Option compilerVar="CC" />
+		</Unit>
+		<Unit filename="../../platform/functions/func_qn8035.h" />
 		<Unit filename="../../platform/functions/func_spdif.c">
 			<Option compilerVar="CC" />
 		</Unit>

+ 36 - 25
sdk_560x_01x_s2256_20241227/app/projects/standard/app.depend

@@ -863,7 +863,7 @@
 1727164580 source:e:\svn_custom\sdk_560x_01x_s2256_20241226\app\projects\standard\ram.ld
 	"config.h"
 
-1722826763 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_audio.c
+1745482505 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_audio.c
 	"include.h"
 
 1732083165 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\header\include.h
@@ -902,13 +902,13 @@
 
 1725420956 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\xcfg.h
 
-1745227909 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\config.h
+1745567735 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\config.h
 	"config_define.h"
 	"config_extra.h"
 
 1722824600 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\header\config_define.h
 
-1729501625 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\header\config_extra.h
+1745488022 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\header\config_extra.h
 
 1699583839 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\header\io_def.h
 	"global.h"
@@ -1078,13 +1078,13 @@
 	"bsp_hdmi.h"
 	"bsp_port_init.h"
 
-1732083165 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_sys.h
+1745563142 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_sys.h
 
 1744960943 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_key.h
 
 1700560006 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_dac.h
 
-1619247991 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmrx.h
+1745481879 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmrx.h
 
 1617675127 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmtx.h
 
@@ -1092,7 +1092,7 @@
 
 1617675127 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_ir.h
 
-1722826763 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_audio.h
+1745482251 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_audio.h
 
 1704371874 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_music.h
 
@@ -1189,7 +1189,7 @@
 
 1630029642 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\port\port_tkey.h
 
-1732083165 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\res.h
+1745486319 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\res.h
 
 1686562185 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\modules\app\app_fota\app_fota.h
 
@@ -1229,7 +1229,7 @@
 1703507721 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_eq_table.c
 	"include.h"
 
-1729330388 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmrx.c
+1745482736 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmrx.c
 	"include.h"
 
 1720595971 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_fmtx.c
@@ -1254,8 +1254,9 @@
 
 1703574087 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_huart_audio.h
 
-1617675127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_i2c.c
+1745566235 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_i2c.c
 	"include.h"
+	"func_hlw.h"
 
 1680767261 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_i2s.c
 	"include.h"
@@ -1289,8 +1290,9 @@
 1704371874 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_karaok.c
 	"include.h"
 
-1744960380 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_key.c
+1745567598 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_key.c
 	"include.h"
+	"func_hlw.h"
 
 1617675127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_led.c
 	"include.h"
@@ -1333,8 +1335,9 @@
 1710919366 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_spp.c
 	"include.h"
 
-1744969996 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_sys.c
+1745567662 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_sys.c
 	"include.h"
+	"func_hlw.h"
 
 1656983743 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_tkey.c
 	"include.h"
@@ -1342,7 +1345,7 @@
 1724765767 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\bsp_uart.c
 	"include.h"
 
-1745222860 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func.c
+1745563433 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func.c
 	"include.h"
 
 1732083165 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_aux.c
@@ -1350,7 +1353,7 @@
 	"func.h"
 	"func_aux.h"
 
-1744959680 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_bt.c
+1745487154 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_bt.c
 	"include.h"
 	"func.h"
 	"func_bt.h"
@@ -1376,10 +1379,11 @@
 	"func_exspiflash_music.h"
 	"api_spiflash_ex.h"
 
-1729501625 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_fmrx.c
+1745491614 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_fmrx.c
 	"include.h"
 	"func.h"
 	"func_fmrx.h"
+	"func_hlw.h"
 
 1644913573 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_hdmi.c
 	"include.h"
@@ -1399,12 +1403,12 @@
 	"include.h"
 	"func.h"
 
-1617675127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_idle.c
+1745564148 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_idle.c
 	"include.h"
 	"func.h"
 	"func_idle.h"
 
-1702880203 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_lowpwr.c
+1745228967 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_lowpwr.c
 	"include.h"
 	"func.h"
 
@@ -1587,7 +1591,7 @@
 	"func.h"
 	"func_usbdev.h"
 
-1745227889 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\display\ledseg\display_ledseg.c
+1745495484 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\display\ledseg\display_ledseg.c
 	"include.h"
 	"ledseg/display_ledseg.h"
 
@@ -1599,12 +1603,12 @@
 	"func.h"
 	"bsp_karaok.h"
 
-1745227645 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_bt.c
+1745562653 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_bt.c
 	"include.h"
 	"func.h"
 	"func_bt.h"
 
-1745225891 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_clock.c
+1745492350 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_clock.c
 	"include.h"
 	"func.h"
 	"func_clock.h"
@@ -1615,10 +1619,11 @@
 	"func_music.h"
 	"func_exspiflash_music.h"
 
-1745223836 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_fmrx.c
+1745492148 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_fmrx.c
 	"include.h"
 	"func.h"
 	"func_fmrx.h"
+	"func_hlw.h"
 
 1642563467 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_hdmi.c
 	"include.h"
@@ -1634,7 +1639,7 @@
 	"func.h"
 	"func_i2s.h"
 
-1617675127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_idle.c
+1745561139 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\message\msg_idle.c
 	"include.h"
 	"func.h"
 	"func_idle.h"
@@ -1693,7 +1698,7 @@
 1617675127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\port\port_ir.c
 	"include.h"
 
-1744961298 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\port\port_key.c
+1745487970 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\port\port_key.c
 	"include.h"
 
 1666321538 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\port\port_led.c
@@ -1729,7 +1734,7 @@
 1727164580 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\projects\standard\ram.ld
 	"config.h"
 
-1744959452 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\hlw_bt.c
+1745487447 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\hlw_bt.c
 	"include.h"
 	"api.h"
 	"hlw_bt.h"
@@ -1737,9 +1742,15 @@
 
 1744961000 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\bsp\hlw_bt.h
 
-1744958127 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_hlw.c
+1745565348 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_hlw.c
 	"include.h"
 	"func_hlw.h"
 
-1744969982 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_hlw.h
+1745564342 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_hlw.h
+
+1745479159 source:d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_qn8035.c
+	"include.h"
+	"func_qn8035.h"
+
+1745479131 d:\bluetrum\project\y_yinwo\td009\code\20250418\sdk_560x_01x_s2256_20241227\app\platform\functions\func_qn8035.h
 

+ 270 - 125
sdk_560x_01x_s2256_20241227/app/projects/standard/app.layout

@@ -2,219 +2,304 @@
 <CodeBlocks_layout_file>
 	<FileVersion major="1" minor="0" />
 	<ActiveTarget name="Debug" />
-	<File name="..\..\platform\functions\func_aux.h" open="1" top="0" tabpos="32" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func.h" open="1" top="0" tabpos="71" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="897" topLine="0" />
+			<Cursor1 position="900" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_bt.c" open="1" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_sys.h" open="1" top="0" tabpos="89" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="16491" topLine="646" />
+			<Cursor1 position="1170" topLine="15" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\ledseg\ledseg_7p7s.c" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="display\display_aux.c" open="1" top="0" tabpos="43" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="570" topLine="0" />
+			<Cursor1 position="43" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\header\io_def.h" open="1" top="0" tabpos="64" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_qn8035.h" open="1" top="0" tabpos="85" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="9808" topLine="137" />
+			<Cursor1 position="5366" topLine="104" />
 		</Cursor>
 	</File>
-	<File name="display\display_fmam_freq.c" open="1" top="0" tabpos="46" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_huart.h" open="1" top="0" tabpos="35" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="294" topLine="0" />
+			<Cursor1 position="85" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="port\port_key.c" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_lowpwr.c" open="1" top="0" tabpos="62" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="5951" topLine="145" />
+			<Cursor1 position="19211" topLine="616" />
 		</Cursor>
 	</File>
-	<File name="plugin\plugin.c" open="1" top="0" tabpos="61" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\libs\strong_symbol.c" open="1" top="0" tabpos="30" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1839" topLine="17" />
+			<Cursor1 position="3529" topLine="104" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\hlw_bt.h" open="1" top="0" tabpos="22" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_fmrx.c" open="1" top="0" tabpos="77" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="470" topLine="0" />
+			<Cursor1 position="7276" topLine="214" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\libs\strong_symbol.c" open="1" top="0" tabpos="30" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="port\port_ledseg.c" open="1" top="0" tabpos="52" split="0" active="1" splitpos="0" zoom_1="1" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="3529" topLine="104" />
+			<Cursor1 position="11039" topLine="257" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_tkey.c" open="1" top="0" tabpos="31" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_bt.h" open="1" top="0" tabpos="28" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="6015" topLine="180" />
+			<Cursor1 position="2237" topLine="34" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\ledseg\ledseg_7p7s.h" open="1" top="0" tabpos="53" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_aux.c" open="1" top="0" tabpos="87" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="423" topLine="0" />
+			<Cursor1 position="3693" topLine="126" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_bt.c" open="1" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="message\msg_clock.c" open="1" top="0" tabpos="79" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="6527" topLine="198" />
+			<Cursor1 position="1250" topLine="2" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\bsp\bsp_led.c" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="5704" topLine="254" />
+			<Cursor1 position="3129" topLine="149" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_uart_upd.c" open="1" top="0" tabpos="63" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="811" topLine="6" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\gui\gui.h" open="1" top="0" tabpos="41" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1637" topLine="15" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_idle.c" open="1" top="1" tabpos="95" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="832" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_bt_hid.c" open="1" top="0" tabpos="48" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="2428" topLine="74" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\hlw_bt.c" open="1" top="0" tabpos="21" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="3920" topLine="159" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\libs\api_fmrx.h" open="1" top="0" tabpos="94" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="63" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="message\msg_usbdev.c" open="1" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="772" topLine="0" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\functions\func_hlw.h" open="1" top="0" tabpos="26" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="296" topLine="0" />
+			<Cursor1 position="283" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="message\msg_bt.c" open="1" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="..\..\platform\functions\func_bt_dut.c" open="1" top="0" tabpos="47" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1623" topLine="62" />
+			<Cursor1 position="2868" topLine="49" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_fmrx.h" open="1" top="0" tabpos="34" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="xcfg.h" open="1" top="0" tabpos="78" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="763" topLine="0" />
+			<Cursor1 position="5338" topLine="7" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_bt_dut.c" open="1" top="0" tabpos="47" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_spiflash1.c" open="1" top="0" tabpos="56" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1300" topLine="28" />
+			<Cursor1 position="18826" topLine="700" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\modules\bt\bt.c" open="1" top="0" tabpos="24" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\header\io_def.h" open="1" top="0" tabpos="64" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1191" topLine="0" />
+			<Cursor1 position="9808" topLine="137" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_uart_upd.c" open="1" top="0" tabpos="63" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\libs\api.h" open="1" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="811" topLine="6" />
+			<Cursor1 position="0" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_iis_ext.c" open="1" top="0" tabpos="55" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="display\ledseg\display_ledseg.c" open="1" top="0" tabpos="51" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="4966" topLine="95" />
+			<Cursor1 position="5434" topLine="202" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_music.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="message\msg_record.c" open="1" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1330" topLine="0" />
+			<Cursor1 position="962" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="message\msg_usbdev.c" open="1" top="0" tabpos="14" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="display\ledseg\display_ledseg.h" open="1" top="0" tabpos="49" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2210" topLine="0" />
+			<Cursor1 position="999" topLine="9" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\sfunc_bt_ring.c" open="1" top="0" tabpos="27" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="config.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="7320" topLine="214" />
+			<Cursor1 position="3718" topLine="26" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\functions\sfunc_bt_call.c" open="1" top="0" tabpos="29" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="16485" topLine="487" />
+			<Cursor1 position="16485" topLine="475" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_key.c" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_aux.c" open="1" top="0" tabpos="86" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="11468" topLine="407" />
+			<Cursor1 position="1070" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_key.h" open="1" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="port\port_led.c" open="1" top="0" tabpos="19" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="7071" topLine="165" />
+			<Cursor1 position="3255" topLine="92" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\libs\api.h" open="1" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_bt.c" open="1" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="0" topLine="0" />
+			<Cursor1 position="8434" topLine="320" />
 		</Cursor>
 	</File>
-	<File name="display\display_clock.c" open="1" top="0" tabpos="45" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\hlw_bt.h" open="1" top="0" tabpos="22" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="68" topLine="0" />
+			<Cursor1 position="210" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="port\port_pwm.c" open="1" top="0" tabpos="58" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\gui\ledseg\ledseg_common.c" open="1" top="0" tabpos="42" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="7528" topLine="237" />
+			<Cursor1 position="968" topLine="2" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\hlw_bt.c" open="1" top="0" tabpos="21" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_iis_ext.c" open="1" top="0" tabpos="55" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="935" topLine="38" />
+			<Cursor1 position="4966" topLine="95" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_param.c" open="1" top="0" tabpos="75" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="5894" topLine="179" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\sfunc_bt_ring.c" open="1" top="0" tabpos="27" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="7320" topLine="206" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\gui\gui.c" open="1" top="0" tabpos="40" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1083" topLine="17" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\bsp\bsp_dac.c" open="1" top="0" tabpos="67" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="4758" topLine="101" />
+			<Cursor1 position="4911" topLine="147" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_charge.h" open="1" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="port\port_key.c" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="108" topLine="0" />
+			<Cursor1 position="6384" topLine="138" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\gui.h" open="1" top="0" tabpos="41" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\libs\api_btstack.h" open="1" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="16612" topLine="350" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\header\sfr.h" open="1" top="0" tabpos="81" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="20280" topLine="386" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_music.c" open="1" top="0" tabpos="70" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="6780" topLine="217" />
+		</Cursor>
+	</File>
+	<File name="display\display_bt.c" open="1" top="0" tabpos="44" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="403" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_speaker.h" open="1" top="0" tabpos="39" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="395" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_audio.c" open="1" top="0" tabpos="91" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1648" topLine="4" />
+			<Cursor1 position="3437" topLine="65" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\functions\func_hlw.c" open="1" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="340" topLine="0" />
+			<Cursor1 position="634" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="display\ledseg\display_ledseg.h" open="1" top="0" tabpos="49" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_music.h" open="1" top="0" tabpos="37" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="633" topLine="1" />
+			<Cursor1 position="2496" topLine="47" />
 		</Cursor>
 	</File>
-	<File name="message\msg_record.c" open="1" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="plugin\plugin.h" open="1" top="0" tabpos="74" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="962" topLine="0" />
+			<Cursor1 position="1091" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_sys.c" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_fmrx.h" open="1" top="0" tabpos="76" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="36927" topLine="1392" />
+			<Cursor1 position="130" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_led.h" open="1" top="0" tabpos="59" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="res.h" open="1" top="0" tabpos="93" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="294" topLine="0" />
+			<Cursor1 position="1517" topLine="6" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_huart.h" open="1" top="0" tabpos="35" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="message\msg_bt.c" open="1" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="85" topLine="0" />
+			<Cursor1 position="3006" topLine="137" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\header\config_extra.h" open="1" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="plugin\plugin.c" open="1" top="0" tabpos="61" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="8222" topLine="281" />
+			<Cursor1 position="2754" topLine="86" />
 		</Cursor>
 	</File>
-	<File name="config.h" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
+	<File name="Output\bin\xcfg.xm" open="1" top="0" tabpos="60" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2526" topLine="15" />
+			<Cursor1 position="42621" topLine="204" />
 		</Cursor>
 	</File>
-	<File name="port\port_ledseg.c" open="1" top="1" tabpos="52" split="0" active="1" splitpos="0" zoom_1="1" zoom_2="0">
+	<File name="..\..\platform\functions\func_clock.h" open="1" top="0" tabpos="33" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="5070" topLine="264" />
+			<Cursor1 position="461" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="port\port_led.c" open="1" top="0" tabpos="19" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_audio.h" open="1" top="0" tabpos="88" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="803" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_clock.c" open="1" top="0" tabpos="80" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="956" topLine="21" />
+			<Cursor1 position="1533" topLine="55" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\libs\api_sys.h" open="1" top="0" tabpos="96" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1111" topLine="0" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\bsp\bsp_dump_buf_huart.c" open="1" top="0" tabpos="54" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -222,34 +307,39 @@
 			<Cursor1 position="1458" topLine="1" />
 		</Cursor>
 	</File>
-	<File name="Output\bin\xcfg.xm" open="1" top="0" tabpos="60" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\header\config_extra.h" open="1" top="0" tabpos="23" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="42621" topLine="213" />
+			<Cursor1 position="5852" topLine="205" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_clock.h" open="1" top="0" tabpos="33" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_sys.c" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="970" topLine="0" />
+			<Cursor1 position="34245" topLine="1301" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_bt.h" open="1" top="0" tabpos="28" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_uart.c" open="1" top="0" tabpos="57" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2077" topLine="46" />
+			<Cursor1 position="1106" topLine="45" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\ledseg\ledseg_common.h" open="1" top="0" tabpos="50" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\gui\ledseg\ledseg_7p7s.h" open="1" top="0" tabpos="53" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2567" topLine="2" />
+			<Cursor1 position="536" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_speaker.h" open="1" top="0" tabpos="39" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_i2s_wm8978.c" open="1" top="0" tabpos="66" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="395" topLine="0" />
+			<Cursor1 position="5917" topLine="180" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_bt_hid.c" open="1" top="0" tabpos="48" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_key.c" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2990" topLine="85" />
+			<Cursor1 position="14649" topLine="487" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_spdif.h" open="1" top="0" tabpos="38" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1297" topLine="0" />
 		</Cursor>
 	</File>
 	<File name="..\..\platform\functions\func_i2s.h" open="1" top="0" tabpos="36" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -257,84 +347,139 @@
 			<Cursor1 position="263" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="display\ledseg\display_ledseg.c" open="1" top="0" tabpos="51" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_fmrx.c" open="1" top="0" tabpos="73" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="4834" topLine="179" />
+			<Cursor1 position="5267" topLine="206" />
 		</Cursor>
 	</File>
-	<File name="display\display_bt.c" open="1" top="0" tabpos="44" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_charge.c" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="403" topLine="0" />
+			<Cursor1 position="3451" topLine="91" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func.c" open="1" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func.c" open="1" top="0" tabpos="18" split="0" active="1" splitpos="0" zoom_1="1" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="8036" topLine="51" />
+			<Cursor1 position="5799" topLine="169" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_charge.c" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="message\msg_music.c" open="1" top="0" tabpos="82" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="3864" topLine="105" />
+			<Cursor1 position="4060" topLine="99" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\ledseg\ledseg_common.c" open="1" top="0" tabpos="42" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_key.h" open="1" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="434" topLine="2" />
+			<Cursor1 position="13225" topLine="261" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\gui\gui.c" open="1" top="0" tabpos="40" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_led.h" open="1" top="0" tabpos="59" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2999" topLine="96" />
+			<Cursor1 position="2208" topLine="41" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\header\config_define.h" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="display\display_clock.c" open="1" top="0" tabpos="45" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1012" topLine="10" />
+			<Cursor1 position="574" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_lowpwr.c" open="1" top="0" tabpos="62" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\modules\bt\bt.c" open="1" top="0" tabpos="24" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="7851" topLine="314" />
+			<Cursor1 position="1191" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="display\display_aux.c" open="1" top="0" tabpos="43" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_bt.c" open="1" top="0" tabpos="17" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="43" topLine="0" />
+			<Cursor1 position="5341" topLine="179" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\libs\api_btstack.h" open="1" top="0" tabpos="15" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_music.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="6242" topLine="108" />
+			<Cursor1 position="1330" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_uart.c" open="1" top="0" tabpos="57" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\bsp\bsp_charge.h" open="1" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1106" topLine="45" />
+			<Cursor1 position="108" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_spiflash1.c" open="1" top="0" tabpos="56" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\gui\ledseg\ledseg_common.h" open="1" top="0" tabpos="50" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="18826" topLine="707" />
+			<Cursor1 position="663" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_huart_audio.c" open="1" top="0" tabpos="65" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="..\..\platform\functions\func_aux.h" open="1" top="0" tabpos="32" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="4224" topLine="132" />
+			<Cursor1 position="897" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_spdif.h" open="1" top="0" tabpos="38" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="message\msg_fmrx.c" open="1" top="0" tabpos="72" split="0" active="1" splitpos="0" zoom_1="3" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1297" topLine="0" />
+			<Cursor1 position="563" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\bsp\bsp_i2s_wm8978.c" open="1" top="0" tabpos="66" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="plugin\multi_lang.h" open="1" top="0" tabpos="92" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="5917" topLine="180" />
+			<Cursor1 position="14728" topLine="199" />
 		</Cursor>
 	</File>
-	<File name="..\..\platform\functions\func_music.h" open="1" top="0" tabpos="37" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="display\display_fmam_freq.c" open="1" top="0" tabpos="46" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="294" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_param.h" open="1" top="0" tabpos="68" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="2496" topLine="50" />
+			<Cursor1 position="2895" topLine="21" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\gui\ledseg\ledseg_7p7s.c" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="727" topLine="20" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_lowpwr.h" open="1" top="0" tabpos="83" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="488" topLine="0" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_bt.h" open="1" top="0" tabpos="69" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="1307" topLine="4" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_fmtx.c" open="1" top="0" tabpos="90" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="0" topLine="81" />
+		</Cursor>
+	</File>
+	<File name="port\port_pwm.c" open="1" top="0" tabpos="58" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="7528" topLine="237" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\header\config_define.h" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="6653" topLine="99" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_tkey.c" open="1" top="0" tabpos="31" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="6015" topLine="180" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_qn8035.c" open="1" top="0" tabpos="84" split="0" active="1" splitpos="0" zoom_1="2" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="15940" topLine="504" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\functions\func_fmrx.h" open="1" top="0" tabpos="34" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="617" topLine="3" />
+		</Cursor>
+	</File>
+	<File name="..\..\platform\bsp\bsp_huart_audio.c" open="1" top="0" tabpos="65" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="4224" topLine="132" />
 		</Cursor>
 	</File>
 </CodeBlocks_layout_file>

+ 24 - 13
sdk_560x_01x_s2256_20241227/app/projects/standard/config.h

@@ -26,7 +26,7 @@
 #define FUNC_I2S_EN                     0   //是否打开I2S接收功能(需使能I2S为Slave)
 #define FUNC_HUART_EN                   0   //是否打开HUART接收功能
 #define FUNC_TOM_CAT_EN                 0   //是否打开TOM_CAT模式(需要开启录音功能,使用flash 1M的型号进行内录)
-#define FUNC_IDLE_EN                    0   //是否打开IDLE功能
+#define FUNC_IDLE_EN                    1   //是否打开IDLE功能
 
 /*****************************************************************************
  * Module    : 系统功能选择配置
@@ -380,7 +380,7 @@
 #define USER_KEY_KNOB_LEVEL             16          //旋钮的级数
 
 #define USER_MULTI_PRESS_EN              1           //按键N击检测使能
-#define USER_KEY_DOUBLE                 {KU_HSF, KU_REC, KU_PLAY_POWER, KU_PLAY}        //支持双击/三击/四击/五击的按键
+#define USER_KEY_DOUBLE                 {KU_HSF, KU_REC, KU_PLAY_POWER, KU_PLAY, KU_VOL_UP_NEXT, KU_VOL_DOWN_PREV}        //支持双击/三击/四击/五击的按键
 #define ADKEY_CH                        xcfg_cb.adkey_ch    //ADCCH_PE7
 #define ADKEY2_CH                       xcfg_cb.adkey2_ch   //ADCCH_PE6
 
@@ -428,8 +428,8 @@
 /*****************************************************************************
  * Module    : I2C配置
  *****************************************************************************/
-#define I2C_EN                          0           //是否使能I2C功能
-#define I2C_MUX_SD_EN                   1           //是否I2C复用SD卡的IO
+#define I2C_EN                          1           //是否使能I2C功能
+#define I2C_MUX_SD_EN                   0           //是否I2C复用SD卡的IO
 
 #if I2C_MUX_SD_EN
 #define I2C_SCL_IN()                    SD_CMD_DIR_IN()
@@ -443,10 +443,10 @@
 #define I2C_SDA_L()                     SD_DAT_OUT_L()
 #define I2C_SDA_IS_H()                  SD_DAT_STA()
 #else
-#define I2C_SCL_IN()                    {GPIOEDIR |= BIT(5); GPIOEPU  |= BIT(5);}
-#define I2C_SCL_OUT()                   {GPIOEDE |= BIT(5); GPIOEDIR &= ~BIT(5);}
-#define I2C_SCL_H()                     {GPIOESET = BIT(5);}
-#define I2C_SCL_L()                     {GPIOECLR = BIT(5);}
+#define I2C_SCL_IN()                    {GPIOEDIR |= BIT(6); GPIOEPU  |= BIT(6);}//{GPIOEDIR |= BIT(5); GPIOEPU  |= BIT(5);}
+#define I2C_SCL_OUT()                   {GPIOEDE |= BIT(6); GPIOEDIR &= ~BIT(6);}//{GPIOEDE |= BIT(5); GPIOEDIR &= ~BIT(5);}
+#define I2C_SCL_H()                     {GPIOESET = BIT(6);}//{GPIOESET = BIT(5);}
+#define I2C_SCL_L()                     {GPIOECLR = BIT(6);}//{GPIOECLR = BIT(5);}
 
 #define I2C_SDA_IN()                    {GPIOEDIR |= BIT(7); GPIOEPU  |= BIT(7);}
 #define I2C_SDA_OUT()                   {GPIOEDE |= BIT(7); GPIOEDIR &= ~BIT(7);}
@@ -598,7 +598,7 @@
 /*****************************************************************************
  * Module    : 充电功能选择
  *****************************************************************************/
-#define CHARGE_EN                       0           //是否打开充电功能
+#define CHARGE_EN                       1           //是否打开充电功能
 #define CHARGE_OUT_POWER_ON             0           //充电时, 拔出充电则开机(DC不断电才支持)
 #define CHARGE_TRICK_EN                 xcfg_cb.charge_trick_en     //是否打开涓流充电功能
 #define CHARGE_DC_RESET                 xcfg_cb.charge_dc_reset     //是否打开DC插入复位功能
@@ -650,15 +650,15 @@
 #define WARNING_FUNC_SPEAKER            0
 #define WARNING_LOW_BATTERY             0
 #define WARNING_BT_WAIT_CONNECT         0
-#define WARNING_BT_CONNECT              0
-#define WARNING_BT_DISCONNECT           0
+#define WARNING_BT_CONNECT              1
+#define WARNING_BT_DISCONNECT           1
 #define WARNING_BT_TWS_CONNECT          0
 #define WARNING_BT_TWS_DISCON           0
 #define WARNING_BT_INCALL               1
 #define WARNING_BT_CALLOUT              0
 #define WARNING_USB_SD                  0
-#define WARNING_MAX_VOLUME              0
-#define WARNING_MIN_VOLUME              0
+#define WARNING_MAX_VOLUME              1
+#define WARNING_MIN_VOLUME              1
 #define WARNING_BT_HID_MENU             0            //BT HID MENU手动连接/断开HID Profile提示音
 #define WARNING_BTHID_CONN              0            //BTHID模式是否有独立的连接/断开提示音
 #define WARNING_BT_PAIR                 0            //BT PAIRING提示音
@@ -669,9 +669,20 @@
 #define HLW_UI                          1
 
 #if HLW_UI
+#define FMRX_QN8035_EN                  1
+
+#if FMRX_QN8035_EN
+///外接收音芯片相关配置
+#define FMRX_2_SDADC_EN                 1                               //外接收音是否进SDADC,否则直通DAC。进SDADC可以调EQ,FMRX录音等功能。
+#define FMRX_CHANNEL_CFG                (CH_AUXL_PF0 | CH_AUXR_PF1)      //选择FMRX的通路
+#define FMRX_AUX_ANL_GAIN               AUX_N0DB                        //AUX输入的模拟增益
+#define FMRX_CLOCK                      FM_USE_CRYSTAL_32K
+#define FMRX_CLKOMAP                    CLKOMAP_PE5
+#endif // FMRX_QN8035_EN
 
 #endif // HLW_UI
 
+
 #include "config_extra.h"
 
 #endif // USER_CONFIG_H

+ 8 - 0
sdk_560x_01x_s2256_20241227/app/projects/standard/display/ledseg/display_ledseg.c

@@ -193,6 +193,10 @@ void ledseg_disp_bt(void)
             ledseg_buf[1] = T_LEDSEG_D;
             ledseg_buf[2] = T_LEDSEG_U;
             ledseg_buf[3] = T_LEDSEG_T;
+        }
+        else if(func_cb.sta == FUNC_PWROFF)
+        {
+
         }
         else
         {
@@ -338,10 +342,14 @@ void ledseg_disp_rec_pause(void)
 AT(.text.display.ledseg)
 void ledseg_disp_idle(void)
 {
+#if HLW_UI
+    ledseg_buf[4] |= ICON_DDOT;
+#else
     ledseg_buf[0] = T_LEDSEG_I;
     ledseg_buf[1] = T_LEDSEG_D;
     ledseg_buf[2] = T_LEDSEG_L;
     ledseg_buf[3] = T_LEDSEG_E;
+#endif // HLW_UI
 }
 
 AT(.text.display.ledseg)

+ 1 - 0
sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_bt.c

@@ -253,6 +253,7 @@ void func_bt_message(u16 msg)
             }
         }
 #endif
+        printf("charge_dc_detect %d\n", charge_dc_detect());
         break;
 
     case EVT_A2DP_MUSIC_PLAY:

+ 5 - 1
sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_clock.c

@@ -20,6 +20,7 @@ void func_clock_message(u16 msg)
             break;
 
         case KL_VOL_UP:
+        case KL_VOL_UP_NEXT:
             if ((tm_cb.setting)&&(tm_cb.index == 2))  //如果正在调整小时,长按就退出并且设置当前调整时间
             {
                 tm_cb.setting = 0;
@@ -40,6 +41,7 @@ void func_clock_message(u16 msg)
             break;
 
         case KL_VOL_DOWN:
+        case KL_VOL_DOWN_PREV:
             if ((tm_cb.setting)&&(tm_cb.index == 1))  //如果正在调整分钟,长按就退出并且设置当前调整时间
             {
                 tm_cb.setting = 0;
@@ -60,6 +62,7 @@ void func_clock_message(u16 msg)
             break;
 
         case KU_VOL_UP:
+        case KU_VOL_UP_NEXT:
             if (tm_cb.setting)
             {
                 tm_cb.cnt = 0;
@@ -85,6 +88,7 @@ void func_clock_message(u16 msg)
             break;
 
         case KU_VOL_DOWN:
+        case KU_VOL_DOWN_PREV:
             if (tm_cb.setting)
             {
                 tm_cb.cnt = 0;
@@ -183,7 +187,7 @@ void func_clock_message(u16 msg)
                     if (rtc_tm.tm_min > 0) {
                         rtc_tm.tm_min--;
                     } else {
-                        rtc_tm.tm_min = 59;
+        rtc_tm.tm_min = 59;
                     }
                     huart_tx_clock();
                 } else if (tm_cb.index == 2) {

+ 44 - 1
sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_fmrx.c

@@ -1,6 +1,9 @@
 #include "include.h"
 #include "func.h"
 #include "func_fmrx.h"
+#if HLW_UI
+#include "func_hlw.h"
+#endif // HLW_UI
 
 #if FUNC_FMRX_EN
 AT(.text.func.fmrx.msg)
@@ -25,6 +28,46 @@ void func_fmrx_message(u16 msg)
             break;
 #endif // HLW_UI
 
+#if HLW_UI
+        case KU_VOL_DOWN_PREV:
+            //设定频率,往小设定,0.1为一格
+            fmrx_switch_freq(0);
+            break;
+
+        case KL_VOL_DOWN_PREV:
+            //从大往小搜索
+            sys_cb.mute = 0;
+            if (fmrx_cb.sta == FMRX_PAUSE) {
+                func_fmrx_pause_play();
+            }
+            if (fmrx_cb.sta == FMRX_PLAY) {
+                fmrx_cb.sta = FMRX_SEEK_START;
+                hlw_cb.search_freq_type = FM_SEARCH_MAX_MIN;
+            } else {
+                fmrx_cb.sta = FMRX_SEEK_STOP;
+            }
+            break;
+
+        case KU_VOL_UP_NEXT:
+            //设定频率,往大设定,0.1为一格
+            fmrx_switch_freq(1);
+            break;
+
+        case KL_VOL_UP_NEXT:
+            //从小往大搜索
+            sys_cb.mute = 0;
+            if (fmrx_cb.sta == FMRX_PAUSE) {
+                func_fmrx_pause_play();
+            }
+            if (fmrx_cb.sta == FMRX_PLAY) {
+                fmrx_cb.sta = FMRX_SEEK_START;
+                hlw_cb.search_freq_type = FM_SEARCH_MIN_MAX;
+            } else {
+                fmrx_cb.sta = FMRX_SEEK_STOP;
+            }
+            break;
+
+#else
         case KL_PLAY:
         case KU_PLAY_POWER:
         case KU_PLAY_MODE:
@@ -64,7 +107,7 @@ void func_fmrx_message(u16 msg)
                 func_fmrx_pause_play();
             }
             break;
-
+#endif // HLW_UI
 #if FMRX_HALF_SEEK_EN
         case KL_PREV:
             fmrx_half_seek_start(0);

+ 1 - 1
sdk_560x_01x_s2256_20241227/app/projects/standard/message/msg_idle.c

@@ -9,7 +9,7 @@ void func_idle_message(u16 msg)
     switch (msg) {
 
         default:
-            func_message(msg);
+            //func_message(msg);
             break;
     }
 }

+ 4 - 4
sdk_560x_01x_s2256_20241227/app/projects/standard/port/port_key.c

@@ -163,11 +163,11 @@ AT(.com_rodata.pwrkey.table)
 const adkey_tbl_t pwrkey_table[7] = {
 #if HLW_UI
     {0x0A, KEY_POWER},          //P/P POWER     0
-    {0x2D, KEY_VOL_DOWN},       //PREV/VOL-     64
-    {0x65, KEY_VOL_UP},         //NEXT/VOL+     129
-    {0xA0, KEY_NEXT},           //MODE          192
+    {0x2D, NO_KEY/*KEY_VOL_DOWN*/},       //PREV/VOL-     64
+    {0x65, NO_KEY/*KEY_VOL_UP*/},         //NEXT/VOL+     129
+    {0xA0, KEY_VOL_UP_NEXT/*KEY_NEXT*/},           //MODE          192
     {0xC3, KEY_PLAY},           //HSF           238
-    {0xF5, KEY_PREV},           //HSF           238
+    {0xF5, KEY_VOL_DOWN_PREV/*KEY_PREV*/},           //HSF           238
     {0xFF, NO_KEY},
 #else
     {0x08, KEY_PLAY_POWER},     //P/P POWER     0

Деякі файли не було показано, через те що забагато файлів було змінено