Однажды я задумался над разработкой приложения, которое требовало бы общения с hardware устройством, через COM порт. Хотя Android заботливо предоставляет api для работы с usb устройствами, оно мне к сожалению не подходило, так как хотелось осуществлять поддержку моего старого планшета на базе андроид версии 2.2. Стандартное api ото Гугла, не подходило
по двум причинам:
- во первых оно не сработало для меня.
- девайс у меня все-таки старенький
Итак, после длительного поиска в интернете, я наткнулся на очень интересное решение android-serialport-api. Данное решение представляет собой Java обертку в которой через JNI в которой осуществляются вызовы к USB устройству.
Разработчики библиотеки предлагают 4 различных варианта подключения Android устройства к COM порту через USB.
Так как я имел в своем распоряжении планшет с 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 порт,
ссылка на оригинал статьи http://habrahabr.ru/post/163913/
Добавить комментарий