Чтение входного потока в RxAndroid - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать AndroidApp, в котором я подключаю myApp в режиме USB-аксессуаров.
Это то, что я пытаюсь сделать:

UsbAccessory accessory;
ParcelFileDescriptor fileDescriptor;
FileInputStream inputStream;
FileOutputStream outputStream;
...

private void openAccessory() {
    Log.d(TAG, "openAccessory: " + accessory);
    fileDescriptor = usbManager.openAccessory(accessory);
    if (fileDescriptor != null) {
        FileDescriptor fd = fileDescriptor.getFileDescriptor();
        inputStream = new FileInputStream(fd);
        outputStream = new FileOutputStream(fd);
        Thread thread = new Thread(null, this, "AccessoryThread");
        thread.start();
    }
}

Ссылка: https://developer.android.com/guide/topics/connectivity/usb/accessory#communicating-a

Я хочу продолжить опрос данных на входном потоке, подобном коду, показанному ниже, и отправить некоторые данные через выходной поток. Код ниже использует темы.

/*
     * Runnable block that will poll the accessory data stream
     * for regular updates, posting each message it finds to a
     * Handler.  This is run on a spawned background thread.
     */
    public void run() {
        int ret = 0;
        byte[] buffer = new byte[16384];
        int i;

        while (ret >= 0) {
            try {
                ret = mInputStream.read(buffer);
            } catch (IOException e) {
                break;
            }

            i = 0;
            while (i < ret) {
                int len = ret - i;

                switch (buffer[i]) {
                case 0x1:
                    if (len >= 3) {
                        Message m = Message.obtain(mHandler, MESSAGE_SWITCH);
                        m.obj = new SwitchMsg(buffer[i + 1], buffer[i + 2]);
                        mHandler.sendMessage(m);
                    }
                    i += 3;
                    break;

                case 0x6:
                    if (len >= 3) {
                        Message m = Message.obtain(mHandler, MESSAGE_JOY);
                        m.obj = new JoyMsg(buffer[i + 1], buffer[i + 2]);
                        mHandler.sendMessage(m);
                    }
                    i += 3;
                    break;

                default:
                    Log.d(TAG, "unknown msg: " + buffer[i]);
                    i = len;
                    break;
                }
            }

        }
    }

Любое руководство будет полезно

...