279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
1

Serial Port на Android

01.10.2018, 20:57. Показов 6042. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех. Написал тестовое приложение, показывающее, сколько COM портов есть в системе и их номера (использовал QSerialPortInfo). На Windows все работает отлично.
Далее скомпилировал и установил это приложение на смартфон Xiaomi Redmi Note 5A, Android 7.1. Подключил к смартфону преобразователь USB-RS232 и убедился с помощью приложения USB Serial Control Panel, что в системе появился последовательный порт. Однако моя тестовая программа этот порт не находит. Говорит, что в системе нет портов.
Как в Qt работать с последовательными портами в Android? Может у меня в SDK не установлен API нужного уровня?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2018, 20:57
Ответы с готовыми решениями:

Qt, Android and Serial Port
Всем добрый день или вечер, а может и ночь. Пытаюсь научить дружить планшет с программой на Qt и...

Сборка Qt Serial Port под Android из source
Добрый день помогите пожалуйтса собарть комплект Serial port под android, скачал сорцы, выставил...

QT serial port
Здравствуйте! пытаюсь заставить работать ком порт в QT для начала решил попробовать простой...

Qt serial port кассовый аппарат
Хочу реализовать обмен с кассовым аппаратом, протокол есть в открытом доступе. Так же есть...

16
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
01.10.2018, 23:13 2
Андройд не имеет АПИ для работы с последовательными портами. Единственный вариант - это работать с ними через POSIX, открывая у-ва типа /dev/ttyUSBxx... Но главная проблема в том, что для этого нужно чтобы Андройд-девайс был хакнут (рутован). Тогда можно открыть последовательные порты или с правами суперпользователя, или, возможно, написав какой-нить скрипт который при загрузке системы (или при втыкании УСБ-сериал железяки) автоматом менял ему права доступа через chmod. Как это в действительности делается и получится или нет - я не знаю, сам не пробовал.

> Однако моя тестовая программа этот порт не находит.

Посмотри через эмулятор терминала, создается ли у-во в /dev/ttyACMxx, /dev/ttyUSBxx при втыкании УСБ-сериал железки. Если нет - то ничего как бы просто так не сделаешь... Если создается, но QSerialPortInfo не видит, то попробуй обновить куте (ты кстати не указал какая у тебя версия). Если все-равно не видит - то отлаживай сам и смотри почему.

ЗЫ: В итоге, это все тухлая затея, т.к. QtSerialPort будет удален из поставки куте для Андройда то-ли с 5.12 то ли уже его удалили. В общем случае нужно качать сорцы этого модуля и компилять самостоятельно (при условии что есть возможность зарутовать Андрод девайс).. В иных случаях работать ничего не будет - скажи спасибо Гуглу. Обычно работу с УСБ-сериал портами без рутовых прав делают через УСБ-отг, путем чтения даташита на конкретный УСБ-сериал и посылки/приема в УСБ данных напрямую в енд-пойнты.

Добавлено через 13 минут
UPD: Хотя, нашел кое что https://developer.android.com/things/sdk/pio/uart но не понял, давно ли оно там ил для всех Андройдов ли?

Добавлено через 11 минут
Кажется недавно добавились эти фичи: https://developer.android.com/... s/releases в 2018 году...

Написано что поддерживаются:

SiLabs CP210x
FTDI UART
Prolific PL2303
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
02.10.2018, 19:22  [ТС] 3
kuzulis, спасибо за ответ. У меня переходник USB-RS232 как раз основан на чипе FTDI. У меня установлена версия Qt 5.10. Попробую в ближайшее время установить Qt последней версии и там проверить тестовую программу на предмет обнаружения порта.
0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
02.10.2018, 20:27 4
Да толку от этого нет, если нет прав суперпользователя.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
02.10.2018, 21:37  [ТС] 5
Цитата Сообщение от kuzulis Посмотреть сообщение
Да толку от этого нет, если нет прав суперпользователя.
Цитата Сообщение от kuzulis Посмотреть сообщение
Обычно работу с УСБ-сериал портами без рутовых прав делают через УСБ-отг, путем чтения даташита на конкретный УСБ-сериал и посылки/приема в УСБ данных напрямую в енд-пойнты.
Судя по Вашему первому посту толк есть даже без рутовых прав. Подскажите, как из Qt сделать посылку/прием в УСБ данных напрямую в енд-пойнты?
0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
02.10.2018, 22:23 6
> толк есть даже без рутовых прав

Это если через USB напрямую данные слать, но я хз как это делается в Андройде (я просто слышал звон что так тоже можно).

> Подскажите, как из Qt сделать

