历史上的今天
返回首页

历史上的今天

今天是:2025年11月12日(星期三)

正在发生

2022年11月12日 | S3C6410输入子系统按键驱动程序

2022-11-12 来源:csdn

以前写的驱动程序要另外写一个测试程序,这样的驱动程序就有很大的局限性,只能自己用,为了通用性,别人的应用程序也可以用我的驱动程序就要引入输入子系统。在这个驱动程序里设置了5个按键L, S, ENTER, LEFTSHIFT, ESC.设置这几个按键主要是为了方便测试。以下是驱动程序button_input.c

#include

 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

 

#include

#include

#include


static struct input_dev * button_dev;

static struct pin_desc *irq_pd = NULL;

static struct timer_list buttons_timer;

 

static irqreturn_t buttons_irq(int irq, void *dev_id)

{

irq_pd = (struct pin_desc *)dev_id;

mod_timer(&buttons_timer, jiffies + HZ/100);

return IRQ_RETVAL (IRQ_HANDLED);

 

}

 

struct pin_desc{

int irq;

char *name;

unsigned int pin;

unsigned int key_val;

};

 

struct pin_desc pins_desc[5] = {

{IRQ_EINT(0), "s1", S3C64XX_GPN(0), KEY_L},

{IRQ_EINT(1), "s2", S3C64XX_GPN(1), KEY_S},

{IRQ_EINT(2), "s3", S3C64XX_GPN(2), KEY_ENTER},

{IRQ_EINT(3), "s4", S3C64XX_GPN(3), KEY_LEFTSHIFT},

{IRQ_EINT(4), "s5", S3C64XX_GPN(4), KEY_ESC},

};

 

static void buttons_timer_function(unsigned long data)

{

struct pin_desc * pindesc = irq_pd;

unsigned int pinval;

if (!pindesc)

return;

pinval = gpio_get_value(pindesc->pin);

if (pinval)

{

/* 松开的 *//* 最后一个参数0表示松开1表示按下 */

input_event(button_dev, EV_KEY, pindesc->key_val, 0);

input_sync(button_dev);

}

else 

{

/* 按下的 */

input_event(button_dev, EV_KEY, pindesc->key_val, 1);

input_sync(button_dev);

}

}

 

static int button_init(void)

{

int i = 0;

/*1. 分配一个input_dev结构体 */

button_dev = input_allocate_device();

/* 2.设置 能产生按键类事件*/

/* 哪类事件 */

set_bit(EV_KEY, button_dev->evbit);

/* 重复类事件 */

set_bit(EV_REP, button_dev->evbit);

/* 能产生哪些事件L,S,ENTER,SHIFT */

 

for (i = 0; i < 5; i++)

{

set_bit(pins_desc[i].key_val, button_dev->keybit);

}

 

/* 3.注册 */

input_register_device(button_dev);

/* 4.硬件相关的操作 */

init_timer(&buttons_timer);

buttons_timer.function = buttons_timer_function;

buttons_timer.expires  = jiffies + HZ/100;

add_timer(&buttons_timer);

for (i = 0; i < 5; i++)

{

request_irq(pins_desc[i].irq, buttons_irq, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, pins_desc[i].name, &pins_desc[i]);

 

}

return 0;

 

}

 

static void button_exit(void)

{

int i; 

for (i = 0; i < 5; i++)

{

free_irq(pins_desc[i].irq, &pins_desc[i]);

}

del_timer(&buttons_timer);

 

input_unregister_device(button_dev);

input_free_device(button_dev);

}

 

 

module_init(button_init);

module_exit(button_exit);

 

MODULE_LICENSE("GPL");


测试 打开一个记事本

有图有真相

这些字母是在开发板的LCD屏上通过开发板上的按键按下后显示出来的

如果按键足够多,就完全可以做出来一个像电脑键盘一样的驱动

推荐阅读

史海拾趣

Genisco Electronics公司的发展小趣事
根据使用环境的温度、湿度、海拔等因素选择适合的发电机型号和配置。
BROTHER公司的发展小趣事

随着全球市场的不断扩大,BROTHER意识到要实现持续发展,必须走国际化道路。因此,公司在上世纪五十年代开始积极实施国际化战略。首先,BROTHER在美国纽约建立了销售总部,以更好地服务北美市场。随后,公司又在欧洲等地建立生产基地和销售网络,进一步拓展国际市场。通过国际化战略的实施,BROTHER不仅提升了品牌知名度和市场份额,还积累了丰富的跨国经营经验。

