#!/usr/bin/env python3 ## Xbox360 USB Gamepad Userspace Driver ## Copyright (C) 2011 Ingo Ruhnke ## ## 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 3 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, see . import dbus import sys import re from optparse import OptionParser, OptionGroup parser = OptionParser("Usage: %prog [OPTIONS]\n" "Remote control application for the xboxdrv daemon") group = OptionGroup(parser, "D-Bus Options") group.add_option("-b", "--bus", metavar="BUS", dest="bus", default="auto", help="connect to D-Bus bus BUS (auto, session, system)") parser.add_option_group(group) group = OptionGroup(parser, "Xboxdrv Options") group.add_option("-S", "--status", dest="status", action="store_true", help="print controller status") group.add_option("-s", "--slot", metavar="SLOT", type="int", dest="slot", help="use slot SLOT for actions") group.add_option("-l", "--led", metavar="NUM", type="int", dest="led", help="set LED") group.add_option("-r", "--rumble", metavar="L:R", dest="rumble", help="print controller status") group.add_option("-c", "--config", metavar="NUM", type="int", dest="config", help="switches to controller configuration NUM") group.add_option("--shutdown", action="store_true", dest="shutdown", help="shuts down the daemon") parser.add_option_group(group) (options, args) = parser.parse_args() if options.bus == "session": bus = dbus.SessionBus() elif options.bus == "system": bus = dbus.SystemBus() elif options.bus == "auto": bus = dbus.SessionBus() try: bus.get_object("org.seul.Xboxdrv", '/org/seul/Xboxdrv/Daemon') except dbus.exceptions.DBusException: bus = dbus.SystemBus() else: print("Error: invalid argument to --bus. Must be 'auto', 'session, or 'system'") exit() if options.status: daemon = bus.get_object("org.seul.Xboxdrv", '/org/seul/Xboxdrv/Daemon') sys.stdout.write(daemon.Status()) elif options.shutdown: daemon = bus.get_object("org.seul.Xboxdrv", '/org/seul/Xboxdrv/Daemon') daemon.Shutdown() else: if (options.led or options.rumble or options.config) and options.slot == None: print("Error: --slot argument required") exit() else: if options.slot != None: slot = bus.get_object("org.seul.Xboxdrv", '/org/seul/Xboxdrv/ControllerSlots/%d' % options.slot) if options.led != None: slot.SetLed(options.led) if options.rumble: m = re.match('^(\d+):(\d+)$', options.rumble) if not m: print("Error: invalid argument to --rumble") exit() else: left = int(m.group(1)) right = int(m.group(2)) slot.SetRumble(left, right) if options.config != None: slot.SetConfig(options.config) else: parser.print_help() # EOF #