我自己的linux和弦键盘驱动程序和嵌入式应用程序接口
我想开发我自己的键盘驱动程序到我自己的键盘。我必须使用GPIO来识别关键事件,并使用I2c来获取扫描代码。 我打算开发这样的键盘驱动程序我自己的linux和弦键盘驱动程序和嵌入式应用程序接口,linux,linux-kernel,linux-device-driver,embedded-linux,Linux,Linux Kernel,Linux Device Driver,Embedded Linux,我想开发我自己的键盘驱动程序到我自己的键盘。我必须使用GPIO来识别关键事件,并使用I2c来获取扫描代码。 我打算开发这样的键盘驱动程序 #include <linux/gpio.h> #include <linux/interrupt.h> #define GPIO 1 //gpio PIN ... if(gpio_request(GPIO, "Description")){ Exception } gpio_direction_input(GPIO);
#include <linux/gpio.h>
#include <linux/interrupt.h>
#define GPIO 1 //gpio PIN
...
if(gpio_request(GPIO, "Description")){
Exception
}
gpio_direction_input(GPIO);
...
int irq = 0;
if((irq = gpio_to_irq(GPIO)) < 0 ){
Exception
}
…
int init_module(){
int result = request_irq(GPIO, handler_func, IRQF_TRIGGER_LOW,"Description", "Device id");
if(result){
Exception
}
}
void handler_func(...){
//get scan code via i2c
}
#包括
#包括
#定义GPIO 1//GPIO引脚
...
if(gpio_请求(gpio,“说明”)){
例外情况
}
gpio_方向_输入(gpio);
...
int-irq=0;
如果((irq=gpio_至_irq(gpio))<0){
例外情况
}
…
int init_模块(){
int result=request_irq(GPIO、handler_func、IRQF_TRIGGER_LOW、“Description”、“Device id”);
如果(结果){
例外情况
}
}
void handler_func(…){
//通过i2c获取扫描代码
}
我需要开发一个接口,并且必须处理以下操作在我的键盘上,在[KEY1]上打印为“1abc”。
1.按键时,按原样显示第一个字符->“1”
2.特殊的组合键用于输入其他3个字符
例如:
关键输入操作如下
按键1(直接按下)应显示“1”
F1+1键(同时按下)应显示“a”
F2+键1(同时按下)应显示“b”
F3+1键(同时按下)应显示“c”
我的问题是我应该如何开发这个界面?您的问题有点含糊不清,因此我将把您链接到一些页面,介绍如何制作这种输入设备:
如果您使用的是普通键盘,而不是您自己制作的键盘,请注意键盘的问题。基本上,大多数键盘都有同时按键的限制。您最好遵循模拟设备的键盘和GPIO Linux驱动程序。我将把你链接到一些GPIO驱动程序 此驱动程序包括这些功能
- 可配置键盘大小矩阵(行、列)
- 支持切换事件
- 自动按键重复
- 锁定/解锁钥匙功能
答案取决于您使用的内核版本和体系结构 如果您使用的是3.1或更高版本支持的体系结构,则可以使用gpio keys驱动程序创建键盘事件设备文件,您可以在OpenFirmware设备树中进行配置,然后从用户空间读取。与OP中建议的方法相比,这种方法的优点是您不必编写任何新的内核代码,并且可以使用对设备事件文件执行阻塞读取的循环在用户空间中完全编写更高级别的驱动程序。(现在我意识到“不必编写任何新的内核代码”远不如编写自己的内核模块那么酷,所以这可能不是每个人都认为的优势;-) 即使您使用的是较旧的内核,也可以使用ADP5589 gpio驱动程序中使用的较旧的“板文件”配置方法来使用gpio_密钥驱动程序,该方法被推荐为解决方案。这仍然为您提供了设备文件的优势,您可以在该文件上执行从用户空间的阻塞读取
要使用较新的gpio密钥方法,您需要在电路板的设备树中添加gpio密钥部分,该部分应位于
arch//boot/dts
中。绑定的语法在中指定。您可以在BeagleBone上看到Manga触摸屏的gpio按键设备树配置示例。这个示例还显示了一个用Python编写的gpio密钥用户空间驱动程序。记得用CONFIG\u KEYBOARD\u GPIO编译内核
非常感谢。这对我更有帮助