www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件

作者:劉洪濤,華清遠(yuǎn)見嵌入式學(xué)院講師。

在嵌入式平臺(tái)上運(yùn)行Qte時(shí),使用的鍵盤通常不是標(biāo)準(zhǔn)鍵盤,而是嵌入式設(shè)備外擴(kuò)的普通按鍵。那么實(shí)現(xiàn)QTE鍵盤輸入的方法大體上可以分為兩類:

(1)編寫一個(gè)普通按鍵驅(qū)動(dòng),然后開辟一個(gè)QT線程讀取按鍵值,在通過信號(hào)把按鍵值發(fā)送出去。需要接收鍵盤輸入的目標(biāo),聲明槽函數(shù),接收鍵盤信號(hào)。

(2)將按鍵驅(qū)動(dòng)編寫成標(biāo)準(zhǔn)鍵盤驅(qū)動(dòng),讓QTE感覺和標(biāo)準(zhǔn)鍵盤在打交道。

上述兩種方法給有特點(diǎn)。我在一些項(xiàng)目中多數(shù)都是使用第1種方式,感覺比較直觀容易控制。但也有些情況要選用第2種方法。

第1種方法的實(shí)現(xiàn)比較容易,這里就不多說了。下面主要把第2種方法的實(shí)現(xiàn)過程描述一下。

具體實(shí)現(xiàn)標(biāo)準(zhǔn)鍵盤輸入的過程可以分為兩步:

(1) 找一個(gè)標(biāo)準(zhǔn)usb鍵盤,測試QTE能否正確設(shè)別標(biāo)準(zhǔn)鍵盤

(2) 編寫按鍵驅(qū)動(dòng),模擬標(biāo)準(zhǔn)鍵盤輸入

一、第1步的實(shí)現(xiàn)過程:

● 配置QTE支持標(biāo)準(zhǔn)USB鍵盤

配置qte庫時(shí),增加鍵盤支持的參數(shù),如下:

./configure …… -qt-kbd-usb ……

● 配置內(nèi)核支持USB鍵盤輸入

● 插入U(xiǎn)SB鍵盤后,產(chǎn)生event設(shè)備節(jié)點(diǎn),如/dev/event2

● 設(shè)置QTE關(guān)聯(lián)的鍵盤設(shè)備的環(huán)境變量

export QWS_KEYBOARD=USB:/dev/event2

● 編寫一個(gè)接收鍵盤事件的QT測試代碼。

class MyDialog : public QDialog

{

……

protected:

virtual void keyPressEvent(QKeyEvent *k);

};

void MyDialog::keyPressEvent(QKeyEvent *k)

{

qDebug("in press event %x",k->key());

}

● 測試鍵盤輸入

當(dāng)按下F1~F12時(shí),打印出:

in press event 1000030

in press event 1000031

in press event 1000032

in press event 1000033

in press event 1000034

in press event 1000035

in press event 1000036

in press event 1000037

in press event 1000038

in press event 1000039

in press event 100003a

查QT幫助 Key_F1=0x1000030

說明QDialog 的keyPressEvent可以接收到它能獲取的鍵盤信號(hào),即QTE和USB鍵盤連接正確。

二、第2步的實(shí)現(xiàn)過程:

主要參考/driver/usb/input/usbkbd.c程序,完成鍵盤模擬。程序主要思想是編寫一個(gè)支持EV_KEY的input設(shè)備驅(qū)動(dòng)。下面摘取關(guān)鍵代碼。

● 完成input設(shè)備的注冊(cè)、注銷

struct input_dev *input_dev;

static unsigned char usb_kbd_keycode[256] = {

0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,

50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,

4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,

27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,

65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,

105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,

72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,

191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,

115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,

122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,

150,158,159,128,136,177,178,176,142,152,173,140

};

/*初始化*/

static int button_init(void)

{

……

input_dev = input_allocate_device();//分配input設(shè)備

input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);

// EV_KEY為要支持的鍵盤事件

for (i = 0; i < 255; i++)

set_bit(usb_kbd_keycode[i], input_dev->keybit);

//設(shè)置支持的鍵盤碼,可根據(jù)實(shí)際情況注冊(cè)

input_register_device(input_dev);//注冊(cè)input設(shè)備

}

/*注銷*/

static void __exit button_cleanup(void)

{

……

input_unregister_device(input_dev);//注銷input設(shè)備

}

● 中斷處理過程中完成鍵盤值的獲取及input事件的遞交

