| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #!/usr/bin/python
- # SPDX-License-Identifier: LGPL-2.1-or-later
- 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()
|