Function模块

发布于:2023-09-15 ⋅ 阅读:(138) ⋅ 点赞:(0)

0 Preface/Foreword

1 数据结构 

1.1 func_cb_t 

//task control block
typedef struct {
    u8 sta;                                         //cur working task number
    u8 last;                                        //lask task number
#if BT_BACKSTAGE_EN
    u8 sta_break;                                   //被中断的任务
#endif
    void (*mp3_res_play)(u32 addr, u32 len);        //各任务的语音播报函数接口
    void (*set_vol_callback)(u8 dir);               //设置音量的回调函数,用于各任务的音量事件处理。
} func_cb_t;

cbControl Block,控制块。

1.2 task number

//task number
enum {
    FUNC_NULL = 0,
    FUNC_MUSIC,
    FUNC_FMRX,
    FUNC_CLOCK,
    FUNC_BT,
    FUNC_BTHID,
    FUNC_USBDEV,
    FUNC_AUX,
    FUNC_SPDIF,
    FUNC_FMAM_FREQ,
    FUNC_SPEAKER,
    FUNC_PWROFF,
    FUNC_SLEEPMODE,
    FUNC_EXSPIFLASH_MUSIC,
    FUNC_BT_DUT,                        //CBT测试模式
    FUNC_BT_FCC,                        //FCC测试模式
    FUNC_BT_IODM,                       //IODM测试模式
    FUNC_IDLE,
    FUNC_I2S,

    FUNC_GACTIVITY,
    FUNC_GBLOOD_OXYGEN,
    FUNC_GBREATH,
    FUNC_GHEARTRATE,
    FUNC_GMENU,
    FUNC_GMUSIC,
    FUNC_GNMC,
    FUNC_GSLEEP,
    FUNC_GMSG,
    FUNC_GQRCODE,
    FUNC_GSETUP,
    FUNC_GDORMANCY,
    FUNC_GSTOPWATCH,
    FUNC_GWEATHER,
    FUNC_GWATCHFACE_CHOOSE,
    FUNC_GWORKOUT_GOAL,
    FUNC_GWORKOUT_CHOOSE,
    FUNC_GWATCHFACE_SHOW,
    FUNC_GEMIT,

    FUNC_MENU_STAR,
};

2 代码分析

2.0 func_run

AT(.text.func)
void func_run(void)
{
    printf("[OHZ]%s, %d\n", __func__, __LINE__);

    func_bt_chk_off();
    func_cb.sta = FUNC_GWATCHFACE_SHOW;
    while (1) {
        func_enter();
        switch (func_cb.sta) {
#if 0//FUNC_MUSIC_EN
        case FUNC_MUSIC:
            func_music();
            break;
#endif // FUNC_MUSIC_EN

        case FUNC_GWATCHFACE_SHOW:
            printf("[OHZ]%s, %d\n", __func__, __LINE__);
            func_gwatchface_show();
            break;
#if BT_EMIT_EN
        case FUNC_GEMIT:
            func_gemit();
            break;
#endif
#if FUNC_BT_ENFUNC_MENU_STAR
        case FUNC_BT:
            func_bt();
            break;
#endif

#if FUNC_BTHID_EN
        case FUNC_BTHID:
            func_bthid();
            break;
#endif // FUNC_BTHID_EN

#if FUNC_AUX_EN
        case FUNC_AUX:
            func_aux();
            break;
#endif // FUNC_AUX_EN

#if FUNC_USBDEV_EN
        case FUNC_USBDEV:
            func_usbdev();
            break;
#endif

#if FUNC_SPDIF_EN
        case FUNC_SPDIF:
            func_spdif();
            break;
#endif

#if FUNC_FMAM_FREQ_EN
        case FUNC_FMAM_FREQ:
            func_fmam_freq();
            break;
#endif // FUNC_FMAM_FREQ_EN

#if FUNC_SPEAKER_EN
        case FUNC_SPEAKER:
            func_speaker();
            break;
#endif // FUNC_SPEAKER_EN

#if FUNC_IDLE_EN
        case FUNC_IDLE:
            func_idle();
            break;
#endif // FUNC_IDLE_EN

#if FUNC_BT_DUT_EN
        case FUNC_BT_DUT:
            func_bt_dut();
            break;
#endif
#if FUNC_BT_FCC_EN
        case FUNC_BT_FCC:
            func_bt_fcc();
            break;
#endif

        case FUNC_MENU_STAR:
            func_menu_star();
            break;

        case FUNC_PWROFF:
            func_pwroff(sys_cb.pwrdwn_tone_en);
            break;


        default:
            func_exit();
            break;
        }
    }
}

 

