九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
關(guān)于android USB Host 串口編程

環(huán)境:android 平板4.1 ,OTG線,串口轉(zhuǎn)usb線,開發(fā)板

-------------------------------------------------

任務(wù):使用平板發(fā)送指令給開發(fā)板,開發(fā)板接受后,比如開始打印、

即使用android host 來連接外設(shè)。

 

 

基礎(chǔ)知識:

做usb通信,首先要先弄清楚哪邊是HOST那邊是SLAVE。

比如你的android手機做host,要獲得slave,用UsbDevice表示slave

要是你的android手機做slave,要獲得host,用UsbAccessory表示host

以前沒有接觸過android USB Host編程。來到這個公司后,第一個任務(wù)就是寫一個android平板的usb host 的demo,和打印機,ic卡等通信。

一、說一下USB HOST的用處:

       USB設(shè)備分為HOST(主設(shè)備)和SLAVE(從設(shè)備),只有當(dāng)一臺HOST與一臺SLAVE連接時才能實現(xiàn)數(shù)據(jù)的傳輸。android支持實現(xiàn)了android外設(shè)協(xié)議的USB硬件。Android外設(shè)和主機模式,在android3.1或者更高的平臺上直接支持。但是,對USB主機和外設(shè)模式的支持,最終還是要取決于設(shè)備的硬件,而不僅僅是看平臺的等級。
我上網(wǎng)搜了一下,早期的一些夏新的手機,以及htc的WM手機支持USB HOST功能,而現(xiàn)在的android手機中支持USB HOST的還很非常少,查到的支持USB HOST功能的手機有三星的I9250,HTC手機暫未發(fā)現(xiàn),現(xiàn)在測試使用的HTC T328w不支持USB HOST功能。所以,測試條件不太充分。
       另外,USB HOST的主要用處,一般是android手機做HOST主設(shè)備,用來控制其他一些元器件,比如,單片機,鼠標(biāo),游戲手柄,數(shù)碼相機,等等。
說到手機的usb host 一般用OTG線連接usb外界設(shè)備,但是OTG是什么呢? 今天我才懂,慚愧啊,
這里在簡單說明下:OTG即On-The-Go,是近年來發(fā)展起來的技術(shù),主要應(yīng)用是讓不同的USB設(shè)備和移動設(shè)備之間連接,進行數(shù)據(jù)交換。主要應(yīng)用是在一些高端手機和平板上,在具有OTG功能的平板或手機上,我們可以連接各種USB設(shè)備,例如鼠標(biāo)、鍵盤、U盤等,這對于移動辦公來說還是有一定作用的。尤其是對U盤、讀卡器等設(shè)備的讀取,在身邊沒有電腦的情況就可利用移動設(shè)備直接使用這些設(shè)備。

連接無線鍵鼠,鼠標(biāo)移動尚算靈敏,但是部分輸入法使用鍵盤打字會出現(xiàn)嚴(yán)重的延遲,而且暫時還沒試出哪個輸入法支持USB鍵盤的中文輸入。

 

連接U盤,這個算比較常見的一個用途,效果不錯。

 

       而很少把手機端當(dāng)做從設(shè)備,與電腦端通過USB HOST進行通信的。另外看到一個人說不能通過USB HOST方式與電腦實現(xiàn)通信:
二、通過socket方式進行連接
     開始的時候看到一個例子說是通過USB HOST實現(xiàn)的PC與手機端進行連接,我根據(jù)查到的資料和自己的理解覺得大概是如下的意思:
      1.基于socket編程方式,在android手機端和pc端進行連接傳輸數(shù)據(jù)。
      2.連接時,需要通過adb forward方式進行端口轉(zhuǎn)發(fā),才能連接的上去。
      3.需要用到broadcast來進行,在server端用adb shell 命令開啟android端的socket連接服務(wù)。
      4.主要基于android.hardware.usb包下的UsbManager 類和UsbAccessory類。
      5.然后就是一些IO操作,IO處理及關(guān)閉優(yōu)化。
     最關(guān)鍵的兩點就是:
     1)端口轉(zhuǎn)發(fā):
      Runtime.getRuntime().exec(“adb forward tcp :12580 tcp:10086 ”);
      在服務(wù)端監(jiān)聽10086端口。
       2)在server端java程序中使用adb 命令啟動client端的service。
         Runtime.getRuntime().exec(“adb shell am broadcast –a NotifyServiceStart”);
       后來測試多次發(fā)現(xiàn),這個方式?jīng)]有用到USB HOST的方式,依然是socket通信,只不過是進行了一下端口轉(zhuǎn)發(fā)。
       另外,關(guān)于socket通信時,寫的android程序在模擬器上可以與PC上的server端進行通信,而把程序裝到真機上時,就不能實現(xiàn)通信,這個問題的主要原因是PC端和手機上的無線網(wǎng)絡(luò)不在一個網(wǎng)段,無法進行連接。
三、串口通信,hid訪問
       在網(wǎng)上查到一些關(guān)于USB HOST的開發(fā)都是基于基于android端與一些單片機進行串口通信的,串口轉(zhuǎn)usb

USB HID

是Human Interface Device的縮寫,由其名稱可以了解HID設(shè)備是直接與人交互的設(shè)備,例如鍵盤、鼠標(biāo)與游戲桿等。不過HID設(shè)備并不一定要有人機接口,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備。
  
mini usb 以前的手機的usb那樣
micro usb 現(xiàn)在手機的usb口那樣
總結(jié):
串口通信才是本次完成任務(wù)的重點, 既然android的SDK里,在3.0以后,已經(jīng)有支持usb外設(shè),
所以我此次想法,先試試用java來,即SDK里的API來和usb外設(shè)通信。
其實SDK里的API實現(xiàn)也是在jni來ndk編程,網(wǎng)上還有一些c/c++的api,不懂如何。
 
usb HID模式 ,串口轉(zhuǎn)usb兩種,開始我以為要分開這兩種情況。
其實,usb相關(guān)的設(shè)備(無論是直接usb還是串口轉(zhuǎn)usb)都是可以和android host設(shè)備通信的。 
最近在android平板上開發(fā)一個程序,可以通過mini Usb控制外部設(shè)備,外部設(shè)備接口是串口轉(zhuǎn)USB。平板和外部設(shè)備之間通過OTG線連接,設(shè)備由平板供電。
系統(tǒng)本意是想通過平板可以向設(shè)備發(fā)送串口指令。
在串口轉(zhuǎn)usb編寫程序,我可以連接到設(shè)備,也可以發(fā)送數(shù)據(jù),不是-1了,但是
數(shù)據(jù)都是錯的,原因后來發(fā)現(xiàn)是,在設(shè)置波特率的時候,沒有效果,為什么沒效果呢
因為串口轉(zhuǎn)usb線里有一個芯片, 不同型號的芯片,設(shè)置波特率的方式不同,即
mDeviceConnection.controlTransfer(0x40, 0x03, baud, index, null, 0, 0); // set
        // baudrate
上面的方法的參數(shù)值不同。
糾結(jié)了好久,參考了國外的大哥寫的,才調(diào)通了FT的芯片。

 在開發(fā)串口,還有一些串口的測試工具在附件里。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
android通過USB控制外設(shè)問題
一篇讀懂:Android手機如何通過USB接口與外設(shè)通信(附原理分析及方案選型)
在WinCE 6.0系統(tǒng)下實現(xiàn)USB功能定制
請問如何用STM32系列內(nèi)核的MCU與PC進行USB通信
串口在安卓上的開發(fā)
【整理】關(guān)于安卓(Android)手機是否支持USB主機(USB Host)功能 | 在路...
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服