• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > MSM8909+Android5.1.1键盘驱动浅析

MSM8909+Android5.1.1键盘驱动浅析

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了msm8909,高通msm8909,msm8909处理器,msm8909与msm8916,高通骁龙msm8909等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

MSM8909+Android5.1.1键盘驱动浅析


MSM8909+Android5.1.1键盘驱动------概述

 

采用SN7326带智能指扫描的键盘扩展芯片,通过I2C接口来读取其状态寄存器的值就可知道是单按键还是多按键按下,可知道具体是哪个按键按下。然后键盘驱动调用input_event()上报linux的扫描码,比如KEY_RIGHT,然后传递给android框架层,流程如下图:

\

 

图1

 

下面介绍要实现键盘驱动所涉及的主要方方面面

1.Input子系统

 

Linux输入设备总类繁杂,常见的包括有按键、键盘、触摸屏、鼠标、摇杆等等,他们本身就是字符设备,而linux内核将这些设备的共同性抽象出来,简化驱动开发建立了一个input子系统。输入子系统由核心层(Input Core)、驱动层和事件处理层(EventHandler)三部份组成。一个输入事件,如鼠标移动,键盘按键按下,joystick的移动等等通过

 

input driver -> Input core -> Eventhandler -> userspace 到达用户空间传给应用程序。

\

 

图2

 

除了input driver部分,其他的内核已经写好,基本不需要修改,所以我们需要写一个I2C input driver。

 

2.Linux内核I2C设备驱动

因为我们是通过基于I2C接口的sn7326芯片来扫描按键的,所以需要写I2C设备驱动。

Linux内核I2C设备驱动包含3层[10],分别是:I2C总线驱动(I2C core)、I2C控制器驱动(I2C adapter)及I2C设备的驱动(I2C driver)。I2C总线驱动主要实现对I2C总线及控制器和设备驱动的管理。这部分代码为通用部分,Linux内核已经完善,不需要改动。I2C控制器驱动跟硬件相关,主要是构造一个与I2C总线层接口的数据结构,并通过接口函数向I2C总线注册一个控制器。同时,实现对I2C控制器中断的处理函数,完成I2C设备具体功能的实现。I2C设备驱动主要是构造一个与I2C总线层接口的数据结构,通过接口函数向I2C总线层注册一个I2C设备驱动。同时构造一个与用户层接口的数据结构,通过接口函数向内核注册一个字符型设备。

我们这里是要开发一个I2C设备驱动。

3.按键硬件码、Linux扫描码和android的键盘码

3.1按键硬件码

硬件码是我的命名,就是指按下按键时,最初的按键标识编码值,这个和具体的按键设计、采用的键盘扩展IC芯片的设计相关,比如sn7326

\

 

图3

这里的映射表就是硬件码值。

 

3.2Linux扫描码

扫描码是LinuxInput系统中规定的码值,好比PC键盘上每个键的键值。都是数字。在设备上输入一下命令后,按键可以探测到得到每个按键的扫描码Code.

 

Linux的扫描码在\kernel\include\uapi\linux\input.h定义,比如:
/*
 *Keys and buttons
 *
 *Most of the keys/buttons are modeled after USB HUT 1.12
 *(see http://www.usb.org/developers/hidpage).
 *Abbreviations in the comments:
 * AC- Application Control
 * AL- Application Launch Button
 * SC- System Control
 */
 
#define KEY_RESERVED           0
#define KEY_ESC               1
#define KEY_1                   2
#define KEY_2                   3
#define KEY_3                   4
#define KEY_4                   5
#define KEY_5                   6
#define KEY_6                   7
#define KEY_7                   8
#define KEY_8                   9
#define KEY_9                   10
#define KEY_0                   11

 

3.3Android的键盘码

 

Android也定义了一套码,叫作键盘码,通过一个/system/usr/keylayout/来将两套码对应起来。这里用的是sn7326.kl。(如果没有其它*.kl,则是默认的qwerty.kl)

 

/frameworks/base/data/keyboards/Generic.kl定义,比如:

 

#
# Generic key layout file for fullalphabetic US English PC style external keyboards.
#
# This file is intentionally very genericand is intended to support a broad rang of keyboards.
# Do not edit the generic key layout tosupport a specific keyboard; instead, create
# a new key layout file with the requiredkeyboard configuration.
#
 
key 1    ESCAPE
key 2    1
key 3    2
key 4    3
key 5    4
key 6    5
key 7    6
key 8    7
key 9    8
key 10   9
key 11   0


 

 </div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • msm8909+android5.1.1--打开调试(debug)串口
  • MSM8909+Android5.1.1键盘驱动---sn7326介绍
  • MSM8909+Android5.1.1键盘驱动浅析
  • msm8909+android5.1.1编译前配置及增加新项目和产品所需分支
  • msm8909+android5.1.1 由BLSP3改为BLSP1后SPI读写速度慢问题解决

相关文章

  • 2017-05-26Android开发学习——应用安装过程,android开发
  • 2017-05-26Android 一个改善的okHttp封装库,androidokhttp
  • 2017-05-26Android Studio快捷键,androidstudio
  • 2017-05-26H5调用Android播放视频,h5调用android
  • 2017-05-26Android Bitmap占用内存计算公式,androidbitmap
  • 2017-05-26Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解
  • 2017-05-26从编程的角度理解gradle脚本??Android Studio脚本构建和编程
  • 2017-05-26Android取消EditText自动获取焦点默认行为,androidedittext
  • 2017-05-26Android Studio发布到Jcenter
  • 2017-05-26手把手教你打造一个心电图效果View Android自定义View

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Linux简介及常用命令使用5--linux shell编程入门,5--linux编程入门
    • Android程序中使用iconfont心得,androidiconfont
    • 看Facebook是如何优化React Native性能,facebookreact
    • android注册页面,android页面
    • android配置android studio not found target android-*.的问题,androidandroid-
    • Android 对程序异常崩溃的捕捉,android崩溃捕捉
    • Android-配置文件中设置“android:clickable=&quot;false&quot;无效的原因及解决办法,android-clickable
    • Android 6.0 运行时权限处理完全解析,android6.0
    • linux编程之socket
    • 用树莓派实现对话机器人

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有