#!/usr/bin/python from termcolor import colored # Only for debugging debug = True def debugPrint(message): if debug: print colored("[DEBUG] " + str(message), "yellow") import dbus from btdevice import BTDevices class BTAdapter: def __init__(self, adapterName): self.bus = dbus.SystemBus() if adapterName.startswith('/org/bluez'): self.path = adapterName elif adapterName!='' and adapterName.startswith('/')!=True: self.path='/'+adapterName else: self.path = adapterName self.object = self.bus.get_object('org.bluez',self.path) self.interface = dbus.Interface(self.object,'org.bluez.Adapter1') self.interfaceMedia = dbus.Interface(self.object,'org.bluez.Media1') self.properties = dbus.Interface(self.object,'org.freedesktop.DBus.Properties') self.devices = BTDevices(self) # put this at the end @property def Devices(self): return BTDevices(self) @property def ConnectedDevice(self): devices = self.Devices for btdevice in devices: if devices[btdevice].Connected==True: return devices[btdevice] @property def ConnectedDevicePath(self): devices = self.Devices for btdevice in devices: if devices[btdevice].Connected==True: return devices[btdevice].path # Media methods def RegisterEndpoint(self,endpoint,properties): self.interface.RegisterEndpoint(endpoint,properties) def UnregisterEndpoint(self,endpoint): self.interface.UnregisterEndpoint(endpoint) def RegisterPlayer(self,player,properties): self.interface.RegisterPlayer(player,properties) def UnregisterPlayer(self,player): self.interface.UnregisterPlayer(player) # Adapter methods def StartDiscovery(self): self.interface.StartDiscovery() def StopDiscovery(self): self.interface.StopDiscovery() def RemoveDevice(self,device): self.interface.RemoveDevice(device) def SetDiscoveryFilter(self, ffilter): self.interface.SetDiscoveryFilter(ffilter) def GetDiscoveryFilters(self): return self.interface.GetDiscoveryFilters() # Adapter properties def GetProperty(self,name): return self.properties.Get('org.bluez.Adapter1',name) def SetProperty(self,name,val): self.properties.Set('org.bluez.Adapter1',name,val) # Readonly properties @property def Address(self): return self.GetProperty("Address") @property def Name(self): return self.GetProperty("Name") @property def Class(self): return self.GetProperty("Class") @property def Discovering(self): return self.GetProperty("Discovering") @property def UUIDs(self): return self.GetProperty("UUIDs") @property def UUIDs(self): return self.GetProperty("Modalias") # Read/Write properties @property def Alias(self): return self.GetProperty("Alias") @Alias.setter def Alias(self,val): self.SetProperty("Alias",val) @property def Powered(self): return self.GetProperty("Powered") @Powered.setter def Powered(self,val): self.SetProperty("Powered",val) @property def Discoverable(self): return self.GetProperty("Discoverable") @Discoverable.setter def Discoverable(self,val): self.SetProperty("Discoverable",val) @property def Pairable(self): return self.GetProperty("Pairable") @Pairable.setter def Pairable(self,val): self.SetProperty("Pairable",val) @property def PairableTimeout(self): return self.GetProperty("PairableTimeout") @PairableTimeout.setter def PairableTimeout(self,val): self.SetProperty("PairableTimeout",val) @property def DiscoverableTimeout(self): return self.GetProperty("DiscoverableTimeout") @DiscoverableTimeout.setter def DiscoverableTimeout(self,val): self.SetProperty("DiscoverableTimeout",val)