Android之input系统流程

按键或者触摸屏输入设备是最常用不过的设备,那么如果一个按键信息是如何从内核传递到android的呢,首先我们得先清楚Linux的input子系统框架,下面是我在公司自己写的一篇文档,现在先粘帖过来

Linux之Input子系统分析

  目前Android、QT等众多应用对于linux系统中键盘、鼠标、触摸屏等输入设备的支持都通过标准的input输入子系统。因为input子系统已经完成了字符驱动的文件操作接口,所以编写驱动的核心工作是完成input系统留出的接口,工作量相对小很多,下面我们将从input输入子系统框架以及基于3202中的触摸屏代码为实例进行分析。

一、input输入子系统框架

下图是input输入子系统框架,输入子系统由输入子系统核心层(input core),驱动层和事件处理层(Event Handler)三部分组成。一个输入事件,比如滑动触摸屏都是通过input driver -> input core -> event handler -> user space 到达用户空间传给应用程序。

 

Input输入子系统框架

 

 

二、Input driver编写要点

1.  分配、注册、注销input设备

参见触摸屏驱动ctp_it7250.c

struct input_dev *input_allocate_device(void)

int input_register_device(struct input_dev *dev)

void input_unregister_device(struct input_dev *dev)

 

2. 设置input设备支持的事件类型、事件码、事件值的范围等信息

参见触摸屏驱动ctp_it7250.c

    __set_bit(EV_ABS, Ctp_it7250->input_dev->evbit);

    __set_bit(ABS_X, Ctp_it7250->input_dev->absbit);

    __set_bit(ABS_Y, Ctp_it7250->input_dev->absbit);

    __set_bit(EV_SYN, Ctp_it7250->input_dev->evbit);

    __set_bit(EV_KEY, Ctp_it7250->input_dev->evbit);

    __set_bit(BTN_TOUCH, Ctp_it7250->input_dev->keybit);

Include/linux/input.h中定义了支持的类型

#define EV_SYN          0x00

#define EV_KEY          0x01

#define EV_REL          0x02

#define EV_ABS          0x03

#define EV_MSC          0x04

#define EV_SW           0x05

#define EV_LED          0x11

#define EV_SND          0x12

#define EV_REP          0x14

#define EV_FF           0x15

#define EV_PWR          0x16

#define EV_FF_STATUS        0x17

#define EV_MAX          0x1f

#define EV_CNT          (EV_MAX+1)

一个设备可以支持一个或多个事件类型。每个事

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值