Newer
Older
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>
oberion
committed
#include <qmutex.h>
#include <SDL/SDL.h>
#include "UASInterface.h"
/**
* @brief Joystick input
*/
class JoystickInput : public QThread
{
Q_OBJECT
public:
JoystickInput();
oberion
committed
~JoystickInput();
const QString& getName();
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;
oberion
committed
QMutex m_doneMutex;
// Axis 3 is thrust (CALIBRATION!)
int thrustAxis;
int xAxis;
int yAxis;
int yawAxis;
SDL_Event event;
/**
* @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);
/**
* @brief X-Axis / forward-backward axis has changed
*
* @param x forward / pitch / x axis, front: +1.0, center: 0.0, back: -1.0
*/
/**
* @brief Y-Axis / left-right axis has changed
*
* @param y left / roll / y axis, left: -1.0, middle: 0.0, right: +1.0
*/
/**
* @brief Yaw / left-right turn has changed
*
* @param yaw turn axis, left-turn: -1.0, middle: 0.0, right-turn: +1.0
*/
/**
* @brief Joystick button has been pressed
*
* @param key index of the pressed key
*/
/**
* @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
*/