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

中国建设银行福清分行网站最牛html5网站建设

中国建设银行福清分行网站,最牛html5网站建设,wordpress匿名投稿,设计师如何做自己的个人网站文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序#xff0c;我们最常见的就按键#xff0c;触摸#xff0c;插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序#xff0c;可支持键盘、鼠标… 文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序我们最常见的就按键触摸插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序可支持键盘、鼠标、触摸屏等多种输入设备。 Linux input 子系统将一个输入设备的输入过程分成了设备驱动(input device driver)和事件驱动input event driver两个层。前者负责从底层硬件采集数据后者负责与用户程序接口将采集到的数据分发给不同的用户接口。 通过这样的设计将千差万别的设备统一到了为数不多的几种驱动接口上。同一种事件驱动可以用来处理多个同类设备同一个设备也可以和多种事件驱动相衔接。而事件驱动和设备驱动则由输入核心层进行连接匹配。 这个是网上赵的一张图写的还是很详细的。 二、内核代码 位置 相关代码位置在 Linuxdrivers/input这个目录 常见的驱动有这些 tonylc:~/sdcard/imx6ull-pro/Linux-4.9.88/drivers/input$ ls apm-power.c ff-memless.c input-leds.c joydev.c misc tablet built-in.o gameport input-leds.o joystick mouse touchscreen evbug.c input.c input-mt.c Kconfig mousedev.c evdev.c input-compat.c input-mt.o keyboard mousedev.o evdev.o input-compat.h input.o Makefile rmi4 ff-core.c input-compat.o input-polldev.c matrix-keymap.c serio ff-core.o input-core.o input-polldev.o matrix-keymap.o sparse-keymap.c三、代码分析 我们主要关注三个函数 input_dev 表示一个输入设备包含输入设备的一些相关信息 内核中通过这个结构体来填充输入设备填充后通过input_register_device来注册就好了 一旦我们注册成功我们就可以在对应的目录下看到 所有的输入设备都存在这个input_dev中。 struct input_dev {const char *name;const char *phys;const char *uniq;struct input_id id;unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];unsigned long evbit[BITS_TO_LONGS(EV_CNT)];unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];unsigned long relbit[BITS_TO_LONGS(REL_CNT)];unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];unsigned long swbit[BITS_TO_LONGS(SW_CNT)];unsigned int hint_events_per_packet;unsigned int keycodemax;unsigned int keycodesize;void *keycode;int (*setkeycode)(struct input_dev *dev,const struct input_keymap_entry *ke,unsigned int *old_keycode);int (*getkeycode)(struct input_dev *dev,struct input_keymap_entry *ke);struct ff_device *ff;unsigned int repeat_key;struct timer_list timer;int rep[REP_CNT];struct input_mt *mt;struct input_absinfo *absinfo;unsigned long key[BITS_TO_LONGS(KEY_CNT)];unsigned long led[BITS_TO_LONGS(LED_CNT)];unsigned long snd[BITS_TO_LONGS(SND_CNT)];unsigned long sw[BITS_TO_LONGS(SW_CNT)];int (*open)(struct input_dev *dev);void (*close)(struct input_dev *dev);int (*flush)(struct input_dev *dev, struct file *file);int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);struct input_handle __rcu *grab;spinlock_t event_lock;struct mutex mutex;unsigned int users;bool going_away;struct device dev;struct list_head h_list;struct list_head node;unsigned int num_vals;unsigned int max_vals;struct input_value *vals;bool devres_managed; };可以通过下面的命令进行查看现在有哪些事件 # ls sys/class/input/ event0 event1 event2 input0 input1 input2 mice input_handler 这个是代表的处理类型 比如我们的耳机插入和我们触摸屏幕就是不同的类型 一个input_handler 可以处理多个input_dev 比我们的音量加减屏幕亮灭的事件处理都是可以通过同一个handler来处理 struct input_handler { void *private;void (*event)(struct input_handle *handle, unsigned int type, unsigned int code, int value);void (*events)(struct input_handle *handle,const struct input_value *vals, unsigned int count);bool (*filter)(struct input_handle *handle, unsigned int type, unsigned int code, int value);bool (*match)(struct input_handler *handler, struct input_dev *dev);int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);void (*disconnect)(struct input_handle *handle);void (*start)(struct input_handle *handle);bool legacy_minors;int minor;const char *name;const struct input_device_id *id_table;struct list_head h_list;struct list_head node; };input_handle 因为一个 input_handler 可以处理多个event 如果不进行管理的话就会很乱所以我们需要一个管理者来管理所以抽象一个input_handle 来把 input_handler和input_dev联系起来就好像input_dev是横坐标 input_handler 是纵坐标 input_handle就是交点每一个交点都是一个input节点。 struct input_handle {void *private;int open;const char *name;struct input_dev *dev;struct input_handler *handler;struct list_head d_node;struct list_head h_node; };一个按键驱动的大概步骤是这样的 struct input_dev *inputdev; /* input 结构体变量 *//* 驱动入口函数 */static int __init xxx_init(void) {......inputdev input_allocate_device(); /* 申请 input_dev */inputdev-name test_inputdev; /* 设置 input_dev 名字 *//*********第一种设置事件和事件值的方法***********/__set_bit(EV_KEY, inputdev-evbit); /* 设置产生按键事件 */__set_bit(EV_REP, inputdev-evbit); /* 重复事件 */__set_bit(KEY_0, inputdev-keybit); /*设置产生哪些按键值 *//************************************************//*********第二种设置事件和事件值的方法***********/keyinputdev.inputdev-evbit[0] BIT_MASK(EV_KEY) |BIT_MASK(EV_REP);keyinputdev.inputdev-keybit[BIT_WORD(KEY_0)] |BIT_MASK(KEY_0);/************************************************//*********第三种设置事件和事件值的方法***********/keyinputdev.inputdev-evbit[0] BIT_MASK(EV_KEY) |BIT_MASK(EV_REP);input_set_capability(keyinputdev.inputdev, EV_KEY, KEY_0);/************************************************//* 注册 input_dev */input_register_device(inputdev);......return 0; }/* 驱动出口函数 */ static void __exit xxx_exit(void) {input_unregister_device(inputdev); /* 注销 input_dev */input_free_device(inputdev); /* 删除 input_dev */ }我们在ui界面上为了可以更加快速的反馈时间就需要在内核中将事件上报上去这样我们UI就可以及时的进行处理。 上报事件就是通过 input_event 上报event 事件。 我们获取健值这些其实也是通过open wirte函数这些去获取的。 参考博客input子系统
http://www.yutouwan.com/news/242292/

