используя последовательный порт RS-232 в Android? - PullRequest
18 голосов
/ 07 января 2011

Я хочу отправлять сигналы через последовательный порт, используя классы API JavaComm на устройстве Android, и вот как я это себе представляю:

1 - устройство Android будет: Archos 3.2 с Android 2.2 иРежим хоста USB.

2 - включите пакет RxTx lib в мое приложение Android.и включите собственный код RxTx с помощью Android NDK.

3 - короткий кабель, который является usb -> serial.

Не могли бы вы объяснить мне, где я могу столкнуться с проблемами?

Ответы [ 8 ]

12 голосов
/ 03 марта 2011

Я только что перенес библиотеку JavaCOMM (GNU RXTX) на Android.Вот ссылка http://v -lad.org / projects / gnu.io.android /

Возможно, вам все еще потребуется пересобрать ядро ​​и, возможно, перекомпилировать разделяемую библиотеку для вашей среды.Но это должно помочь вам начать.

3 голосов
/ 14 января 2011

Как отмечалось выше, вам нужно будет найти драйверы устройств для любого USB <-> последовательного устройства, которое у вас есть. Многие из этих устройств используют чип Prolific PL2303:

http://www.qbik.ch/usb/devices/showdr.php?id=175

, которую поддерживает стандартное ядро ​​Linux, и которое имело долгое время. Я использовал это, и он отлично работает, поэтому я рекомендую вам использовать USB <-> последовательные устройства, которые используют этот чип.

Кроме того, при использовании udev эти устройства обычно отображаются как / dev / ttyUSB #. Как это происходит с Android, я не знаю, так что вам нужно это выяснить.

Наконец, вам нужно будет собрать собственный код RxTx. Этот код довольно грубый - у меня были проблемы с его сборкой на довольно современном Angstrom, и я вообще не пытался кросс-компилировать.

2 голосов
/ 31 января 2012

Да, это определенно беспорядок в использовании последовательных устройств со стороны телефона на Android. Проблема заключается в том, что различные устройства, представленные в AOS, не документированы и редко совпадают со стандартными устройствами Linux. Таким образом, вы никогда не знаете, с кем / с кем вы на самом деле разговариваете, какое-либо устройство, уровень абстракции (HAL, UART, PCI и т. Д.). Вот учебник о том, как разговаривать с последовательным устройством (модемом) с ПК с внешним USB-подключением.

В любом случае, если ваш телефон поддерживает режим USB-хоста, необходимо использовать другой способ подключения к последовательному порту / устройствам. В конце концов, обратная совместимость часто обеспечивает некоторую поддержку факса, телефонии или внешнего модема через USB-кабель. Также есть tehtering, который также может содержать некоторое виртуальное последовательное устройство ...

Для некоторых из этих имеется учебник .

PS. Основная проблема таких программ (например, Влада) и приложений (например, serial-api) заключается в том, что они делают слишком строгие предположения относительно имен устройств / портов и разрешений, необходимых для достижения (чтения / записи) этих ...

2 голосов
/ 08 января 2011

В отличие от обычных ПК, большинство стандартных ядер для устройств Android поставляются с минимумом скомпилированных модулей.Вам нужно перекомпилировать ядро ​​с включенными драйверами для USB в последовательные преобразователи.Ваша удача зависит от конкретного устройства, которое вы используете.Многие производители нарушают GPL, не предоставляя исходный код ядра.Некоторые производители, такие как Motorola с Droid 2, требуют подписанного ядра.Что делает невозможным загрузку собственного ядра на устройстве.

Кроме того, хотя многие устройства имеют хост-режим USB, вы должны перепрыгнуть через обручи, чтобы переключить режим устройства.Например, Motrola droid требует подключения специального USB-ключа к USB-порту перед включением питания для переключения в режим хоста.

Вот несколько ссылок, объясняющих, что вам нужно сделать:

  1. «Подробнее о режиме хоста Droid» http://www.tombom.co.uk/blog/?p=134.

  2. «Режим USB Host на Motorola Droid» http://www.tombom.co.uk/blog/?p=124.

1 голос
/ 08 января 2011

Самой большой проблемой, вероятно, является USB-> Serial Adapter:

Вам необходим либо драйвер устройства для USB Serial Driver, который, вероятно, не включен в ядро ​​Android.

Другой вариант - использовать что-то вроде libusb (который также может быть перенесен на android) и драйвер пространства пользователя, основанный на libusb.

1 голос
/ 07 января 2011

Вероятно, не совсем то, что вы ищете, но этот поучительный может указать вам правильное направление

0 голосов
/ 29 мая 2013

Я сделал это.Вам необходимо: 1. Root устройство.

Создайте свой собственный модуль для определенного набора USB, который вы собираетесь использовать: Сборка модуля ядра для Android

Я рекомендую использовать портированныйБиблиотека usb-serial-for-android, в которой уже реализован драйвер PL2303: https://code.google.com/r/felixhaedicke-usb-serial-for-android

0 голосов
/ 08 июня 2011

Сначала вам нужно выполнить рутинг планшета, чтобы получить доступ на чтение / запись к последовательным портам.

После этого взгляните на API последовательного порта Android .Вы можете скачать исходный код и посмотреть, как он реализован.

Он имеет встроенную библиотеку, которая получает дескриптор файла на последовательные порты, а затем вы можете читать и записывать в порты.Обычно приложение может не отображать список всех доступных портов на планшете.Чтобы увидеть, где подключено ваше устройство, подключите его к USB с HostMode и в эмуляторе типа «dmesg | tail».Он должен предоставить вам подробную информацию об устройстве и о порте, к которому он подключен.

Я также использовал планшет Archos, мое устройство было подключено к /dev/ttyACM0".

Удачи!

...