- Русские Блоги
- Android последовательная связь-android-serialport-api
- Оригинальный адрес:http://blog.csdn.net/qiwenmingshiwo/article/details/49557889
- 1. Принцип последовательной связи
- Второе, android-serialport-api
- 1. Краткое введение в android-serialport-api
- 2. Отправить и данные и получить данные
- 3. Получите аппаратный адрес и скорость передачи
- Delphi android serial port
- About
- felhr85
- My personal site about programming and tech stuff
- A dirty and quick example of serial port communication in Android
- Share this:
- Like this:
- Related
- 40 thoughts on “ A dirty and quick example of serial port communication in Android ”
- PressDev
- Все об IT
- Работа с COM-портами из приложения в Delphi
Русские Блоги
Android последовательная связь-android-serialport-api
Оригинальный адрес:http://blog.csdn.net/qiwenmingshiwo/article/details/49557889
1. Принцип последовательной связи
Концепция последовательной связи очень проста: последовательный порт отправляет и получает байты в битах. Хотя это медленнее, чем параллельная связь в байтах, последовательный порт может использовать один провод для отправки данных при получении других данных. Это просто и позволяет междугородную связь.
Скорость передачи: это параметр, который измеряет скорость передачи символов.
Второе, android-serialport-api
В основном представить содержание:
1. Краткое введение в android-serialport-api
2. Получите аппаратный адрес и скорость передачи
3. Отправка и передача данных и получение данных
1. Краткое введение в android-serialport-api
android-serialport-apiЕсть две основные категории
параметры | объяснение |
---|---|
SerialPort | Получить класс последовательного порта (фактически получить входной и выходной потоки) |
SerialPortFinder | Класс, чтобы получить аппаратный адрес |
1.1 Введение в SerialPort
1.1.1 Последовательность вызова следующая:
Метод построения SerialPort-> jni open-> c open
1.1.2 Конструктор SerialPort
public SerialPort(File device, int baudrate, int flags)
параметры | объяснение |
---|---|
device | Файловый объект для манипуляции |
baudrate | Скорость передачи |
flags | Знак файловой операции |
1.1.3 Открытая функция на языке Си
Функция открытия на языке c используется для открытия файла. Смотрите здесь для деталейФункция языка open () на языке C: функция открытия файла
int open(const char * pathname, int flags);
параметры | объяснение |
---|---|
pathname | путь указывает на строку пути файла, который будет открыт |
flags | Как открыть и открыть файл: O_RDONLY открывает файл в режиме только для чтения O_WRONLY открывает файл в режиме только для записи O_RDWR открывает файл в режиме чтения и записи |
Возвращаемое значение: если все разрешения, подлежащие проверке, проходят проверку, возвращается значение 0, указывающее успех, и -1 возвращается, если одно из разрешений запрещено.
Открыть функцию в SerialPort.c
2. Отправить и данные и получить данные
2.1 Передача данных
2.1.1 Отправка данных очень проста, получить поток вывода с помощью метода getOutputStream () объекта SerialPort, а затем записать данные в этот поток.
2.2 Получите данные, получите входной поток через метод getInputStream () объекта SerialPort, а затем прочитайте поток. Но, как правило, поток будет открыт для чтения данных
Подробнее вы можете посмотреть на класс SerialPortActivity в проекте, но это всего лишь пример. При фактическом использовании нам нужно изменить его в соответствии с нашими собственными требованиями, которые будут представлены в следующем блоге.
3. Получите аппаратный адрес и скорость передачи
Мы все знаем, что для работы с последовательным устройством нам нужно знать его адрес и скорость передачи. Скорость передачи обычно устанавливается в соответствии с описанием оборудования, поэтому в этом случае нам нужно только прочитать описание. Конечно, при выборе скорости передачи мы можем предоставить некоторые значения на выбор.
3.1 Скорость передачи
Мы можем создать коллекцию для хранения скорости передачи и выбирать ее, когда нам это нужно.
3.2 Получение аппаратного адреса
Фактически, аппаратный адрес также является коллекцией для хранения, используйте его, укажите аппаратный адрес. Мы сказали, что в andorid-serialport-api есть два основных java-файла, из которых мы уже упоминали SerialPort, а оставшийся SerialPortFinder — это класс для получения аппаратного адреса.
Основные шаги для получения аппаратного адреса:
Или следующим образом:
3.2.1. Прочитайте содержимое файла / proc / tty / drivers, чтобы определить, какой адрес является основным для последовательного устройства (определяется ключевым словом serail). Мы можем видеть содержимое файлов драйверов следующим образом (разные периферийные устройства, разное содержимое файлов)
1. При чтении содержимого файла он читается построчно. (Как данные ниже)
2. Когда читается строка данных, первая строка символов украдена как имя файла. (Например, следующий фрагмент данных, имя файла: serial)
3. Разбить строку данных по «+» (один или несколько пробелов). (Например, результат следующего разделения данных: w [0] = «серийный», w [1] = «/ dev / ttyS», w [2] = «4», w [3] = »64-67 ”, W [4] =” серийный ”)
4. Определите, больше ли длина массива символов, разделенного выше, больше или равна 5, и является ли последняя строка «последовательной», передайте имя файла в 3.2.2 и выполните 3.2.2. Не удовлетворен чтением следующей строки, пока чтение не будет завершено.
3.2.2 Найти реальный последовательный адрес устройства, получив базовый адрес. Сохраните набор адресов.
Ниже приведен фрагмент (часть) каталога / dev
1. Получить все файлы в / dev, чтобы получить файлы массивов файлов.
2. Просмотрите файлы и подождите, пока файлы [i].
3. Получите абсолютный путь к файлам [i] и определите, начинается ли абсолютный путь с имени файла базового адреса, переданного в 3.2.1. (Например: мы передаем основной адрес: / dev / ttyS, тогда мы удовлетворяем следующим условиям: / dev / ttyS0, / dev / ttyS1, / dev / ttyS2, / dev / ttyS3, эти четыре устройства Серийное устройство)
4. Удовлетворение 3 означает, что это последовательное устройство, которое сохраняется в коллекции, но не соответствует требованию 5.
5. Определите, закончилось ли чтение. Вернитесь к коллекции в конце и не заканчивайте в 2.
Источник
Delphi android serial port
This is a driver library for communication with Arduinos and other USB serial hardware on Android, using the Android USB Host Mode (OTG) available since Android 3.1 and working reliably since Android 4.2.
No root access, ADK, or special kernel drivers are required; all drivers are implemented in Java. You get a raw serial port with read() , write() , and other functions for use with your own protocols.
1. Add library to your project:
Add jitpack.io repository to your root build.gradle:
Add library to dependencies
2. If the app should be notified when a device is attached, add device_filter.xml to your project’s res/xml/ directory and configure in your AndroidManifest.xml .
3. Use it! Example code snippet:
then use direct read/write
or direct write + event driven read:
For a simple example, see UsbSerialExamples folder in this project.
For a more complete example with background service to stay connected while the app is not visible or rotating, see separate github project SimpleUsbTerminal.
Probing for Unrecognized Devices
Sometimes you may need to do a little extra work to support devices which usb-serial-for-android doesn’t (yet) know about — but which you know to be compatible with one of the built-in drivers. This may be the case for a brand new device or for one using a custom VID/PID pair.
UsbSerialProber is a class to help you find and instantiate compatible UsbSerialDrivers from the tree of connected UsbDevices. Normally, you will use the default prober returned by UsbSerialProber.getDefaultProber() , which uses the built-in list of well-known VIDs and PIDs that are supported by our drivers.
To use your own set of rules, create and use a custom prober:
Of course, nothing requires you to use UsbSerialProber at all: you can instantiate driver classes directly if you know what you’re doing; just supply a compatible UsbDevice.
This library supports USB to serial converter chips:
- FTDI FT232R, FT232H, FT2232H, FT4232H, FT230X, FT231X, FT234XD
- Prolific PL2303
- Silabs CP2102 and all other CP210x
- Qinheng CH340, CH341A
and devices implementing the CDC/ACM protocol like
- Arduino using ATmega32U4
- Digispark using V-USB software USB
- BBC micro:bit using ARM mbed DAPLink firmware
- .
For common problems, see the FAQ wiki page.
Are you using the library? Add your project to ProjectsUsingUsbSerialForAndroid.
About
Android USB host serial driver library for CDC, FTDI, Arduino and other devices.
Источник
felhr85
My personal site about programming and tech stuff
A dirty and quick example of serial port communication in Android
Since I released UsbSerial I have received good feedback about its performance but I also have received messages with some legit doubts about how to use it. I finally overcame laziness and I have publish a little example of how to use UsbSerial correctly in a real app. Here it is the source code, just two java source code files 🙂
Disclaimer: If you are looking for a serial terminal for Android, DroidTerm is what you need, this is just a quick example
An overall description of how it works:
– UsbService.java contains a Service to isolate all Usb operations. Interesting things happens there. If you need to change baud rate, stop bits and son those lines are located there. It is a good pattern to implement open connections in a Service so I encourage you to do it this way.
– When App starts, UsbService is created and will try to connect with an attached usb device. if there is one device compatible it will connect with it and data will be able to be sent and received. If no devices are attached, it will inform the user through a toast. The app will be still listening for new usb attached devices.
– Data received will appear in the white box, Send button will send the data wrote into the EditText.
Although pretty simple and it does not have any particular goal (besides being an explanatory app), it could have some bugs so If you find something just let me know opening an issue on github.
Share this:
Like this:
Related
40 thoughts on “ A dirty and quick example of serial port communication in Android ”
Thanks for library, it has been brilliant.
I’m trying to connect to two devices to two separate USB ports.
– Device ID 1002 is connected to the serial port I need to transmit to.
– Device ID 2002 is connected to a serial device I need to monitor.
How do I connect to two serial ports using your library?
Hi Rick,
I didn’t even try to connect two separate Usb ports (I thought about it though).I wouldn’t dare to state that this will work but I would try to instantiate two instances of UsbSerial with this constructor:
public UsbSerialDevice(UsbDevice device, UsbDeviceConnection connection) //UsbDevice and UsbDeviceConnection correctly initialized before
Each of them will create and handle their own threads so there shouldn’t be no problem if Android behaves correctly 🙂
I would like to give it a try soon.
Thanks. I’m not sure how to implement that. I’ve been trying to set up two connections & serial ports but get lost in threading.
Do I put the constructor in usbservice and call it from where?
Things related with UsbSerial always in a Service. It is a good pattern.
I keep getting Usb Device Not Supported messages when attempting to connect to either an FTDI or a Prolific PL2303TA. Both of these work with DroidTerm. Doesn’t DroidTerm use the same serialtousb library?
Источник
PressDev
Все об IT
Свежие записи
Свежие комментарии
- Дмитрий к записи Сохраняем и открываем DBF-файлы в Excel 2007 и 2010
- Мирон к записи Уменьшаем или увеличиваем количество выводимых тегов WordPress
- DuavidkeK к записи Что такое лиды в интернет-маркетинге?
- Елена к записи Получаем бесплатно инвайт для социальной сети PostPR
- Mixkino к записи Запрещаем доступ к сайтам с локального компьютера
Работа с COM-портами из приложения в Delphi
У многих пользователей, которые программируют на Delphi, порой возникает потребность в считывании данных с COM-порта. Так вот, я хочу Вам сказать, что сделать это довольно просто и сможет сделать даже начинающий программист.
Вы можете работать через функции языка программирования, но я бы Вам посоветовал использовать простой и понятный компонент, который называется ComDrv32. Устанавливается он легко, как и большинство компонентов, в папке с ним, должен находиться демонстрационный, в котором подробно расписано, как можно работать с ним.
Но и без демонстрационного проекта, с легкостью можно самому разобраться с этим простым компонентом. После установки его, сам компонент появится не на новой вкладке, а уже существующей System, так что будьте внимательны, многие пользователи начинают его искать по всем вкладкам:
В данной статье я хотел бы Вам рассказать, как можно подключиться к COM-порты из своего проекта Delphi и считать оттуда информацию. В частности, мне необходимо было считывать информацию с пин-пад клавиатуры, которая подключалась через USB, а вся информация направлялась на виртуальный COM-порт. Для начала нам необходимо подключиться к порту и проинициализировать его:
Это настройки, при которых Вы будете считывать данные. Они должны быть такими, которые выставлены в свойствах самого COM-порта. Далее, нам необходимо считать данные из COM-порта, а это делается при помощи события компонент – OnReceiveData:
То есть, при помощи этого кода, мы добавляем в Label все символы, которые поступают с пин-пад клавиатуры. Информацию можно считывать и в HEX-формате, а также отправлять ее на сам COM-порт.
На самом деле, ничего нет сложного в работе с этим компонентом, при помощи него, действительно облегчается работа с COM-портами из своего приложения, написанного на Delphi. Удачи Вам дорогие друзья и до новых встреч.
Источник