📄 apitest
字号:
#!/usr/bin/env pythonimport dbusimport dbus.decoratorsimport dbus.glibimport gobjectimport sysimport getoptfrom signal import *mgr_cmds = [ "InterfaceVersion", "ListAdapters", "DefaultAdapter" ]mgr_signals = [ "AdapterAdded", "AdapterRemoved" ]dev_cmds = [ "GetAddress", "GetVersion", "GetRevision", "GetManufacturer", "GetCompany", "GetMode", "SetMode", "GetDiscoverableTimeout", "SetDiscoverableTimeout", "IsConnectable", "IsDiscoverable", "IsConnected", "ListConnections", "GetMajorClass", "ListAvailableMinorClasses", "GetMinorClass", "SetMinorClass", "GetServiceClasses", "GetName", "SetName", "GetRemoteVersion", "GetRemoteRevision", "GetRemoteManufacturer", "GetRemoteCompany", "GetRemoteMajorClass", "GetRemoteMinorClass", "GetRemoteServiceClasses", "GetRemoteClass", "GetRemoteName", "GetRemoteAlias", "SetRemoteAlias", "ClearRemoteAlias", "LastSeen", "LastUsed", "DisconnectRemoteDevice", "CreateBonding", "CancelBondingProcess", "RemoveBonding", "HasBonding", "ListBondings", "GetPinCodeLength", "GetEncryptionKeySize", "DiscoverDevices", "DiscoverDevicesWithoutNameResolving", "CancelDiscovery", "ListRemoteDevices", "ListRecentRemoteDevices" ]dev_signals = [ "ModeChanged", "NameChanged", "MinorClassChanged", "DiscoveryStarted", "DiscoveryCompleted", "RemoteDeviceFound", "RemoteNameUpdated", "RemoteNameFailed", "RemoteAliasChanged" "RemoteAliasCleared", "RemoteDeviceConnected", "RemoteDeviceDisconnectRequested", "RemoteDeviceDisconnected", "BondingCreated", "BondingRemoved" ]dev_signals_filter = [ "/org/bluez/hci0", "/org/bluez/hci1", "/org/bluez/hci2", "/org/bluez/hci3", "/org/bluez/hci4", "/org/bluez/hci5", "/org/bluez/hci6", "/org/bluez/hci7" ]class Tester: exit_events = [] dev_path = None need_dev = False listen = False at_interrupt = None def __init__(self, argv): self.name = argv[0] self.parse_args(argv[1:]) try: self.dbus_setup() except dbus.DBusException, e: print 'Failed to do D-Bus setup: %s' % e sys.exit(1) def parse_args(self, argv): try: opts, args = getopt.getopt(argv, "hli:") except getopt.GetoptError: self.usage() sys.exit(1) for o, a in opts: if o == "-h": self.usage() sys.exit() elif o == "-l": self.listen = True elif o == "-i": if a[0] == '/': self.dev_path = a else: self.dev_path = '/org/bluez/%s' % a if not (args or self.listen): self.usage() sys.exit(1) if args: self.cmd = args[0] self.cmd_args = args[1:] def dbus_dev_setup(self): if not self.dev_path: try: self.dbus_mgr_setup() self.dev_path = self.manager.DefaultAdapter() except dbus.DBusException, e: print 'Failed to get default device: %s' % e sys.exit(1) try: obj = self.bus.get_object('org.bluez', self.dev_path) self.device = dbus.Interface(obj, 'org.bluez.Adapter') except dbus.DBusException, e: print 'Failed to setup device path: %s' % e sys.exit(1) def dbus_dev_sig_setup(self): try: for signal in dev_signals: for path in dev_signals_filter: self.bus.add_signal_receiver(self.dev_signal_handler, signal, 'org.bluez.Adapter', 'org.bluez', path, message_keyword='dbus_message') except dbus.DBusException, e: print 'Failed to setup signal handler for device path: %s' % e sys.exit(1) def dbus_mgr_sig_setup(self): try: for signal in mgr_signals: self.bus.add_signal_receiver(self.mgr_signal_handler, signal,'org.bluez.Manager', 'org.bluez', '/org/bluez') except dbus.DBusException, e: print 'Failed to setup signal handler for manager path: %s' % e sys.exit(1) def dbus_mgr_setup(self): self.manager_obj = self.bus.get_object('org.bluez', '/org/bluez') self.manager = dbus.Interface(self.manager_obj, 'org.bluez.Manager') def dbus_setup(self): self.bus = dbus.SystemBus() def usage(self): print 'Usage: %s [-i <dev>] [-l] [-h] <cmd> [arg1..]' % self.name print ' -i <dev> Specify device (e.g. "hci0" or "/org/bluez/hci0")' print ' -l Listen for events (no command required)' print ' -h Show this help' print 'Manager commands:' for cmd in mgr_cmds: print '\t%s' % cmd print 'Adapter commands:' for cmd in dev_cmds: print '\t%s' % cmd #@dbus.decorators.explicitly_pass_message def dev_signal_handler(*args, **keywords): dbus_message = keywords["dbus_message"] print '%s - %s: ' % (dbus_message.get_member(), dbus_message.get_path()), for arg in args[1:]: print '%s ' % arg, print #@dbus.decorators.explicitly_pass_message def mgr_signal_handler(*args, **keywords): dbus_message = keywords["dbus_message"] print '%s: ' % dbus_message.get_member() for arg in args[1:]: print '%s ' % arg, print def signal_cb(self, sig, frame): print 'Caught signal, exiting' if self.at_interrupt: self.at_interrupt() self.main_loop.quit() def call_mgr_dbus_func(self): if self.cmd == 'InterfaceVersion': try: print self.manager.InterfaceVersion() except dbus.DBusException, e: print 'Sending %s failed: %s' % (self.cmd, e) if self.cmd == 'ListAdapters': try: devices = self.manager.ListAdapters() except dbus.DBusException, e: print 'Sending %s failed: %s' % (self.cmd, e) sys.exit(1) for device in devices: print device elif self.cmd == 'DefaultAdapter': try: print self.manager.DefaultAdapter() except dbus.DBusException, e: print 'Sending %s failed: %s' % (self.cmd, e) sys.exit(1)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -