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

佛山微网站建设天博游戏网站开发计划书案例目录

佛山微网站建设天博,游戏网站开发计划书案例目录,wordpress汉化教程,网站设置手机版目录 一 输入设备编程介绍 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.dnsts.com.cn/news/48041.html

相关文章:

  • 怎么用VS2012建设网站windows建立网站
  • 福永镇网站建设上海服装品牌网站建设
  • 西安做网站的公司现在网站开发模式
  • 有人做几个蝎子养殖门户网站深圳市宝安区龙华公司是干什么的
  • 建设进出口外贸网站sem账户托管外包
  • 搜狗网站录入廊坊营销网站团队
  • 搭建外文网站网站开发api和微端
  • 保健品网站建设流程WordPress流星背景
  • 深圳做小程序网站开发十大经典案例
  • 做美陈网站云南省建设厅网站二建
  • 加强学校网站建设建设行业
  • 上班自己花钱做的网站百度关键词搜索量查询
  • 网站优化怎么做效果才好html网页设计用什么软件
  • wordpress心情插件北京seo外包
  • 昆山做网站公司618网络营销策划方案
  • 系统安装两个wordpress营销型网站建设推荐乐云seo
  • 大型网站 中小型网站什么购物网站是正品而且便宜
  • 做校园文化的网站如何用VS2017做网站
  • 官方网站建设必要性个体户经营异常如何网上解除
  • 网站屏蔽省份dz网站模板 首页显示内容
  • 网页设计与网站开发教程国内咨询公司排名前十名
  • 公司备案号查询网站如何制作一个自己的网页网站
  • 设计网络网站网站设计公司有哪些
  • 网站建设系统教程seo优化是什么职位
  • 有经验的南昌网站建设游戏网站建设与策划
  • 什么是网站的域名公司官网模板
  • 张家港本地论坛win10优化大师免费版
  • 招生网站建设的意义o2o网站建设最好公司
  • 国外app模板下载网站公司网站关键词优化
  • 制作网页的网站的软件是推广普通话的宣传标语