android 串列埠程式設計總結

2021-07-01 18:43:24 字數 1212 閱讀 9892

最近公司在做一款帶***的android裝置,***是linux系統。android裝置要通過串列埠實現對***的控制。控制方式很簡單,只需android寫命令到串列埠就行了,這樣就涉及到了android的串列埠程式設計。

我做的是android4.2系統的串列埠程式設計,經乙個多星期的摸索,找到了兩種串列埠的程式設計方法。

要實現對串列埠的開啟首先要修改串列埠的許可權,在init.rc裡面新增修改許可權語句:chmod 0777 /dev/ttys0 。串列埠節點依照情況而定,我的串列埠是/dev/ttys0。

方法一:

通過android的api進行程式設計。android4.2的sdk中已經整合了對串列埠的jni和一些串列埠的服務介面,可以在framework中找到。裡面主要封裝了兩個類:

android.hardware.serialmanager

android.hardware.serialport

通過上面兩個類可以實現對串列埠的開啟,和讀寫操作。具體實現可以參考android sdk中/frameworks/base/tests/serialchat下的demo**,我已經上傳到網盤:

方法二:

使用網上的開源**:android-serialport-api,關於這個串列埠的程式設計**可以參考部落格:        和

開始,我以為找到android串列埠程式設計的**就已經大功告成了,沒想到更糾結的問題出現了。我想傳送「0x22」等這些命令到***,傳送的**如下:

int i;

charsequence t = emission.gettext();

char text = new char[t.length()];

for (i=0; i

使用上面的**傳送,我測試android本身接收是正常的,但是***端接收就不對了,無論我傳送什麼資料,***端接收的資料列印都是乙個值。糾結了好幾天,後來在網上發現了如下**,才得以解決:

/*傳送"0x22"命令到目標機子,必須使用以下的**

bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream();

bytearrayoutputstream.write(integer.decode("0x22").bytevalue());//0x22是傳送給被控制裝置的命令

moutputstream.write(bytearrayoutputstream.tobytearray());

這個**可以參考:

Android藍芽串列埠連線總結

這裡重點說下藍芽連線 在做android藍芽串列埠連線的時候一般會使用 bluetoothsocket tmp null get a bluetoothsocket for a connection with the given bluetoothdevice try catch ioexcepti...

C 串列埠程式設計學習總結

net2.0之後,引入了serialport類,在system.io.ports.serialport建立串列埠物件,即能設定屬性,連線串列埠進行資料傳輸。第一 設定引數 在開啟串列埠之前,需要設定串列埠的串口號 波特率 停止位 資料位 校驗位。對應c serialport.portname bau...

Android串列埠除錯

前面有乙個客戶需要系統支援pl2303的usb轉串列埠線,通過otg線連線了pad,但是pad可以識別到裝置後,一直無法收發資料,開始的時候,再android上無法正常開啟裝置,許可權不夠,後面root後修改許可權,可以正常開啟了 其實可以通過修改ueventd.rc,這個檔案,修改掛載裝置的許可權...