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流程,以下: 一、打开键盘设备并初始化 — 通常状况下是调用open,由设备驱动决定 二、监控键盘事件 — 通常用QSocketNotifier去监控键盘fd 三、发生键盘事件时读取键盘事件信息,如按下、抬起等 — 通常是调用read,或者ioctl,取决于键盘驱动 四、得到键盘事件信息后,将键值、按下等信息翻译成Qt内部键盘事件的格式,并经过调用processKeyEvent将事件分发出去。 五、析构函数别忘了关闭设备 90%以上的Keyboard Driver Handler会遵循这样的流程去处理键盘,若是咱们要写本身的插件,确定这样写也没错。具体的代码可能还须要看看例子。
相关文章
相关标签/搜索