static irqreturn_t button_irq(int irq, void *dev_id, struct pt_regs *regs)

{

……

input_report_key(input_dev, 59, 1); //模擬鍵盤碼F1按下過程

input_report_key(input_dev, 59, 0);

input_sync(input_dev);

}

/*在內(nèi)核include/linux/input.h中

#define KEY_F1 59

*/

上面給出了簡要的過程,大家在具體實(shí)現(xiàn)過程中多參考/driver/usb/input/usbkbd.c文件,及注意按鍵去抖等問題。

“本文由華清遠(yuǎn)見http://www.embedu.org/index.htm提供”



華清遠(yuǎn)見

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

德國康佳特亮相上海工博會(huì),展示多款應(yīng)用就緒的嵌入式解決方案平臺(tái)

關(guān)鍵字: 嵌入式 傳感器 處理器

雙方攜手為客戶打造以存儲(chǔ)為核心的模塊化基礎(chǔ)架構(gòu),支持先進(jìn)的多裸片架構(gòu)設(shè)計(jì)

關(guān)鍵字: 非易失性存儲(chǔ) 半導(dǎo)體 嵌入式

本屆年會(huì)將在上海(11月13-14日)、北京(11月19-20日)和深圳(11月27-28日)舉行,面向嵌入式設(shè)計(jì)工程師推出25門技術(shù)課程

關(guān)鍵字: 嵌入式 MCU 模擬

上海2025年9月5日 /美通社/ -- 由紐倫堡會(huì)展(上海)有限公司舉辦的上海國際嵌入式會(huì)議將于 2025 年 10 月 16-17 日在上海世博展覽館舉辦。 此次會(huì)議將由三個(gè)版塊組成:嵌入式技術(shù)會(huì)議、汽...

關(guān)鍵字: 嵌入式 CE CHINA EMBEDDED

從外部看,電子系統(tǒng)仿佛一個(gè)統(tǒng)一的學(xué)科或設(shè)備,各組成部分協(xié)同工作,渾然一體。然而揭開表象,其內(nèi)在卻是另一番景象:一個(gè)碎片化、多層次的世界——其中每一層都獨(dú)立且復(fù)雜,衍生出各自特有的工具、專家、工作流程,甚至哲學(xué)體系。

關(guān)鍵字: 嵌入式 電子系統(tǒng) 半導(dǎo)體

8位單片機(jī)在嵌入式設(shè)計(jì)領(lǐng)域已經(jīng)成為半個(gè)多世紀(jì)以來的主流選擇。盡管嵌入式系統(tǒng)市場日益復(fù)雜,8位單片機(jī)依然不斷發(fā)展,積極應(yīng)對(duì)新的挑戰(zhàn)和系統(tǒng)需求。如今,Microchip推出的8位PIC?和AVR?單片機(jī)系列,配備了先進(jìn)的獨(dú)立...

關(guān)鍵字: 單片機(jī) 嵌入式 CPU

深圳2025年8月28日 /美通社/ -- 8月26日,2025 ELEXCON深圳國際電子展盛大啟幕。本屆大會(huì)以"All for AI"為主題,深圳市德...

關(guān)鍵字: AI 工業(yè)級(jí) SSD 嵌入式

深圳2025年8月26日 /美通社/ -- 8月26日,由博聞創(chuàng)意會(huì)展主辦的 第22屆深圳國際電子展暨嵌入式展(elexcon2025)在深圳(福田)會(huì)展中心隆重開幕。 作為中國電子與嵌入式技術(shù)領(lǐng)域的專業(yè)大展,本屆展會(huì)...

關(guān)鍵字: 嵌入式 電子 高通 AI

模塊化設(shè)計(jì)作為一種將系統(tǒng)拆分為獨(dú)立、可復(fù)用組件的方法,能夠在低代碼平臺(tái)中實(shí)現(xiàn)功能的靈活組合,并最大限度地提升系統(tǒng)性能。本文將探討如何通過模塊化設(shè)計(jì),使得低代碼平臺(tái)既能快速適應(yīng)變化,又能保持高效穩(wěn)定的運(yùn)行。

關(guān)鍵字: 模塊化設(shè)計(jì) 嵌入式

CPU親和度通過限制進(jìn)程或線程可以運(yùn)行的CPU核心集合,使得它們只能在指定的CPU核心上執(zhí)行。這可以減少CPU緩存的失效次數(shù),提高緩存命中率,從而提升系統(tǒng)性能。

關(guān)鍵字: Linux 嵌入式
關(guān)閉