2.1 func_enter

///进入一个功能的总入口
AT(.text.func)
void func_enter(void)
{
    printf("[OHZ]%s, %d\n", __func__, __LINE__);
    param_sync();
    reset_sleep_delay();
    reset_pwroff_delay();
    func_cb.mp3_res_play = func_bt_mp3_res_play;
    func_cb.set_vol_callback = NULL;
    bsp_clr_mute_sta();
    sys_cb.voice_evt_brk_en = 1;    //播放提示音时,快速响应事件。
}

2.2 func_process

AT(.text.func.process)
void func_process(void)
{
    WDT_CLR();

    motor_process();

#if USE_CO_TIMER
    co_timer_pro();
#endif
#if VBAT_DETECT_EN
    lowpower_vbat_process();
#endif // VBAT_DETECT_EN

#if VUSB_TBOX_QTEST_EN
    if(qtest_get_mode()){
        qtest_process();
    }
    qtest_other_usage_process();
#endif

#if USER_NTC
    if(sys_cb.ntc_2_pwrdwn_flag){
        sys_cb.pwrdwn_tone_en = 1;
        func_cb.sta = FUNC_PWROFF;
//        printf("hello WIKI\n");
        sys_cb.ntc_2_pwrdwn_flag = 0;
    }
#endif

#if CHARGE_EN
    if (xcfg_cb.charge_en) {
        charge_detect(1);
//        bsp_charge_inbox_process();
    }
#endif // CHARGE_EN

#if SYS_KARAOK_EN
    karaok_process();
#endif

#if LE_APP_EN
    bsp_ble_process();
#endif
#if FOT_EN
    bsp_fot_process();
#endif


    // gsensor_process();

    if (BT_DUAL_MODE_EN && xcfg_cb.ble_en) {
        platform_ble_process();
    }

    sleep_process(bt_is_sleep);

#if FUNC_MUSIC_EN
    if ((dev_is_online(DEV_UDISK)) || (dev_is_online(DEV_SDCARD)) || (dev_is_online(DEV_SDCARD1))) {
        music_process_do();
    }
#endif
}

2.3 func_watch_bt_process

AT(.text.func.process)
void func_watch_bt_process(void)
{
    func_bt_status();
    if(f_bt.disp_status == BT_STA_INCOMING) {
        sfunc_bt_ring();
        reset_sleep_delay();
        reset_pwroff_delay();
    } else if(f_bt.disp_status == BT_STA_OTA) {
        sfunc_bt_ota();
        reset_sleep_delay();
        reset_pwroff_delay();
    } else if(f_bt.disp_status >= BT_STA_OUTGOING) {
        sfunc_bt_call();
        reset_sleep_delay();
        reset_pwroff_delay();
    }
}

2.4 func_message

//func common message process
AT(.text.func.msg)
void func_message(u16 msg)
{
    switch (msg) {
        case EVT_KNOB_FORWARD:
            printf("EVT_KNOB_FORWARD\n");
            break;
        default:
            break;
}

2.5 func_exit

AT(.text.func)
void func_exit(void)
{
    u8 func_num;
    u8 funcs_total = get_funcs_total();

    for (func_num = 0; func_num != funcs_total; func_num++) {
        if (func_cb.last == func_sort_table[func_num]) {
            break;
        }
    }
    func_num++;                                     //切换到下一个任务
    if (func_num >= funcs_total) {
        func_num = 0;
    }
    func_cb.sta = func_sort_table[func_num];        //新的任务
#if SYS_MODE_BREAKPOINT_EN
    param_sys_mode_write(func_cb.sta);
#endif // SYS_MODE_BREAKPOINT_EN
}

本文含有隐藏内容,请 开通VIP 后查看