開發環境為Linux+Qt, 功能是實現tcp 、udp發送消息,檢測U盤插拔、同時在arm端移植syszuxpinyin軟鍵盤出入法。 下面是我當時的工作總結。下面是效果圖:
關于tcp、udp:
工作 狀況 和 總結
|
工作狀況: 1, 調通了 Qt 下的 TCP 通信模塊,并在板子上測試通過, A8 開發板與 PC 通信良好,發送中文無亂碼。 2, 將 TCP 模塊和 UDP 模塊整合到一起,做到一個 GUI 界面里。由于 TCP 的服務端和客戶端是不同的,所以合到一起后代碼分兩份。 3, 解決 Tiny210 開發板上沒有鍵盤的情況下不能輸入的問題,尤其是不能輸入中文。移植并改進了 SYSZUXpinyin 輸入法,在 Qt 的程序里能正常調出軟鍵盤,利用軟鍵盤輸入中文。由于 SYSZUXpinyin 的文字編碼方式是 GB2312 ,而 linux 下 qt 默認的正常顯示中文編碼方式是 UTF-8 ,為了解決兩者之間的沖突,費了一些功夫。最終順利解決,發送和接收都能正常顯示中文。 4, 利用 Qt 檢測 U 盤的插拔情況。具體用到了 Qt 的 dbus 模塊。在 PC 上已經初步檢測成功,但移植到 arm 時發現默認的編譯 Qt 時是不帶 dbus 模塊的。現在需要重新編譯帶 dbus 模塊的 arm 版 Qt 。在編譯時發現需要先安裝 dbus 庫。 總結: 1, 移植輸入法后,由于既要解決 GB2312 和 UTF-8 編碼的矛盾,又要解決 UDP 、 TCP 通信模塊在對端收到文字時能正常解析,讓我費了不少事。這方便網上資料基本沒有,最后通過看 qt 自帶的幫助文檔參考眾多資料,才得以解決。 2, 利用 Qt 檢測 U 盤的插拔,通過研究發現,在 linux 下 U 盤插進去后會注冊大約 7 個 usb-device ,只里面只有最后一個是真正的 USB 存儲設備。也只有真正的 USB 存儲設備注冊成功后,用戶才可以正常讀寫 U 盤。 |
關于檢測U盤:
工作 狀況 和 總結
|
工作狀況: 1, 在 PC 機 x86 平臺下,實現了基于 HAL 機制和 UDISKS 機制的 qdbus 檢測 U 盤插拔的設計,在 pc 平臺下能正常檢測 U 盤插拔。 2, 在將以上兩種方法移植到 arm 平臺時,發現 arm 平臺并不支持 HAL 和 UDISKS 。原因是 HAL 和 UDISKS 機制都是接收的 udev 的消息,而 udev 需要 sysfs 文件系統做支持,而現在的嵌入式文件系統大多數為 yaffs 系統。 3, 基于以上種種問題,最終選擇了內核的 hotplug 機制, hotplug 接收內核的消息。當有 U 盤插入或拔出時會有消息從內核發出。利用這些消息發出的關鍵字如“ add ”和“ remove ”可以檢測 U 盤的插拔,及整個內核識別 usb 的過程。 4, 考慮到當用戶還在 U 盤目錄的下拔出 U 盤,此后若不重啟開發板就會識別異常。在未重啟開發板前,希望程序對 U 盤的這種情況進行檢測并提醒用戶。試驗了很多種方法,最終采用了往 U 盤內寫測試文件,來檢驗 U 盤是否真正識別。 總結:經過仔細研究發現,當用戶還在 U 盤目錄下直接拔出 U 盤, linux 系統還來不及對 U 盤原掛載目錄 /udisk 進行卸載,因此當未重啟再次插入 U 盤, U 盤依舊要訪問申請掛載到 /udisk 就會出錯。這種狀況除了往 /udisk 里寫數據進行測試外,很難檢測。因此,不妨在檢測拔出 U 盤時,判斷 /udisk 目錄是否存在,如果存在則執行 umount /udisk ,這樣再次插入 U 盤就能正常訪問。 |
代碼分為服務器端和客戶端,每個端都有x86版本和編譯好的arm版本,共4份源碼,供大家參考。
下面是說明:
Esto-client-arm.tar ----------交叉編譯后arm版本的客戶端程序,實現功能有:udp傳輸、tcp傳輸、U盤監測,交叉編譯器為arm-linux-gcc-4.5.1
Esto-server-arm.tar ----------交叉編譯后arm版本的服務器端程序,實現功能有:udp傳輸、tcp傳輸、軟鍵盤移植
Esto-client-x86.tar ----------PC機上,客戶端程序,實現功能有:udp傳輸、tcp傳輸、u盤監測
Esto-server-x86.tar ----------PC機上,服務器端程序,實現功能有:udp傳輸、tcp傳輸
備注:SYSZUXpinyin只能在arm上編譯,無法再x86上編譯運行,原因是其實現基于QWSInputMethod,這個類是arm版本的庫所特有的。
客戶端的兩份源碼: http://www.pudn.com/downloads529/sourcecode/embedded/detail2190912.html
服務器端的兩份源碼: http://www.pudn.com/downloads529/sourcecode/embedded/detail2190909.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
