示例#1
0
    def make_discoverable(self, value=True, timeout=180):
        try:
            adapter = bluezutils.find_adapter()
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            logger.error(str(error) + "\n")
            return False

        try:
            props = dbus.Interface(
                self._bus.get_object("org.bluez", adapter.object_path),
                "org.freedesktop.DBus.Properties")

            timeout = int(timeout)
            value = int(value)

            if int(props.Get("org.bluez.Adapter1",
                             "DiscoverableTimeout")) != timeout:
                props.Set("org.bluez.Adapter1", "DiscoverableTimeout",
                          dbus.UInt32(timeout))

            if int(props.Get("org.bluez.Adapter1", "Discoverable")) != value:
                props.Set("org.bluez.Adapter1", "Discoverable",
                          dbus.Boolean(value))
        except dbus.exceptions.DBusException as error:
            logger.error(str(error) + "\n")
            return False

        logger.info("Discoverable: {}".format(value))
        return True
示例#2
0
def properties_changed(interface, changed, invalidated, path):
    global last_connected_path
    global last_connected_time
    if interface != "org.bluez.Device1":
        return
    if changed == None:
        return
    if changed.has_key('Connected'):
        if changed['Connected'] == dbus.Boolean(1):
            print("   connecting %s" % path)
            last_connected_path = path
            save_last_connected_path(path)
            last_connected_time = os.times()[4]
            set_not_discoverable()
        elif changed['Connected'] == dbus.Boolean(0):
            print("disconnecting %s" % path)
            time = os.times()[4]
            if ((last_connected_path == path)
                    and ((time - last_connected_time) <= DISC_THRES)):
                print("Removing this %s" % path)
                adapter = bluezutils.find_adapter()
                adapter.RemoveDevice(path)
                save_last_connected_path("")
                audio_play(CONNECTION_ERROR, "")
            print("Time is %f - %f = %f %d %d" %
                  (time, last_connected_time, time - last_connected_time,
                   path is last_connected_path,
                   (time - last_connected_time) <= DISC_THRES))
            print(" ==%s==" % path)
            print(" ==%s==" % last_connected_path)
            set_discoverable()
    else:
        print("PATH: %s PROPS: %s" % (path, changed))
示例#3
0
    def __init__(self, onBluetoothConnected_callback, onPlayerChanged_callback):
        self.onBluetoothConnected_callback = onBluetoothConnected_callback
        self.onPlayerChanged_callback = onPlayerChanged_callback
        
        # Get the system bus
        try:
            dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
            self.bus = dbus.SystemBus()
        except Exception as ex:
            print("Unable to get the system dbus: '{0}'. Exiting. Is dbus running?".format(ex.message))
            return False

        adapter_path = bluezutils.find_adapter(None).object_path
        self.adapter = dbus.Interface(self.bus.get_object(bluezutils.SERVICE_NAME, adapter_path), "org.freedesktop.DBus.Properties")

        # Power on adapter
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "Powered", dbus.Boolean(1))
        # Set name to display in available connections
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "Alias", bluezutils.BT_DEVICE_NAME)
        # Set pairable on
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "Pairable", dbus.Boolean(1))
        # Set discoverable on
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "Discoverable", dbus.Boolean(1))
        # Set discoverable timeout to 0
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "DiscoverableTimeout", dbus.UInt32(0))
        # Set paraible time out to 0
        self.adapter.Set(bluezutils.ADAPTER_INTERFACE, "PairableTimeout", dbus.UInt32(0))

        bluezutils.show_adapter_info()

        self.path = "/test/agent"
        agent = bluezutils.Agent(self.bus, self.path)

        obj = self.bus.get_object(bluezutils.SERVICE_NAME, "/org/bluez");
        self.manager = dbus.Interface(obj, "org.bluez.AgentManager1")
        self.manager.RegisterAgent(self.path, "NoInputNoOutput")

        print("Bluetooth AgentManager registered")

        # listen for signal of remove adapter
#        self.bus.add_signal_receiver(self.interfaces_removed, bus_name=bluezutils.SERVICE_NAME, dbus_interface="org.freedesktop.DBus.ObjectManager", signal_name="InterfacesRemoved")

        # listen for signals on the Bluez bus
        self.bus.add_signal_receiver(self.device_property_changed, bus_name=bluezutils.SERVICE_NAME, signal_name="PropertiesChanged", path_keyword="device_path", interface_keyword="interface")

        # listen for signal of changing properties
        self.bus.add_signal_receiver(self.player_changed, bus_name=bluezutils.SERVICE_NAME, dbus_interface="org.freedesktop.DBus.Properties", signal_name="PropertiesChanged", path_keyword="path")

        print("Signals receiver registered")

        self.manager.RequestDefaultAgent(self.path)

        # reconnect automatically to last device
        if not self.reconnect():
            print("Unable to connect to last device!")
