Added return value to read() call

This commit is contained in:
Ingo Ruhnke 2008-05-01 12:03:40 +02:00
parent 62c5b6cf9f
commit 71e9349aab
8 changed files with 31 additions and 20 deletions

View file

@ -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 */

View file

@ -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&);

View file

@ -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 */

View file

@ -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&);

View file

@ -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 */

View file

@ -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&);

View file

@ -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&);

View file

@ -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);
}
}
}
}