俺言語。

自分にしか理解できない言語で書かれた備忘録

【Android】usb-serial-for-androidの使い方

使うとき

使用する際の流れはたぶん...

1. USBデバイスを取得
-> UsbManagerクラスの getSystemService

2. USBシリアルとして使用できるデバイスドライバのリストを列挙
-> UsbSerialProberクラスの getDefaultProber().findAllDrivers(usbManager)

3. 使用するUSBドライバでデバイスを開く
-> UsbManagerクラスの openDevice()

4. 使用するUSBドライバでUSBポートを開く
-> UsbSerialPortクラスの open()

5. シリアル通信パラメータ(BaudRateなど)を設定する
-> UsbSerialPortクラスのsetParameters()

6. データ送信要求をセットする *Arduino系と通信する際はこれが必要。
-> UsbSerialPortクラスのsetDTR()

7. データを送受信する
-> UsbSerialPortクラスのread/write 
またはSerialInputOutputManager.Listenerクラスを実装してonNewDataメソッドをOverrideする

USBデバイスとそのバイスのポートを開く必要がある。
また、6.のsetDTRをしないと通信がスタートしない物もあるので注意。

別途USBのパーミッション処理が必要。

使用例はこちら

public class BindServiceSensorHandling extends Service implements SerialInputOutputManager.Listener{

    public SerialInputOutputManager usbIoManager;
    private UsbDeviceConnection usbConnection;
    private UsbSerialDriver usbdriver;
    public UsbSerialPort usbSerialPort;

    // 1 
    UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

    // 2
    List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(usbManager);

    // 3
    usbdriver = availableDrivers.get(0);
    usbConnection = usbManager.openDevice(usbdriver.getDevice());

    // 4. Open USB port
    usbSerialPort = usbdriver.getPorts().get(0); // Most devices have just one port (port 0)
    usbSerialPort.open(usbConnection);

    // 5
    usbSerialPort.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);

    // 6
    usbSerialPort.setDTR(true);

    // 7. Listenerクラスをセット.非同期処理を開始
    usbIoManager = new SerialInputOutputManager(usbSerialPort, this);
    Executors.newSingleThreadExecutor().submit(usbIoManager);

}

終わるとき

1. USBポートを閉じる
-> UsbSerialPortクラスのclose()

2. リスナーを止める
-> UsbInputOutputManagerクラスのstop()

使用例はこちら

    private void disconnect(){
        if (usbSerialPort != null) {
            try {
               // 1
                usbSerialPort.close();
                usbSerialPort = null;
            } catch (IOException e) {
            }
        }
        if(usbIoManager != null)
            // 2     
            usbIoManager.stop();
        usbIoManager = null;
     }