当前位置: 首页 > 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
}

相关文章:

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…...

Prometheus PromQL数据查询语言

PromQL 简介 PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言。支持用户进行实时的数据查询及聚合操作。 Prometheus 基于指标名称(metrics name)以及附属的标签集(labelset)唯一定义一…...

如何将转换器应用于时序模型

一、说明 在机器学习的广阔环境中,变压器作为建筑奇迹屹立不倒,以其复杂的设计和捕获复杂关系的能力重塑了我们处理和理解大量数据的方式。 自 2017 年创建第一台变压器以来,变压器类型呈爆炸式增长,包括强大的生成 AI 模型&#…...

数据结构:队列

文章目录 队列一,概述二,添加数据三,删除数据 队列 一,概述 队列是一种特殊的数据结构,它遵循先进先出(FIFO)的原则。在队列中,元素被添加到末尾,并从头部移除。队列只…...

AUTOSAR汽车电子嵌入式编程精讲300篇-基于AUTOSAR架构的AT控制系统研究与实现

目录 前言 国内外研究现状 国外研究现状 国内研究现状 2 AUTOSAR规范及开发流程...

计网第五章(运输层)(四)(TCP的流量控制)

一、基本概念 流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。 注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现…...

【华为OD机试python】查找众数及中位数【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 众数是指一组数据中出现次数最多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排序后,如果这组数据的总数是奇数, 那最中间的那个数就是中位数; 如果这组数据总数是偶数,那…...

阿里云无影云电脑详细介绍:价格、使用和功能优势说明

什么是阿里云无影云电脑?无影云电脑(原云桌面)是一种快速构建、高效管理桌面办公环境,无影云电脑可用于远程办公、多分支机构、安全OA、短期使用、专业制图等使用场景,阿里云百科分享无影云桌面的详细介绍、租用价格、…...

【实践篇】MySQL执行计划详解

文章目录 本文知识大纲速览1. 前言2. 基本介绍1. 什么是执行计划2. 如何查看执行计划3. 执行计划的组成部分 3. 执行计划的关键元素1. id2. select_type3. table:4. type:5. possible_keys:6. key:7. key_len8. ref:9. rows:10. Extra 4. 底层原理5. 执行计划示例解读本文知识图…...

二维凸包(Graham) 模板 + 详解

