meta-digi-del: fix bluetooth-python applications
https://jira.digi.com/browse/DEL-224 #resolve https://jira.digi.com/browse/DEL-276 #resolve Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
parent
573e87fed7
commit
774b09b2d6
|
|
@ -0,0 +1,12 @@
|
|||
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
|
||||
PR_append = "+${DISTRO}.r0"
|
||||
|
||||
# Use 'simple-agent' from bluez-4.98 to avoid a dependence in
|
||||
# gobject-introspection
|
||||
SRC_URI += "file://simple-agent"
|
||||
|
||||
EXTRA_OECONF_append_del = " --enable-health"
|
||||
|
||||
do_install_append() {
|
||||
install -m 0755 ${WORKDIR}/simple-agent ${D}${bindir}
|
||||
}
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import gobject
|
||||
|
||||
import sys
|
||||
import dbus
|
||||
import dbus.service
|
||||
import dbus.mainloop.glib
|
||||
from optparse import OptionParser
|
||||
|
||||
class Rejected(dbus.DBusException):
|
||||
_dbus_error_name = "org.bluez.Error.Rejected"
|
||||
|
||||
class Agent(dbus.service.Object):
|
||||
exit_on_release = True
|
||||
|
||||
def set_exit_on_release(self, exit_on_release):
|
||||
self.exit_on_release = exit_on_release
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="", out_signature="")
|
||||
def Release(self):
|
||||
print "Release"
|
||||
if self.exit_on_release:
|
||||
mainloop.quit()
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="os", out_signature="")
|
||||
def Authorize(self, device, uuid):
|
||||
print "Authorize (%s, %s)" % (device, uuid)
|
||||
authorize = raw_input("Authorize connection (yes/no): ")
|
||||
if (authorize == "yes"):
|
||||
return
|
||||
raise Rejected("Connection rejected by user")
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="o", out_signature="s")
|
||||
def RequestPinCode(self, device):
|
||||
print "RequestPinCode (%s)" % (device)
|
||||
return raw_input("Enter PIN Code: ")
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="o", out_signature="u")
|
||||
def RequestPasskey(self, device):
|
||||
print "RequestPasskey (%s)" % (device)
|
||||
passkey = raw_input("Enter passkey: ")
|
||||
return dbus.UInt32(passkey)
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="ou", out_signature="")
|
||||
def DisplayPasskey(self, device, passkey):
|
||||
print "DisplayPasskey (%s, %d)" % (device, passkey)
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="ou", out_signature="")
|
||||
def RequestConfirmation(self, device, passkey):
|
||||
print "RequestConfirmation (%s, %d)" % (device, passkey)
|
||||
confirm = raw_input("Confirm passkey (yes/no): ")
|
||||
if (confirm == "yes"):
|
||||
return
|
||||
raise Rejected("Passkey doesn't match")
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="s", out_signature="")
|
||||
def ConfirmModeChange(self, mode):
|
||||
print "ConfirmModeChange (%s)" % (mode)
|
||||
authorize = raw_input("Authorize mode change (yes/no): ")
|
||||
if (authorize == "yes"):
|
||||
return
|
||||
raise Rejected("Mode change by user")
|
||||
|
||||
@dbus.service.method("org.bluez.Agent",
|
||||
in_signature="", out_signature="")
|
||||
def Cancel(self):
|
||||
print "Cancel"
|
||||
|
||||
def create_device_reply(device):
|
||||
print "New device (%s)" % (device)
|
||||
mainloop.quit()
|
||||
|
||||
def create_device_error(error):
|
||||
print "Creating device failed: %s" % (error)
|
||||
mainloop.quit()
|
||||
|
||||
if __name__ == '__main__':
|
||||
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
||||
|
||||
bus = dbus.SystemBus()
|
||||
manager = dbus.Interface(bus.get_object("org.bluez", "/"),
|
||||
"org.bluez.Manager")
|
||||
|
||||
capability = "DisplayYesNo"
|
||||
|
||||
parser = OptionParser()
|
||||
parser.add_option("-c", "--capability", action="store",
|
||||
type="string", dest="capability")
|
||||
(options, args) = parser.parse_args()
|
||||
if options.capability:
|
||||
capability = options.capability
|
||||
|
||||
if len(args) > 0:
|
||||
path = manager.FindAdapter(args[0])
|
||||
else:
|
||||
path = manager.DefaultAdapter()
|
||||
|
||||
adapter = dbus.Interface(bus.get_object("org.bluez", path),
|
||||
"org.bluez.Adapter")
|
||||
|
||||
path = "/test/agent"
|
||||
agent = Agent(bus, path)
|
||||
|
||||
mainloop = gobject.MainLoop()
|
||||
|
||||
if len(args) > 1:
|
||||
if len(args) > 2:
|
||||
device = adapter.FindDevice(args[1])
|
||||
adapter.RemoveDevice(device)
|
||||
|
||||
agent.set_exit_on_release(False)
|
||||
adapter.CreatePairedDevice(args[1], path, capability,
|
||||
reply_handler=create_device_reply,
|
||||
error_handler=create_device_error)
|
||||
else:
|
||||
adapter.RegisterAgent(path, capability)
|
||||
print "Agent registered"
|
||||
|
||||
mainloop.run()
|
||||
|
||||
#adapter.UnregisterAgent(path)
|
||||
#print "Agent unregistered"
|
||||
|
|
@ -14,6 +14,6 @@ do_install() {
|
|||
install -m 0755 hdp-test.py ${D}${bindir}
|
||||
}
|
||||
|
||||
RDEPENDS_${PN} = "python"
|
||||
RDEPENDS_${PN} = "python python-argparse python-crypt python-dbus python-pygobject"
|
||||
|
||||
PACKAGE_ARCH = "${MACHINE_ARCH}"
|
||||
|
|
|
|||
Loading…
Reference in New Issue