All pastes #436896 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-12 19:57 UTC
rendered paste body
import 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)