java:使用RXTXcomm向安卓系統板子的串列埠進行命令寫入
最近的任務是用java和一塊安卓板子進行互動,讀取命令,使用的是RXTXcomm,這個百度一下就有很多資料並且十分簡單。
同時你也可以使用SecureCRT這個軟體來先與板子進行互動,其中遇到的名詞對你後面理解串列埠設定屬性還是有幫助的。
左轉,吾愛破解搜尋:SecureCRT最新版和中文版
1.使用RXTX流程
1.找到所有可用埠(你要是實先就知道名字了也可以不需要這步)
2.開啟某一個串列埠,並設定屬性
3.新增回撥,在你輸入命令後,會返回系統給你傳送資料的回撥
4.獲取串列埠的輸出流,輸出命令
5.在會調裡等待回撥,並在回撥裡,開啟輸入流讀取資料
可以寫個while重複45,不過建議每一個輸入和輸出之間都等待50ms
6.關閉串列埠和釋放相關資源
2.注意事項
有兩點需要注意的是:
1.命令寫入
安卓系統是(UNIX)Linux系統,裡面的換行是“\n”,而我們在進行命令寫入的時候不能只寫入命令,還需要加換行符,就像你輸入了命令需要按下ENTER一樣
SerialUtil.sendToPort(serialPort, (str + "\n").getBytes());
其實str是你輸入的命令,如ls,ll之類的。有的命令在安卓系統裡是沒有的,這點還是得注意下
2.資料讀取
在你輸入命令之後,推薦等待50ms後讀取資料,避免資料一段一段的。
一、有的資料是有一定返回的,不會一直列印,如ll,ls。這種命令就可以使用下面一直讀取位元組方式進行資料讀取
/**
* 從串列埠讀取資料
*
* @param serialPort 當前已建立連線的SerialPort物件
* @return 讀取到的資料
* @throws ReadDataFromSerialPortFailure 從串列埠讀取資料時出錯
* @throws SerialPortInputStreamCloseFailure 關閉串列埠物件輸入流出錯
*/
public static byte[] readFromPort(SerialPort serialPort) throws ReadDataFromSerialPortFailure, SerialPortInputStreamCloseFailure {
//開啟輸入流
InputStream input;
try {
input = serialPort.getInputStream();
} catch (IOException e) {
throw new ReadDataFromSerialPortFailure();
}
byte[] bytes = new byte[1024];
//因為返回值為byte陣列,所以這裡採用bite流的方式,同時也方便輸入流讀取
ByteArrayOutputStream output = new ByteArrayOutputStream();
int len;
try {
while ((len = input.read(bytes)) > 0) {//這裡大於0而不是!=-1,是因為後面會一直傳來讀取長度為0的讀操作,會一直停在這裡
output.write(bytes, 0, len);
}
} catch (IOException e) {//讀取失敗,關閉輸入輸出流
try {
output.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
input.close();
} catch (IOException e1) {
e1.printStackTrace();
}
throw new SerialPortInputStreamCloseFailure();
}
//返回,並關閉輸入輸出流
try {
input.close();
} catch (IOException e1) {
e1.printStackTrace();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
二、有的資料則是會一直列印資訊,如logcat,則可用下面的方式:讀取一行的字串,然後一直讀取
InputStream input;
try {
input = serialPort.getInputStream();
} catch (IOException e) {
e.printStackTrace();
break;
}
InputStreamReader inputReader = new InputStreamReader(input);
BufferedReader reader = new BufferedReader(inputReader);
String line;
try {
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
}
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
不過這種情況,在終端的時候還有用ctrl+c的方式來停止,但是用java的話,目前還沒找到辦法
針對這種情況,我選擇的是隻列印一定資料的行數,並期望自己想要的資料就在裡面,如logcat -t 1000
三、有的資料則是某一行會重新整理進度,而不是下一行顯示新的進度,如yum命令安裝軟體的時候,但是安卓裡並沒有,並且也不在此次任務需求之列,所以有興趣的朋友可以自己去試試
rxtx包和工具類程式碼在這:http://download.csdn.net/download/ons_cukuyo/10023567
相關文章
- 帶內串列埠 在串列埠中輸入命令串列埠
- Uart進行的串列埠收發串列埠
- 安卓下的串列埠測試安卓串列埠
- 如何使用Java串列埠進行資料通訊及應用案例Java串列埠
- Linux 串列埠程式設計 使用termios與API進行串列埠程式開發Linux串列埠程式設計iOSAPI
- 通過串列埠進行通訊 :串列埠
- 安卓串列埠通訊疑問安卓串列埠
- 使用Modbus4J進行RTU模式串列埠通訊模式串列埠
- AndroidSerialPort:安卓串列埠通訊庫Android安卓串列埠
- 使用Windows API和多執行緒進行串列埠通訊[1] (轉)WindowsAPI執行緒串列埠
- Linux下串列埠通訊詳解(下)讀寫串列埠及關閉串列埠Linux串列埠
- 在VB中利用API進行串列埠通訊API串列埠
- Java程式執行系統命令Java
- putty能使用串列埠串列埠
- java 執行作業系統命令Java作業系統
- Linux系統中進入目錄的命令是什麼?如何使用?Linux
- linux串列埠命令列除錯Linux串列埠命令列除錯
- ros系統下更新串列埠包失敗的問題ROS串列埠
- 沒有真實串列埠裝置時使用"虛擬串列埠驅動"除錯你的串列埠程式碼串列埠除錯
- java串列埠通訊例項 -Java串列埠
- 使用HMC接管透過串列埠或顯示卡安裝的分割槽作業系統串列埠作業系統
- 使用HMC接管通過串列埠或顯示卡安裝的分割槽作業系統串列埠作業系統
- 703n路由器 刷openwrt 修改 串列埠雙向傳輸和串列埠波特率路由器串列埠
- 張高興的 MicroPython 入門指南:(三)使用串列埠通訊Python串列埠
- 不能進入windowsxp系統如何進行系統還原Windows
- 使用oracheck進行系統巡檢
- znai: 使用Markdown編寫Java文件系統AIJava
- Java使用Scanner類進行控制檯輸入Java
- 在 UNIX中用sar命令進行系統維護
- 板子裡面容易寫掛的地方
- Java雙向連結串列的實現Java
- 樹莓派3 B+ 的串列埠(USART)使用問題 (也是用C寫的)樹莓派串列埠
- 【linux】系統呼叫版串列埠分析&原始碼實戰Linux串列埠原始碼
- 【Linux】grub命令列引導進入windows系統Linux命令列Windows
- IBM串列埠線序以及串列埠線的做法(轉)IBM串列埠
- Linux系統中的程序和埠檢視命令Linux
- 認證系統之登入認證系統的進階使用 (二)
- 串列埠UART串列埠