Professional Documents
Culture Documents
與應用
指導老 師: 李 志賢 組長
孫文駿 老師
黃馨臻 老師
組長: 黃熠 样
組員: 王奕 晨 林承 毅 黃 秀蕙 魏 韶
羿
研究動 機
本組藉由這次專題實作的機會,練習寫觸控面板
的 usb 驅動程式並移植在 ARM 板上控制
QT/embedded 滑鼠游標,增進驅動程式撰寫經驗
,以利未來職場上的應用。
電阻 式觸控 面板 原理
電阻式的驅動原理是用電壓降的方式來找座標軸,由下圖可以看出, X
軸和 Y 軸各由一對 0∼5V 的電壓來驅動,當電阻式觸控螢幕被 Touch 到
的時
候,由於迴路被導通,而會產生電壓降,而控制器則會算出電壓降所佔
的比例然後 更進一步算出座標軸。
運作原 理
電壓值 USB OR
控制器 RS232
ADC Interface IC
電阻 式觸控 面板 電腦
根據電壓值
轉換座標
Usb Core
USB CORE 是所有 USB 裝置的介面 ,USB 裝置透過 USB CORE 跟
USB DRIVER 溝通
Usb 等等裝置
Usb 驅動介 紹
第一步 :
#cat /proc/bus/usb/devices
Usb 驅動 介紹
第二步 :
第五步 :
}
Usb 驅動 介紹
第六步
……………………………..
………………………………….
}
skel_irq()
中斷 urb 完工函 式
static void skel_irq(struct urb *urb, struct pt_regs *regs)
{
}
skel_read()
上層 ap read 時會 執行
static ssize_t skel_read(struct file *file, char __user *user_buf, size_t count, loff_t
*ppos)
{
………………………….
………………………….
…………………………..
}
skel_write()
上層 ap write 時會執行
static ssize_t skel_write(struct file *file, const char __user *user_buffer, size_t count,
loff_t *ppos)
{
}
skel_ioctl()
供上層 ap 呼叫的 ioctl
static int skel_ioctl(struct inode *inode, struct file * file,unsigned int cmd,
unsigned long arg)
{
struct usb_skel *dev; // 資源結構
dev=(struct usb_skel *)file->private_data; // 取的資源結構
switch (cmd)
{
case SCR_IOCTL_CLEAR_BUFF:
}
skel_release()
上層 ap close 呼叫 會執行
}
skel_disconnect()
裝置拔 出會 執行
10 Skel_release( close()
)
6 9
Kernel_buf[130] user_buf[130]
Cat /proc/bus/usb/devices
座標資 訊
同一點 3 筆資 3 筆取平均數
料
1200 1133
(C8 or 88) 6a 60 7a 70 1202 1120 / 3 = 1204 1121
公式轉換
Up or down 1212 1111
high low high low
X 座標 14bit y 座標 14bit
Driver porting to ARM
ARM 軟硬體架 構
• ARM9 + 3.5 吋 LCD
• 10 吋電阻式 USB 觸控式面板 ( 接在 ARM9 的 USB 接口
)
• Linux kernel 2.6
• QT/embedded 3.3.8
• Touch panel Usb driver
• QT 程式
QT/embedded 介紹
Trolltech 針對嵌入式環境推出 Qt/Embedded 產
品。與桌上出版本不同, Qt/Embedded 已經直
接取代了 X Server 及 X Library 等角色,將所有
的功能全部整合在一起。
Qt/Embedded 的底層圖形引擎採用
FrameBuffer
的方式顯示 gui 介面
PC & ARM GUI
PC 與 ARM 在視窗介面的差異性比較
PC ARM
X Server QT/Embedded
(x window driver) (QT touch driver)
2. 修改 qte/mkspecs/qws/linux-arm-g++/qmake.conf
把原本的 gcc and g++ 改成
arm-linux-gcc arm-linux-g++
3. 開始編譯 :
./configure -thread -embedded ipaq -shared -depths 16 -no-cups -no-ipv6
-thread -no-gfx-qvfb -no-freetype -disable-opengl -disable-xml -disable-
canvas -qt-libjpeg -qt-mouse-linuxtp -xplatform qws/linux-arm-g++
4.Configure 成功後開始 make sub-src
成功後會產生 4 個 .so 檔
libqte-mt.so, libqte-mt.so.3, libqte-mt.so.3.3, libqte-mt.so.3.3.8
• 要修改的有裝置檔案名稱 , 還有 read 方式
( 改成 touch panel usb driver 的 device file /dev/skel0)
void QWSLinuxTPMouseHandlerPrivate::readMouseData()
{
}
USB driver 移植
1. 要先在 PC 上用 cross compile 成 arm 可以用的 driver
2. 利用 NFS server 跟板子做連線 , 放進 ARM 板後試試看有沒有作用
利用一隻簡單的 ap 跑看看
寫個簡單的 QT 程式試試看
900,900
(0,0)
(0,0)
兩點校正 公式
(X1,Y1) 為 touch panel 左下座標 (X2,Y2) 為 touch panel 右上座
標,
900,900 為 QT 鼠標最大座標
(X2,Y2) (900,900)
(X2,Y2) (900,900)
白色紙表示校正的區域
校正程 式
終端機打入 ./2Pcail_QT -qws 執行 QT 校正程式