(闲话) 上了大学后没怎么搞oi,从土木跑路到通信了(提桶开润大成功!),但是一年上两年的课(补的),保研也寄掉了( 说起来自从博客被大学同学发现并…...

ElasticSearch(ES)简单介绍

ES简介 Elasticsearch(通常简称为ES)是一个开源的分布式搜索和分析引擎,旨在处理各种类型的数据,包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的,但随着时间的推移,它已经演变成一个功能…...

OpenCV(三十五):凸包检测

1.凸包检测介绍 凸包检测是计算凸包的一种技术,凸包就是:给定二维平面上的点集,将最外层的点连接起来构成的凸边形,它是包含点集中所有的点。 2.凸包检测函数convexHull() void cv::convexHull ( InputArray points, OutputArra…...

PS 透视裁剪工具

上文 PS 裁剪工具及工具栏配置讲解 我们讲完了裁剪工具 然后 我们继续来研究 透视裁剪工具 切换到 透视裁剪工具 后 我们先点击左上方的清除 先不要这些多的配置 然后 我们可以先用鼠标在图像上 画出一个局域 然后 我们去拖他四个角中的其中一个 就能拖出一些不同的形状 然…...

每日一个C库函数-#1-memset()

每日一个C库函数-#1-memset() 来源 C 标准库 - <string.h> 声明 void *memset(void *str, int c, size_t n);str&#xff1a;要填充的内存块&#xff1b;c&#xff1a;要被设置的值&#xff08;以何值填充&#xff09;。该值以 int 形式传递&#xff0c;填充内存块时…...

GraphQL基础知识与Spring for GraphQL使用教程

文章目录 1、数据类型1.1、标量类型1.2. 高级数据类型 基本操作2、Spring for GraphQL实例2.1、项目目录2.2、数据库表2.3、GraphQL的schema.graphql2.4、Java代码 3、运行效果3.1、添加用户3.2、添加日志3.3、查询所有日志3.4、查询指定用户日志3.5、数据订阅 4、总结 GraphQL…...

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…...

威胁的数量、复杂程度和扩散程度不断上升

Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查&#xff0c;强调了他们的主要网络安全威胁和担忧…...

NSSCTF web 刷题记录2

文章目录 前言题目[广东强网杯 2021 团队组]love_Pokemon[NCTF 2018]Easy_Audit[安洵杯 2019]easy_web[NCTF 2018]全球最大交友网站prize_p2[羊城杯 2020]easyser[FBCTF 2019]rceservice方法一方法二 前言 今天是2023年9月13号&#xff0c;刷题记录2正式开始。时间来到九月十七…...

Linux驱动之INPUT子系统框架

目录 一、input 子系统简介 二、input 驱动编写流程 1、注册 input_dev 2、上报输入事件 三、input_event 结构体 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c; Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设…...

Long类型雪花算法ID返回前端后三位精度缺失问题解决

目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID&#xff0…...

VAP:腾讯开源的高性能动画播放引擎,如何让你的应用动起来更流畅?

VAP&#xff1a;腾讯开源的高性能动画播放引擎&#xff0c;如何让你的应用动起来更流畅&#xff1f; 【免费下载链接】vap VAP是企鹅电竞开发&#xff0c;用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://git…...

python基于微信小程序的旅游攻略分享平台

目录需求分析与功能规划技术架构设计数据库设计接口开发小程序前端开发部署与测试运营与迭代注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作需求分析与功能规划 明确平台核心功能&#xff1a;用户注册登录、攻略发布与…...

告别手动修改!用Env文件管理器一键配置Allegro SKILL加载路径(支持16.6/17.4)

告别手动修改&#xff01;用Env文件管理器一键配置Allegro SKILL加载路径&#xff08;支持16.6/17.4&#xff09; 在PCB设计领域&#xff0c;Allegro作为行业标杆工具&#xff0c;其强大的可扩展性离不开SKILL脚本的支持。然而&#xff0c;随着项目复杂度提升&#xff0c;SKILL…...

如何用3步实现Jable视频高效下载?开源工具jable-download的完整解决方案

如何用3步实现Jable视频高效下载&#xff1f;开源工具jable-download的完整解决方案 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download jable-download是一款专为普通用户设计的Jable视频下载工具&am…...

Qwen3-32B-Chat微调实战:提升OpenClaw代码生成任务的准确性

Qwen3-32B-Chat微调实战&#xff1a;提升OpenClaw代码生成任务的准确性 1. 为什么需要微调Qwen3-32B-Chat&#xff1f; 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化我的开发工作流时&#xff0c;遇到了一个令人沮丧的问题&#xff1a;模型生成的代码虽然语法正确&am…...

nli-distilroberta-base多场景:跨境电商商品描述与用户评论的语义一致性检测

nli-distilroberta-base多场景&#xff1a;跨境电商商品描述与用户评论的语义一致性检测 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于分析两个句子之间的逻辑关系。这个轻量级但强大的工具在跨境电商领域…...

别再只会用PS修图了!用Python的Richardson-Lucy算法,5分钟搞定模糊老照片修复

用Python拯救模糊老照片&#xff1a;零基础也能上手的Richardson-Lucy算法实战 翻箱倒柜找到一张泛黄的老照片&#xff0c;却发现画面模糊得连人脸都看不清&#xff1f;别急着叹气&#xff0c;更不用花大价钱找专业修图师。今天我要分享一个连Python新手都能轻松上手的黑科技—…...

OCLP-Mod:终极指南 - 让老旧Mac免费升级到最新macOS

OCLP-Mod&#xff1a;终极指南 - 让老旧Mac免费升级到最新macOS 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 你是否拥有一台被苹果官方"抛弃"的老旧Mac&#x…...

Llama-3.2V-11B-cot部署教程:WSL2环境下双4090识别与分配验证

Llama-3.2V-11B-cot部署教程&#xff1a;WSL2环境下双4090识别与分配验证 1. 项目概述 Llama-3.2V-11B-cot是基于Meta Llama-3.2V-11B-cot多模态大模型开发的高性能视觉推理工具。该工具针对双卡4090环境进行了深度优化&#xff0c;特别适合在WSL2环境下部署使用。通过本教程…...

告别卡顿!用UniApp的RenderJS为你的APP手势和动画性能提速(实战解析)

告别卡顿&#xff01;用UniApp的RenderJS为你的APP手势和动画性能提速&#xff08;实战解析&#xff09; 在移动应用开发中&#xff0c;流畅的用户体验往往决定了产品的成败。当你在UniApp框架下开发APP时&#xff0c;是否遇到过这样的场景&#xff1a;地图拖拽时出现明显延迟&…...