2016-10-05 5 views
1

Я запускаю Rasbian Jessie Lite на Raspberry Pi 3 с помощью USB/Bluetooth-ключа (blueZ). 5.4.Программно включить/отключить профили Bluetooth

/etc/bluetooth/main.conf имеет класс = 0x0c0408. У меня есть приложение Qt5, которое позволяет устройству Bluetooth и принимает любые входящие запросы на сопряжение.

Я могу успешно подключиться со своего смартфона к всем включенным профилям Bluetooth: A2DP и ​​HFP.

Теперь я хочу, чтобы пользователи выбирали, какие профили должны быть включены. Таким образом, я ищу способ включить/отключить A2DP и ​​HFP на лету. Это нормально из сценариев C++, bash или python.

Я не могу просто изменить значение класса, потому что я не могу перезапустить службу bluetooth - я ДОЛЖЕН продолжать работать с сервером GATT.

Любые мысли о?

+0

Mark, вы нашли рабочее решение для своей проблемы? – wojciii

+0

Не совсем. Я закончил использование коммерческого BT-стека, и в любом случае мне нужно выбрать доступные сервисы перед подключением (или позволить пользователю отключиться от них вручную). – Mark

ответ

2

Включение и отключение любого профиля/службы в Bluez может быть выполнено с помощью команды sdptool. Если вы хотите, чтобы любой профиль/услугу вы можете использовать:

sdptool add A2SRC

Таким же образом, чтобы отключить любую услугу/профиль можно использовать:

sdptool del A2SRC 

Более подробную информацию можно найти, используя помощь от sdptool

sdptool - SDP tool v5.37 
Usage: 
    sdptool [options] <command> [command parameters] 
Options: 
    -h  Display help 
    -i  Specify source interface 
Commands: 
    search  Search for a service 
    browse  Browse all available services 
    records  Request all records 
    add   Add local service 
    del   Delete local service 
    get   Get local service 
    setattr  Set/Add attribute to a SDP record 
    setseq  Set/Add attribute sequence to a SDP record 

Services: 
    DID SP DUN LAN FAX OPUSH FTP PRINT HS HSAG HF HFAG SAP PBAP MAP 
    NAP GN PANU HCRP HID KEYB WIIMOTE CIP CTP A2SRC A2SNK AVRCT AVRTG 
    UDIUE UDITE SEMCHLA SR1 SYNCML SYNCMLSERV ACTIVESYNC HOTSYNC 
    PALMOS NOKID PCSUITE NFTP NSYNCML NGAGE APPLE IAP ISYNC GATT 

Теперь вы можете включать и отключать любые профили/услуги.

Переходя к вашему второму вопросу, как дистанционно позволить пользователю смартфона включить и отключить профиль. Это можно достичь через профиль последовательного порта (SPP) в Bluetooth. Чтобы проинформировать вас, SPP - эмуляция последовательного порта по Bluetooth. Он основан на протоколе RFcomm и может использоваться параллельно с A2DP и ​​HFP.

Итак, идея состоит в том, чтобы создать соединение SPP от смартфона до RSP, а затем отправить команду на включение и выключение профилей. SPP можно использовать из командной строки, используя команду rfcomm, доступную с Bluez. Более подробную информацию о том, как использовать команду можно найти здесь:

https://unix.stackexchange.com/questions/92255/how-do-i-connect-and-send-data-to-a-bluetooth-serial-port-on-linux

Позвольте мне знать, если дальнейшее уточнение вам нужно на это.

+0

Спасибо за ответ. Я собираюсь попробовать команды sdptool. Что касается удаленных команд, я уже использую сервер GATT для этого. Вот почему мне нужно, чтобы он работал! – Mark

+0

Полезно знать, что вы можете решить проблему с удаленными командами. Все лучшее с вашим проектом .. – aksonlyaks

+0

Я думаю, что этот ответ неправильный. Если вы читаете справочную страницу для sdptool, она содержит «del record_handle». ПРИМЕЧАНИЕ. Конфигурация локальных адаптеров не будет обновляться, и эта команда должна использоваться только для тестирования SDP »(Ubuntu 16.04). Я вижу, что удаление службы не имеет никакого эффекта при просмотре вывода из hcidump, где соединительное устройство с радостью соединяется с профилями, которые я только что удалил с помощью «sdptool del». – wojciii

 Смежные вопросы

  • Нет связанных вопросов^_^