BES2300X,BES2500X——UI(按键,提示音,指示灯)

2023-11-11

前言

BES2300X,BES2500X系列博文请点击这里

本文是BES2300X,BES2500X系列博文UI部分
一个耳机/音箱,UI是联系使用者与开发者最直接的一个窗口。当然,对于吾等码农而言,UI设计并不是我们最关心的。
我们主要做的是UI实现。
本文!!!
写BES最基础UI:按键,指示灯,提示音

一,按键

按键显然是一个中断,我们需要关注以下3点

1,管脚配置

tgt_hardware.c文件的cfg_hw_gpio_key_c数组用以配置按键管脚。
值得一提的是,按键配置结构体的最后一个成员可以配置按键极性

2,中断函数

hal_key.c文件的hal_key_debounce_handler函数用以处理按键中断
并依次通过以下函数

send_key_event(HAL_KEY_CODE_PWR, key_status.event)

key_event_process(uint32_t key_code, uint8_t key_event)

APP_MODUAL_KEY( app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process);

将按键事件发送至app_thread中处理

具体细节就不说了,看代码的能力大家都有。重点是hal_key_debounce_handler函数中可以自定义按键操作,例如,双击
+长按,10击等等。

3,处理函数

app_thread中,app_key_handle_process会先查注册表,根据不同的按键code和按键event,分别处理。如下图:
在这里插入图片描述
既然需要查表处理,那么一定会有注册的位置:

app_key_handle_registration(&app_key_handle_cfg[i]);

此行代码在app_key_init函数中。
app_key_handle_cfg数组中包含了每一个key_code,每一个key_event对应的处理函数。
至此,按键从IO到上层再到初始化,形成通路。

4,TWS模式从耳通路

另外,TWS模式(IBRT)通路会多一条,从耳机的按键会在注册的按键处理函数中,将按键信息发送至主耳处理。
从耳发送:

app_ibrt_if_keyboard_notify(status,param);

主耳接收:

void app_ibrt_keyboard_request_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)

主从通信相关问题在蓝牙操作及协议连接部分讲解,链接如下:
敬请期待

二,指示灯

tgt_hardware.c文件的cfg_hw_pinmux_pwl数组对指示灯IO进行配置
使用时就这个函数,调用就完了:

app_status_indication_set(APP_STATUS_INDICATION_CHARGENEED);

驱动流程以及呼吸灯有时间再更新

三,提示音

这里只讲如何播放提示音。
播放提示音有两种方式,如下:

1,播放提示音

打断播放:

app_voice_report(APP_STATUS_INDICATION_T status, uint8_t device_id)

混合播放(流程与打断播放近似,需要打开相关宏定义):

media_PlayAudio(AUD_ID_ENUM id,uint8_t device_id)

2,添加提示音

需要将WAV格式音频文件。打断播放通过BES给出的工具,编码并转换成TXT文件。混合播放直接另存为TXT文件。添加至资源文件夹。
打断播放参考该函数:

void media_runtime_audio_prompt_update(uint16_t id, uint8_t** ptr, uint32_t* len)

混合播放参考该函数:

app_ring_merge_start();

偷个懒,具体操作流程先不写了,有时间再完善

关于提示音如何从内存到Speaker,会在数据流及数据编码部分讲解链接如下:
敬请期待

原创不易,如有转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BES2300X,BES2500X——UI(按键,提示音,指示灯) 的相关文章

  • 利用硬件实现矩阵乘法加速

    对于绝大多数程序员来说 优化程序往往是在算法方面 但了解一定的计算机硬件知识后 可以隐式地优化程序 下面以矩阵乘法为例 探讨计算机硬件在程序优化中的作用 原理 学过计算机组成原理的都知道 CPU访问内存的速度比CPU计算速度慢得多 为了解决
  • WKWebView设置请求头HTTPHeaderField

    WKWebView HTTPHeaderField WKWebView的请求头添加字段 系统的NSMutableHTTPURLRequest类提供了获取HTTP请求的请求头 HTTPHeader 和设置 添加HTTP请求的请求头的API p
  • 龙书D3D11章节习题答案(第四章)

    以下答案仅供参考 有错欢迎留言 Chapter 4 Direct3D Initialzation 1 Modify the previous exercise solution by disabling the ALT ENTER func
  • DVWA XSS总结

    笔者对该靶场所需的相关知识进行了总结 拓展 供大家学习参考 XSS 漏洞学习 DVWA XSS Reflected low 未进行过滤 构造payload medium 过滤规则 把 lt script gt 用str replace 函数

