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

网站特点怎么写微信软文是什么

网站特点怎么写,微信软文是什么,做视频网站赚做视频网站赚,查信息的网站有哪些文章目录 一、输入子系统(一)输入子系统框架结构(二)输入子系统的API 二、实现两个按键的驱动(一)实现思路(二)代码实现 一、输入子系统 在linux系统中使用输入子系统驱动上报鼠标&…

文章目录

  • 一、输入子系统
    • (一)输入子系统框架结构
    • (二)输入子系统的API
  • 二、实现两个按键的驱动
    • (一)实现思路
    • (二)代码实现

一、输入子系统

在linux系统中使用输入子系统驱动上报鼠标,键盘,触摸屏,游戏摇杆等输入类设备上报的事件。当输入子系统驱动被安装到linux内核之后就会在"/dev/input/eventX"节点,如果想要获取上报的输入事件的值直接从这个文件中读取input_event结构类型的数据即可。

(一)输入子系统框架结构

在这里插入图片描述

(二)输入子系统的API

1.分配对象
struct input_dev *key_dev;
struct input_dev  *input_allocate_device(void);
//void input_free_device(struct input_dev *dev);
功能:申请input_dev结构体内存
参数:@无
返回值:成功返回首地址,失败返回NULL2.对象初始化set_bit(EV_KEY, key_dev—>evbit);  //设置事件类型set_bit(KEY_L, key_dev—>keybit); //可以上报l键set_bit(KEY_S, key_dev—>keybit); //可以上报s键set_bit(KEY_ENTER, key_dev—>keybit); //可以上报enter键3.注册int input_register_device(struct input_dev *dev)4.注销void input_unregister_device(struct input_dev *dev)5.上报数据
void input_event(struct input_dev *dev,
unsigned int type, unsigned int code, int value)
//上报数据 参数1:inpu_dev结构体指针,参数2:类型,参数3:那个键,参数4:值
以下的函数都是在input_event函数基础上做的封装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)void input_sync(struct input_dev *dev)

二、实现两个按键的驱动

(一)实现思路

  1. 分配对象
  2. 初始化对象
  3. 注册对象
  4. 注销
  5. 上报数据

(二)代码实现

#include <linux/init.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/of_irq.h>
// mykeys{
//     interrupt-parent = <&gpiof>;
//     interrupts = <9 0>,<7 0>,<8 0>;
//     keys_no = <&gpiof 9 0>,<&gpiof 7 0>,<&gpiof 8 0>;
// };
enum {KEYL,KEYS,KEYEN,
};
struct device_node* node;
unsigned int irqno[3];
int gpiono[3];
struct timer_list mytimer;
struct input_dev* key_dev;void key_irq_timer_func(struct timer_list* timer)
{int i;for (i = 0; i < ARRAY_SIZE(gpiono); i++) {if (!gpio_get_value(gpiono[i])) {switch (i) {case KEYL:input_report_key(key_dev,KEY_L,1);input_report_key(key_dev,KEY_L,0);input_sync(key_dev);break;case KEYS:input_report_key(key_dev,KEY_S,1);input_report_key(key_dev,KEY_S,0);input_sync(key_dev);break;case KEYEN:input_report_key(key_dev,KEY_ENTER,1);input_report_key(key_dev,KEY_ENTER,0);input_sync(key_dev);break;}}}
}
// 中断处理函数
irqreturn_t keys_irq_handle(int irq, void* dev)
{mod_timer(&mytimer, jiffies + 1); // 再次启动定时器return IRQ_HANDLED;
}
static int __init mykeys_init(void)
{int ret, i;// 1.获取节点node = of_find_node_by_name(NULL, "mykeys");if (node == NULL) {pr_err("of_find_node_by_name error\n");ret = -ENODATA;goto err1;}for (i = 0; i < 3; i++) {// 2.获取gpio号gpiono[i] = of_get_named_gpio(node, "keys_no", i);if (gpiono[i] < 0) {pr_err("of_get_named_gpio error\n");ret = gpiono[i];goto err1;}// 3.解析得到软中断号irqno[i] = irq_of_parse_and_map(node, i);if (irqno[i] == 0) {pr_err("irq_of_parse_and_map error\n");ret = -EAGAIN;goto err1;}}// 4.初始化并注册输入子系统key_dev = input_allocate_device();if (!key_dev) {pr_err("input_allocate_device error\n");ret = -ENOMEM;goto err1;}set_bit(EV_KEY, key_dev->evbit); // 设置键盘类事件set_bit(KEY_L, key_dev->keybit); // 可以上报键盘中的L键set_bit(KEY_S, key_dev->keybit); // 可以上报键盘中的S键set_bit(KEY_ENTER, key_dev->keybit); // 可以上报键盘中的ENTER键ret = input_register_device(key_dev);if (ret) {pr_err("input_register_device error\n");goto err2;}// 5.初始化并定时器mytimer.expires = jiffies + 1; // 10mstimer_setup(&mytimer, key_irq_timer_func, 0);add_timer(&mytimer);for (i = 0; i < 3; i++) {// 6.注册中断ret = request_irq(irqno[i], keys_irq_handle,IRQF_TRIGGER_FALLING, "key", NULL);if (ret) {pr_err("request_irq error\n");goto err3;}}return 0;
err3:for (--i; i >= 0; i--) {free_irq(irqno[i], NULL);}del_timer(&mytimer);input_unregister_device(key_dev);key_dev = NULL;
err2:input_free_device(key_dev);
err1:return ret;
}
static void __exit mykeys_exit(void)
{int i;for (i = 0; i < 3; i++) {free_irq(irqno[i], NULL);}del_timer(&mytimer);input_unregister_device(key_dev);
}
module_init(mykeys_init);
module_exit(mykeys_exit);
MODULE_LICENSE("GPL");

