嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十五)输入系统应用编程

文章目录

  • 1.输入系统应用编程
    • 1.1 什么是输入系统
    • 1.2 输入系统框架及调试
      • 1.2.1 框架概述
      • 1.2.2 编写APP需要掌握的知识
      • 1.2.3 调试技巧
        • **1. 确定设备信息**
        • **2. 使用命令读取数据**
    • 1.3 不使用库的应用程序示例
      • 1.3.1 输入系统支持完整的API操作
      • 1.3.2 APP访问硬件的4种方式:妈妈怎么知道孩子醒了
      • 1.3.3 获取设备信息(看视频学会简单代码编写的编写过程)
      • 1.3.4 查询方式
      • 1.3.5 休眠-唤醒方式
      • 1.3.6 POLL/SELECT方式
        • 1. 功能介绍
      • 1.3.7 异步通知方式
    • 1.4 电阻屏和电容屏
      • 1.4.1 电阻屏
        • 1. 复习一下欧姆定律
        • 2. 电阻屏原理
        • 3. 电阻屏数据
      • 1.4.2 电容屏
        • 1. 原理
        • 2. 电容屏数据
        • 3. 电容屏的实验数据
    • 1.5 tslib
      • 1.5.1 tslib框架分析
      • 1.5.2 交叉编译、测试tslib
        • 1.交叉编译tslib
        • 2. 测试tslib
      • 1.5.3 自己写一个测试程序
        • 1. 接口函数深入分析
        • 2. 编写代码

1.输入系统应用编程

1.1 什么是输入系统

先来了解什么是输入设备br> 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与Linux系统进行数据交换。
什么是输入系统br> 输入设备种类繁多,能否统一它们的接口在驱动层面统一,也在应用程序层面统一以的。
Linux系统为了统一管理这些输入设备,实现了一套能兼容所有输入设备的框架:输入系统。驱动开发人员基于这套框架开发出程序,应用开发人员就可以使用统一的API去使用设备。

1.2 输入系统框架及调试

1.2.1 框架概述

作为应用开发人员,可以只基于API使用输入子系统。但是了解内核中输入子系统的框架、了解数据流程,有助于解决开发过程中碰到的硬件问题、驱动问题。
输入系统框架如下图所示:

③ :表示事件值
对于按键,它的value可以是0(表示按键被按下)、1(表示按键被松开)、2(表示长按);
对于触摸屏,它的value就是坐标值、压力值。

④ 事件之间的界线
APP读取数据时,可以得到一个或多个数据,比如一个触摸屏的一个触点会上 X、Y位置信息,也可能会上 压力值。
APP怎么知道它已经读到了完整的数据br> 驱动程序上 完一系列的数据后,会上 一个“同步事件”,表示数据上 完毕。APP读到“同步事件”时,就知道已经读完了当前的数据。
同步事件也是一个结构体,它的、、三项都是0。

3 输入子系统支持完整的API操作
支持这些机制:阻塞、非阻塞、POLL/SELECT、异步通知。
注意:如果你想深入理解上述机制,需要学习以下内容:
《第5篇 嵌入式Linux驱动开发基础知识》
《第十九章 驱动程序基石》

1.2.3 调试技巧

1. 确定设备信息


输入设备的设备节点名为(也可能是,X表示0、1、2等数字)。查看设备节点,可以执行以下命令:

可以看到类似下面的信息:

那么这里的I、N、P、S、U、H、B对应的每一行是什么含义呢br> ① I:(设备ID)
该参数由结构体来进行描述,驱动程序中会定义这样的结构体:

2. 使用命令读取数据


调试输入系统时,直接执行类似下面的命令,然后操作对应的输入设备即可读出数据:

在开发板上执行上述命令之后,点击按键或是点击触摸屏,就会打印以下信息:

妈妈怎么知道卧室里小孩醒了br> ① 时不时进房间看一下:查询方式
简单,但是累
② 进去房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒
不累,但是妈妈干不了活了
③ 妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟:poll方式
要浪费点时间,但是可以继续干活。
妈妈要么是被小孩吵醒,要么是被闹钟吵醒。
④ 妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈:异步通知
妈妈、小孩互不耽误。

这4种方法没有优劣之分,在不同的场合使用不同的方法。

1.3.3 获取设备信息(看视频学会简单代码编写的编写过程)

通过ioctl获取设备信息,ioctl的参数如下:

有些驱动程序对的格式有要求,它的格式如下:

将代码上传到ubuntu,进行交叉编译:

1.3.4 查询方式

APP调用函数时,传入“”表示“非阻塞”。
APP调用函数读取数据时,如果驱动程序中有数据,那么APP的函数会返回数据,否则也会立刻返回错误。

1.3.5 休眠-唤醒方式

APP调用函数时,不要传入“”。
APP调用函数读取数据时,如果驱动程序中有数据,那么APP的函数会返回数据;否则APP就会在内核态休眠,当有数据时驱动程序会把APP唤醒,函数恢复执行并返回数据给APP。

//打开设备节点ioctl#include /*./01_get_input_info     /dev/input/event0   noblock */  #include 

                                                        

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月15日
下一篇 2022年2月15日

相关推荐