Прехвърляне на данни към Android през COM порт, Magora Systems

Преди няколко месеца ме помолиха да разработя табло за Android устройство, което да показва информация за работата на електрическата мрежа в магазина. Тук се натъкнах на проблема, че устройството, което събира информация, е инсталирано отделно и трябва да бъде свързано към оборудването на Android през серийния порт.

В тази кратка статия ще опиша възможността за използване на COM порта в приложения за ОС Android. Това може да е необходимо, когато вашето приложение трябва да получава или изпраща данни от друго устройство, което има само сериен порт RS 232 като комуникация.

Какво ще ни трябва?

  • Първо, трябва да изтеглите Android NDK, инструмент за работа с естествен код в Java.За да работим със серийния порт, ще трябва да извикаме C код;
  • Второ, трябва да изтеглите изходния код на проекта от svn, за да работите със сериен порт RS 232: android-serialport-api.

Организация на проекта

След това в проекта за Android трябва да създадем папка/jni и да копираме съдържанието на папката /jni на проекта, изтеглен от svn в нея (или просто да копираме цялата папка/jni ) в проекта за Android. След това трябва да добавите следните файлове от изтегления проект:

  • SerialPort.java
  • Application.java
  • SerialPortActivity.java
  • SerialPortFinder.java

Тези файлове ви позволяват да работите с COM порта, но ще трябва да ги редактирате за нуждите на вашия проект. Както знаете, всички устройства в *nix подобни системи се намират по пътя/dev. За да зададете пътя до устройството и скоростта на предаване, трябва да зададете съответните стойности на полето във файлаApplication.java.

КласътSerialPortActivity.java е разширение на класа Activity и съдържа абстрактен методprotected abstract void onDataReceived(final byte[] buffer, final int size). Можете да наследите дейностите си от този клас, в който ще работите със серийния порт, и чрез замяна на метода onDataReceived да обработвате получаването на данни от порта.

Можете да преместите логиката на работа с порта във ваш собствен клас или класове и да не използвате наследяване отSerialPortActivity.java.

Чрез класаSerialPortFinder.java с неговите методиgetAllDevices() иgetAllDevicesPath() можете да получите съответно списъци с всички устройства и техните пътища.

Записването в порт се извършва чрез просто писане в OutputStream, създаден от класа SerialPort.java, COM порта.

Достъп до сериен порт

Зареждането на собствен код в приложение за Android се съдържа в класаSerialPort.java чрез извикване наSystem.loadLibrary("serial_port") :

Параметърътserial_port е модулът, получен в резултат на компилирането на C кода с NDK. Посочено е в make файла/jni/Android.mk. Файлът SerialPort.c в папката /jni съдържа извикване на собствени системни функции за работа със серийния порт. Такива параметри на COM порт катоData bits,Parity,Stop bits и други могат да бъдат променени в този файл с помощта на структурата termios, например по следния начин:

След като промените файла SerialPort.c, трябва да компилирате необходимите библиотеки, както следва:

  1. Отворете командния ред
  2. Отидете в папката NDK
  3. Задайте път на проекта:set NDK_PROJECT_PATH=

  • Тип:ndk-build
  • Ще бъдат компилирани и добавени библиотекив папката /libs на вашия проект.

    След това, за да инсталирате приложението Android на устройството, можете да изпълните следната команда:

    По този начин имаме всички инструменти, които могат да свържат всяко устройство, разположено отделно през серийния порт. Използването на тези инструменти за изпращане и получаване на информация ви помага да управлявате всяко устройство и да реализирате най-неочакваните бизнес идеи.