示例#4
0
    def scan(self, timeout=10):
        try:
            adapter = bluezutils.find_adapter()
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            logger.error(str(error) + "\n")
        else:
            try:
                adapter.StartDiscovery()
                time.sleep(timeout)
                adapter.StopDiscovery()
            except dbus.exceptions.DBusException as error:
                logger.error(str(error) + "\n")

        self._scan_thread = None
示例#5
0
    def remove(self, address):
        try:
            adapter = bluezutils.find_adapter()
            dev = bluezutils.find_device(address)
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            print_error(str(error) + "\n")
            return False

        try:
            adapter.RemoveDevice(dev.object_path)
        except dbus.exceptions.DBusException as error:
            print_error(str(error) + "\n")
            return False

        return True
示例#6
0
    def remove(self, address):
        try:
            adapter = bluezutils.find_adapter()
            dev = bluezutils.find_device(address)
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            logger.error(str(error) + "\n")
            return False

        try:
            adapter.RemoveDevice(dev.object_path)
        except dbus.exceptions.DBusException as error:
            logger.error(str(error) + "\n")
            return False

        logger.info("Successfully removed: {}".format(address))
        return True
示例#7
0
    def get_adapter_property(self, prop):
        try:
            adapter = bluezutils.find_adapter()
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            logger.error(str(error) + "\n")
            return None

        try:
            props = dbus.Interface(
                self._bus.get_object("org.bluez", adapter.object_path),
                "org.freedesktop.DBus.Properties")

            return props.Get("org.bluez.Adapter1", prop)
        except dbus.exceptions.DBusException as error:
            logger.error(str(error) + "\n")
            return None
示例#8
0
def find_device_address():
	adapter = bluezutils.find_adapter()
	adapter_path = adapter.object_path

	om = dbus.Interface(bus.get_object("org.bluez", "/"), "org.freedesktop.DBus.ObjectManager")
	objects = om.GetManagedObjects()

	# find FIRST registered or connected Wii Balance Board ("RVL-WBC-01") and return address
	for path, interfaces in objects.iteritems():
		if "org.bluez.Device1" not in interfaces:
			continue
		properties = interfaces["org.bluez.Device1"]
		if properties["Adapter"] != adapter_path:
			continue
		if properties["Alias"] != "Nintendo RVL-WBC-01":
			continue
		print ("found Wii Balanceboard with address %s" % (properties["Address"]))
		return properties["Address"]
示例#9
0
def find_device_address():
    adapter = bluezutils.find_adapter()
    adapter_path = adapter.object_path

    om = dbus.Interface(bus.get_object("org.bluez", "/"),
                        "org.freedesktop.DBus.ObjectManager")
    objects = om.GetManagedObjects()

    # find FIRST registered or connected Wii Balance Board ("RVL-WBC-01") and return address
    for path, interfaces in objects.iteritems():
        if "org.bluez.Device1" not in interfaces:
            continue
        properties = interfaces["org.bluez.Device1"]
        if properties["Adapter"] != adapter_path:
            continue
        if properties["Alias"] != "Nintendo RVL-WBC-01":
            continue
        print("found Wii Balanceboard with address %s" %
              (properties["Address"]))
        return properties["Address"]
示例#10
0
    def set_adapter_property(self, prop, value):
        try:
            adapter = bluezutils.find_adapter()
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            print_error(str(error) + "\n")
            return False

        try:
            props = dbus.Interface(
                self._bus.get_object("org.bluez", adapter.object_path),
                "org.freedesktop.DBus.Properties")

            if props.Get("org.bluez.Adapter1", prop) != value:
                props.Set("org.bluez.Adapter1", prop, value)
        except dbus.exceptions.DBusException as error:
            print_error(str(error) + "\n")
            return False

        return True
示例#11
0
    def make_discoverable(self):
        try:
            adapter = bluezutils.find_adapter()
        except (bluezutils.BluezUtilError,
                dbus.exceptions.DBusException) as error:
            print_error(str(error) + "\n")
            return False

        try:
            props = dbus.Interface(
                self._bus.get_object("org.bluez", adapter.object_path),
                "org.freedesktop.DBus.Properties")

            if not props.Get("org.bluez.Adapter1", "Discoverable"):
                props.Set("org.bluez.Adapter1", "Discoverable",
                          dbus.Boolean(1))
        except dbus.exceptions.DBusException as error:
            print_error(str(error) + "\n")
            return False

        return True
示例#12
0
# SPDX-License-Identifier: LGPL-2.1-or-later

import dbus
import bluezutils

bus = dbus.SystemBus()

dummy = dbus.Interface(bus.get_object('org.bluez', '/'),
                       'org.freedesktop.DBus.Introspectable')

