1
from BlueZInterface import BlueZInterface
2
from errors import raise_dbus_error
7
class PropertiesBlueZInterface(BlueZInterface):
8
def __init__(self, interface, obj_path):
9
super(PropertiesBlueZInterface, self).__init__(interface, obj_path)
11
self._handler_wrappers = {}
13
if self.__class__.get_interface_version()[0] >= 5 and obj_path:
14
self.__properties_interface = dbus.Interface(self.get_dbus_proxy(), 'org.freedesktop.DBus.Properties')
17
def set(self, name, value):
18
if type(value) is types.IntType:
19
value = dbus.UInt32(value)
20
if self.__class__.get_interface_version()[0] < 5:
21
self.get_interface().SetProperty(name, value)
23
return self.__properties_interface.Set(self.get_interface_name(), name, value)
26
def get_properties(self):
27
if self.__class__.get_interface_version()[0] < 5:
28
return self.get_interface().GetProperties()
30
return self.__properties_interface.GetAll(self.get_interface_name())
32
def _handle_signal(self, handler, signal, interface, obj_path, **kwargs):
33
self.get_bus().add_signal_receiver(handler, signal, interface, 'org.bluez', obj_path, **kwargs)
35
def _unhandle_signal(self, handler, signal, interface, obj_path, **kwargs):
36
self.get_bus().remove_signal_receiver(
37
handler, signal, self.get_interface_name(), 'org.bluez',
38
self.get_object_path(), **kwargs
41
def handle_signal(self, handler, signal, **kwargs):
42
if signal == 'PropertyChanged':
43
if self.__class__.get_interface_version()[0] < 5:
45
handler, 'PropertyChanged', self.get_interface_name(), self.get_object_path(), **kwargs
48
def wrapper(interface_name, changed_properties, invalidated_properties, **kwargs):
49
if interface_name == self.get_interface_name():
50
for name, value in changed_properties.items():
51
handler(name, value, **kwargs)
53
self._handler_wrappers[handler] = wrapper
55
interface = 'org.freedesktop.DBus.Properties'
57
self._handle_signal(wrapper, 'PropertiesChanged', interface, self.get_object_path(), **kwargs)
59
raise Exception('Unknown signal: %s' % signal)
61
def unhandle_signal(self, handler, signal, **kwargs):
62
if signal == 'PropertyChanged':
63
if self.__class__.get_interface_version()[0] < 5:
64
self._unhandle_signal(handler, signal, self.get_interface_name(), self.get_object_path(), **kwargs)
66
self._unhandle_signal(self._handler_wrappers[handler], 'PropertiesChanged',
67
'org.freedesktop.DBus.Properties', self.get_object_path(), **kwargs)
69
raise Exception('Unknown signal: %s' % signal)