Browse Source

The JoystickInput class now emits signals for both button press and button release events.

QGC4.4
Bryant 12 years ago
parent
commit
c532f41331
  1. 35
      src/input/JoystickInput.cc
  2. 11
      src/input/JoystickInput.h

35
src/input/JoystickInput.cc

@ -299,35 +299,29 @@ void JoystickInput::run() @@ -299,35 +299,29 @@ void JoystickInput::run()
// Send new values to rest of groundstation
emit hatDirectionChanged(xHat, yHat);
// Display all buttons
int buttons = 0;
for(int i = 0; i < SDL_JoystickNumButtons(joystick); i++)
// Emit signals for each button individually
for (int i = 0; i < SDL_JoystickNumButtons(joystick); i++)
{
//qDebug() << "BUTTON" << i << "is: " << SDL_JoystickGetAxis(joystick, i);
if(SDL_JoystickGetButton(joystick, i))
// If the button was down, but now it's up, trigger a buttonPressed event
quint16 lastButtonState = buttonState & (1 << i);
if (SDL_JoystickGetButton(joystick, i) && !lastButtonState)
{
emit buttonPressed(i);
buttons |= 1 << i;
// Check if button is a UAS select button
if (uasButtonList.contains(i))
{
UASInterface* uas = UASManager::instance()->getUASForId(i);
if (uas)
{
UASManager::instance()->setActiveUAS(uas);
}
}
buttonState |= 1 << i;
}
else if (!SDL_JoystickGetButton(joystick, i) && lastButtonState)
{
emit buttonReleased(i);
buttonState &= ~(1 << i);
}
}
emit joystickChanged(y, x, yaw, thrust, xHat, yHat, buttons);
// Now signal an update for all UI together.
emit joystickChanged(y, x, yaw, thrust, xHat, yHat, buttonState);
// Sleep, update rate of joystick is approx. 50 Hz (1000 ms / 50 = 20 ms)
QGC::SLEEP::msleep(20);
}
}
void JoystickInput::setActiveJoystick(int id)
@ -340,6 +334,7 @@ void JoystickInput::setActiveJoystick(int id) @@ -340,6 +334,7 @@ void JoystickInput::setActiveJoystick(int id)
joystickButtons = SDL_JoystickNumButtons(joystick);
qDebug() << QString("Switching to joystick '%1' with %2 buttons").arg(joystickName, QString::number(joystickButtons));
}
buttonState = 0;
}
const QString& JoystickInput::getName()

11
src/input/JoystickInput.h

@ -150,6 +150,7 @@ protected: @@ -150,6 +150,7 @@ protected:
int joystickButtons;
int joystickID;
int joysticksFound;
quint16 buttonState; ///< Track the state of the buttons so we can trigger on Up and Down events
void init();
@ -196,13 +197,19 @@ signals: @@ -196,13 +197,19 @@ signals:
void yawChanged(int yaw);
/**
* @brief Joystick button has been pressed
*
* @brief Joystick button has changed state from unpressed to pressed.
* @param key index of the pressed key
*/
void buttonPressed(int key);
/**
* @brief Joystick button has changed state from pressed to unpressed.
*
* @param key index of the released key
*/
void buttonReleased(int key);
/**
* @brief Hat (8-way switch on the top) has changed position
*
* Coordinate frame for joystick hat:

Loading…
Cancel
Save