解析 Qt 如何支持矩陣鍵盤
Qt 如何支持矩陣鍵盤是本文介紹的內(nèi)容,不多說,先來看內(nèi)容的詳細介紹。前幾天想在fs2410開發(fā)板上做這件事情,然后移植一個Qt游戲,拿4x4矩陣鍵盤控制沒找到資料,但是有類似的論文,就郁悶了,這個問題也能寫成論文?后來搞定了覺得很簡單。
矩陣鍵盤屬于自定義的鍵盤,按下之后并不能像標準ps2、usb鍵盤那樣對系統(tǒng)輸入標準按鍵,都是自己寫的按鍵處理函數(shù)。
我們想要按下矩陣鍵盤,被Linux識別為數(shù)字、字母等,就像一個標準102鍵盤那樣(當(dāng)然鍵沒有那么多)
就可以使用input子系統(tǒng)
如何編寫矩陣鍵盤的input子系統(tǒng)驅(qū)動,可以參考當(dāng)前內(nèi)核的/drivers/input/keyboard/gpio_keys.c
我給的代碼基于2.6.22.6 ,連BIT_MASK都沒有。
其實非常簡單了,定義一個全局static struct input_dev* vkeyboard_idev = NULL;
在初始化里
- //注冊input子系統(tǒng)
- 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);
當(dāng)驅(qū)動判斷到按鍵按下時 (回車鍵為例)
- input_event(vkeyboard_idev, EV_KEY, KEY_ENTER,1);
- input_sync (vkeyboard_idev);
當(dāng)驅(qū)動判斷到按鍵抬起
- input_event(vkeyboard_idev, EV_KEY, KEY_ENTER,0);
- input_sync (vkeyboard_idev);
然后是qt跟這個input設(shè)備的聯(lián)系了
我使用的是qt-embedded-4.5.2 ,
加載矩陣鍵盤后多了一個 /dev/event1
小結(jié):Qt 如何支持矩陣鍵盤的內(nèi)容介紹完了,希望本文對你會有所幫助吧,更多資料要或許,請參考編輯推薦。
所以指定環(huán)境變量
export set QWS_KEYBOARD=USB:/dev/event1 即可