杰理701N可视化SDK之组合键代码设计

杰理701N可视化SDK组合键代码设计

  • 组合键相关代码修改
  • 组合键消息处理代码
  • SDK加入组合键代码引出的问题

杰理701N可视化SDK目前只支持在可视化工具中配置按键和按键功能, 还不支持在可视化工具中直接加入组合键的功能. 需要在SDK中做些修改才可以实现组合键的功能. 本篇文章演示使用SDK修改并实现组合键按键功能

组合键相关代码修改

key_driver.c: 按键驱动抽象层, 提供按键扫描程序, 在key_driver.c调用注册的key_handler的get_value()接口来获取当前按键按下的键值
获取键值
打开宏 MULT_KEY_ENABLE
打开组合键宏定义
打开后iokey.c获取键值的时候就会使用bitmark的方式记录被按下的键值
记录键值
记录下被按下的按键之后, 代码中需要实现组合键的重新映射
组合按键重新映射按键值
SDK是调用了一个外部的组合键按键映射表 iokey_remap_data 就是需要自己外部实现组的合键映射表
调用外部组合键映射表
如下为自定义的组合键映射表, 这里新增代码自定义的重映射键值, 为了方便后续事件判断的时候区分组合键和单按键, 因此这里remap_value的时候在键值的最高位置位
组合按键重映射按键值2
当有组合键按下的时候, 与单按键的流程一样, 会先发送key_event给到key_event_handler()
抛出key_event_handler
key_event_handler()只会拿到基础的按键动作, 需要在这里使用multi_clicks_translate()转成多击或hold事件, 并将转换后的事件发送给TWS处理
key_event_handler函数
之后按键事件经过TWS同步, 发送了个APP消息
TWS按键处理
这条APP消息发往”app_core”任务
APP消息发送
所以这条带了组合键重映射之后的按键消息最终发送到了”app_core”任务, 接下来就需要自己编写组合键按键消息的处理函数了

组合键消息处理代码

因为按键消息是在app_task_loop()中处理的, 而可视化工具暂时没有事件处理组合键消息的配置, 所以还需要自己编写一段组合键按键消息处理的代码.
SDK消息处理流程
上图为SDK自带的消息处理流程, 这里自行增加代码注册了一个APP_MSG_HANDLER, 专门用来处理组合键消息
组合键消息处理
当有REMAP的组合键消息的时候, 会进入到我们自定义的按键消息处理函数
从按键消息提取出键值KEY_VALUE和按键KEY_ACTION, 判断对应的KEY_VALUE和ACTION, 做对应想要的处理, 比如这里判断音量+和音量-按键组合键hold3s进入蓝牙dut模式
组合键消息处理2

SDK加入组合键代码引出的问题

1.长按hold组合键的时候, 先释放其中一个按键之后, 再释放另一个按键(组合键中的多个按键不同时释放). 之后会检测不到其他按键hold动作
原因分析:
比如当音量+和音量-两个按键同时长按, 先松手释放音量+, 再松手释放音量-按键. 在驱动层key_driver抛出的事件是后松手按键(音量-按键)的up事件, 而不会抛出组合键释放的up事件, 在key.c中的转hold事件处理multi_clicks_translate()的时候还会认为组合键还在hold没有松手(因为此时还没有上报组合键的up事件). 导致后面所有的按键消息进来的时候还认为有按键在hold
hold判读
解决方法:
在所有按键up时候或驱动层抛出NO_KEY的事件的时候, 清除掉所有按键的hold状态, 如下图解决方案
解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2812831.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

文本生成图像新SOTA!RealCompo:逼真和构图的动态平衡(清北最新)

文章链接:https://arxiv.org/pdf/2402.12908 最近AI生成内容领域取得了令人激动的很多成果,比如Sora、StableDiffusion-3等等。今天给大家分享另一个内容生成领域的SOTA模型——RealCompo,这是一种新的文本到图像生成框架,旨在利…

鸿蒙开发实战-手写一个Openharmony投屏工具

实战手写一个Openharmony投屏工具,实现代码分享如下: java import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOExcepti…

备战蓝桥杯————递归反转单链表的一部分

递归反转单链表已经明白了&#xff0c;递归反转单链表的一部分你知道怎么做吗&#xff1f; 一、反转链表Ⅱ 题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反…

Scikit-Learn逻辑回归

Scikit-Learn逻辑回归 1、逻辑回归概述1.1、逻辑回归1.2、逻辑回归的优缺点1.3、逻辑回归与线性回归 2、逻辑回归的原理2.1、逻辑回归的概念与原理2.2、逻辑回归的损失函数 3、 1、逻辑回归概述 1.1、逻辑回归 逻辑回归&#xff08;Logistic Regression&#xff09;主要解决二…

数字化的未来:构建全场景可信互联生态

本文摘自&#xff1a;思二勋所著、清华社出版的《分布式商业生态战略》一书。 随着万物互联(Internet of Everything&#xff0c;IoE)时代的到来&#xff0c;场景变成了互联的起点&#xff0c;场景内容变得更加丰富起来。如今&#xff0c;消费者的选择决策因素主要是基于场景的…

好书推荐丨AI绘画全面精通:软件平台+脚本文案+设计制作+案例实战

