嵌入式linux调用驱动接口,嵌入式linux下QT3/Embedded的输入设备驱动接口

classMyKbdPrivate : public QObject

{

Q_OBJECT

public:

MyKbdPrivate( MyKbdHandler *h, const QString& );

virtual ~MyKbdPrivate();

bool isOpen() { return buttonFD > 0; }

privateslots:

void readKeyboardData();

private:

QString terminalName;

int buttonFD;

int kbdIdx;

int kbdBufferLen;

unsigned char *kbdBuffer;

QSocketNotifier *notifier;

MyKbdHandler *handler;

};

MyKbdPrivate::MyKbdPrivate(MyKbdHandler *h, const QString &device ) : handler(h)

{

terminalName = device.isEmpty()?"/dev/mykeyboard":device.latin1();

buttonFD = -1;

notifier = 0;

if ((buttonFD = open(terminalName, O_RDWR | O_NDELAY, 0)) < 0)

{

qWarning("Cannot open %s\n", terminalName.latin1());

}

if ( buttonFD >= 0 ) {

notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );

connect( notifier, SIGNAL(activated(int)),this,

SLOT(readKeyboardData()) );

}

kbdBufferLen = 80;

kbdBuffer = new unsigned char [kbdBufferLen];

kbdIdx = 0;

}

MyKbdPrivate::~ MyKbdPrivate()

{

if ( buttonFD > 0 ) {

::close( buttonFD );

buttonFD = -1;

}

delete notifier;

notifier = 0;

delete [] kbdBuffer;

}

voidMyKbdPrivate::readKeyboardData()

{

intn = 0;

intidx = 0;

n= read(buttonFD, kbdBuffer+kbdIdx, 4);

unsigned char *next = kbdBuffer + idx;

int *code = (int *)next;

int keycode = Qt::Key_unknown;

switch ( (*code) & 0xff ) {

case 11:

keycode = Qt::Key_Backtab;

break;

case 12:

keycode = Qt::Key_Return;

break;

case 13:

keycode = Qt::Key_Tab;

break;

case 14:

keycode = Qt::Key_Up;

break;

case 15:

keycode = Qt::Key_Down;

break;

default:

qDebug("Unrecognised key code %d", *code );

}

handler->processKeyEvent( 0, keycode, 0, TRUE, FALSE );

}

MyKbdHandler::MyKbdHandler(const QString &device)

{

d = new MyKbdPrivate( this, device );

}

MyKbdHandler::~MyKbdHandler()

{

delete d;

}

#include"mykbd_qws.moc"

#endif// QT_NO_MYKBD

2、把MyKbdHandler加入QkbdDriverFactory::create()函数中。在src/embedded/qkbddriverfactory_qws.cpp文件中加入头文件:

#include “mykbd_qws.h”

然后找到QkbdDriverFactory::create()这个函数,在”Qstring driver = key.lower();”这一行的后面加上以下几行:

#ifndef QT_NO_MYKBD

if ( driver == “mykbd” || driver.isEmpty() )

return new MyKbdHandler( device );

#endif

3、重新编译QT/Embedded并把生成的qt库文件下载到开发板上,然后在目标板上设置系统变量,输入命令:exportQWS_KEYBOARD=’MYKBD:/dev/mykeyboard’。

至此QT3/Embedded的键盘设备接口已经完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值