当前位置: 首页 > news >正文

网站建设 局部放大镜功能佛山微网站建设天博

网站建设 局部放大镜功能,佛山微网站建设天博,营销方案100例,网站兼职做计划赚小钱目录 一 输入设备编程介绍 1.1 什么是输入设备呢#xff1f; 1.2 什么是输入设备的应用编程#xff1f; 1.3 input子系统 1.4 数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件#xff1a; 1.5.2 相对位移事件 1.5.3 绝对位移事件 二 读取 struct input_e…目录 一 输入设备编程介绍 1.1 什么是输入设备呢 1.2 什么是输入设备的应用编程  1.3 input子系统 1.4  数据读取流程 1.5 应用程序如何解析数据 1.5.1 按键类事件 1.5.2 相对位移事件  1.5.3 绝对位移事件  二 读取 struct input_event数据   一 输入设备编程介绍 本章学习Linux输入设备的应用编程。 1.1 什么是输入设备呢 输入设备其实就是能够产生输入事件的 设备就称为输入设备常见的输入设备包括鼠标、键盘、触摸屏、按钮等等它们都能够产生输入事件产 生输入数据给计算机系统。 1.2 什么是输入设备的应用编程  输入设备的应用编程其主要是获取输入设备上报的数据、输入设备当前状态等譬如获取触摸屏当 前触摸点的 X、Y 轴位置信息以及触摸屏当前处于按下还是松开状态然后根据获取到的数据做出对应的操作。 1.3 input子系统 输入设备种类非常多每种设备上报的数据类型又不一样那么 Linux 系统如何管 理呢 Linux 系统为了统一管理这些输入设备实现了一套能够兼容所有输入设备的框架那么这个框架就 是 input 子系统。驱动开发人员基于 input 子系统开发输入设备的驱动程序input 子系统可以屏蔽硬件的差 异向应用层提供一套统一的接口。 基于 input 子系统注册成功的输入设备都会在/dev/input 目录下生成对应的设备节点设备文件设 备节点名称通常为 eventXX 表示一个数字编号 0、1、2、3 等如/dev/input/event0、/dev/input/event1、 /dev/input/event2 等通过读取这些设备节点可以获取输入设备上报的数据。 1.4  数据读取流程 我们要读取触摸屏的数据假设触摸屏设备对应的设备节点为/dev/input/event0那么数据读取流程 如下 ①、应用程序打开/dev/input/event0 设备文件 ②、应用程序发起读操作譬如调用 read如果没有数据可读则会进入休眠阻塞 I/O 情况下 ③、当有数据可读时应用程序会被唤醒读操作获取到数据返回 ④、应用程序对读取到的数据进行解析。 当无数据可读时程序会进入休眠状态也就是阻塞譬如应用程序读触摸屏数据如果当前并没有 去触碰触摸屏自然是无数据可读当我们用手指触摸触摸屏或者在屏上滑动时此时就会产生触摸数据、 应用程序就有数据可读了应用程序会被唤醒成功读取到数据。那么对于其它输入设备亦是如此无数据 可读时应用程序会进入休眠状态阻塞式 I/O 方式下当有数据可读时才会被唤醒。 1.5 应用程序如何解析数据 应用程序打开输入设备对应的设备文件向其发起读操作那么这个读操作获取到的是什么样的数据呢其实每一次 read 操作获取的都是一个 struct input_event 结构体类型数据该结构体定 义在头文件中它的定义如下 struct input_event { struct timeval time; __u16 type; __u16 code; __s32 value; }; time 内核会记 录每个上报的事件其发生的时间 typetype 用于描述发生了哪一种类型的事件对事件的分类Linux 系统所支持的输入事件类 型如下所示 #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_MAX1)  以上这些宏定义也是在头文件中所以在应用程序中需要包含该头文件一种输入设备 通常可以产生多种不同类型的事件譬如点击鼠标按键左键、右键或鼠标上的其它按键时会上报按键 类事件移动鼠标时则会上报相对位移类事件。 codecode 表示该类事件中的哪一个具体事件以上列举的每一种事件类型中都包含了一系列具 体事件譬如一个键盘上通常有很多按键譬如字母 A、B、C、D 或者数字 1、2、3、4 等而 code 变量则告知应用程序是哪一个按键发生了输入事件。每一种事件类型都包含多种不同的事件譬如 1.5.1 按键类事件 #define KEY_RESERVED 0 #define KEY_ESC 1 //ESC 键 #define KEY_1 2 //数字 1 键 #define KEY_2 3 //数字 2 键 #define KEY_TAB 15 //TAB 键 #define KEY_Q 16 //字母 Q 键 #define KEY_W 17 //字母 W 键 #define KEY_E 18 //字母 E 键 #define KEY_R 19 //字母 R 键 1.5.2 相对位移事件  #define REL_X 0x00 //X 轴 #define REL_Y 0x01 //Y 轴 #define REL_Z 0x02 //Z 轴 #define REL_RX 0x03 #define REL_RY 0x04 #define REL_RZ 0x05 #define REL_HWHEEL 0x06 #define REL_DIAL 0x07 #define REL_WHEEL 0x08 #define REL_MISC 0x09 #define REL_MAX 0x0f #define REL_CNT (REL_MAX1) 1.5.3 绝对位移事件  触摸屏设备是一种绝对位移设备它能够产生绝对位移事件 对于触摸屏来说一个触摸点所包含的信息可能有多种譬如触摸点的 X 轴坐标、Y 轴坐标、Z 轴坐标、按压力大小以及接触面积等所以 code变量告知应用程序当前上报的是触摸点的哪一种信息X 坐标还是 Y 坐标、亦或者其它  #define ABS_X 0x00 //X 轴 #define ABS_Y 0x01 //Y 轴 #define ABS_Z 0x02 //Z 轴 #define ABS_RX 0x03 #define ABS_RY 0x04 #define ABS_RZ 0x05 #define ABS_THROTTLE 0x06 #define ABS_RUDDER 0x07 #define ABS_WHEEL 0x08 #define ABS_GAS 0x09 #define ABS_BRAKE 0x0a #define ABS_HAT0X 0x10 #define ABS_HAT0Y 0x11 #define ABS_HAT1X 0x12 #define ABS_HAT1Y 0x13 #define ABS_HAT2X 0x14 #define ABS_HAT2Y 0x15 #define ABS_HAT3X 0x16 #define ABS_HAT3Y 0x17 #define ABS_PRESSURE 0x18 #define ABS_DISTANCE 0x19 #define ABS_TILT_X 0x1a #define ABS_TILT_Y 0x1b #define ABS_TOOL_WIDTH 0x1c value内核每次上报事件都会向应用层发送一个数据 value对 value 值的解释随着 code 的变化而 变化。 如对于按键事件type1来说如果 code2键盘上的数字键 1也就是 KEY_1那 么如果 value 等于 1则表示 KEY_1 键按下value 等于 0 表示 KEY_1 键松开如果 value 等于 2  则表示 KEY_1 键长按。再比如在绝对位移事件中type3如果 code0触摸点 X 坐标 ABS_X 那么 value 值就等于触摸点的 X 轴坐标值同理如果 code1触摸点 Y 坐标 ABS_Y此时 value 值便等于触摸点的 Y 轴坐标值所以对 value 值的解释需要根据不同的 code 值而定 二 读取 struct input_event数据   根据前面的介绍可知对输入设备调用read()会读取到一个struct input_event类型数据现写一个简单地应用程序将读取到的struct input_event类型数据中的每一个元素打印出来、并对它们进行解析。 2.1 开发板的按键测试 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include string.h #include unistd.h #include linux/input.hvoid main(int argc,char *argv[]) {struct input_event in_ev {0};int fd -1; //打开设备文件返回的句柄if(argc ! 2){fprintf(stderr,格式:%s input-dev \n input-dev为设备文件路径\n,argv[0]);exit(-1);}fd open(argv[1],O_RDONLY);if(fd 0){perror();exit(-1);}while(1){if (sizeof(struct input_event) ! read(fd, in_ev, sizeof(struct input_event))) {perror();exit(-1);}printf(type(对事件的分类):%d code(具体事件):%d value(状态):%d\n, in_ev.type, in_ev.code, in_ev.value);}} 执行程序时需要传入参数这个参数就是对应的输入设备的设备节点设备文件程序中会对传参进行校验。程序中首先调用open()函数打开设备文件之后在while循环中调用read()函数读取文件将读取到的数据存放在struct input_event结构体对象中之后将结构体对象中的各个成员变量打印出来。注意程序中使用了阻塞式I/O方式读取设备文件所以当无数据可读时read调用会被阻塞知道有数据可读时才会被唤醒 交叉编译并拷贝到开饭板上 用cat指令获得设备节点路径 cat /proc/bus/input/devices 测试程序获取输入设备信息  code 1时按键事件时对应的value等于2表示长按状态。 value等于1表示按下状态。 value等于0表示松开状态。 2.2 开发板USB接键盘按键测试 除了测试开发板上的KEY0按键之外我们还可以测试键盘上的按键首先找到一个USB键盘连接到开发板的USB HOST接口上当键盘插入之后终端将会打印出相应的驱动加载信息 驱动加载成功之后可以查看下该键盘设备对应的设备节点使用命令cat /proc/bus/input/devices在打印信息中找到键盘设备的信息 查看到键盘的设备信息 使用的是一个机械师的USB键盘BY Tech Gaming Keyboard对应的设备节点为/dev/input/event4运行测试程序并按下、松开键盘上的按键
http://www.tj-hxxt.cn/news/222510.html

