Прехвърляне на данни към 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, трябва да компилирате необходимите библиотеки, както следва:
- Отворете командния ред
- Отидете в папката NDK
- Задайте път на проекта:set NDK_PROJECT_PATH=
Ще бъдат компилирани и добавени библиотекив папката /libs на вашия проект.
След това, за да инсталирате приложението Android на устройството, можете да изпълните следната команда:
По този начин имаме всички инструменти, които могат да свържат всяко устройство, разположено отделно през серийния порт. Използването на тези инструменти за изпращане и получаване на информация ви помага да управлявате всяко устройство и да реализирате най-неочакваните бизнес идеи.