AndroidThings UsbToUart не может принимать данные Rx при долгом запуске [закрыть] - PullRequest
0 голосов
/ 24 сентября 2019

Здравствуйте, я использую Android на Raspberry Pi 3, у меня проблема, мое приложение использует UsbToSerial, и тогда мое приложение может передать, но не может передать данные Rx, когда приложение работает долго, но в первый период работы мое приложение может передать данные Rx, а приложение может передатьвсегда времена

Как я могу решить проблему?
И это мой код

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        UartService uart_api = new UartService();
        uart_api.UartInit("USB1-1.2:1.0", 9600);
    }

UartService.java

public class UartService extends Activity {
    private static final String TAG = "LoopbackActivity";
    // UART Configuration Parameters
    private static final int DATA_BITS = 8;
    private static final int STOP_BITS = 1;
    private static final int CHUNK_SIZE = 512;
    private UartDevice mLoopbackDevice;

    private void openUart(String name, int baudRate) throws IOException {
        mLoopbackDevice = PeripheralManager.getInstance().openUartDevice(name);
        // Configure the UART
        mLoopbackDevice.setBaudrate(baudRate);
        mLoopbackDevice.setDataSize(DATA_BITS);
        mLoopbackDevice.setParity(UartDevice.PARITY_NONE);
        mLoopbackDevice.setStopBits(STOP_BITS);
    }

    public void UartInit(String UartName, int baudrate){
        PeripheralManager manager = PeripheralManager.getInstance();
        List<String> deviceList = manager.getUartDeviceList();
        if (deviceList.isEmpty()) {
            Log.i(TAG, "No UART port available on this device.");
        } else {
            Log.i(TAG, "List of available devices: " + deviceList);
        }

        // Attempt to access the UART device
        try {
            openUart(UartName, baudrate);
            // Read any initially buffered data
            Thread thread_read = new Thread(new ThreadUart(123));
            thread_read.start();
        } catch (IOException e) {
            Log.e(TAG, "Unable to open UART device", e);
        }
    }

    public class ThreadUart implements Runnable {

        private int data_in;

        public ThreadUart(int in) {
            this.data_in = in;
        }

        @Override
        public void run() {
            while(true){
                ///////// Test Rx //////
                if (mLoopbackDevice != null) {
                    // Loop until there is no more data in the RX buffer.
                    try {
                        byte[] buffer = new byte[CHUNK_SIZE];
                        int read;
                        while ((read = mLoopbackDevice.read(buffer, buffer.length)) > 0) {   // <<<< when run long time this cannot Rx data
                            mLoopbackDevice.write(buffer, read);
                        }
                    } catch (IOException e) {
                        Log.w(TAG, "Unable to transfer data over UART", e);
                    }
                }
                // sleep 1 sec.
                ///////// Test Tx //////
                String string = "Hello\r\n";
                byte[] b = string.getBytes(StandardCharsets.UTF_8);
                try {
                    mLoopbackDevice.write(b, b.length); // <<<< can Tx work!! always time
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 25 сентября 2019

наконец я следую Пример пример, Это работает !!Например, используйте библиотеку USBSerial для felHR85

, однако я не знаю причину потери Rx при использовании UART API, а затем продолжительное время

...