linux android 电容 触摸屏驱动 差别,Android触摸屏驱动框架分析

一、android framework相关

1. 触摸屏的框架

简介:

系统启动后,android init程序将启动SystemServer,该程序又启动了WindowManagerService服务,该服务启动了InputManager,InpuManager中,启动了两个独立的线程:InputReader(通过Evhub获取kernel底层input事件,并转发给InputDispatcher)和InputDispatcher(接收来自InputReader传来的Input事件相关消息,并分发给各应用程序);

abffa66040e5?t=123

WindowsManagerService:

android init进程启动了SystemServer(是启动android中的许多服务,并管理的一个服务)后,由SystemServer启动WindowsManagerService服务,在该服务中,通过如下启动了

mInputManager = new InputManagerService(context, mInputMonitor);

mInputManager.start();

InputManager:

主要启动了InputReader线程:通过Evhub接收来自底层驱动的触屏事件,并传递给InputDispatcher;

InputDispatcher线程:接收来自InputReader的触屏事件,并处理后,分发给各应用程序;

status_t InputManager::start() {

status_t result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);

....

....

result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);

....

return OK;

}

InputReader:

不停地通过EventHub的方法去获得input事件;

mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE);

EventHub:

EventHub做的事情比较简单,就是从一个设备 device->fd(即为 /dev/input/event* )读数据,并且封装成InputReader需要的结构体。

size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) {

....

Device* device = mDevices.valueAt(deviceIndex);

if (eventItem.events & EPOLLIN) {

int32_t readSize = read(device->fd, readBuffer, // device->fd 即为 /dev/input/event* ;

sizeof(struct input_event) * capacity);

....

InputDispatcher:

不断地通过InputListener来获得来自InputReader的Input事件,并将这些input事件按照一定格式分发给各应用程序;

2. android framework层相关文章

安卓4.1: input系统从frameworks到kernel (对应上图,很值得一看!!!)

二、linux驱动相关

linux触摸屏驱动移植相关步骤:

(1)、在platform/kernel/arch/arm/mach-rk30/board-rk3066b-sdk.c 中添加I2C设备资源;

(2)、在kernel/drivers/input/touchscreen/ 目录下,修改添加触摸屏初始化驱动、probe函数等;

(3)、修改添加触摸屏配置文件 (idc文件,用来配置触摸屏的一些属性);

(4)、修改添加keylayout文件(kl文件,安卓层面的按键映射文件);

(5)、修改添加characterMap文件(kcm文件,安卓层面的字符映射文件);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值