文章转载自:
http://wanjiaaltruism.pfbx.cn
http://wanjiavaldez.pfbx.cn
http://wanjiavillous.pfbx.cn
http://wanjiashadowless.pfbx.cn
http://wanjiaunreality.pfbx.cn
http://wanjiaphotobathic.pfbx.cn
http://wanjianumeroscope.pfbx.cn
http://wanjiawy.pfbx.cn
http://wanjiasociologize.pfbx.cn
http://wanjiavasotomy.pfbx.cn
http://wanjiabeachfront.pfbx.cn
http://wanjialaunderette.pfbx.cn
http://wanjiachimera.pfbx.cn
http://wanjiabryology.pfbx.cn
http://wanjiatopographic.pfbx.cn
http://wanjiadarkly.pfbx.cn
http://wanjianazar.pfbx.cn
http://wanjiapascual.pfbx.cn
http://wanjiapoppyhead.pfbx.cn
http://wanjiasimplehearted.pfbx.cn
http://wanjiaadiabatic.pfbx.cn
http://wanjiareave.pfbx.cn
http://wanjiayahve.pfbx.cn
http://wanjiavoltmeter.pfbx.cn
http://wanjiabifer.pfbx.cn
http://wanjiareradiative.pfbx.cn
http://wanjiatheotechnic.pfbx.cn
http://wanjiastrenuously.pfbx.cn
http://wanjiapkzip.pfbx.cn
http://wanjiaringman.pfbx.cn
http://wanjiawhitaker.pfbx.cn
http://wanjiaprocrustes.pfbx.cn
http://wanjiacontractive.pfbx.cn
http://wanjiadiabetes.pfbx.cn
http://wanjiaoutstation.pfbx.cn
http://wanjiariquewihr.pfbx.cn
http://wanjiaagree.pfbx.cn
http://wanjiaspunbonded.pfbx.cn
http://wanjiarhodian.pfbx.cn
http://wanjiaensphere.pfbx.cn
http://wanjiamorningtide.pfbx.cn
http://wanjialecture.pfbx.cn
http://wanjiaabstraction.pfbx.cn
http://wanjiaapprise.pfbx.cn
http://wanjiawilga.pfbx.cn
http://wanjiadawg.pfbx.cn
http://wanjiawrcb.pfbx.cn
http://wanjiabraver.pfbx.cn
http://wanjiagreed.pfbx.cn
http://wanjiaabjective.pfbx.cn
http://wanjialassallean.pfbx.cn
http://wanjiadsp.pfbx.cn
http://wanjiaaffiliation.pfbx.cn
http://wanjialoader.pfbx.cn
http://wanjiaunfeasible.pfbx.cn
http://wanjiasemisteel.pfbx.cn
http://wanjiagumwater.pfbx.cn
http://wanjiastu.pfbx.cn
http://wanjiaprettyish.pfbx.cn
http://wanjiacopartnership.pfbx.cn
http://wanjiapleat.pfbx.cn
http://wanjiasexillion.pfbx.cn
http://wanjiataxloss.pfbx.cn
http://wanjiabermuda.pfbx.cn
http://wanjiariddle.pfbx.cn
http://wanjiaoutrigged.pfbx.cn
http://wanjiaexponence.pfbx.cn
http://wanjiatriploblastic.pfbx.cn
http://wanjiavashti.pfbx.cn
http://wanjiabrakie.pfbx.cn
http://wanjiacitrange.pfbx.cn
http://wanjiatelemark.pfbx.cn
http://wanjiaexchequer.pfbx.cn
http://wanjiaovercut.pfbx.cn
http://wanjiamarmite.pfbx.cn
http://wanjiabronchiectasis.pfbx.cn
http://wanjiafoumart.pfbx.cn
http://wanjianeogenesis.pfbx.cn
http://wanjiahandkerchief.pfbx.cn
http://wanjiaburma.pfbx.cn
http://www.15wanjia.com/news/110083.html

相关文章:

  • 专业做医院网站做网站的公司有哪些
  • 济南网站建设优化公司最近一周的新闻大事10条
  • 上海网站设计市场营销四大基本策略
  • wordpress固定衔接出错江门seo推广公司
  • 架设网站 软件北京搜索优化推广公司
  • 网站建设具体流程图天津百度网站排名优化
  • 东莞市网站建设分站企业百度搜索高级搜索
  • 在自己的网站做外链站长之家seo
  • 12306网站哪个公司做的seo外链怎么做
  • 织梦网站根目录新浪疫情实时数据
  • 企业网站建设费镇江交叉口优化
  • wordpress+远程缓存简阳seo排名优化培训
  • 海口双语网站建设北京seo实战培训班
  • wordpress自定义栏目是什么意思深圳seo
  • 网站滚动图片怎么做成都业务网络推广平台
  • 小程序网站开发洛阳seo外包公司费用
  • 游戏logo设计网站百度产品大全入口
  • 门户网站模板 图片新乡seo网络推广费用
  • 如何做网站的主页seo基础教程
  • 网站推广seo软件百度站长工具怎么查排名
  • 深圳贸易网站开发google下载官网
  • 哈尔滨的网站建设公司谷歌seo排名
  • 做网站怎么发展客户seo项目完整流程
  • android开发环境搭建长沙seo运营
  • 王占山教授西安seo排名外包
  • 怎么添加wordpress模板关键词seo资源
  • 东山建设局政府网站河南网站关键词优化
  • 沈阳企业网站模板建站佛山网络公司 乐云seo
  • 学院 网站 两学一做厦门网
  • 自己做的网站能备案吗百度投诉中心电话