Lovi$hD Ответов: 2

Последовательная связь в android с использованием библиотеки usbSerialForAndroid.


Я использую библиотеку usbSerialForAndroid для последовательной связи в android.
В моем коде я успешно предоставил разрешение на чтение и запись на USB-порт.

Моя проблема заключается в том, что "я получаю данные в третий раз, когда пытаюсь читать из последовательного порта, первые два раза, когда я читаю полученные данные, составляют ноль байт".

Есть ли какие-то конкретные настройки, которые необходимо сделать для чтения и записи на последовательные порты в android?

Мой пример кода находится здесь

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
                        List<usbserialdriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
                        UsbSerialDriver driver = availableDrivers.get(0);
                        UsbDeviceConnection connection = manager.openDevice(driver.getDevice());
                        port = driver.getPorts().get(0);

                        try {

                            port.open(connection);
                            port.setParameters(9600, UsbSerialPort.DATABITS_8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
                            int usbResultOut, usbResultIn1, usbResultIn2, usbResultIn3;
                            String tOut = "S\r"  //This is the data i am sending to serial device.
                            byte[] bytesOut = tOut.getBytes(); //convert String to byte[]
                            byte[] bytesIn1 = new byte[25];
                            byte[] bytesIn2 = new byte[25];
                            byte[] bytesIn3 = new byte[25];

                            usbResultOut = port.write(bytesOut, 1000); //write the data to serial device.

                            usbResultIn1 = port.read(bytesIn1, 1000);  //read the data but in my case 0 bytes received.
                            usbResultIn2 = port.read(bytesIn2, 1000);  //read the data but in my case 0 bytes received.
                            usbResultIn3 = port.read(bytesIn3, 1000);  //read the data, this time the data is received.
}

2 Ответов

Рейтинг:
1

Jochen Arndt

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


  • Хост отправляет некоторые данные (здесь строка). Отправка может выполняться в фоновом режиме, так что функция записи возвращается, пока данные все еще находятся на линии.
  • Клиент получает данные и хранит их обычно в буфере.
  • Как только клиент обнаруживает конец команды (вероятно, возврат каретки в вашем примере), он декодирует команду и отправляет ответ обратно.

При использовании 8N1 для передачи каждого байта требуется 10 секунд со скоростью передачи данных в бодах. Умножьте это на количество отправленных и полученных байтов и добавьте время обработки команды клиента, чтобы узнать, когда может быть доступен полный ответ.

Существует два метода проверки доступных данных: опрос и сигнальные функции.

При опросе вы будете вызывать функцию чтения внутри цикла до тех пор, пока возвращаемое значение не укажет, что данные доступны.

С помощью сигнальных функций вы будете получать информацию, когда появятся новые данные. Они обычно используются с потоками. Смотрите пример github для вашей библиотеки по адресу https://github.com/mik3y/usb-serial-for-android/blob/master/usbSerialExamples/src/main/java/src/com/hoho/android/usbserial/examples/SerialConsoleActivity.java[^].


Member 12354342

я хочу отправить sms через свою систему с помощью comm.port через android-устройство в vb6. connection - это bluetooth. в некоторых наборах nokia это просто. но не смог найти, как отправить (через android) с теми же шагами, что и nokia. кто-нибудь знает об этом?

David Crow

"...через android-устройство в vb6."

У вас есть Android-устройство, на котором работает приложение VB6? Скажи же!

lordqasim

Эй там...я знаю, что уже очень поздно, но не могли бы вы поделиться своим решением с ПК-кодом? Я совсем новичок в этом сериале.

Рейтинг:
0

CPallini

Это может произойти, если во время вашего звонка нет доступных данных (например, подключенное устройство медленно отвечает). Вы можете действовать (если это уместно) в соответствии с timeoutMillis параметр вашего the read метод.