예제 #1
0
    def unregister(self):
        bus = BleTools.get_bus()
        adapter = BleTools.find_adapter(bus)

        ad_manager = dbus.Interface(
            bus.get_object(
                BLUEZ_SERVICE_NAME,
                adapter),
            LE_ADVERTISING_MANAGER_IFACE)
        ad_manager.UnregisterAdvertisement(self.get_path())
        print("GATT advertisement UNregistered")
예제 #2
0
 def __init__(self):
     dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
     self.mainloop = GObject.MainLoop()
     self.bus = BleTools.get_bus()
     self.path = "/"
     self.services = []
     self.next_index = 0
     dbus.service.Object.__init__(self, self.bus, self.path)
예제 #3
0
 def __init__(self, index, uuid, primary):
     self.bus = BleTools.get_bus()
     self.path = self.PATH_BASE + str(index)
     self.uuid = uuid
     self.primary = primary
     self.characteristics = []
     self.next_index = 0
     dbus.service.Object.__init__(self, self.bus, self.path)
예제 #4
0
    def run(self):
        logger.debug("Running BluetoothAdvertisementProcessor")

        while True:
            advertise_event = self.shared_state.should_advertise_bluetooth_condition_event.wait()
            if advertise_event:
                # Prepare to advertise by first scanning wifi and stopping any existing connections
                self.shared_state.should_scan_wifi = True
                try:
                    BleTools.disconnect_connections()
                except TypeError:
                    # Most Likely Already Disconnected
                    pass

                # Start advertising
                self.start_advertisement()

                # clear the event
                self.shared_state.should_advertise_bluetooth_condition_event.clear()
예제 #5
0
 def __init__(self, index, advertising_type):
     self.path = self.PATH_BASE + str(index)
     self.bus = BleTools.get_bus()
     self.ad_type = advertising_type
     self.local_name = None
     self.service_uuids = None
     self.solicit_uuids = None
     self.manufacturer_data = None
     self.service_data = None
     self.include_tx_power = None
     dbus.service.Object.__init__(self, self.bus, self.path)
예제 #6
0
    def register(self):
        bus = BleTools.get_bus()
        adapter = BleTools.find_adapter(bus)
        if not adapter:
            logger.error(
                "Unable to start Advertisement: No Bluetooth adapter.")
            return

        ad_manager = dbus.Interface(
            bus.get_object(
                BLUEZ_SERVICE_NAME,
                adapter),
            LE_ADVERTISING_MANAGER_IFACE)
        if not ad_manager:
            logger.error("Unable to start Advertisement: "
                         "No Bluetooth Advertising Manager.")
            return

        ad_manager.RegisterAdvertisement(
            self.get_path(),
            {},
            reply_handler=self.register_ad_callback,
            error_handler=self.register_ad_error_callback
        )
예제 #7
0
    def register(self):
        adapter = BleTools.find_adapter(self.bus)
        if not adapter:
            logger.error(
                "Unable to start Bluetooth application: No Bluetooth Adapter")
            return

        service_manager = dbus.Interface(
            self.bus.get_object(BLUEZ_SERVICE_NAME, adapter),
            GATT_MANAGER_IFACE)
        if not service_manager:
            logger.error("No Bluetooth Service Manager")
            return

        service_manager.RegisterApplication(
            self.get_path(), {},
            reply_handler=self.register_app_callback,
            error_handler=self.register_app_error_callback)
예제 #8
0
 def test_disconnect_connections(self, mock_get_bus, mock_dbus_interface):
     result = BleTools.disconnect_connections()
     mock_dbus_interface.assert_called()
     mock_get_bus.assert_called()
     self.assertEqual(result, None)
예제 #9
0
 def test_find_connection(self, mock_dbus_interface):
     bus = MagicMock()
     result = BleTools.find_connection(bus)
     mock_dbus_interface.assert_called()
     bus.get_object.assert_called()
     self.assertEqual(result, None)
예제 #10
0
 def test_get_bus(self):
     # Should return an instance of dbus SystemBus
     bus = BleTools.get_bus()
     self.assertIsInstance(bus, dbus._dbus.SystemBus)