文章目录 写在前面AI绘画推荐图书图书简介本书特色作者简介 推荐理由粉丝福利写在后面 写在前面 本期博主给大家带来了一本全新出版的AI绘画类书籍&#xff0c;《AI绘画全面精通&#xff1a;软件平台脚本文案设计制作案例实战》&#xff0c;对人工智能感兴趣的小伙伴快来看看吧…

数学建模入门必看|关于2024第九届数维杯数学建模,你想知道的都在这里!

数维杯大学生数学建模挑战赛每年分为两场&#xff0c;每年上半年为数维杯国赛&#xff08;5月&#xff0c;俗称小国赛&#xff09;&#xff0c;下半年为数维杯国际赛(11月)&#xff0c;2023年第八届数维杯大学生数学建模挑战赛共有近1.4万名学生参赛&#xff0c;参赛队伍来自国…

Sora的潜力与影响:对视频制作、广告、娱乐等行业的深度解析

随着技术的飞速发展&#xff0c;OpenAI推出的Sora模型已经引起了广泛关注。作为一款强大的视频生成工具&#xff0c;Sora不仅改变了视频制作的传统模式&#xff0c;更对广告、娱乐等多个行业产生了深远影响。本文将深度解析Sora的潜力与影响&#xff0c;探讨其在视频制作、广告…

初学学习408之数据结构--数据结构基本概念

初学学习408之数据结构我们先来了解一下数据结构的基本概念。 数据结构&#xff1a;是相互之间存在一种或多种特定关系的数据元素的集合。 本内容来源于参考书籍《大话数据结构》与《王道数据结构》。除去书籍中的内容&#xff0c;作为初学者的我会尽力详细直白地介绍数据结构的…

面试总结之JVM入门

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;你为什么要学习JVM&#xff1f;&#x1f380;JVM的作用 &#x1f380;JVM的构成&#xff08;5大类&#xff09;&#x1f3e8;1.类加载系统&#x1f415;类什么时候会被加…

Vue3快速上手(十一)标签里的ref属性

一、介绍 标签里的ref&#xff0c;可以在普通html元素标签上&#xff0c;也可以用在vue组件标签上。用在html元素标签上时&#xff0c;返回的是该html元素的DOM&#xff1b;用在vue组件标签上时&#xff0c;返回的是该子组件&#xff08;也就是当前vue是父组件&#xff09;暴露…

MySQL篇—持久化和非持久化统计信息介绍(第一篇,总共三篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

springboot+vue实现微信公众号扫码登录

通常在个人网站中&#xff0c;都会有各种第三方登录&#xff0c;其中微信登录需要认证才能使用&#xff0c;导致个人开发者不能进行使用此功能&#xff0c;但是我们可以使用微信公众号回复特定验证码来进行登录操作。 微信关键词处理 微信公众号关键词自动回复&#xff0c;具体…

Vue3前端实现一个本地消息队列(MQ), 让消息延迟消费或者做缓存

MQ功能实现的具体代码(TsMQ.ts)&#xff1a; import { v4 as uuidx } from uuid;import emitter from /utils/mitt// 消息类 class Message {// 过期时间&#xff0c;0表示马上就消费exp: number;// 消费标识&#xff0c;避免重复消费tag : string;// 消息体body : any;constr…

数据结构与算法|线性结构

数据结构与算法|线性结构 第二章 线性结构2.1 多项式表示2.2 什么是线性表2.3 线性表的实现方式2.3.1 线性表的顺序存储实现2.3.2 线性表的链式存储实现1. 单链表实现2. 双链表实现 上篇&#xff1a;第一章、绪论 第二章 线性结构 线性结构是数据结构中最基础的&#xff0c;也…

如何操作系统缓冲区减少了磁盘碎片化?

如何操作系统缓冲区减少了磁盘碎片化&#xff1f; 在探讨操作系统如何通过使用缓冲区来减少磁盘碎片化之前&#xff0c;我们需要先了解什么是磁盘碎片化以及它为什么会对我们的电脑性能造成影响。 磁盘碎片化简介 磁盘碎片化发生在计算机硬盘上存储数据的过程中。简单来说&am…

2024年记住我功能该如何实现

在传统的前后端不分离项目中&#xff0c;大家在登录界面应该经常能看到记住我这个功能&#xff0c;这个功能本质上是为了让用户能在一段较长时间内不在重复登录&#xff0c;在以前的实现方案中&#xff0c;大家多使用 cookie 实现&#xff0c;本文给大家介绍在引入了 spring-se…

Spring_Boot_3新特性或者说新功能

文章目录 一、Spring_Boot_31、基本变化2、Spring Framework 63、部分第三方jar将更新到最新稳定版4、部分依赖从Java EE改为Jakarta EE 二、变化2.1、spring.factories文件废弃2.2、Spring Native &#xff08;GraalVM &#xff09;2.3、jakarta代替javax2.4、改进的Construct…

c#---简易人民币美元兑换程序

这学期开始学习c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace renminbimeiyuan …

浅谈 Linux 网络编程 - 网络字节序

文章目录 前言核心知识关于 小端法关于 大端法网络字节序的转换 函数 前言 在编写 socket 网络编程时&#xff0c;会用到字节流的转换函数、例如 inet_pton、htons 等&#xff0c;那么为什么要用到这些函数呢&#xff0c;本篇主要就是对这部分进行介绍。 核心知识 重点需要记…