diff options
| author | Yung Shen <yung.shen@canonical.com> | 2016-04-06 16:59:44 +0800 |
|---|---|---|
| committer | Yung Shen <yung.shen@canonical.com> | 2016-04-06 16:59:44 +0800 |
| commit | 45ab34142aa87eb11f9eb8bafe841a11afdb2a2d (patch) | |
| tree | e048a80e8b09fc26d531c04478878cc579779368 /bin | |
| parent | 523a61bfd8ba3b90f88a64d651daec118c8357b9 (diff) | |
Update bt_helper.py from https://github.com/kissiel/bt_helper at commit a3948d4 for exit code support
Diffstat (limited to 'bin')
| -rw-r--r-- | bin/bt_helper.py | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/bin/bt_helper.py b/bin/bt_helper.py index fc87b4e..91f879a 100644 --- a/bin/bt_helper.py +++ b/bin/bt_helper.py @@ -19,10 +19,11 @@ typical Bluetooth task like scanning for devices and pairing with them. It talks with BlueZ stack using dbus. """ +import logging + import dbus import dbus.service import dbus.mainloop.glib -import logging from gi.repository import GObject logger = logging.getLogger(__file__) @@ -35,10 +36,16 @@ AGENT_IFACE = 'org.bluez.Agent1' dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) +# To get additional Bluetoot CoDs, check +# https://www.bluetooth.com/specifications/assigned-numbers/baseband BT_ANY = 0 BT_KEYBOARD = int('0x2540', 16) +class BtException(Exception): + pass + + class BtManager: """ Main point of contact with dbus factoring bt objects. """ def __init__(self, verbose=False): @@ -113,7 +120,7 @@ class BtManager: def wait(self): self._main_loop.run() - def resume(self): + def quit_loop(self): self._main_loop.quit() def ensure_adapters_powered(self): @@ -185,6 +192,7 @@ class BtDevice: self._if.object_path)[DEVICE_IFACE] self._bt_mgr = bt_mgr self._prop_if = bt_mgr.get_prop_iface(dbus_iface) + self._pair_outcome = None def __str__(self): return "{} ({})".format(self.name, self.address) @@ -203,6 +211,8 @@ class BtDevice: self._if.Pair( reply_handler=self._pair_ok, error_handler=self._pair_error) self._bt_mgr.wait() + if self._pair_outcome: + raise BtException(self._pair_outcome) try: self._if.Connect() except dbus.exceptions.DBusException as exc: @@ -228,11 +238,13 @@ class BtDevice: def _pair_ok(self): logger.info('%s successfully paired', self.name) - self._bt_mgr.resume() + self._pair_outcome = None + self._bt_mgr.quit_loop() def _pair_error(self, error): logger.warning('Pairing of %s device failed. %s', self.name, error) - self._bt_mgr.resume() + self._pair_outcome = error + self._bt_mgr.quit_loop() class Rejected(dbus.DBusException): @@ -240,7 +252,7 @@ class Rejected(dbus.DBusException): class BtAgent(dbus.service.Object): - """Agent authenticating everything what's possible.""" + """Agent authenticating everything that is possible.""" @dbus.service.method(AGENT_IFACE, in_signature="os", out_signature="") def AuthorizeService(self, device, uuid): logger.info("AuthorizeService (%s, %s)", device, uuid) |
