233 行
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			実行ファイル
		
	
	
	
	
			
		
		
	
	
			233 行
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			実行ファイル
		
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| 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()
 | |
| 
 | |
| def sig_received(*args, **kwargs):
 | |
| 	if "member" not in kwargs:
 | |
| 		return
 | |
| 	if "path" not in kwargs:
 | |
| 		return;
 | |
| 	sig_name = kwargs["member"]
 | |
| 	path = kwargs["path"]
 | |
| 	print(sig_name)
 | |
| 	print(path)
 | |
| 	if sig_name == "PropertyChanged":
 | |
| 		k, v = args
 | |
| 		print(k)
 | |
| 		print(v)
 | |
| 	else:
 | |
| 		ob = args[0]
 | |
| 		print(ob)
 | |
| 
 | |
| 
 | |
| def enter_mainloop():
 | |
| 	bus.add_signal_receiver(sig_received, bus_name=BUS_NAME,
 | |
| 				dbus_interface=HEALTH_DEVICE_INTERFACE,
 | |
| 				path_keyword="path",
 | |
| 				member_keyword="member",
 | |
| 				interface_keyword="interface")
 | |
| 
 | |
| 	try:
 | |
| 		print("Entering main lopp, push Ctrl+C for finish")
 | |
| 
 | |
| 		mainloop = GObject.MainLoop()
 | |
| 		mainloop.run()
 | |
| 	except KeyboardInterrupt:
 | |
| 		pass
 | |
| 	finally:
 | |
| 		print("Exiting, bye")
 | |
| 
 | |
| hdp_manager = dbus.Interface(bus.get_object(BUS_NAME, PATH),
 | |
| 						HEALTH_MANAGER_INTERFACE)
 | |
| 
 | |
| role = None
 | |
| while role == None:
 | |
| 	print("Select 1. source or 2. sink: ",)
 | |
| 	try:
 | |
| 		sel = int(sys.stdin.readline())
 | |
| 		if sel == 1:
 | |
| 			role = "source"
 | |
| 		elif sel == 2:
 | |
| 			role = "sink"
 | |
| 		else:
 | |
| 			raise ValueError
 | |
| 	except (TypeError, ValueError):
 | |
| 		print("Wrong selection, try again: ",)
 | |
| 	except KeyboardInterrupt:
 | |
| 		sys.exit()
 | |
| 
 | |
| dtype = None
 | |
| while dtype == None:
 | |
| 	print("Select a data type: ",)
 | |
| 	try:
 | |
| 		sel = int(sys.stdin.readline())
 | |
| 		if (sel < 0) or (sel > 65535):
 | |
| 			raise ValueError
 | |
| 		dtype = sel;
 | |
| 	except (TypeError, ValueError):
 | |
| 		print("Wrong selection, try again: ",)
 | |
| 	except KeyboardInterrupt:
 | |
| 		sys.exit()
 | |
| 
 | |
| pref = None
 | |
| if role == "source":
 | |
| 	while pref == None:
 | |
| 		try:
 | |
| 			print("Select a preferred data channel type 1.",)
 | |
| 			print("reliable 2. streaming: ",)
 | |
| 			sel = int(sys.stdin.readline())
 | |
| 			if sel == 1:
 | |
| 				pref = "reliable"
 | |
| 			elif sel == 2:
 | |
| 				pref = "streaming"
 | |
| 			else:
 | |
| 				raise ValueError
 | |
| 
 | |
| 		except (TypeError, ValueError):
 | |
| 			print("Wrong selection, try again")
 | |
| 		except KeyboardInterrupt:
 | |
| 			sys.exit()
 | |
| 
 | |
| 	app_path = hdp_manager.CreateApplication({
 | |
| 					"DataType": dbus.types.UInt16(dtype),
 | |
| 					"Role": role,
 | |
| 					"Description": "Test Source",
 | |
| 					"ChannelType": pref})
 | |
| else:
 | |
| 	app_path = hdp_manager.CreateApplication({
 | |
| 					"DataType": dbus.types.UInt16(dtype),
 | |
| 					"Description": "Test sink",
 | |
| 					"Role": role})
 | |
| 
 | |
| print("New application created:", app_path)
 | |
| 
 | |
| con = None
 | |
| while con == None:
 | |
| 	try:
 | |
| 		print("Connect to a remote device (y/n)? ",)
 | |
| 		sel = sys.stdin.readline()
 | |
| 		if sel in ("y\n", "yes\n", "Y\n", "YES\n"):
 | |
| 			con = True
 | |
| 		elif sel in ("n\n", "no\n", "N\n", "NO\n"):
 | |
| 			con = False
 | |
| 		else:
 | |
| 			print("Wrong selection, try again.")
 | |
| 	except KeyboardInterrupt:
 | |
| 		sys.exit()
 | |
| 
 | |
| if not con:
 | |
| 	enter_mainloop()
 | |
| 	sys.exit()
 | |
| 
 | |
| 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 = adapter.GetProperties()["Devices"]
 | |
| 
 | |
| 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()
 | |
| 
 | |
| device = dbus.Interface(bus.get_object(BUS_NAME, select),
 | |
| 					HEALTH_DEVICE_INTERFACE)
 | |
| 
 | |
| echo = None
 | |
| while echo == None:
 | |
| 	try:
 | |
| 		print("Perform an echo (y/n)? ",)
 | |
| 		sel = sys.stdin.readline()
 | |
| 		if sel in ("y\n", "yes\n", "Y\n", "YES\n"):
 | |
| 			echo = True
 | |
| 		elif sel in ("n\n", "no\n", "N\n", "NO\n"):
 | |
| 			echo = False
 | |
| 		else:
 | |
| 			print("Wrong selection, try again.")
 | |
| 	except KeyboardInterrupt:
 | |
| 		sys.exit()
 | |
| 
 | |
| if echo:
 | |
| 	if device.Echo():
 | |
| 		print("Echo was ok")
 | |
| 	else:
 | |
| 		print("Echo war wrong, exiting")
 | |
| 		sys.exit()
 | |
| 
 | |
| print("Connecting to device %s" % (select))
 | |
| 
 | |
| if role == "source":
 | |
| 	chan = device.CreateChannel(app_path, "reliable")
 | |
| else:
 | |
| 	chan = device.CreateChannel(app_path, "any")
 | |
| 
 | |
| print(chan)
 | |
| 
 | |
| enter_mainloop()
 | |
| 
 | |
| hdp_manager.DestroyApplication(app_path)
 | 
