Software developer
0,0
рейтинг
25 декабря 2012 в 17:50

Разработка → Работа с COM портом в Android приложениях из песочницы

Все доброго времени суток!

Однажды я задумался над разработкой приложения, которое требовало бы общения с hardware устройством, через COM порт. Хотя Android заботливо предоставляет api для работы с usb устройствами, оно мне к сожалению не подходило, так как хотелось осуществлять поддержку моего старого планшета на базе андроид версии 2.2. Стандартное api ото Гугла, не подходило

по двум причинам:
  • во первых оно не сработало для меня.
  • девайс у меня все-таки старенький


Итак, после длительного поиска в интернете, я наткнулся на очень интересное решение android-serialport-api. Данное решение представляет собой Java обертку в которой через JNI в которой осуществляются вызовы к USB устройству.

Разработчики библиотеки предлагают 4 различных варианта подключения Android устройства к COM порту через USB.

image

Так как я имел в своем распоряжении планшет с USB host портом, и у меня под рукой имеется USB to RS232 преобразователь, то я пошел по варианту номер 2.

Преимущества и недостатки такого решения заключаются в

Преимущества
  • USB — RS232 преобразователь можно легко найти на ближайшем радио рынке
  • никаких извращений с моим дорогим моему сердцу планшетом
  • возможная высокая скорость передачи информации


Недостатки
  • потребуется USB хост коннектор
  • возможно, что девайс придется рутануть


Итак приступим!

Тут я опишу подход в использовании этой библиотеки.

          serialPortFinder.getAllDevices();  // так мы попробуем найти все usb-хост в файловой системе.
          
           serialPortFinder.getAllDevicesPath(); // и пути к ним

           SerialPort  mSerialPort = new SerialPort(foundedDeviceFormSerialPortFinder, 9600, 0);

           OutputStream outputStream = mSerialPort.getOutputStream();
           InputStream   inputStream = mSerialPort.getInputStream();
            
           // дальше собственно и происходит чтение из стрима или запись в него



Для корректной работы serialPortFinder необходимо чтобы переходник USB-RS232 был подключен, определен в /dev.

Вот таким нехитрым способом можно осуществлять общение с очень большим количеством железа через COM порт,
@Artemis4You
карма
7,0
рейтинг 0,0
Software developer
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (19)

  • +1
    Божественно!

    А скажите, вот у меня есть MOXA UPORT 1110 RS-232 USB-to-Serial Adapter. Под Windows он требует установки дополнительных драйверов, заведется ли он под андройдом? (Ни разу не пытался заводить его под линуксом)
    • 0
      Честно сказать, не знаю… Но нужно попрбовать. Главное чтобы андрид определил девайс и разрешил с ним общаться
      • 0
        Да, нашел что они поддерживают ядра 2.* и 3.*

        Спасибо.
    • 0
      В этом случае корректнее поискать на каком чипе сделан адаптер. Самые популярные — Prolific PL-2303 и FTDI FT-232RL
      • +1
        еще Silicon Labs CP210x
  • 0
    А какой планшет, если не секрет, завёлся?
    Пока не могу завести свой m7206
    • 0
      Конучно могу, ztpad c91 рутованый
  • 0
    Очень в тему. Сейчас изучаю разработку под Android и как раз хотел сделать девайс с управлением по Bluetooth/SPP.
  • 0
    В крайнем случае, просто компиляем из стокового ядра .ko модуль для соответствующего чипа и наслаждаемся.
    • 0
      хаха. просто… Это надо иметь репозиторий той же версии, из которого собрано ваше ядро. Иначе не подгрузит модуль. Опять же окружение разворачивать…
      • 0
        да, кавычки вокруг «просто» я забыл. но я таки запилил под свой китайшет и ftdi.ko и easycap.ko — и оба работают.
        • 0
          пока я сношался с ядром — вышло новое с уже включенным модулем. Поэтому забросил :)
    • 0
      Пожалуйста, напишите/дайте ссылки на то как скомпиляли .ko
      • 0
        Я пользовался гуглем — «Сборка модулей ядра android».

        Ссылок не сохранилось по причине «решил и забыл» :(
  • 0
    Далеко-далеко не все дефолтные ядра в андроидах поддерживают Prolific PL-2303 и FTDI FT-232RL. Определить просто. Посмотреть dmesg в консоли после подключения адаптера к USB
    • 0
      решение 2.1 для этого как понимаю как раз.
      • 0
        именно так
  • 0
    Выложил на гитхаб исходники небольшой библиотечки для SPP и SerialPort:
    github.com/yuriykulikov/AndroidSerialPort

    Поиск и открытие серийного пора взято как раз у android-serialport-api, но в основном мы использовали BT SPP. Вечером сделаю еще пример с консолькой.

    Может кому-нибудь пригодится.
    • 0
      Спасибо, обязаетльно помотрю)

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