六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 1052|回复: 0

解析 Qt 如何支持矩阵键盘

[复制链接]

升级  78.6%

856

主题

856

主题

856

主题

探花

Rank: 6Rank: 6

积分
2572
 楼主| 发表于 2013-2-4 03:04:27 | 显示全部楼层 |阅读模式
Qt 如何支持矩阵键盘是本文介绍的内容,不多说,先来看内容的详细介绍。前几天想在fs2410开发板上做这件事情,然后移植一个Qt游戏,拿4x4矩阵键盘控制没找到资料,但是有类似的论文,就郁闷了,这个问题也能写成论文?后来搞定了觉得很简单。
矩阵键盘属于自定义的键盘,按下之后并不能像标准ps2、usb键盘那样对系统输入标准按键,都是自己写的按键处理函数。
我们想要按下矩阵键盘,被Linux识别为数字、字母等,就像一个标准102键盘那样(当然键没有那么多)
就可以使用input子系统
如何编写矩阵键盘的input子系统驱动,可以参考当前内核的/drivers/input/keyboard/gpio_keys.c
我给的代码基于2.6.22.6 ,连BIT_MASK都没有。
其实非常简单了,定义一个全局static struct input_dev* vkeyboard_idev = NULL;
在初始化里

  • //注册input子系统  

  • vkeyboard_idev = input_allocate_device();  
  • if(vkeyboard_idev == NULL)  
  • {  
  • printk(KERN_ERR "input_allocate_device error\n");  

  • }  

  • vkeyboard_idev->evbit[0] = BIT(EV_KEY);  
  • bitmap_fill(vkeyboard_idev->keybit, KEY_MAX);  
  • bitmap_fill(vkeyboard_idev->relbit, REL_MAX);  
  • bitmap_fill(vkeyboard_idev->absbit, ABS_MAX);                 
  • vkeyboard_idev->name = "vkeyboard";  
  • vkeyboard_idev->phys = "vkeyboard/input0";  
  • vkeyboard_idev->open = vkeyboard_input_dev_open;  
  • vkeyboard_idev->close = vkeyboard_input_dev_close;  
  • for(i = 0; i < KEY_MAX; i++)  
  • {  
  • input_set_capability(vkeyboard_idev, EV_KEY, i);  
  • }  
  • __set_bit(EV_KEY, vkeyboard_idev->evbit);  
  • input_register_device(vkeyboard_idev);
注销

  • input_unregister_device(vkeyboard_idev);
当驱动判断到按键按下时 (回车键为例)

  • input_event(vkeyboard_idev, EV_KEY, KEY_ENTER,1);  
  • input_sync (vkeyboard_idev);
当驱动判断到按键抬起

  • input_event(vkeyboard_idev, EV_KEY, KEY_ENTER,0);  
  • input_sync (vkeyboard_idev);
然后是qt跟这个input设备的联系了
我使用的是qt-embedded-4.5.2 ,
加载矩阵键盘后多了一个 /dev/event1
小结:Qt 如何支持矩阵键盘的内容介绍完了,希望本文对你会有所帮助吧,更多资料要或许,请参考编辑推荐。
所以指定环境变量
export set QWS_KEYBOARD=USB:/dev/event1 即可
【编辑推荐】
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表