rendered paste bodyimport dbus, dbus.glib
import gobject
class BTModel(gobject.GObject):
dbus_bluez_service = "org.bluez"
dbus_bluez_path = "/org/bluez"
dbus_bluez_manager_interface = dbus_bluez_service + ".Manager"
dbus_bluez_adapter_interface = dbus_bluez_service + ".Adapter"
dbus_btsdp_service = "com.nokia.btsdp"
dbus_btsdp_request_path = "/com/nokia/btsdp/request"
dbus_btsdp_request_interface = "com.nokia.btsdp.request"
__gsignals__ = {
'device-found':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT)),
'discovery-started':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
'discovery-completed':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, ()),
'name-updated':(gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT))
}
def __init__(self):
gobject.GObject.__init__(self)
self.bus = None
self.bluez_manager = None
self.bluez_adapter = None
self.bluez_default_adapter = None
self.config_parser = None
self.btsdp_request = None
self.scanning = False
try:
self.init_bluez_adapter()
except TypeError, e:
print "Error in init_bluez_adapter()"
def init_bluez_adapter(self):
dbus_bluez_named_service = None
if self.bus is None:
self.bus = dbus.SystemBus()
if self.bluez_manager is None:
dbus_obj = self.bus.get_object('org.freedesktop.DBus', '/org/freedesktop/DBus', introspect=False)
dbus_bluez_named_service = dbus_obj.GetNameOwner('org.bluez', dbus_interface='org.freedesktop.DBus')
bluez_obj = self.bus.get_object(self.dbus_bluez_service, self.dbus_bluez_path, introspect=False)
self.bluez_manager = dbus.Interface(bluez_obj, self.dbus_bluez_manager_interface)
btsdp_obj = self.bus.get_object("com.nokia.btsdp", "/com/nokia/btsdp/request", introspect=False)
btsdp_request = dbus.Interface(btsdp_obj, "com.nokia.btsdp.request")
if self.bluez_default_adapter is None:
self.bluez_default_adapter = self.bluez_manager.DefaultAdapter()
self.bus.add_signal_receiver(handler_function=self.cb_discovery_started,
signal_name='DiscoveryStarted',
dbus_interface=self.dbus_bluez_adapter_interface,
named_service=dbus_bluez_named_service,
path=self.bluez_default_adapter)
self.bus.add_signal_receiver(handler_function=self.cb_remote_device_found,
signal_name='RemoteDeviceFound',
dbus_interface=self.dbus_bluez_adapter_interface,
named_service=dbus_bluez_named_service,
path=self.bluez_default_adapter)
self.bus.add_signal_receiver(handler_function=self.cb_remote_name_updated,
signal_name='RemoteNameUpdated',
dbus_interface=self.dbus_bluez_adapter_interface,
named_service=dbus_bluez_named_service,
path=self.bluez_default_adapter)
self.bus.add_signal_receiver(handler_function=self.cb_discovery_completed,
signal_name='DiscoveryCompleted',
dbus_interface=self.dbus_bluez_adapter_interface,
named_service=dbus_bluez_named_service,
path=self.bluez_default_adapter)
bluez_object = self.bus.get_object(self.dbus_bluez_service, self.bluez_default_adapter, introspect=False)
self.bluez_adapter = dbus.Interface(bluez_object, self.dbus_bluez_adapter_interface)
def scan_bt_devices(self):
if not self.scanning:
self.bluez_adapter.DiscoverDevices()
def cancel_scan_bt_devices(self):
if self.bluez_adapter is not None and self.scanning:
self.bluez_adapter.CancelDiscovery()
self.scanning = False
def cb_remote_device_found(self, address, *args):
self.emit('device-found', address, *args)
def cb_discovery_started(self):
self.scanning = True
self.emit('discovery-started')
def cb_discovery_completed(self):
self.scanning = False
self.emit('discovery-completed')
def cb_remote_name_updated(self, address, name, *args):
self.emit('name-updated', name, *args)