相关文章:

  • 北京市建设工程造价管理处 网站国外wordpress主题破解版
  • acfun网站设计改进在网站底部给网站地图做链接
  • 建设系统网站全名办公邮箱最常用的是什么邮箱
  • 常用网站推广方法物业管理系统需求分析
  • 找网站做公司招聘网站续费申请
  • 网站建设使用技术南京app研发公司
  • 企业网站的建设多少钱设计素材网站哪个最好用
  • 做设计不进设计公司网站网上卖建材的平台
  • 海南省建设人力资源网站嘉兴网络科技有限公司
  • 济南seo网站关键词排名沧州市青县建设局网站
  • 辽宁建设执业继续教育协会网站2003 您的安全设置不允许网站使用安装
  • 资阳市建设局网站如何构建一个电子商务网站
  • 重庆江津做网站北京做网站建设
  • 中国建设银行官企业网站不建议网站
  • 网站编辑是网页制作么网站常用的优化方法
  • 陕西最好的云营销网站建设公司网站开发技术期中试题
  • 华茂达建设集团网站外贸建站有哪些公司
  • 网站打开文件按钮怎么做网站举报官网
  • 网站如何做百度才会收录wordpress添加评论框
  • 一个大型网站建设得多少钱wordpress做门户网站
  • 酒类网站如何做合肥网站建设推广服务
  • 网站推广员需要做什么做网站可以卖钱吗
  • 做液压的公司网站凡客精选带货达人
  • 专业做网站推广的公司霸州网站设计
  • 站长工具站长怎么做网站的百度排名
  • 网站添加锚点本地打开WordPress慢
  • 建站 discuz好的设计作品网站
  • 大良网站建设如何苏州网站的优化
  • 做网站卖机械杭州做网站的优质公司
  • 网站建设站长之家开网店卖什么适合新手