广芯电子(BROADCHIP)公司的发展小趣事

在电子行业的发展过程中,技术创新始终是BROTHER公司的重要驱动力。公司注重研发投入,拥有一支高素质的研发团队,不断推出具有创新性和竞争力的新产品。同时,BROTHER还积极与高校、科研机构等合作,开展产学研合作,推动技术创新和产业升级。通过技术创新,BROTHER不仅提升了产品质量和性能,还降低了生产成本,提高了市场竞争力。

电连(ECT)公司的发展小趣事

为了进一步扩大市场份额,ECT积极推进国际化战略。截止2022年初,公司在全球共设立23个分支机构,覆盖了中国台湾、中国香港、韩国、日本、泰国、越南、美国等国家和地区。通过国际化战略的实施,ECT不仅成功将产品推向全球市场,也提升了公司的国际影响力和竞争力。

意普(ESPE)公司的发展小趣事

意普(ESPE)公司成立于XXXX年,初期专注于光电保护技术的研发。在创始人XXX的领导下,公司凭借对光电技术的深入理解和创新,成功研发出首款红外线安全保护装置,并在行业内获得了广泛的认可。这一技术的突破不仅为公司赢得了市场份额,也为后续的发展奠定了坚实的基础。

永丰盈(CST)公司的发展小趣事

作为一家有社会责任感的企业,CST始终关注环境保护和社会公益事业。公司严格执行环保法规,积极推广绿色生产理念,努力减少生产过程中的污染排放。此外,CST还积极参与社会公益活动,为当地的教育、文化等事业做出了积极贡献。这些举措进一步提升了CST的企业形象和社会声誉。

问答坊 | AI 解惑

(求助,在线等)linux下自动运行HELLOHWORLD的问题

刚开始接触ARM,现在用的是S3C44B0的开发板,不知道在uclinux下的rc里该修改哪些东西。 在网上看到应该修改如下第一个地址的rc,而且我照做了,make之后没有报错. uClinux-dist/vendors/Samsung/44B0/rc uClinux-dist/romfs/etc/rc 下面是我u ...…

查看全部问答>

求自制PCB的最简方法

小弟我一向喜欢小制作,画了PCB也不会弄!求各位高手教导教导!!小弟无限感激!最好附图说明!!…

查看全部问答>

晶体三极管引脚的识别方法

晶体三极管在电路中常用“Q”加数字表示,如:Q17表示编号为17的三极管。 1、特点:晶体三极管(简称三极管)是内部含有2个PN结,并且具有放大能力的特殊器件。 它分NPN型和PNP型两种类型,这两种类型的三极管从工作特性上可互相弥补,所谓OTL ...…

查看全部问答>

晶体晶振选型指南手册

晶体晶振选型指南手册样品,报价请联络吴小姐,021-54245281STC@kanomicro.com…

查看全部问答>

单片机实现液晶显示

                                                     &n ...…

查看全部问答>

谁有程序员开发网的帐号 帮忙下个东西吧。。

http://www.pudn.com/downloads105/sourcecode/embed/detail434612.html 请发到我的邮箱里哈~~谢了 michelle_200312@163.com…

查看全部问答>

几款在线输入法评测

流在线输入法评测 在线输入法,是一种以网络为基础的基于WEB浏览器运行的输入法。它无需下载安装,仅需要通过浏览器运行即可输入。它的最大优点是其能够跨平台、跨浏览器,无论是没有汉字输入的操作系统还是不方便安装中文输入的工作环境,都可以通 ...…

查看全部问答>

华山论剑:时序约束讨论

时序约束是数字设计一个永恒的话题,  请各位高人华山论剑: 发表个人对时序约束的理解! 方便后来者…

查看全部问答>

版主问下关于小于100脚的STM32F103X的VDDA问题?

请问版主对于小于100脚的STM32F103X的VDDA需要电流是多大啊, 我想用一个3.3V基准源来做VDDA以提高内部AD的采样稳定性。使不受VDD电源 的干扰。不知这样是否可行!关于VDDA有具体参数吗?…

查看全部问答>