Qt Embedded 键盘驱动分析(下)

键盘驱动插件究竟是怎么工作的呢?怎么才能让它来响应板子上的按键消息呢?这些疑问需要分析一个完整的键盘处理插件才能回答,下面我们就来看看最基本的pc101这个键盘插件是怎么实现的吧。首先,说到插件, 先要实现一个插件的框架,这个框架的代码要遵循Qt中的插件规范,还要符合键盘驱动插件的特点。 听起来很难?呵呵,其实非常简单, 只有两个函数需要自己实现。

涉及的代码:
键盘plugin框架:src/plugins/kbddrivers/usb/main.cpp
键盘driver handler的实现:src/gui/embedded/qkbdusb_qws.cpp

实现插件框架  main.cpp
class QUsbKbdDriver : public QKbdDriverPlugin  
{
public:  
    QUsbKbdDriver();  
    QStringList keys() const;  
    QWSKeyboardHandler* create(const QString &driver, const QString &device);  
};
 keys就是返回当前driver插件的键值,只要不和其他插件键值冲突就行。create返回你实现的QWSKeyboardHandler派生类的实例。

实现键盘处理实例  qkbdusb_qws.h  
class QWSUsbKeyboardHandler : public QWSPC101KeyboardHandler  
{  
public:  
    QWSUsbKeyboardHandler(const QString&);  
    virtual ~QWSUsbKeyboardHandler();  
private:  
    QWSUsbKbPrivate *d;  
};
从代码上来看, 这个Handler的类除了必须从QWSKeyboardHandler基类来派生之外,没有什么特别的要求。 但它对应的cpp文件其实实现了不少的功能,篇幅关系不能把整个代码贴出来,特此总结一个一般的keyboard driver plugin流程,如下:

1、打开键盘设备并初始化 — 一般情况下是调用open,由设备驱动决定
2、监控键盘事件 — 一般用QSocketNotifier去监控键盘fd
3、发生键盘事件时读取键盘事件信息,如按下、抬起等 — 一般是调用read,或者ioctl,取决于键盘驱动
4、获得键盘事件信息后,将键值、按下等信息翻译成Qt内部键盘事件的格式,并通过调用processKeyEvent将事件分发出去。
5、析构函数别忘了关闭设备

90%以上的Keyboard Driver Handler会遵循这样的流程去处理键盘,如果我们要写自己的插件,肯定这样写也没错。具体的代码可能还需要看看例子。

转载于:https://my.oschina.net/shelllife/blog/123235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值