当前位置: 首页 > news >正文

Function模块

0 Preface/Foreword

1 数据结构 

1.1 func_cb_t 

//task control block
typedef struct {u8 sta;                                         //cur working task numberu8 last;                                        //lask task number
#if BT_BACKSTAGE_ENu8 sta_break;                                   //被中断的任务
#endifvoid (*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_ENcase FUNC_MUSIC:func_music();break;
#endif // FUNC_MUSIC_ENcase FUNC_GWATCHFACE_SHOW:printf("[OHZ]%s, %d\n", __func__, __LINE__);func_gwatchface_show();break;
#if BT_EMIT_ENcase FUNC_GEMIT:func_gemit();break;
#endif
#if FUNC_BT_ENFUNC_MENU_STARcase FUNC_BT:func_bt();break;
#endif#if FUNC_BTHID_ENcase FUNC_BTHID:func_bthid();break;
#endif // FUNC_BTHID_EN#if FUNC_AUX_ENcase FUNC_AUX:func_aux();break;
#endif // FUNC_AUX_EN#if FUNC_USBDEV_ENcase FUNC_USBDEV:func_usbdev();break;
#endif#if FUNC_SPDIF_ENcase FUNC_SPDIF:func_spdif();break;
#endif#if FUNC_FMAM_FREQ_ENcase FUNC_FMAM_FREQ:func_fmam_freq();break;
#endif // FUNC_FMAM_FREQ_EN#if FUNC_SPEAKER_ENcase FUNC_SPEAKER:func_speaker();break;
#endif // FUNC_SPEAKER_EN#if FUNC_IDLE_ENcase FUNC_IDLE:func_idle();break;
#endif // FUNC_IDLE_EN#if FUNC_BT_DUT_ENcase FUNC_BT_DUT:func_bt_dut();break;
#endif
#if FUNC_BT_FCC_ENcase FUNC_BT_FCC:func_bt_fcc();break;
#endifcase 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_TIMERco_timer_pro();
#endif
#if VBAT_DETECT_ENlowpower_vbat_process();
#endif // VBAT_DETECT_EN#if VUSB_TBOX_QTEST_ENif(qtest_get_mode()){qtest_process();}qtest_other_usage_process();
#endif#if USER_NTCif(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_ENif (xcfg_cb.charge_en) {charge_detect(1);
//        bsp_charge_inbox_process();}
#endif // CHARGE_EN#if SYS_KARAOK_ENkaraok_process();
#endif#if LE_APP_ENbsp_ble_process();
#endif
#if FOT_ENbsp_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_ENif ((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_ENparam_sys_mode_write(func_cb.sta);
#endif // SYS_MODE_BREAKPOINT_EN
}

http://www.lryc.cn/news/169159.html

相关文章:

  • Prometheus PromQL数据查询语言
  • 如何将转换器应用于时序模型
  • 数据结构:队列
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现
  • 计网第五章(运输层)(四)(TCP的流量控制)
  • 【华为OD机试python】查找众数及中位数【2023 B卷|100分】
  • 阿里云无影云电脑详细介绍:价格、使用和功能优势说明
  • 【实践篇】MySQL执行计划详解
  • 二维凸包(Graham) 模板 + 详解
  • ElasticSearch(ES)简单介绍
  • OpenCV(三十五):凸包检测
  • PS 透视裁剪工具
  • 每日一个C库函数-#1-memset()
  • GraphQL基础知识与Spring for GraphQL使用教程
  • 【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析
  • 威胁的数量、复杂程度和扩散程度不断上升
  • NSSCTF web 刷题记录2
  • Linux驱动之INPUT子系统框架
  • Long类型雪花算法ID返回前端后三位精度缺失问题解决
  • 6.8-SpringIoC之循环依赖底层源码解析
  • Springboot 实践(18)Nacos配置中心参数自动刷新测试
  • uniapp引入小程序原生插件
  • 自己记录微信小程序开发遇到的问题
  • 【leetcode 力扣刷题】栈—波兰式///逆波兰式相关知识和题目
  • Web 第一步:HTTP 协议(基础)
  • 【Vue】快速入门案例与工作流程的讲解
  • LuatOS-SOC接口文档(air780E)--camera - codec - 多媒体-编解码
  • 《动手学深度学习 Pytorch版》 6.6 卷积神经网络
  • 【微信小程序】项目初始化
  • C#,《小白学程序》第二十六课:大数乘法(BigInteger Multiply)的Toom-Cook 3算法及源程序