128 行
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			実行ファイル
		
	
	
	
	
			
		
		
	
	
			128 行
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
		
			実行ファイル
		
	
	
	
	
| #!/usr/bin/python
 | |
| 
 | |
| from __future__ import absolute_import, print_function, unicode_literals
 | |
| 
 | |
| from optparse import OptionParser, make_option
 | |
| import os
 | |
| import sys
 | |
| import uuid
 | |
| import dbus
 | |
| import dbus.service
 | |
| import dbus.mainloop.glib
 | |
| try:
 | |
|   from gi.repository import GObject
 | |
| except ImportError:
 | |
|   import gobject as GObject
 | |
| 
 | |
| class Profile(dbus.service.Object):
 | |
| 	fd = -1
 | |
| 
 | |
| 	@dbus.service.method("org.bluez.Profile1",
 | |
| 					in_signature="", out_signature="")
 | |
| 	def Release(self):
 | |
| 		print("Release")
 | |
| 		mainloop.quit()
 | |
| 
 | |
| 	@dbus.service.method("org.bluez.Profile1",
 | |
| 					in_signature="", out_signature="")
 | |
| 	def Cancel(self):
 | |
| 		print("Cancel")
 | |
| 
 | |
| 	@dbus.service.method("org.bluez.Profile1",
 | |
| 				in_signature="oha{sv}", out_signature="")
 | |
| 	def NewConnection(self, path, fd, properties):
 | |
| 		self.fd = fd.take()
 | |
| 		print("NewConnection(%s, %d)" % (path, self.fd))
 | |
| 		for key in properties.keys():
 | |
| 			if key == "Version" or key == "Features":
 | |
| 				print("  %s = 0x%04x" % (key, properties[key]))
 | |
| 			else:
 | |
| 				print("  %s = %s" % (key, properties[key]))
 | |
| 
 | |
| 	@dbus.service.method("org.bluez.Profile1",
 | |
| 				in_signature="o", out_signature="")
 | |
| 	def RequestDisconnection(self, path):
 | |
| 		print("RequestDisconnection(%s)" % (path))
 | |
| 
 | |
| 		if (self.fd > 0):
 | |
| 			os.close(self.fd)
 | |
| 			self.fd = -1
 | |
| 
 | |
| if __name__ == '__main__':
 | |
| 	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
 | |
| 
 | |
| 	bus = dbus.SystemBus()
 | |
| 
 | |
| 	manager = dbus.Interface(bus.get_object("org.bluez",
 | |
| 				"/org/bluez"), "org.bluez.ProfileManager1")
 | |
| 
 | |
| 	option_list = [
 | |
| 			make_option("-u", "--uuid", action="store",
 | |
| 					type="string", dest="uuid",
 | |
| 					default=None),
 | |
| 			make_option("-p", "--path", action="store",
 | |
| 					type="string", dest="path",
 | |
| 					default="/foo/bar/profile"),
 | |
| 			make_option("-n", "--name", action="store",
 | |
| 					type="string", dest="name",
 | |
| 					default=None),
 | |
| 			make_option("-s", "--server",
 | |
| 					action="store_const",
 | |
| 					const="server", dest="role"),
 | |
| 			make_option("-c", "--client",
 | |
| 					action="store_const",
 | |
| 					const="client", dest="role"),
 | |
| 			make_option("-a", "--auto-connect",
 | |
| 					action="store_true",
 | |
| 					dest="auto_connect", default=False),
 | |
| 			make_option("-P", "--PSM", action="store",
 | |
| 					type="int", dest="psm",
 | |
| 					default=None),
 | |
| 			make_option("-C", "--channel", action="store",
 | |
| 					type="int", dest="channel",
 | |
| 					default=None),
 | |
| 			make_option("-r", "--record", action="store",
 | |
| 					type="string", dest="record",
 | |
| 					default=None),
 | |
| 			make_option("-S", "--service", action="store",
 | |
| 					type="string", dest="service",
 | |
| 					default=None),
 | |
| 			]
 | |
| 
 | |
| 	parser = OptionParser(option_list=option_list)
 | |
| 
 | |
| 	(options, args) = parser.parse_args()
 | |
| 
 | |
| 	profile = Profile(bus, options.path)
 | |
| 
 | |
| 	mainloop = GObject.MainLoop()
 | |
| 
 | |
| 	opts = {
 | |
| 			"AutoConnect" :	options.auto_connect,
 | |
| 		}
 | |
| 
 | |
| 	if (options.name):
 | |
| 		opts["Name"] = options.name
 | |
| 
 | |
| 	if (options.role):
 | |
| 		opts["Role"] = options.role
 | |
| 
 | |
| 	if (options.psm is not None):
 | |
| 		opts["PSM"] = dbus.UInt16(options.psm)
 | |
| 
 | |
| 	if (options.channel is not None):
 | |
| 		opts["Channel"] = dbus.UInt16(options.channel)
 | |
| 
 | |
| 	if (options.record):
 | |
| 		opts["ServiceRecord"] = options.record
 | |
| 
 | |
| 	if (options.service):
 | |
| 		opts["Service"] = options.service
 | |
| 
 | |
| 	if not options.uuid:
 | |
| 		options.uuid = str(uuid.uuid4())
 | |
| 
 | |
| 	manager.RegisterProfile(options.path, options.uuid, opts)
 | |
| 
 | |
| 	mainloop.run()
 | 