#print dummy.Introspect()

try:
    adapter = bluezutils.find_adapter()
except:
    pass
示例#13
0
    LOG.info("Attempting to register Agent with capability '%s' ...",
             capability)
    Agent(BUS, AGENT_PATH)

    obj = BUS.get_object(BUS_NAME, "/org/bluez")
    manager = dbus.Interface(obj, "org.bluez.AgentManager1")
    manager.RegisterAgent(AGENT_PATH, capability)
    manager.RequestDefaultAgent(AGENT_PATH)
    LOG.info("Agent registered")

    LOG.info("Ensuring that adapter is discoverable/pairable...")

    adapter_obj = None
    while adapter_obj is None:
        try:
            adapter_obj = find_adapter().proxy_object
        except NoAdapterException as ex:
            LOG.warn(
                "Can't find BT hardware adapter, retrying in %s seconds...",
                RETRY_INTERVAL)

            LOG.debug(ex)
            time.sleep(RETRY_INTERVAL)

    try:
        props = dbus.Interface(adapter_obj, "org.freedesktop.DBus.Properties")
        props.Set(ADAPTER_INTERFACE, "Discoverable", True)
        props.Set(ADAPTER_INTERFACE, "Pairable", True)
        props.Set(ADAPTER_INTERFACE, "DiscoverableTimeout", dbus.UInt32(0))
        props.Set(ADAPTER_INTERFACE, "PairableTimeout", dbus.UInt32(0))
        LOG.info("Adapter is pairable/discoverable now")
示例#14
0
try:
  from gi.repository import GObject
except ImportError:
  import gobject as GObject

bus = dbus.SystemBus()

option_list = [
		make_option("-i", "--device", action="store",
				type="string", dest="dev_id"),
		]
parser = OptionParser(option_list=option_list)

(options, args) = parser.parse_args()

adapter_path = bluezutils.find_adapter(options.dev_id).object_path
server = dbus.Interface(bus.get_object("org.bluez", adapter_path),
						"org.bluez.NetworkServer1")

service = "nap"

if (len(args) < 1):
	bridge = "tether"
else:
	bridge = args[0]

dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

mainloop = GObject.MainLoop()

server.Register(service, bridge)
示例#15
0
def get_adapter(adapteraddress=None):
    return bluezutils.find_adapter(adapteraddress)
示例#16
0
def get_adapter_interface(adapteraddress=None):
    adapter_path = bluezutils.find_adapter(adapteraddress).object_path
    return dbus.Interface(bus.get_object(BLUEZ_OBJECT_PATH, adapter_path),
                          "org.freedesktop.DBus.Properties")
示例#17
0

##################### main
if __name__ == '__main__':
    args = parse_cmd_args()
    cmd_args = args['cmd_args']
    print("cmd_args len",len(args['cmd_args']))
    if len(args['cmd_args']) == 0:
        print("INVALID: command not specified - supported_commands:")
        print_dict_items(g_commands_dict)
        exit(-1)
    print('cmd_args:',cmd_args)

    bus = dbus.SystemBus()

    adapter_path = bluezutils.find_adapter(args['a']).object_path
    print("adapter_path:",adapter_path)

    adapter = dbus.Interface(
        bus.get_object("org.bluez", adapter_path),
	"org.bluez.Adapter1"
    )
    print("adapter:",adapter)

    # read and work through commands
    cmd = args['cmd_args'][0]
    if cmd in g_commands_dict:
        print("starting command: ", cmd)
        globals()['do_'+cmd](adapter, cmd_args)
    else:
        print("ERROR: command","'"+args['cmd_args'][0]+"'","is not in the supported list - we currently only support: ")
		except Exception as e:
			print('Characteristic WriteValue() failed: ' + str(e))
			raise

char_classes = [
	sensor_tag_ir_temperature_char,
	sensor_tag_humidity_char,
	sensor_tag_barometer_char,
	# Can't support the keys without bluez notification support
	#sensor_tag_simple_key_service_char,
	yeelight_blue_bulb_char,
]
for char_class in char_classes:
	known_characteristics[char_class.uuid] = char_class

adapter = bluezutils.find_adapter(bus)

# Connect the D-Bus main loop with the base_lib main loop
base_lib.base_init(adapter.object_path)
def base_run(s, *args):
	base_lib.base_run(0)
	return True
gobject.io_add_watch(base_lib.s,
		gobject.IO_IN | gobject.IO_ERR | gobject.IO_HUP, base_run)

# Make sure adapter is powered on (UP in hciconfig)
adapter_props = dbus.Interface(adapter, 'org.freedesktop.DBus.Properties')
adapter_props.Set(bluezutils.ADAPTER_INTERFACE, 'Powered', dbus.Boolean(True))

