test-health-sink 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/python
  2. # SPDX-License-Identifier: LGPL-2.1-or-later
  3. from __future__ import absolute_import, print_function, unicode_literals
  4. # -*- coding: utf-8 -*-
  5. import sys
  6. import dbus
  7. import dbus.service
  8. from dbus.mainloop.glib import DBusGMainLoop
  9. try:
  10. from gi.repository import GObject
  11. except ImportError:
  12. import gobject as GObject
  13. BUS_NAME = 'org.bluez'
  14. PATH = '/org/bluez'
  15. ADAPTER_INTERFACE = 'org.bluez.Adapter1'
  16. HEALTH_MANAGER_INTERFACE = 'org.bluez.HealthManager1'
  17. HEALTH_DEVICE_INTERFACE = 'org.bluez.HealthDevice1'
  18. DBusGMainLoop(set_as_default=True)
  19. loop = GObject.MainLoop()
  20. bus = dbus.SystemBus()
  21. type = 4103
  22. if len(sys.argv) > 1:
  23. type = int(sys.argv[1])
  24. hdp_manager = dbus.Interface(bus.get_object(BUS_NAME, PATH),
  25. HEALTH_MANAGER_INTERFACE)
  26. app_path = hdp_manager.CreateApplication({"DataType": dbus.types.UInt16(type),
  27. "Role": "sink"})
  28. print(app_path)
  29. manager = dbus.Interface(bus.get_object(BUS_NAME, "/"),
  30. "org.freedesktop.DBus.ObjectManager")
  31. objects = manager.GetManagedObjects()
  32. adapters = []
  33. for path, ifaces in objects.iteritems():
  34. if ifaces.has_key(ADAPTER_INTERFACE):
  35. adapters.append(path)
  36. i = 1
  37. for ad in adapters:
  38. print("%d. %s" % (i, ad))
  39. i = i + 1
  40. print("Select an adapter: ",)
  41. select = None
  42. while select == None:
  43. try:
  44. pos = int(sys.stdin.readline()) - 1
  45. if pos < 0:
  46. raise TypeError
  47. select = adapters[pos]
  48. except (TypeError, IndexError, ValueError):
  49. print("Wrong selection, try again: ",)
  50. except KeyboardInterrupt:
  51. sys.exit()
  52. adapter = dbus.Interface(bus.get_object(BUS_NAME, select),
  53. ADAPTER_INTERFACE)
  54. devices = []
  55. for path, interfaces in objects.iteritems():
  56. if "org.bluez.Device1" not in interfaces:
  57. continue
  58. properties = interfaces["org.bluez.Device1"]
  59. if properties["Adapter"] != select:
  60. continue;
  61. if HEALTH_DEVICE_INTERFACE not in interfaces:
  62. continue
  63. devices.append(path)
  64. if len(devices) == 0:
  65. print("No devices available")
  66. sys.exit()
  67. i = 1
  68. for dev in devices:
  69. print("%d. %s" % (i, dev))
  70. i = i + 1
  71. print("Select a device: ",)
  72. select = None
  73. while select == None:
  74. try:
  75. pos = int(sys.stdin.readline()) - 1
  76. if pos < 0:
  77. raise TypeError
  78. select = devices[pos]
  79. except (TypeError, IndexError, ValueError):
  80. print("Wrong selection, try again: ",)
  81. except KeyboardInterrupt:
  82. sys.exit()
  83. print("Connecting to %s" % (select))
  84. device = dbus.Interface(bus.get_object(BUS_NAME, select),
  85. HEALTH_DEVICE_INTERFACE)
  86. chan = device.CreateChannel(app_path, "Any")
  87. print(chan)
  88. print("Push Enter for finishing")
  89. sys.stdin.readline()
  90. hdp_manager.DestroyApplication(app_path)