随机推荐

  • Java类加载

    1 JAVA类装载器在装载类的时候是按需加载的 只有当一个类要使用 使用new 关键字来实例化一个类 的时候 类加载器才会加载这 个类并初始化 类Main java 代码 publicclass Main publicstaticvoid
  • STM32—CAN通信

    文章目录 一 CAN通信简介 1 1 CAN简介 1 2 CAN协议特点 1 3 CAN通信的帧类型 1 4 数据帧结构 1 5 CAN的位时序 1 6 CAN的仲裁功能 二 STM32F1的CAN 2 1 bxCAN简介 2 2 bxCA
  • 8-js高级-6(promise)

    一 Promise 的理解和使用 1 Promise 是什么 理解 抽象表达 Promise 是一门新的技术 ES6 规范 Promise 是 JS 中进行异步编程的新解决方案 备注 旧方案是单纯使用回调函数 具体表达 从语法上来说 Pro
  • c语言练习题56:变种水仙花

    变种水仙花 描述 变种水仙花数 Lily Number 把任意的数字 从中间拆分成两个数字 比如1461 可以拆分成 1和461 14和61 146和1 如果所有拆分后的乘积之和等于自身 则是一个Lily Number 例如 655 6 5
  • Echarts柱状图的点击事件

    最近在做一些图表统计的功能 用到了百度的开源图表软件Echatrs 不得不提的是 不但上手简单而且扩展功能也是十分强大 在使用的过程中也遇到了不少问题 可能由于有关Echatrs的资料并不是很齐全 所以查找资料的过程也是相当曲折的 所以还是
  • 硬盘错误计数 计算机内存不足,硬盘问题!Ultra DMA CRC错误计数 电脑死机

    最近电脑经常出现卡机状态 此状态出现前先是硬盘嗡嗡响 就像汽车油门一样 一加一松 但声音不是很大 然后硬盘紧接着还有嘎吱的响声 这样重复几次 出现这种声音的时候 电脑出现死机状态 但停上几分钟后 一切恢复正常 有时候也会卡到电脑自动重新启动
  • linux下sqlite3的使用实例(c语言)

    文章目录 1 安装数据库 2 相关函数 3 代码实例 3 1创建一个数据库 3 2插入数据 3 3查看表的内容 3 4删除数据 1 安装数据库 Linux 下安装sqlite3 需要两个个命令 即可 1 sudo apt get insta
  • Bootstrap Table行内添加/行内编辑案例

    项目场景 JQuery版本为 3 6 0 Bootstrap版本为 3 4 1 Bootstrap Table版本为 1 8 1 Bootstrap Table Edit版本为 1 0 Bootstrap Select版本为 1 0 Boo
  • c++排序算法(快速排序、冒泡排序、选择排序)

    1 快速排序 这里的容器是全局的 不全局的话 可以在参数那里加个数组的参数传进来 从大到小 从大到小排序 void ResManage quickSortLastUpdateTime const int iLeftIndex const i
  • 华为手机投屏电脑_华为手机如何实现无线投屏?

    朋友们 大家好 大家知道吗 其实我们风雪社是可以留言的 点击下面图片就可以跳转到留言界面哦 别担心 没有广告的 接下来 开始今天的内容了 大家都知道一些华为手机支持无线投屏 那用华为的朋友们 如何知道自己的手机是否可以投大屏幕呢 如果可以
  • Qt--02:设置父对象

    问题引入 在Widget中创建Button等控件时 如果不指定Button等控件的父对象 就会产生相关控件无法再此Widget窗口中显示 因此当一些控件需要在当前Widget窗口中显示的时候就需要为控件添加父对象 指定父对象方式 setPa
  • Spring Security 实现 antMatchers 配置路径的动态获取

    为什么80 的码农都做不了架构师 gt gt gt 1 为什么要实现动态的获取 antMatchers 配置的数据 这两天由于公司项目的需求 对 spring security 的应用过程中需要实现动态的获取 antMatchers per
  • mybatis防注入

    1 SQL防注入 mybatis语句中要使用 xxx 防止SQL注入 xxx 只是简单替换占位符 有注入的风险 例子 1 1 getNameByUserId resultType String gt SELECT name FROM use
  • HTML预留字符的处理

    目录 HTML 实体 不间断空格 non breaking space HTML 实例示例 HTML 中有用的字符实体 HTML 中的预留字符必须被替换为字符实体 HTML 实体 在 HTML 中 某些字符是预留的 在 HTML 中不能使用
  • JavaScript new Date() -2--------- 获取指定月份的天数 和 获取指定月份的第一天是周几

    使用 new Date 创建一个 Date 对象 var my date new Date 用当前日期和时间创建的新的日期对象 console log my date Fri Jan 10 2020 10 16 19 GMT 0800 中国
  • 电脑用电,电脑一天24小时多少度电 电脑一天用电量计算【图文】

    我们都知道 电器只要运行着 就会有一定的耗电量 比如我们平时的冰箱 空调 电视 电脑等等 今天小编便主要针对电脑来讲一讲 很多的朋友可能比较关注的都是电脑一天24小时耗用多少度电 还有因为我们想要自己来计算的话 应该要如何计算呢 还有 很多
  • DockerFile语法讲解

    Docker官网 https docs docker com Docker的github地址 https github com moby moby Dockerhub官网 https registry hub docker com 如果do
  • USB Type-C引脚解析 && CC、DFP、UFP、DRP用途解析【转】

    深入解析TypeC 1 Type C接口引脚分布 2 USB TypeC接口特点 3 DFP UFP DRP用途解析 4 深入解析CC通道 5 总结 1 Type C接口引脚分布 有24根信号 其中电源和地占了9根 有4个地和4个Vbus
  • 不定参数函数

    参数的存储位置 include
  • BES2300X,BES2500X——UI(按键,提示音,指示灯)

    前言 BES2300X BES2500X系列博文请点击这里 本文是BES2300X BES2500X系列博文UI部分 一个耳机 音箱 UI是联系使用者与开发者最直接的一个窗口 当然 对于吾等码农而言 UI设计并不是我们最关心的 我们主要做的