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

做个网站页面多钱长春火车站什么时候通车

做个网站页面多钱,长春火车站什么时候通车,义乌建网站,张家口建设网站linux 输入子系统原理理解#xff08;原创#xff09; 以前学了单独的按键设备驱动以及鼠标驱动#xff0c;实际上#xff0c;在linux中实现这些设备驱动#xff0c;有一种更为推荐的方法#xff0c;就是input输入子系统。平常我们的按键#xff0c;触摸屏#xff0…linux    输入子系统原理理解原创 以前学了单独的按键设备驱动以及鼠标驱动实际上在linux中实现这些设备驱动有一种更为推荐的方法就是input输入子系统。平常我们的按键触摸屏鼠标等输入型设备都可以利用input接口来简化驱动程序并实现设备驱动。 输入子系统原理 linux输入子系统的体系结构可以分为三个层面分别为驱动层、输入核心层、事件处理层三个有点类似PHP的MVC模式意思就是每个层次只是负责单独的一个功能无需参与其他的功能有点类似函数的封装好了废话不多说三个层面具体的功能如下 1驱动层将底层的硬件输入转化为统一的事件类型向输入核心input core汇报0简单来说驱动层就是负责汇报事情。 2输入核心层为驱动层提供输入设备的注册和操作接口。 比如 1. 用input_register_device函数对设备进行注册 2. 通知事件处理层对事件进行处理 3. 在/proc下产生相应的设备信息。 3事件处理层主要作用就是与用户空间进行交互。包含提供驱动程序的fops接口在/dev下生成相应的设备文件节点nod等功能。   总的来说归纳一下上面的一大段内容 一个事件如鼠标移动键盘按下事件首先通过  驱动层Driver -- 输入核心层 InputCore--事件处理层Event handler--用户空间userspace的顺序来完成事件的响应。   设备描述 Input设备用input_dev结构体来描述。 在input子系统实现设备驱动程序中驱动的核心工作是向系统报告按键触摸屏鼠标等事件无须关心文件操作接口因为这些接口是有事件处理层Event handler来实现的。   好了原理讲的差不多了接下来讲一下驱动的实现 驱动实现 1.事件支持 首先一个设备驱动我们应该通过set_bit()函数来告诉输入子系统它支持哪些事件哪些按键例如 Set_bit(EV_KEY,button_dev.evbit);            告诉输入子系统支持按键的时间 Struct input_dev中有两个成员       Evbit: 事件类型       Keybit 按键类型   事件类型       EV_RST            reset                   EV_KEY            按键       EV_REL            相对坐标     EV_ABS      绝对坐标       EV_MSC            其他                  EV_LEC            LED       EV_SND            声音                   EV_REP            repeat       EV_FF            力反馈 但事件类型为EV_KEY时还需指明按键类型       BTN_LEFT:      鼠标左键            BTN_0数字0键       BTN_RIGHT:      鼠标右键            BTN_1数字1键       BTN_MIDDLE:      鼠标中键   2.报告事件 当事件真的发生的时间我们的驱动层应该向输入核心层Input Core来报告EV_KEY,EV_REL,EV_ABS等事件报告函数分别为 Void input_report_key(struct input_dev *dev,unsigned int code, int value) Void input_report_rel(struct input_dev *dev,unsigned int code, int value) Void input_report_abs(struct input_dev *dev,unsigned int code, int value)   Code: 事件的代码如果事件类型是EV_KEY, 则该代码则为设备的键盘代码例如键盘上按键代码值为0~127 鼠标键代码值为0x110 ~ 0x116 具体请参考include/linux/input.h文件 Value事件的值。如果事件类型是EV_KEY, 按键按下时值为1松开即为0   3.报告结束 Input_sync()用于告诉输入核心层input core此次报告已经结束   例如在触摸屏设备驱动中一次点击的整个报告事件过程如下 Input_report_abs(input_dev, ABS_X, x);      //报告X坐标 Input_report_abs(input_dev, ABS_Y, y);      //报告Y坐标 Input_report_abs(input_dev, ABS_PRESSURE, 1);      //报告事件类型为按下且value值为1 Input_sync(input_dev);      //报告完毕同步事件     一个按键驱动程序的局部函数 //在按键中断中报告事件 Static void buton_interrupt(int irq, void *dummy, struct pt_regs *fp) {       //注意此处所有的按键都要报告无论是0号按键还是1号按键       Input_report_key(button_dev, BTN_0, inb(BUTTON_PORT0)); Input_report_key(button_dev, BTN_1, inb(BUTTON_PORT1));       Input_sync(button_dev);      //报告完毕同步事件       //此时输入核心层和事件处理层就会将收集的事件类型形成相应的数据放到file operation 中和 buffer中以用用户空间读取 }   //驱动初始化函数 Static int __init  button_init(void){             //申请中断,因为按键事件报告是在中断中执行             If( request_irq(BUTTON_IRQ,button_interrupt, 0, “button”, NULL) )                       Return –EBUSY;              Set_bit(EV_KEY, button_dev.evbit);  //告诉输入子系统支持EV_key事件             Set_bit(BTN_0, button_dev.keybit);  //告诉输入子系统支持0号键             Set_bit(BTN_1, button_dev.keybit);  //告诉输入子系统支持1号键             Input_register_device(button_dev);      //注册input设备 }     应用程序实现       当相应的时间响应用户空间读取事件是所读取到的是 input_event 结构的信息不再是一个单纯的数字 在input_event 结构中已经包含 按键类型type, 按键键值code等信息。 用户需要对input_event 进行相应的解析获得相应的信息。  Struct   input_event  ev_key;  //声明结构体  Button_fd open(“/dev/event0”,O_RDWR);  While(1){       Count read(button_fd, ev_key, sizeof( struct input_event ));       for( i0; i(int)count/sizeof( struct input_event ); i ){             if(EV_KEY    ev_key.type)            //确定类型是否相同                        printf(“type:%d, code:%d, value:%d \n”,ev_key.type,ev_key.code,ev_key.value);             If( EV_SYN ev_key.type )                          Printf(“syn event \n”); } } Close(button_fd);   我们都在路上有时苦有时甜为此我送给自己以及相同爱好者们两个字坚持 。       一起加油       2015年1月16日 转载于:https://www.cnblogs.com/lihaiyan/p/4274456.html
http://www.pierceye.com/news/416616/

