android hid map

本文深入探讨了hid_keyboard数组在驱动程序中的作用,解释了如何将HID使用表中的键映射到Android HID,并在通用配置文件中进一步转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drivers/hid/hid-input.c中

 static const unsigned char hid_keyboard[256] = {

  40 >---  0,  0,  0,  0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
  41 >--- 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44,  2,  3,
  42 >---  4,  5,  6,  7,  8,  9, 10, 11, 28,  1, 14, 15, 57, 12, 13, 26,
  43 >--- 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
  44 >--- 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
  45 >---105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
  46 >--- 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
  47 >---191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
  48 >---115,114,unk,unk,unk,121,unk, 89, 93,124, 92, 94, 95,unk,unk,unk,
  49 >---122,123, 90, 91, 85,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,
  50 >---unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
  51 >---unk,unk,unk,unk,unk,unk,179,180,unk,unk,unk,unk,unk,unk,unk,unk,
  52 >---unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,
  53 >---unk,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,unk,unk,unk,unk,
  54 >--- 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
  55 >---150,158,159,128,136,177,178,176,142,152,173,140,unk,unk,unk,unk

  56 };


此处会把HID usage table中定义的 键值映射成 android hid的 值,然后在 android中的 general.kl中会把这个值再做一个映射。 

### 三星手机上的HID Protocol多点触控映射实现 为了在三星手机上通过HID协议实现多点触控映射,需要理解HID(Human Interface Device)协议的工作原理以及其在多点触控场景中的应用方式。以下是关于此主题的关键技术细节: #### HID协议基础 HID协议是一种标准化的通信机制,用于描述输入/输出设备的数据传输过程[^1]。它允许主机(如计算机或智能手机)识别并配置外设的功能特性。对于多点触摸设备而言,HID协议提供了一种报告详细数据的方法,这些数据通常来自多个接触点。 #### 多点触控支持 多点触控设备可以通过特定类型的HID协议来传递复杂的交互信息。例如,在Linux内核中实现了两种主要的多点触控协议:A类型协议和B类型协议。其中,`bcm5974`驱动程序代表了苹果设备使用的A类型协议,而`hid-egalax`则对应于另一种常见的B类型协议[^2]。 尽管上述例子基于桌面环境下的硬件平台,但在移动设备领域(尤其是Android生态系统),类似的逻辑同样适用。具体到三星手机,其实现可能依赖于厂商定制化的解决方案或者标准API的支持。 #### 实现步骤概述 虽然不建议使用诸如“首先”这样的引导词,但仍需提及几个核心方面以便清晰表达整个流程: 1. **定义HID Report Descriptor**: 这一结构体明确定义了哪些字段会被发送给操作系统作为用户动作的结果。开发者应依据实际需求设计适合的应用层接口。 2. **解析Touch Events**: 当手指接触到屏幕表面时,传感器会产生原始信号;随后由固件负责将其转换成坐标系内的位置参数,并最终封装至相应的事件包里上传至上位机处理单元。 3. **适配Framework Layer**: Android框架提供了专门的服务组件用来接收来自底层驱动传来的消息流,并进一步分发给各个应用程序实例消费掉它们各自关心的部分内容。 下面给出一段伪代码片段展示如何模拟简单的手势检测算法: ```java public class MultiTouchHandler { private final List<PointF> touchPoints = new ArrayList<>(); public void onTouchEvent(MotionEvent event){ int actionIndex = event.getActionIndex(); switch(event.getActionMasked()){ case MotionEvent.ACTION_DOWN: addPoint(event.getX(actionIndex),event.getY(actionIndex)); break; case MotionEvent.ACTION_POINTER_DOWN: addPoint(event.getX(actionIndex),event.getY(actionIndex)); checkGesturePattern(); //尝试匹配预定义模式 break; default : removePointIfLifted(event); } } private void addPoint(float x,float y){ PointF point=new PointF(x,y); synchronized (touchPoints){ touchPoints.add(point); } } ... } ``` 以上仅是一个简化版的例子说明如何管理并发发生的按压操作序列号及其对应的平面几何定位数值关系链表维护策略而已[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值