Development for Android
December 2012 25

Работа с COM портом в Android приложениях

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

Однажды я задумался над разработкой приложения, которое требовало бы общения с 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 порт,

+16
58.8k 159
Comments 19
Top of the day