109 lines
3.7 KiB
Python
Executable file
109 lines
3.7 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
## Xbox360 USB Gamepad Userspace Driver
|
|
## Copyright (C) 2011 Ingo Ruhnke <grumbel@gmail.com>
|
|
##
|
|
## 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 <http://www.gnu.org/licenses/>.
|
|
|
|
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 #
|