From fef92ebf6d7810caf841a71d1783dc5b4c055e75 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Thu, 28 Sep 2006 15:19:52 +0000 Subject: Add source file for test interface --- hcid/Makefile.am | 4 +- hcid/dbus-test | 432 ------------------------------------------------------- hcid/dbus-test.c | 29 ++++ 3 files changed, 30 insertions(+), 435 deletions(-) delete mode 100755 hcid/dbus-test create mode 100644 hcid/dbus-test.c diff --git a/hcid/Makefile.am b/hcid/Makefile.am index 3c3c52b1..0aa78cbb 100644 --- a/hcid/Makefile.am +++ b/hcid/Makefile.am @@ -17,15 +17,13 @@ sbin_PROGRAMS = hcid noinst_PROGRAMS = passkey-agent -noinst_SCRIPTS = dbus-test - hcid_SOURCES = main.c security.c device.c logging.c storage.c \ sdp.c sdp.h hcid.h parser.h parser.y \ lexer.l kword.c kword.h \ dbus.h dbus.c dbus-common.c \ dbus-error.c dbus-manager.c dbus-adapter.c \ dbus-device.c dbus-service.c dbus-security.c \ - dbus-sdp.c dbus-rfcomm.c + dbus-test.c dbus-sdp.c dbus-rfcomm.c hcid_LDADD = @DBUS_LIBS@ @BLUEZ_LIBS@ $(top_builddir)/common/libhelper.a diff --git a/hcid/dbus-test b/hcid/dbus-test deleted file mode 100755 index 83988896..00000000 --- a/hcid/dbus-test +++ /dev/null @@ -1,432 +0,0 @@ -#!/usr/bin/env python - -import dbus -import dbus.decorators -import dbus.glib -import gobject -import sys -import getopt -from 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" ] -dev_signals = [ "ModeChanged", - "NameChanged", - "MinorClassChanged", - "DiscoveryStarted", - "DiscoveryCompleted", - "RemoteDeviceFound", - "RemoteNameUpdated", - "RemoteNameFailed", - "RemoteAliasChanged" - "RemoteAliasCleared", - "RemoteDeviceConnected", - "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) - 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 ] [-l] [-h] [arg1..]' % self.name - print ' -i 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) - - def call_dev_dbus_func(self): - try: - if self.cmd == 'GetAddress': - print self.device.GetAddress() - elif self.cmd == 'GetManufacturer': - print self.device.GetManufacturer() - elif self.cmd == 'GetVersion': - print self.device.GetVersion() - elif self.cmd == 'GetRevision': - print self.device.GetRevision() - elif self.cmd == 'GetCompany': - print self.device.GetCompany() - elif self.cmd == 'GetMode': - print self.device.GetMode() - elif self.cmd == 'SetMode': - if len(self.cmd_args) == 1: - self.device.SetMode(self.cmd_args[0]) - else: - print 'Usage: %s -i SetMode scan_mode' % self.name - elif self.cmd == 'GetDiscoverableTimeout': - print '%u' % (self.device.GetDiscoverableTimeout()) - elif self.cmd == 'SetDiscoverableTimeout': - if len(self.cmd_args) == 1: - self.device.SetDiscoverableTimeout(dbus.UInt32(self.cmd_args[0])) - else: - print 'Usage: %s -i SetDiscoverableTimeout timeout' % self.name - elif self.cmd == 'IsConnectable': - print self.device.IsConnectable() - elif self.cmd == 'IsDiscoverable': - print self.device.IsDiscoverable() - elif self.cmd == 'IsConnected': - if len(self.cmd_args) == 1: - print self.device.IsConnected(self.cmd_args[0]) - else: - print 'Usage: %s -i IsConnected address' % self.name - elif self.cmd == 'ListConnections': - print self.device.ListConnections() - elif self.cmd == 'GetMajorClass': - print self.device.GetMajorClass() - elif self.cmd == 'ListAvailableMinorClasses': - print self.device.ListAvailableMinorClasses() - elif self.cmd == 'GetMinorClass': - print self.device.GetMinorClass() - elif self.cmd == 'SetMinorClass': - if len(self.cmd_args) == 1: - self.device.SetMinorClass(self.cmd_args[0]) - else: - print 'Usage: %s -i SetMinorClass minor' % self.name - elif self.cmd == 'GetServiceClasses': - classes = self.device.GetServiceClasses() - for clas in classes: - print clas, - elif self.cmd == 'GetName': - print self.device.GetName() - elif self.cmd == 'SetName': - if len(self.cmd_args) == 1: - self.device.SetName(self.cmd_args[0]) - else: - print 'Usage: %s -i SetName newname' % self.name - elif self.cmd == 'GetRemoteName': - if len(self.cmd_args) == 1: - print self.device.GetRemoteName(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteName address' % self.name - elif self.cmd == 'GetRemoteVersion': - if len(self.cmd_args) == 1: - print self.device.GetRemoteVersion(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteVersion address' % self.name - elif self.cmd == 'GetRemoteRevision': - if len(self.cmd_args) == 1: - print self.device.GetRemoteRevision(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteRevision address' % self.name - elif self.cmd == 'GetRemoteManufacturer': - if len(self.cmd_args) == 1: - print self.device.GetRemoteManufacturer(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteManufacturer address' % self.name - elif self.cmd == 'GetRemoteCompany': - if len(self.cmd_args) == 1: - print self.device.GetRemoteCompany(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteCompany address' % self.name - elif self.cmd == 'GetRemoteAlias': - if len(self.cmd_args) == 1: - print self.device.GetRemoteAlias(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteAlias address' % self.name - elif self.cmd == 'GetRemoteMajorClass': - if len(self.cmd_args) == 1: - print self.device.GetRemoteMajorClass(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteMajorClass address' % self.name - elif self.cmd == 'GetRemoteMinorClass': - if len(self.cmd_args) == 1: - print self.device.GetRemoteMinorClass(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteMinorClass address' % self.name - elif self.cmd == 'GetRemoteServiceClasses': - if len(self.cmd_args) == 1: - print self.device.GetRemoteServiceClasses(self.cmd_args[0]) - else: - print 'Usage: %s -i GetRemoteServiceClasses address' % self.name - elif self.cmd == 'SetRemoteAlias': - if len(self.cmd_args) == 2: - self.device.SetRemoteAlias(self.cmd_args[0], self.cmd_args[1]) - else: - print 'Usage: %s -i SetRemoteAlias address alias' % self.name - elif self.cmd == 'ClearRemoteAlias': - if len(self.cmd_args) == 1: - print self.device.ClearRemoteAlias(self.cmd_args[0]) - else: - print 'Usage: %s -i ClearRemoteAlias address' % self.name - elif self.cmd == 'LastSeen': - if len(self.cmd_args) == 1: - print self.device.LastSeen(self.cmd_args[0]) - else: - print 'Usage: %s -i LastSeen address' % self.name - elif self.cmd == 'LastUsed': - if len(self.cmd_args) == 1: - print self.device.LastUsed(self.cmd_args[0]) - else: - print 'Usage: %s -i LastUsed address' % self.name - elif self.cmd == 'DisconnectRemoteDevice': - if len(self.cmd_args) == 1: - print self.device.LastUsed(self.cmd_args[0]) - else: - print 'Usage: %s -i DisconnectRemoteDevice address' % self.name - elif self.cmd == 'CreateBonding': - if len(self.cmd_args) == 1: - print self.device.CreateBonding(self.cmd_args[0]) - else: - print 'Usage: %s -i CreateBonding address' % self.name - elif self.cmd == 'RemoveBonding': - if len(self.cmd_args) == 1: - print self.device.RemoveBonding(self.cmd_args[0]) - else: - print 'Usage: %s -i RemoveBonding address' % self.name - elif self.cmd == 'CancelBondingProcess': - if len(self.cmd_args) == 1: - print self.device.CancelBondingProcess(self.cmd_args[0]) - else: - print 'Usage: %s -i CancelBondingProcess address' % self.name - elif self.cmd == 'HasBonding': - if len(self.cmd_args) == 1: - print self.device.HasBonding(self.cmd_args[0]) - else: - print 'Usage: %s -i HasBonding address' % self.name - elif self.cmd == 'ListBondings': - bondings = self.device.ListBondings() - for bond in bondings: - print bond, - elif self.cmd == 'GetPinCodeLength': - if len(self.cmd_args) == 1: - print self.device.GetPinCodeLength(self.cmd_args[0]) - else: - print 'Usage: %s -i GetPinCodeLength address' % self.name - elif self.cmd == 'GetEncryptionKeySize': - if len(self.cmd_args) == 1: - print self.device.GetEncryptionKeySize(self.cmd_args[0]) - else: - print 'Usage: %s -i GetEncryptionKeySize address' % self.name - elif self.cmd == 'DiscoverDevices': - print self.device.DiscoverDevices() - elif self.cmd == 'DiscoverDevicesWithoutNameResolving': - print self.device.DiscoverDevicesWithoutNameResolving() - else: - # FIXME: remove at future version - print 'Script Error: Method %s not found. Maybe a mispelled word.' % (self.cmd_args) - except dbus.DBusException, e: - print '%s failed: %s' % (self.cmd, e) - sys.exit(1) - - def run(self): - # Manager methods - if self.listen: - self.dbus_mgr_sig_setup() - self.dbus_dev_sig_setup() - print 'Listening for events...' - elif self.cmd in mgr_cmds: - try: - self.dbus_mgr_setup() - except dbus.DBusException, e: - print 'Failed to setup manager interface: %s' % e - sys.exit(1) - self.call_mgr_dbus_func() - elif self.cmd in dev_cmds: - try: - self.dbus_dev_setup() - except dbus.DBusException, e: - print 'Failed to setup device interface: %s' % e - sys.exit(1) - self.call_dev_dbus_func() - else: - print 'Unknown command: %s' % self.cmd - self.usage() - sys.exit(1) - - if self.listen: - signal(SIGINT, self.signal_cb) - signal(SIGTERM, self.signal_cb) - self.main_loop = gobject.MainLoop() - self.main_loop.run() - -if __name__ == '__main__': - gobject.threads_init() - dbus.glib.init_threads() - - tester = Tester(sys.argv) - tester.run() diff --git a/hcid/dbus-test.c b/hcid/dbus-test.c new file mode 100644 index 00000000..f3bf47c4 --- /dev/null +++ b/hcid/dbus-test.c @@ -0,0 +1,29 @@ +/* + * + * BlueZ - Bluetooth protocol stack for Linux + * + * Copyright (C) 2004-2006 Marcel Holtmann + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include -- cgit