У меня есть несколько устройств Bluetooth, к которым я пытаюсь подключиться в Linux.У меня нет проблем ни с одним из устройств, кроме одного.Разница заключается в том, что все другие устройства обрабатывают свои соединения Bluetooth (как я предполагаю) стандартным способом, то есть они ожидают, пока хост-устройство (ПК) установит соединение.Другое устройство, с другой стороны, пытается инициировать само соединение каждые несколько секунд, с какой-то секундой ожидания.
Для других устройств я подключался так:
rfcomm connect /dev/rfcommX <deviceMacAddress>
(где X - любой неиспользуемый номер порта rfcomm)
Перед выполнением этой команды язапустить bluetooth-агент с необходимыми ключами сопряжения.Все здесь работает нормально.
Для рассматриваемого устройства это прекрасно работает с первого раза, до того, как устройство было сопряжено.Однако после сопряжения команда rfcomm connect имеет очень высокую вероятность сбоя.Это связано с тем, что само устройство пытается инициировать соединение. Когда устройство находится в спящем режиме, соединение не устанавливается («Хост отключен»).
Вместо этого я обнаружил, что для этого устройства следующеекоманда работает как чудо:
rfcomm listen /dev/rfcommX
(мне пришлось сначала добавить последовательный порт через sdptool add SP)
Поскольку ПК будет сидеть там и ждать входящего соединения с устройства, это работает каждый раз.
Однако проблема возникает, когда у меня более одного устройства.Команда rfcomm listen работает великолепно, но, похоже, нет способа контролировать, какое устройство (идентифицируемое по Mac-адресу) подключается к какому порту rfcomm;если включено более одного устройства, то первое, которое попытается подключиться, будет подключено, независимо.Однако в нашем приложении мы хотим, чтобы пользователь знал, к какому устройству он подключается.
Кто-нибудь сталкивался с чем-то подобным раньше?Мы подошли к тому моменту, когда намереваемся написать собственную версию пакета bluez bluetooth, поэтому любая помощь здесь будет принята с благодарностью:)