Эмуляция Bluetooth HID: настройка службы Bluetooth для повторного подключения к Windows после сопряжения - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь настроить сервер клавиатуры Bluetooth на моем Raspberry Pi 3, но у меня возникают проблемы с автоматическим подключением при перезапуске сервера после сопряжения.

Я пытаюсь следовать этой инструкции: https://gist.github.com/ukBaz/a47e71e7b87fbc851b27cde7d1c0fcf0

Все работает отлично, но у меня возникают проблемы с пониманием того, как восстановить соединение после сопряжения моего RPi (клавиатуры) с моим Win 10 ПК. Проблема в том, что при перезапуске btkbserver.py клавиатура BT не будет автоматически переподключаться к моему ПК с Win 10. Обходной путь - выключить и снова включить BT на ПК. Затем он подключается и работает хорошо. Кто-нибудь знает, как я могу изменить конфигурацию dbus, чтобы разрешить переподключение, когда btk_server должен перезапуститься?

Я пытался использовать bluetoothctrl, чтобы вручную подключиться к моему адресу Win 10 Mac, но каждый раз это не удавалось. Если никто не знает этот ответ, может быть, кто-то может помочь мне понять, что мой компьютер Win 10 отправляет на сервер RPi для его повторного подключения? Может быть, есть настройка окна, которую нужно изменить, чтобы любой сигнал, отправляемый через переключение адаптера Bluetooth, происходил автоматически через определенный интервал.

Кто-нибудь знает, возможно ли, что изменение параметра opts, представленное ниже, может быть полезным? Я изо всех сил пытаюсь понять, в чем заключается моя фундаментальная проблема.

https://gist.github.com/ukBaz/a47e71e7b87fbc851b27cde7d1c0fcf0#file-btk_server-py-L181

     def config_hid_profile(self):
        """
        Setup and register HID Profile
        """

        print('Configuring Bluez Profile')
        service_record = self.read_sdp_service_record()

        opts = {
            'Role': 'server',
            'RequireAuthentication': False,
            'RequireAuthorization': False,
            'AutoConnect': True,
            'ServiceRecord': service_record,
        }

        manager = dbus.Interface(self.bus.get_object('org.bluez',
                                                     '/org/bluez'),
                                 'org.bluez.ProfileManager1')

        HumanInterfaceDeviceProfile(self.bus,
                                    BTKbDevice.PROFILE_DBUS_PATH)

        manager.RegisterProfile(BTKbDevice.PROFILE_DBUS_PATH,
                                BTKbDevice.UUID,
                                opts)

        print('Profile registered ')

РЕДАКТИРОВАТЬ:

Мойпроблема в том, что я блокирую с помощью метода socket.accept (): https://gist.github.com/ukBaz/a47e71e7b87fbc851b27cde7d1c0fcf0#file-btk_server-py-L245

       self.ccontrol, cinfo = self.scontrol.accept()

Какие изменения я могу сделать, чтобы, когда я уже в паре, этот socket.accept связывался с моим Win 10ПК без необходимости переключения Bluetooth на ПК Win 10?

...