| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #!/usr/bin/python
- # SPDX-License-Identifier: LGPL-2.1-or-later
- from __future__ import absolute_import, print_function, unicode_literals
- # -*- coding: utf-8 -*-
- import sys
- import dbus
- import dbus.service
- from dbus.mainloop.glib import DBusGMainLoop
- try:
- from gi.repository import GObject
- except ImportError:
- import gobject as GObject
- BUS_NAME = 'org.bluez'
- PATH = '/org/bluez'
- ADAPTER_INTERFACE = 'org.bluez.Adapter1'
- HEALTH_MANAGER_INTERFACE = 'org.bluez.HealthManager1'
- HEALTH_DEVICE_INTERFACE = 'org.bluez.HealthDevice1'
- DBusGMainLoop(set_as_default=True)
- loop = GObject.MainLoop()
- bus = dbus.SystemBus()
- type = 4103
- if len(sys.argv) > 1:
- type = int(sys.argv[1])
- hdp_manager = dbus.Interface(bus.get_object(BUS_NAME, PATH),
- HEALTH_MANAGER_INTERFACE)
- app_path = hdp_manager.CreateApplication({"DataType": dbus.types.UInt16(type),
- "Role": "sink"})
- print(app_path)
- manager = dbus.Interface(bus.get_object(BUS_NAME, "/"),
- "org.freedesktop.DBus.ObjectManager")
- objects = manager.GetManagedObjects()
- adapters = []
- for path, ifaces in objects.iteritems():
- if ifaces.has_key(ADAPTER_INTERFACE):
- adapters.append(path)
- i = 1
- for ad in adapters:
- print("%d. %s" % (i, ad))
- i = i + 1
- print("Select an adapter: ",)
- select = None
- while select == None:
- try:
- pos = int(sys.stdin.readline()) - 1
- if pos < 0:
- raise TypeError
- select = adapters[pos]
- except (TypeError, IndexError, ValueError):
- print("Wrong selection, try again: ",)
- except KeyboardInterrupt:
- sys.exit()
- adapter = dbus.Interface(bus.get_object(BUS_NAME, select),
- ADAPTER_INTERFACE)
- devices = []
- for path, interfaces in objects.iteritems():
- if "org.bluez.Device1" not in interfaces:
- continue
- properties = interfaces["org.bluez.Device1"]
- if properties["Adapter"] != select:
- continue;
- if HEALTH_DEVICE_INTERFACE not in interfaces:
- continue
- devices.append(path)
- if len(devices) == 0:
- print("No devices available")
- sys.exit()
- i = 1
- for dev in devices:
- print("%d. %s" % (i, dev))
- i = i + 1
- print("Select a device: ",)
- select = None
- while select == None:
- try:
- pos = int(sys.stdin.readline()) - 1
- if pos < 0:
- raise TypeError
- select = devices[pos]
- except (TypeError, IndexError, ValueError):
- print("Wrong selection, try again: ",)
- except KeyboardInterrupt:
- sys.exit()
- print("Connecting to %s" % (select))
- device = dbus.Interface(bus.get_object(BUS_NAME, select),
- HEALTH_DEVICE_INTERFACE)
- chan = device.CreateChannel(app_path, "Any")
- print(chan)
- print("Push Enter for finishing")
- sys.stdin.readline()
- hdp_manager.DestroyApplication(app_path)
|