Как я могу последовательно подключаться к одному и тому же порту rfcomm в Linux? - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть несколько устройств 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, поэтому любая помощь здесь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 28 февраля 2011

Либо напишите правило udev , которое каждый раз создает символическую ссылку с тем же именем, либо следуйте по соответствующему пути через /sys, чтобы добраться до устройства.

...