Ответ 1
Плохая новость: Python, похоже, не поддерживает то, что вы хотите сделать из коробки. (По крайней мере, не в socketmodule.c).
Большинство пользователей python/bluetooth, которых я видел, используют pybluez
, хотя он не обновлялся с 2009 года.
Хорошие новости:
Я прошел через их источник (для подключений Linux) и нашел соответствующие биты для рекламных услуг. Большая часть кода по существу скопирована с версии python 2.2 socketmodule.c
.
pybluez
определяет некоторые дополнительные функции для объекта socket
для реализации всех этих плюсов Bluetooth. Он не становится слишком низкоуровневым и вместо этого зависит от BlueZ
. Из того, что я могу сказать, он в основном принимает объекты python и создает структуры данных, ожидаемые BlueZ
, и просто вызывает это.
Если вы не хотите/не можете использовать pybluez
, вам придется каким-то образом реализовать эту недостающую функциональность. Я думаю, что вы можете сделать это с помощью c-типов. Соответствующие части для рекламы услуги находятся в btmodule.c, строки 2562-2642.
В источнике есть ветвь python-3 для pybluez
, хотя я не знаю, работает ли она или нет.
Если вы решите использовать pybluez
, пример, взятый из их источник
server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
advertise_service(server_sock, "SampleServer",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ],
)
Когда код google закрывается, код также можно найти в github здесь.