С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Ilya2d
1 / 1 / 1
Регистрация: 10.05.2015
Сообщений: 89
1

Android + serialport

14.03.2017, 21:01. Просмотров 451. Ответов 9
Метки нет (Все метки)

Доброго времени суток. Появилась необходимость связать контроллер с Android устройством(root есть).
C++ (Qt)
1
QSerialPortInfo::availablePorts()
возвращает 3 порта: ttyHS0, ttyHSL0, ttyHSL1
Ранее удалось подключить Arduino, появился порт ttyCOM0, насколько помню. Но порт тогда открыть так и не удалось.
Пробовал на другом телефоне(тоже с рутом), на другой ардуино и на stm32, но безрезультатно. QextSerialPort так же не находит порт. Как мне лучше поступить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2017, 21:01
Ответы с готовыми решениями:

SerialPort
Добрый день! Никак не выходит реализовать протокол 1Wire. Вроде бы на шину...

SerialPort
Добрый день форумчане! Подскажите пожалуйста, используя библиотеку...

QML обработка события из SerialPort
Добрый день, подскажите как реализовать обработку события в QML (или в крайнем...

SerialPort не собирается в статическую сборку
Приветствую всех. http://www.cyberforum.ru/qt/thread1063918.html Использовал...

SerialPort принимать побайтно все что приходит
Приветствую всех. Реализую прием данных с СОМ порта побайтно и столкнулся с...

9
Wyn
1056 / 638 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
15.03.2017, 14:48 2
Ilya2d, сам Android порты видит?
0
Ilya2d
1 / 1 / 1
Регистрация: 10.05.2015
Сообщений: 89
15.03.2017, 17:14  [ТС] 3
Цитата Сообщение от Wyn Посмотреть сообщение
сам Android порты видит?
Сейчас функция
C++ (Qt)
1
QSerialPortInfo::availablePorts()
возвращает только 3 порта, как я понял системные. Даже если ничего не подключил, они отображаются, ttyCOM0 сейчас обнаружить не удается.
0
Wyn
1056 / 638 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
15.03.2017, 18:18 4
Ilya2d, Qt полностью завязан на систему. Если система что-то не видит, Qt - тем более.
Однако тут есть ещё такое дело: согласно документации Qt SerialPort для Android не поддерживается. Так что работоспособность на рутированном устройстве хоть и будет, но не гарантирована.
0
Ilya2d
1 / 1 / 1
Регистрация: 10.05.2015
Сообщений: 89
15.03.2017, 19:09  [ТС] 5
Wyn, не понятно почему неделю назад удалось распознать Arduino, а сейчас не удается. И если не qserialport, то что лучше использовать?
0
Wyn
1056 / 638 / 229
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
15.03.2017, 19:22 6
Цитата Сообщение от Ilya2d Посмотреть сообщение
И если не qserialport, то что лучше использовать?
К компу(Linux) Arduino цепляется в usb нормально?
0
Ilya2d
1 / 1 / 1
Регистрация: 10.05.2015
Сообщений: 89
16.03.2017, 02:05  [ТС] 7
Wyn, Да
0
kuzulis
38 / 36 / 7
Регистрация: 21.05.2012
Сообщений: 185
16.03.2017, 08:33 8
> ttyCOM0 сейчас обнаружить не удается.

QSPI использует на андройде SysFS для обнаружения девайсов, но если по каким-то причинам это фейлится, то перебираются все устройства из /dev по маске. В случае если по маске, то QSPI не знает маску ttyCOM* и поэтому не возвратит ничего.

Поэтому:

1. Нужно проверить, с помощью какого "бэкенда" все-таки идет поиск.
Для этого с помощью adb shell посмотреть, есть ли на девайсе директория /sys/class/tty/ и доступна ли она для чтения.
Если - да, то воткнуть USB-переходник и посмотреть потом, появится ли само у-во в /dev/ttyCOM0 и появится ли о нем
запись в /sys/class/tty/. Если ДА - то QSPI должен вернуть "расширенную инфу" о девайсе (vid/pid и прочее).
Если у-во есть в /dev/ttyCOM0, но нет записи в /sys/class/tty/, то SysFS тут не поможет, т.к. недоступен или пр. проблема.
В этом случае нужно добавить маску в qserialport_info.cpp:

Код
static QStringList filteredDeviceFilePaths()
{
    ...
    << QStringLiteral("ttyCOM*");    // Arduino serial device.
    ...
}
и пересобрать QSPI и проверить что оно возвратит.

2. Но также, вероятно, нет смысла в п.1, т.к. у-во /dev/ttyCOM0 может не открыться. Нужно вообще проверить что сам QSP
откроет заданный девайс: просто нужно подсунуть ему имя девайса и посмотреть какая ошибка возвратиться (или все будет
успешно).

Только после этого можно уже делать какие-то выводы и думать что делать дальше .
0
Ilya2d
1 / 1 / 1
Регистрация: 10.05.2015
Сообщений: 89
16.03.2017, 22:29  [ТС] 9
kuzulis, прошу прощения, не ttyCOM0, a ttyACM0. Получилось подключить другую arduino. С помощью приложения из макрета удалось отправить и считать информацию. /sys/class/tty/ttyACM0 имеет права доступа 777. /dev/ttyACM0 имеет права 600. При попытке подключения возвращает ошибку NoError и PermissionError (QSerialPort).
QextSerialPort ничего не определяет.
0
kuzulis
38 / 36 / 7
Регистрация: 21.05.2012
Сообщений: 185
17.03.2017, 09:12 10
> При попытке подключения возвращает ошибку NoError и PermissionError (QSerialPort).

Тут нужно уже отлаживать. Может этот PermissionError по причине того что оно не может создать lock файл, а может реально не хватает пермишенов для открытия порта.
0
17.03.2017, 09:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2017, 09:12

Android platform 'android--1' does not exist in SDK.
Хочу запутить программу на андроид-устройстве, все поставил, пытаюсь запустить...

Serialport.write и serialport.basestream.write - в чем разница
в чем разница между следующими способами отправки данных на ком-порт?:...

Serialport
Есть программа но на этапе компиляции выдает ошибку. для компиляции использую...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru