Added --version and --verbose command line options

This commit is contained in:
Ingo Ruhnke 2008-06-12 16:42:19 +02:00
parent 8dfe076ca4
commit 75d18348b5
11 changed files with 60 additions and 17 deletions

1
.gitignore vendored
View file

@ -1,6 +1,5 @@
*~
*.o
.gitignore
xboxdrv
.sconsign.dblite
usb.txt

8
NEWS
View file

@ -1,3 +1,11 @@
xboxdrv 0.2.1 - (??/Jun/2008)
=============================
* added short note when USB device is busy
* added note to README about running it via sudo
* added some missing header files
xboxdrv 0.2 - (03/May/2008)
===========================

5
TODO
View file

@ -1,3 +1,8 @@
More general button map support:
% ./xboxdrv --buttonmap B=BTN_A,X=BTN_A,Y=KEY_B
So pressing B sends out BTN_A uinput event
Daemon Mode:
SYSFS{idVendor}=="045e", SYSFS{idProduct}=="028e", RUN+="/home/ingo/projects/xboxdrv/trunk/xboxdrv --daemon"

View file

@ -69,7 +69,7 @@ Xbox360Controller::set_led(uint8_t status)
}
bool
Xbox360Controller::read(XboxGenericMsg& msg)
Xbox360Controller::read(XboxGenericMsg& msg, bool verbose)
{
uint8_t data[32];
int ret = usb_interrupt_read(handle, 1 /*EndPoint*/, (char*)data, sizeof(data), 0 /*Timeout*/);
@ -82,20 +82,30 @@ Xbox360Controller::read(XboxGenericMsg& msg)
}
else if (ret == 0)
{
// happens with the Xbox360 controller every now and then, just
// ignore, seems harmless, so just ignore
if (verbose)
{
std::cout << "zero length read" << std::endl;
// happens with the Xbox360 controller every now and then, just
// ignore, seems harmless, so just ignore
}
}
else if (ret == 3 && data[0] == 0x01 && data[1] == 0x03)
{
// std::cout << "Xbox360Controller: LED Status: " << int(data[2]) << std::endl;
if (verbose)
{
std::cout << "Xbox360Controller: LED Status: " << int(data[2]) << std::endl;
}
}
else if (ret == 3 && data[0] == 0x03 && data[1] == 0x03)
{
// data[2] == 0x00 means that rumble is disabled
// data[2] == 0x01 unknown, but rumble works
// data[2] == 0x02 unknown, but rumble works
// data[2] == 0x03 is default with rumble enabled
// std::cout << "Xbox360Controller: Rumble Status: " << int(data[2]) << std::endl;
if (verbose)
{
// data[2] == 0x00 means that rumble is disabled
// data[2] == 0x01 unknown, but rumble works
// data[2] == 0x02 unknown, but rumble works
// data[2] == 0x03 is default with rumble enabled
std::cout << "Xbox360Controller: Rumble Status: " << int(data[2]) << std::endl;
}
}
else if (ret == 20 && data[0] == 0x00 && data[1] == 0x14)
{

View file

@ -40,7 +40,7 @@ public:
void set_rumble(uint8_t left, uint8_t right);
void set_led(uint8_t status);
void send_raw(char* buffer, int len);
bool read(XboxGenericMsg& msg);
bool read(XboxGenericMsg& msg, bool verbose);
private:
Xbox360Controller (const Xbox360Controller&);

View file

@ -76,7 +76,7 @@ Xbox360WirelessController::set_led(uint8_t status)
}
bool
Xbox360WirelessController::read(XboxGenericMsg& msg)
Xbox360WirelessController::read(XboxGenericMsg& msg, bool verbose)
{
uint8_t data[32];
int ret = usb_interrupt_read(handle, endpoint, (char*)data, sizeof(data), 0 /*Timeout*/);

View file

@ -41,7 +41,7 @@ public:
void set_rumble(uint8_t left, uint8_t right);
void set_led(uint8_t status);
bool read(XboxGenericMsg& msg);
bool read(XboxGenericMsg& msg, bool verbose);
uint8_t get_battery_status() const;
private:
Xbox360WirelessController (const Xbox360WirelessController&);

View file

@ -58,7 +58,7 @@ XboxController::set_led(uint8_t status)
}
bool
XboxController::read(XboxGenericMsg& msg)
XboxController::read(XboxGenericMsg& msg, bool verbose)
{
// FIXME: Add tracking for duplicate data packages (send by logitech controller)
uint8_t data[32];

View file

@ -37,7 +37,7 @@ public:
void set_rumble(uint8_t left, uint8_t right);
void set_led(uint8_t status);
bool read(XboxGenericMsg& msg);
bool read(XboxGenericMsg& msg, bool verbose);
private:
XboxController (const XboxController&);

View file

@ -30,7 +30,7 @@ public:
virtual void set_rumble(uint8_t left, uint8_t right) =0;
virtual void set_led(uint8_t status) =0;
virtual void send_raw(char* buffer, int len) {}
virtual bool read(XboxGenericMsg& msg) =0;
virtual bool read(XboxGenericMsg& msg, bool verbose) =0;
private:
XboxGenericController (const XboxGenericController&);

View file

@ -400,6 +400,7 @@ bool find_xbox360_controller(int id, struct usb_device** xbox_device, XPadDevice
struct CommandLineOptions
{
bool daemon;
bool verbose;
bool silent;
bool rumble;
int led;
@ -419,6 +420,7 @@ struct CommandLineOptions
CommandLineOptions() {
daemon = false;
verbose = false;
silent = false;
rumble = false;
led = -1;
@ -442,6 +444,8 @@ void print_command_line_help(int argc, char** argv)
std::cout << std::endl;
std::cout << "General Options: " << std::endl;
std::cout << " -h, --help display this help and exit" << std::endl;
std::cout << " -V, --version print the version number and exit" << std::endl;
std::cout << " -v, --verbose print verbose messages" << std::endl;
std::cout << " --help-led list possible values for the led" << std::endl;
std::cout << " --help-devices list supported devices" << std::endl;
std::cout << " -s, --silent do not display events on console" << std::endl;
@ -507,6 +511,23 @@ void parse_command_line(int argc, char** argv, CommandLineOptions& opts)
print_command_line_help(argc, argv);
exit(EXIT_SUCCESS);
}
else if (strcmp(argv[i], "-v") == 0 ||
strcmp(argv[i], "--verbose") == 0)
{
opts.verbose = true;
}
else if (strcmp(argv[i], "-V") == 0 ||
strcmp(argv[i], "--version") == 0)
{
std::cout
<< "xboxdrv 0.3\n"
<< "Copyright (C) 2008 Ingo Ruhnke <grumbel@gmx.de>\n"
<< "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
<< "This is free software: you are free to change and redistribute it.\n"
<< "There is NO WARRANTY, to the extent permitted by law."
<< std::endl;
exit(EXIT_SUCCESS);
}
else if (strcmp(argv[i], "-s") == 0 ||
strcmp(argv[i], "--silent") == 0)
{
@ -885,7 +906,7 @@ void controller_loop(uInput* uinput, XboxGenericController* controller, CommandL
{
XboxGenericMsg msg;
if (controller->read(msg))
if (controller->read(msg, opts.verbose))
{
apply_deadzone(msg, opts.deadzone);