JoystickInput.h 3.72 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 <SDL/SDL.h>
pixhawk's avatar
pixhawk committed
39
40
41
42
43
44
45
46
47
48
49
50
51
52

#include "UASInterface.h"

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

public:
    JoystickInput();
    void run();

53
54
    const QString& getName();

pixhawk's avatar
pixhawk committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
    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;

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

    void init();

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

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

98
99
100
101
102
    /**
      * @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
103
104
    void xChanged(int x);

105
106
107
108
109
    /**
      * @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
110
111
    void yChanged(int y);

112
113
114
115
116
    /**
      * @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
117
118
    void yawChanged(int yaw);

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

126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
    /**
      * @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
141
142
    void hatDirectionChanged(int x, int y);

143
public slots:
pixhawk's avatar
pixhawk committed
144
145
146
147
    void setActiveUAS(UASInterface* uas);
};

#endif // _JOYSTICKINPUT_H_