# Subscribe to all signals that could indicate a device was just detected
bluezutils.device_listeners.append(device_change)
示例#19
0
def start_ble_beaconing():
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

	bus = dbus.SystemBus()

	option_list = [
			make_option("-i", "--device", action="store",
					type="string", dest="dev_id"),
			make_option("-u", "--uuids", action="store",
					type="string", dest="uuids",
					help="Filtered service UUIDs [uuid1,uuid2,...]"),
			make_option("-r", "--rssi", action="store",
					type="int", dest="rssi",
					help="RSSI threshold value"),
			make_option("-p", "--pathloss", action="store",
					type="int", dest="pathloss",
					help="Pathloss threshold value"),
			make_option("-t", "--transport", action="store",
					type="string", dest="transport",
					help="Type of scan to run (le/bredr/auto)"),
			make_option("-c", "--compact",
					action="store_true", dest="compact"),
			]
	parser = OptionParser(option_list=option_list)

	(options, args) = parser.parse_args()

	adapter = bluezutils.find_adapter(options.dev_id)

	if options.compact:
		compact = True;

	bus.add_signal_receiver(interfaces_added,
			dbus_interface = "org.freedesktop.DBus.ObjectManager",
			signal_name = "InterfacesAdded")

	bus.add_signal_receiver(properties_changed,
			dbus_interface = "org.freedesktop.DBus.Properties",
			signal_name = "PropertiesChanged",
			arg0 = "org.bluez.Device1",
			path_keyword = "path")

	om = dbus.Interface(bus.get_object("org.bluez", "/"),
				"org.freedesktop.DBus.ObjectManager")
	objects = om.GetManagedObjects()
	for path, interfaces in objects.iteritems():
		if "org.bluez.Device1" in interfaces:
			devices[path] = interfaces["org.bluez.Device1"]

	scan_filter = dict()

	if options.uuids:
		uuids = []
		uuid_list = options.uuids.split(',')
		for uuid in uuid_list:
			uuids.append(uuid)

		scan_filter.update({ "UUIDs": uuids })

	if options.rssi:
		scan_filter.update({ "RSSI": dbus.Int16(options.rssi) })

	if options.pathloss:
		scan_filter.update({ "Pathloss": dbus.UInt16(options.pathloss) })

	if options.transport:
		scan_filter.update({ "Transport": options.transport })

	adapter.SetDiscoveryFilter(scan_filter)
	adapter.StartDiscovery()

	mainloop = GObject.MainLoop()
	mainloop.run()
示例#20
0
def get_adapter_interface(adapteraddress=None):
    adapter_path = bluezutils.find_adapter(adapteraddress).object_path
    return dbus.Interface(bus.get_object(BLUEZ_OBJECT_PATH, adapter_path), "org.freedesktop.DBus.Properties")
示例#21
0
def get_adapter(adapteraddress=None):
    return bluezutils.find_adapter(adapteraddress)
示例#22
0
                    type="int",
                    dest="pathloss",
                    help="Pathloss threshold value"),
        make_option("-t",
                    "--transport",
                    action="store",
                    type="string",
                    dest="transport",
                    help="Type of scan to run (le/bredr/auto)"),
        make_option("-c", "--compact", action="store_true", dest="compact"),
    ]
    parser = OptionParser(option_list=option_list)

    (options, args) = parser.parse_args()

    adapter = bluezutils.find_adapter(options.dev_id)

    if options.compact:
        compact = True

    bus.add_signal_receiver(
        interfaces_added,
        dbus_interface="org.freedesktop.DBus.ObjectManager",
        signal_name="InterfacesAdded")

    bus.add_signal_receiver(properties_changed,
                            dbus_interface="org.freedesktop.DBus.Properties",
                            signal_name="PropertiesChanged",
                            arg0="org.bluez.Device1",
                            path_keyword="path")
示例#23
0
if __name__ == '__main__':
	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

	bus = dbus.SystemBus()

	option_list = [
			make_option("-i", "--device", action="store",
					type="string", dest="dev_id"),
			make_option("-c", "--compact",
					action="store_true", dest="compact"),
			]
	parser = OptionParser(option_list=option_list)

	(options, args) = parser.parse_args()

	adapter = bluezutils.find_adapter(options.dev_id)

	bus.add_signal_receiver(interfaces_added,
			dbus_interface = "org.freedesktop.DBus.ObjectManager",
			signal_name = "InterfacesAdded")

	bus.add_signal_receiver(interfaces_removed,
			dbus_interface = "org.freedesktop.DBus.ObjectManager",
			signal_name = "InterfacesRemoved")

	bus.add_signal_receiver(properties_changed,
			dbus_interface = "org.freedesktop.DBus.Properties",
			signal_name = "PropertiesChanged",
			arg0 = "org.bluez.Device1",
			path_keyword = "path")