Skip to content

Commit 5efc5a0

Browse files
committed
Add property for adapter’s power state
1 parent e3a4dd0 commit 5efc5a0

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

gatt/gatt_linux.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def __init__(self, adapter_name):
3737
raise _error_from_dbus_error(e)
3838
object_manager_object = self._bus.get_object("org.bluez", "/")
3939
self._adapter = dbus.Interface(adapter_object, 'org.bluez.Adapter1')
40+
self._adapter_properties = dbus.Interface(self._adapter, 'org.freedesktop.DBus.Properties')
4041
self._object_manager = dbus.Interface(object_manager_object, "org.freedesktop.DBus.ObjectManager")
4142
self._device_path_regex = re.compile('^/org/bluez/' + adapter_name + '/dev((_[A-Z0-9]{2}){6})$')
4243
self._devices = {}
@@ -47,6 +48,14 @@ def __init__(self, adapter_name):
4748

4849
self.update_devices()
4950

51+
@property
52+
def is_adapter_powered(self):
53+
return self._adapter_properties.Get('org.bluez.Adapter1', 'Powered') == 1
54+
55+
@is_adapter_powered.setter
56+
def is_adapter_powered(self, powered):
57+
return self._adapter_properties.Set('org.bluez.Adapter1', 'Powered', dbus.Boolean(powered))
58+
5059
def run(self):
5160
"""
5261
Starts the main loop that is necessary to receive Bluetooth events from the Bluetooth adapter.
@@ -129,7 +138,9 @@ def start_discovery(self, service_uuids=[]):
129138
self._adapter.StartDiscovery()
130139
except dbus.exceptions.DBusException as e:
131140
if e.get_dbus_name() == 'org.bluez.Error.NotReady':
132-
raise errors.NotReady("Bluetooth adapter not ready. Run 'echo \"power on\" | sudo bluetoothctl'.")
141+
raise errors.NotReady(
142+
"Bluetooth adapter not ready. "
143+
"Set `is_adapter_powered` to `True` or run 'echo \"power on\" | sudo bluetoothctl'.")
133144
if e.get_dbus_name() == 'org.bluez.Error.InProgress':
134145
# Discovery was already started - ignore exception
135146
pass

gattctl.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,18 @@ def main():
6565
default='hci0',
6666
help="Name of Bluetooth adapter, defaults to 'hci0'")
6767
arg_commands_group = arg_parser.add_mutually_exclusive_group(required=True)
68+
arg_commands_group.add_argument(
69+
'--power-on',
70+
action='store_true',
71+
help="Powers the adapter on")
72+
arg_commands_group.add_argument(
73+
'--power-off',
74+
action='store_true',
75+
help="Powers the adapter off")
76+
arg_commands_group.add_argument(
77+
'--powered',
78+
action='store_true',
79+
help="Print the adapter's power state")
6880
arg_commands_group.add_argument(
6981
'--discover',
7082
action='store_true',
@@ -89,6 +101,17 @@ def main():
89101
global device_manager
90102
device_manager = AnyDeviceManager(adapter_name=args.adapter)
91103

104+
if args.power_on:
105+
device_manager.is_adapter_powered = True
106+
print("Powered on")
107+
return
108+
elif args.power_off:
109+
device_manager.is_adapter_powered = False
110+
print("Powered off")
111+
return
112+
elif args.powered:
113+
print("Powered: ", device_manager.is_adapter_powered)
114+
return
92115
if args.discover:
93116
device_manager.start_discovery()
94117
elif args.connect:

0 commit comments

Comments
 (0)