использование последовательного порта RS-232 в android?

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

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

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

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

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

8 ответов


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

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


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

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

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

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

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


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

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

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

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

  2. "USB Режим хоста на Motorola Droid,"http://www.tombom.co.uk/blog/?p=124.


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

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

существует учебник для некоторых из этого здесь.

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


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


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

вам нужен либо драйвер устройства для последовательного драйвера USB, который, вероятно, не входит в ядро android.

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


Я сделал это. Вам нужно: 1. Корень устройства.

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

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


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

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

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

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

Удачи!