相关文章:

  • 发布设计任务的网站什么页游好玩人多
  • 增加网站关键词库中国建设银行黄陂支行网站
  • 企业网络优化湖北seo整站优化
  • 二百块做网站深圳网约车租赁公司哪家好
  • 软文500字范文WordPress博客程序优化
  • 企业网站内容如何备案建博会广州网站
  • 加工平台苏州纳米所海南seo排名
  • 个人适合做什么网站上海做网站建设的公司
  • 常见c2c网站有哪些网络文化经营许可证申请条件
  • 深圳龙华汽车网站建设移动页面
  • 陈巴尔虎旗网站建设重庆哪些网站推广公司
  • 网站做熊掌号码网站没被收录怎么办
  • 淘宝京东网站建设目的网站标题写什么作用
  • 棋牌网站开发工程师什么是营销网站建设
  • 邢台网站制作地址拿网站的文章做外链
  • 怎么样做钓鱼网站怎么建网站app
  • 高校财务网站建设国外网站ip地址
  • 重要的龙岗网站建设影视公司网站模板
  • 品牌网站 响应式网站wordpress oss静态
  • 免费网站制作中小型企业查询网址
  • 企业网站的seo广州市企业网站建设平台
  • 备案网站名称与实际网站名称不一致企业门户网站平台建设招标采购文件
  • 张掖网站制作wordpress 主题安装教程
  • 企业网站建设合作合同网页做成app
  • 郑州建网站价格医院网页
  • 南京设计网站网站速度的重要性
  • 河南智能网站建设平台简易网站建设
  • 成都鱼羊环保网站制作设计网站 关键字 标签
  • 邓修明调研成都网站建设鞍山建一个网站大概要多少钱
  • 聊城网站开发公司专业开发小程序公司