diff --git a/xbox360_controller.cpp b/xbox360_controller.cpp index f6fa5bf..a958c73 100644 --- a/xbox360_controller.cpp +++ b/xbox360_controller.cpp @@ -60,7 +60,7 @@ Xbox360Controller::set_led(uint8_t status) usb_interrupt_write(handle, 2, ledcmd, sizeof(ledcmd), 0); } -void +bool Xbox360Controller::read(XboxGenericMsg& msg) { uint8_t data[32]; @@ -81,6 +81,7 @@ Xbox360Controller::read(XboxGenericMsg& msg) { msg.type = GAMEPAD_XBOX360; msg.xbox360 = *reinterpret_cast<Xbox360Msg*>(data); + return true; } else { @@ -92,6 +93,8 @@ Xbox360Controller::read(XboxGenericMsg& msg) std::cout << std::endl; } + + return false; } /* EOF */ diff --git a/xbox360_controller.hpp b/xbox360_controller.hpp index 8962198..2052346 100644 --- a/xbox360_controller.hpp +++ b/xbox360_controller.hpp @@ -39,7 +39,7 @@ public: void set_rumble(uint8_t left, uint8_t right); void set_led(uint8_t status); - void read(XboxGenericMsg& msg); + bool read(XboxGenericMsg& msg); private: Xbox360Controller (const Xbox360Controller&); diff --git a/xbox360_wireless_controller.cpp b/xbox360_wireless_controller.cpp index 837e243..b83b22e 100644 --- a/xbox360_wireless_controller.cpp +++ b/xbox360_wireless_controller.cpp @@ -74,7 +74,7 @@ Xbox360WirelessController::set_led(uint8_t status) usb_interrupt_write(handle, endpoint, ledcmd, sizeof(ledcmd), 0); } -void +bool Xbox360WirelessController::read(XboxGenericMsg& msg) { uint8_t data[32]; @@ -122,6 +122,7 @@ Xbox360WirelessController::read(XboxGenericMsg& msg) { msg.type = GAMEPAD_XBOX360_WIRELESS; msg.xbox360 = *reinterpret_cast<Xbox360Msg*>(&data[6]); + return true; } else if (data[0] == 0x00 && data[1] == 0x00 && data[2] == 0x00 && data[3] == 0x13) { // Battery status @@ -136,6 +137,8 @@ Xbox360WirelessController::read(XboxGenericMsg& msg) { // unknown/junk } + + return false; } /* EOF */ diff --git a/xbox360_wireless_controller.hpp b/xbox360_wireless_controller.hpp index 5ca4666..6a6f4f4 100644 --- a/xbox360_wireless_controller.hpp +++ b/xbox360_wireless_controller.hpp @@ -43,7 +43,7 @@ public: void set_rumble(uint8_t left, uint8_t right); void set_led(uint8_t status); - void read(XboxGenericMsg& msg); + bool read(XboxGenericMsg& msg); uint8_t get_battery_status() const; private: Xbox360WirelessController (const Xbox360WirelessController&); diff --git a/xbox_controller.cpp b/xbox_controller.cpp index d55674e..609cddb 100644 --- a/xbox_controller.cpp +++ b/xbox_controller.cpp @@ -57,7 +57,7 @@ XboxController::set_led(uint8_t status) // Controller doesn't have a LED } -void +bool XboxController::read(XboxGenericMsg& msg) { // FIXME: Add tracking for duplicate data packages (send by logitech controller) @@ -74,7 +74,9 @@ XboxController::read(XboxGenericMsg& msg) { msg.type = GAMEPAD_XBOX; msg.xbox = *reinterpret_cast<XboxMsg*>(data); + return true; } + return false; } /* EOF */ diff --git a/xbox_controller.hpp b/xbox_controller.hpp index f68da1d..0a008f1 100644 --- a/xbox_controller.hpp +++ b/xbox_controller.hpp @@ -39,7 +39,7 @@ public: void set_rumble(uint8_t left, uint8_t right); void set_led(uint8_t status); - void read(XboxGenericMsg& msg); + bool read(XboxGenericMsg& msg); private: XboxController (const XboxController&); diff --git a/xbox_generic_controller.hpp b/xbox_generic_controller.hpp index 6b95e27..75e6510 100644 --- a/xbox_generic_controller.hpp +++ b/xbox_generic_controller.hpp @@ -29,7 +29,7 @@ public: virtual void set_rumble(uint8_t left, uint8_t right) =0; virtual void set_led(uint8_t status) =0; - virtual void read(XboxGenericMsg& msg) =0; + virtual bool read(XboxGenericMsg& msg) =0; private: XboxGenericController (const XboxGenericController&); diff --git a/xboxdrv.cpp b/xboxdrv.cpp index 9721400..50bce38 100644 --- a/xboxdrv.cpp +++ b/xboxdrv.cpp @@ -601,21 +601,24 @@ void controller_loop(XboxGenericController* controller, CommandLineOptions& opts while(!quit) { XboxGenericMsg msg; - controller->read(msg); - if (opts.verbose) - std::cout << msg << std::endl; - if (uinput) uinput->send(msg); - - if (opts.rumble) + + if (controller->read(msg)) { - if (opts.gamepad_type == GAMEPAD_XBOX) + if (opts.verbose) + std::cout << msg << std::endl; + if (uinput) uinput->send(msg); + + if (opts.rumble) { - controller->set_rumble(msg.xbox.lt, msg.xbox.rt); - } - else if (opts.gamepad_type == GAMEPAD_XBOX360 || - opts.gamepad_type == GAMEPAD_XBOX360_WIRELESS) - { - controller->set_rumble(msg.xbox360.lt, msg.xbox360.rt); + if (opts.gamepad_type == GAMEPAD_XBOX) + { + controller->set_rumble(msg.xbox.lt, msg.xbox.rt); + } + else if (opts.gamepad_type == GAMEPAD_XBOX360 || + opts.gamepad_type == GAMEPAD_XBOX360_WIRELESS) + { + controller->set_rumble(msg.xbox360.lt, msg.xbox360.rt); + } } } }