最終更新:
moonlight_aska 2017年10月29日(日) 16:22:09履歴
- UartActivity.java
- PeripheralManagerServiceクラスのインスタンスを生成する.
- PeripheralManagerService#openUartDeviceメソッドで, ポートを指定してUartDeviceクラスのオブジェクトを取得する.
- UartDevice#registerUartDeviceCallbackメソッドで, コールバック関数を登録する.
- コールバック関数にて, onUartDeviceDataAvailableメソッドをオーバーライドする.
- UartDevice#readメソッドで, データを受信する.
- UartDevice#unregisterUartDeviceCallbackメソッドで, 登録を解除する.
- UartDevice#closeメソッドで, デバイスを解放する.
package com.moonlight_aska.androidthings.uart;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.things.pio.PeripheralManagerService;
import com.google.android.things.pio.UartDevice;
import com.google.android.things.pio.UartDeviceCallback;
import java.io.IOException;
public class UartActivity extends Activity {
private final static String TAG = "UartActivity";
private final static String UART_NAME = "UART0";
private UartDevice mUart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PeripheralManagerService manager = new PeripheralManagerService();
try {
// UARTデバイスオープン
mUart = manager.openUartDevice(UART_NAME);
// UARTのパラメータ設定
setUartParam();
// コールバック関数登録
mUart.registerUartDeviceCallback(mUartCallback);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
}
// UARTのパラメータ設定
private void setUartParam() throws IOException {
// ボーレート
mUart.setBaudrate(115200);
// データサイズ
mUart.setDataSize(8);
// パリティ
mUart.setParity(UartDevice.PARITY_NONE);
// ストップビット
mUart.setStopBits(1);
// フロー制御
mUart.setHardwareFlowControl(UartDevice.HW_FLOW_CONTROL_NONE);
}
// データの読み込み
private void readUartBuffer(UartDevice uart) throws IOException {
byte[] buffer = new byte[32];
int count;
while ((count = uart.read(buffer, buffer.length)) > 0) {
Log.d(TAG, "> " + convByteToString(buffer, count));
}
}
private String convByteToString(byte[] data, int length) {
// byte -> String変換
char[] str = new char[length];
for (int i=0; i<length; i++) {
str[i] = (char)data[i];
}
return new String(str);
}
// コールバック関数
private UartDeviceCallback mUartCallback = new UartDeviceCallback() {
@Override
public boolean onUartDeviceDataAvailable(UartDevice uart) {
try {
readUartBuffer(mUart);
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
}
return true;
}
};
@Override
protected void onDestroy() {
super.onDestroy();
if (mUart != null) {
try {
// 登録の解除
mUart.unregisterUartDeviceCallback(mUartCallback);
// UARTデバイスクローズ
mUart.close();
} catch (IOException e) {
Log.e(TAG, "Error on PeripheralIO API", e);
} finally {
mUart = null;
}
}
}
}
- 動作例

タグ
コメントをかく