JoystickInput.h 3.78 KB
Newer Older
pixhawk's avatar
pixhawk committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
/*=====================================================================

PIXHAWK Micro Air Vehicle Flying Robotics Toolkit

(c) 2009, 2010 PIXHAWK PROJECT  <http://pixhawk.ethz.ch>

This file is part of the PIXHAWK project

    PIXHAWK 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.

    PIXHAWK 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 PIXHAWK. If not, see <http://www.gnu.org/licenses/>.

======================================================================*/

/**
 * @file
 *   @brief Definition of joystick interface
 *
 *   @author Lorenz Meier <mavteam@student.ethz.ch>
 *   @author Andreas Romer <mavteam@student.ethz.ch>
 *
 */

#ifndef _JOYSTICKINPUT_H_
#define _JOYSTICKINPUT_H_

#include <QThread>
#include <QList>
38
#include <qmutex.h>
39
#include <SDL/SDL.h>
pixhawk's avatar
pixhawk committed
40 41 42 43 44 45 46 47 48 49 50 51

#include "UASInterface.h"

/**
 * @brief Joystick input
 */
class JoystickInput : public QThread
{
    Q_OBJECT

public:
    JoystickInput();
52
	~JoystickInput();
pixhawk's avatar
pixhawk committed
53 54
    void run();

55 56
    const QString& getName();

pixhawk's avatar
pixhawk committed
57 58 59 60 61 62 63 64 65 66 67
    const double sdlJoystickMin;
    const double sdlJoystickMax;

protected:
    int defaultIndex;
    double calibrationPositive[10];
    double calibrationNegative[10];
    SDL_Joystick* joystick;
    UASInterface* uas;
    QList<int> uasButtonList;
    bool done;
68
	QMutex m_doneMutex;
pixhawk's avatar
pixhawk committed
69 70 71 72 73 74 75

    // Axis 3 is thrust (CALIBRATION!)
    int thrustAxis;
    int xAxis;
    int yAxis;
    int yawAxis;
    SDL_Event event;
76
    QString joystickName;
pixhawk's avatar
pixhawk committed
77 78 79

    void init();

80
signals:
pixhawk's avatar
pixhawk committed
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

    /**
     * @brief Signal containing all joystick raw positions
     *
     * @param roll forward / pitch / x axis, front: 1, center: 0, back: -1
     * @param pitch left / roll / y axis, left: -1, middle: 0, right: 1
     * @param yaw turn axis, left-turn: -1, centered: 0, right-turn: 1
     * @param thrust Thrust, 0%: 0, 100%: 1
     * @param xHat hat vector in forward-backward direction, +1 forward, 0 center, -1 backward
     * @param yHat hat vector in left-right direction, -1 left, 0 center, +1 right
     */
    void joystickChanged(double roll, double pitch, double yaw, double thrust, int xHat, int yHat);

    /**
     * @brief Thrust lever of the joystick has changed
     *
     * @param thrust Thrust, 0%: 0, 100%: 1.0
     */
    void thrustChanged(int thrust);

101 102 103 104 105
    /**
      * @brief X-Axis / forward-backward axis has changed
      *
      * @param x forward / pitch / x axis, front: +1.0, center: 0.0, back: -1.0
      */
pixhawk's avatar
pixhawk committed
106 107
    void xChanged(int x);

108 109 110 111 112
    /**
      * @brief Y-Axis / left-right axis has changed
      *
      * @param y left / roll / y axis, left: -1.0, middle: 0.0, right: +1.0
      */
pixhawk's avatar
pixhawk committed
113 114
    void yChanged(int y);

115 116 117 118 119
    /**
      * @brief Yaw / left-right turn has changed
      *
      * @param yaw turn axis, left-turn: -1.0, middle: 0.0, right-turn: +1.0
      */
pixhawk's avatar
pixhawk committed
120 121
    void yawChanged(int yaw);

122 123 124 125 126
    /**
      * @brief Joystick button has been pressed
      *
      * @param key index of the pressed key
      */
pixhawk's avatar
pixhawk committed
127 128
    void buttonPressed(int key);

129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
    /**
      * @brief Hat (8-way switch on the top) has changed position
      *
      * Coordinate frame for joystick hat:
      *
      *    y
      *    ^
      *    |
      *    |
      *    0 ----> x
      *
      *
      * @param x vector in left-right direction
      * @param y vector in forward-backward direction
      */
pixhawk's avatar
pixhawk committed
144 145
    void hatDirectionChanged(int x, int y);

146
public slots:
pixhawk's avatar
pixhawk committed
147 148 149 150
    void setActiveUAS(UASInterface* uas);
};

#endif // _JOYSTICKINPUT_H_