相关文章:

  • 武冈网站建设大连网站开发培训班
  • 无锡梦燕服饰网站谁做的郫县城乡规划建设管理局网站
  • 个人建网站大概多少钱网站正在建设中色
  • iis网站wordpress标题颜色
  • 万网网站建设流程苏州网站推广软件
  • c语言精品网站开发的教学微信官方网站下载
  • 那个网站做推广好网站建设的目标和需求分析
  • 推荐网站建设的书威县网站建设
  • 深圳建企业网站公司微信公众号封面制作网站
  • 在手机上怎么制作网站关键词查询工具哪个好
  • 网站备案去哪企业网站建设与网页设计
  • 网站建设公司营业执照图片携程官网
  • md5加密网站如何建立个人网站的步骤
  • 许昌长葛网站建设制作设计wordpress主题cute
  • 卡密网站怎么做男女做爰视频免费网站
  • 上海营销网站建设台州外发加工网
  • 胖咯科技 网站建设动易网站 sql2005
  • 网站正在建设中 html曲阜网站建设多少钱
  • 阿里云重新备案注销主体还是注销网站嵌入式软件开发属于前端还是后端
  • 2015选择做导航网站网站开源源码
  • 厦门建设银行招聘网站优设网app手机下载
  • 甘肃酒泉建设银行网站加强企业网站建设作用
  • 开发网站需要租服务器租房合同模板免费下载
  • 在线教育网站设计义乌网站建设公司价位
  • 网站中怎么做视频直播在线简易网页制作网站
  • 免费发布信息网网站淘宝客导购网站怎么做
  • 湖北荆门建设银行网站公司网站建设项目的成本计划
  • 乐清哪里有做网站邢台123今天最新招聘
  • 广州网站推广自助空中乘务专业简历制作
  • wap网站生成学做视频的网站