Никак, JAVA в помощь. (хотя, некоторые вроде LibUSB заводят на Андройде)
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
04.10.2018, 21:11  [ТС] 7
Ну вот... Давно хочу свою программу для работы с устройством через RS-232 перенести на смартфон. Подумал, что раз Qt кроссплатформенная библиотека, то реализую программу на ее основе сначала для Windows, а затем легко и непринужденно перенесу на Android. А тут такая засада...
0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
05.10.2018, 14:23 8
Вот тут пример как через USB работать: https://github.com/olena-anufr... or-android
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
06.10.2018, 21:56  [ТС] 9
kuzulis, правильно ли я понимаю, что я не могу просто взять этот проект на гитхабе, "прикрутить" его к своему приложению (хотя это, наверняка, невозможно) и получить доступ к COM порту?
0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
06.10.2018, 22:54 10
Не знаю, я не JAVA экшперт. Но оттуда ты можешь взять JAVA код для твоего типа девайса, и обернуть его через Qt-шный androidextras модуль (там куча классов-оберток для андройдовской хрени), и потом дергать твой код (тот JAVA код) из С++.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.10.2018, 14:16 11
Цитата Сообщение от kuzulis Посмотреть сообщение
Андройд не имеет АПИ для работы с последовательными портами. Единственный вариант - это работать с ними через POSIX, открывая у-ва типа /dev/ttyUSBxx...
Нужно меньше пить наверное, что бы не противоречить самому себе.

POSIX это что тебе не API ?
QtSerialPort как раз под виндой внутри под капотом использует WinAPI под линукс POSIX.
Как в андроиде не знаю - нет не андроида ни опыта работы с ним, но скорее всего тоже POSIX так как андроид основан на линуксе.

d7d1cd, Из чего следует что теоретически должно работать.
Поэтому нужно разбираться и не слушать всяких.

Первое что я бы проверял - права tty, второе - попробовал сделать обнаружение через нативное апи как в линуксе.
0
41 / 39 / 7
Регистрация: 21.05.2012
Сообщений: 198
08.10.2018, 20:06 12
> Нужно меньше пить наверное, что бы не противоречить самому себе.

Не глупи (не тупи). На не-рутованом андройде у тебя нет возможности открыть tty. т.к у тебя нет прав доступа. Изменить права ты не можешь так просто. Поэтому это не годится для любых/обычных девайсов... Это годится только в случае если ты сам кастомизируешь сборку Андройда для конкретного девайса и сам продаешь/выпускаешь этот девайс (тогда ты сможешь что-нить подшаманить с доступом или написать там всякие скриптики).

Вариант через USB - это не "правильный" доступ... т.к. эта тупо работа с сериал портом через Ж..пу... тебе надо знать спеку на конкретный чип USB/serial чтобы гнать туда в ендпойнты нужные данные (это что-то вроде эмуляции драйвера). Таким макаром можно с любым девайсом через USB работать (не только с сериал портами), зная их USB протокол.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.10.2018, 21:10 13
Я говорил о правах? Я говорил про Api.

USB тут вообще никаким боком спрашивали конкретно про COM порт.

Цитата Сообщение от kuzulis Посмотреть сообщение
а не-рутованом андройде у тебя нет возможности открыть tty. т.к у тебя нет прав доступа. Изменить права ты не можешь так просто. Поэтому это не годится для любых/обычных девайсов...
А в чем тут аномально в правах? Это вроде нормальная ситуация.

В общем ТС стоило погуглить Qt, Android and Serial Port
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
09.10.2018, 11:29 14
Цитата Сообщение от Avazart Посмотреть сообщение
о скорее всего тоже POSIX так как андроид основан на линуксе.
Linux не POSIX, а Аndroid еще больше не POSIX.

Цитата Сообщение от Avazart Посмотреть сообщение
В общем ТС стоило погуглить Qt, Android and Serial Port
Только внезапно
порт возникает ошибка "Permission denied"
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.10.2018, 11:48 15
Я имел ввиду
C++
1
int fd  = open("/dev/ttyUSB0",O_RDWR | O_NOCTTY);
http://xanthium.in/Serial-Port... g-on-Linux

И вперед ....



Цитата Сообщение от Dmitriy_M Посмотреть сообщение
порт возникает ошибка "Permission denied"
И что в Android нет аналога sudo или gksudo ?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
09.10.2018, 11:57 16
Цитата Сообщение от Avazart Посмотреть сообщение
И что в Android нет аналога sudo или gksudo ?
Нет.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.10.2018, 13:12 17
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
Нет.
Мм... тогда согласен - беда.
0
09.10.2018, 13:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2018, 13:12
Помогаю со студенческими работами здесь

Qt Serial Port отправляет только 3 байта
на компе два порта подсоединены к друг другу . на один ком-порт привязываю свою программу, на...

Работа Scilab Serial Port Library (COM port)
Как работает Scilab Serial Port Library ? (может кто то встречал описание подробное, поделитесь...

serial port
Здравствуйте. Использую стандартные классы .net для работы с ком портом. Работу с портом...

Arduino serial port VS
такая проблема ни как не могу получить данные с ариаднино. Ардуина постоянно шлем данные что то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru