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

h5页面制作工具appseo优化与sem推广有什么关系

h5页面制作工具app,seo优化与sem推广有什么关系,织梦做视频网站可以吗,做网站为什么选择竞网智赢文章目录 一、什么是input子系统二、内核代码三、代码分析 一、什么是input子系统 Input驱动程序是linux输入设备的驱动程序,我们最常见的就按键,触摸,插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标…

文章目录

  • 一、什么是input子系统
  • 二、内核代码
  • 三、代码分析

一、什么是input子系统

Input驱动程序是linux输入设备的驱动程序,我们最常见的就按键,触摸,插拔耳机这些。其中事件设备驱动程序是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。
Linux input 子系统将一个输入设备的输入过程分成了设备驱动(input device driver)和事件驱动(input event driver)两个层。前者负责从底层硬件采集数据;后者负责与用户程序接口,将采集到的数据分发给不同的用户接口。
通过这样的设计,将千差万别的设备统一到了为数不多的几种驱动接口上。同一种事件驱动可以用来处理多个同类设备;同一个设备也可以和多种事件驱动相衔接。而事件驱动和设备驱动则由输入核心层进行连接,匹配。

在这里插入图片描述这个是网上赵的一张图,写的还是很详细的。

二、内核代码

位置:

相关代码位置在: Linuxdrivers/input这个目录 

常见的驱动有这些

tony@lc:~/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.hkea.cn/news/113349/

相关文章:

  • 工信部网站备案查询 手机seo专员的工作内容
  • 淘宝活动策划网站视频营销成功的案例
  • 精准营销数据杭州排名优化软件
  • 中卫网站建站设计seo学习论坛
  • wordpress初始登录seo排名赚app靠谱吗
  • 软件外包保密协议seo相关岗位
  • 后台网站开发文档下载班级优化大师app
  • 辛集城乡建设管理局网站网络营销网络推广
  • 阿里云部署一个自己做的网站吗电商网站搭建
  • 免费汽车租赁网站模板网站域名解析ip查询
  • 企业解决方案官网国内seo排名分析主要针对百度
  • 变态版手游石景山区百科seo
  • 阿里云控制台登录入口seo矩阵培训
  • wordpress苗木模板网站搜索排优化怎么做
  • 网站图片引导页怎么做重庆seo招聘
  • 如何做属于自己的领券网站郑州百度网站优化排名
  • 建设银行益阳市分行桃江支行网站公司页面设计
  • vps 网站上传网站seo优化是什么意思
  • wordpress cos腾讯云seo网站优化收藏
  • 鹤岗商城网站建设免费域名申请
  • 江苏三个地方疫情严重抖音视频排名优化
  • 竞价排名广告东莞关键词排名快速优化
  • 做视频网站要什么格式好网络营销公司怎么注册
  • 企业专业网站建设快速网站搭建
  • 武威建设网站的网站google谷歌搜索
  • 长沙公司做网站多少钱推广平台怎么做
  • 现在大家做电商网站用什么源码营销策略都有哪些
  • 可以做试卷的网站英语怎么说seo关键词排名优化系统源码
  • 网站怎么设置支付功能企业网站的主要类型有
  • 成都圣都装饰装修公司北京搜索优化排名公司