SlugsHilSim.h 3.97 KB
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
/*=====================================================================

QGroundControl Open Source Ground Control Station

(c) 2009, 2010 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>

This file is part of the QGROUNDCONTROL project

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

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

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

/**
 * @file
 *   @brief Definition of the configuration Window for Slugs' HIL Simulator
 *   @author Mariano Lizarraga <malife@gmail.com>
 */

30
31
32
#ifndef SLUGSHILSIM_H
#define SLUGSHILSIM_H

33
34
#include <stdint.h>

35
#include <QWidget>
36
37
#include <QHostAddress>
#include <QUdpSocket>
38
#include <QMessageBox>
39
40
#include <QByteArray>

41

Mariano Lizarraga's avatar
Mariano Lizarraga committed
42
#include "LinkInterface.h"
43
#include "UAS.h"
44
45
#include "LinkManager.h"
#include "SlugsMAV.h"
Mariano Lizarraga's avatar
Mariano Lizarraga committed
46

47

48
49
50
namespace Ui
{
class SlugsHilSim;
51
52
53
54
55
56
57
58
59
60
}

class SlugsHilSim : public QWidget
{
    Q_OBJECT

public:
    explicit SlugsHilSim(QWidget *parent = 0);
    ~SlugsHilSim();

Alejandro's avatar
Alejandro committed
61
62


Mariano Lizarraga's avatar
Mariano Lizarraga committed
63
64
protected:
    LinkInterface* hilLink;
65
66
67
    QHostAddress* simulinkIp;
    QUdpSocket* txSocket;
    QUdpSocket* rxSocket;
68
69
    UAS* activeUas;

Alejandro's avatar
Alejandro committed
70
71
72
    mavlink_local_position_t tmpLocalPositionData;
    mavlink_attitude_t tmpAttitudeData;
    mavlink_raw_imu_t tmpRawImuData;
73
#ifdef MAVLINK_ENABLED_SLUGS
Alejandro's avatar
Alejandro committed
74
    mavlink_air_data_t tmpAirData;
75
#endif
Alejandro's avatar
Alejandro committed
76
    mavlink_gps_raw_t tmpGpsData;
77
#ifdef MAVLINK_ENABLED_SLUGS
Alejandro's avatar
Alejandro committed
78
    mavlink_gps_date_time_t tmpGpsTime;
79
#endif
Alejandro's avatar
Alejandro committed
80

81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
public slots:

    /**
     * @brief Adds a link to the combo box listing so the user can select a link
     *
     * Populates the Combo box that allows the user to select the link with which Slugs will
     * receive the simulated sensor data from Simulink
     *
     * @param theLink the link that is being added to the combo box
     */
    void addToCombo(LinkInterface* theLink);

    /**
     * @brief Puts Slugs in HIL Mode
     *
     * Sends the required messages through the main communication link to set Slugs in HIL Mode
     *
     */
    void putInHilMode(void);

    /**
     * @brief Receives a datagram from Simulink containing the sensor data.
     *
     * Receives a datagram from Simulink containing the simulated sensor data. This data is then
     * forwarded to Slugs to use as input to the attitude estimation and navigation algorithms.
     *
     */
    void readDatagram(void);

    /**
     * @brief Called when the a new UAS is set to active.
     *
     * Called when the a new UAS is set to active.
     *
     * @param uas The new active UAS
     */
    void activeUasSet(UASInterface* uas);
118

119
120
121
122
123
124
    /**
     * @brief Called when the Link combobox selects a new link.
     *
     * @param uas The new index of the selected link
     */
    void linkSelected (int cbIndex);
Mariano Lizarraga's avatar
Mariano Lizarraga committed
125

126
127
public slots:

128

Mariano Lizarraga's avatar
Mariano Lizarraga committed
129

130
private:
131

132
133
134
135
    typedef union _tFloatToChar {
        unsigned char   chData[4];
        float   		flData;
    } tFloatToChar;
136

137
138
139
140
    typedef union _tUint16ToChar {
        unsigned char   chData[2];
        uint16_t   		uiData;
    } tUint16ToChar;
141

142
    Ui::SlugsHilSim *ui;
Alejandro's avatar
Alejandro committed
143

144
145
    QHash <int, LinkInterface*> linksAvailable;

146
147
148
    void processHilDatagram (const QByteArray* datagram);
    float getFloatFromDatagram (const QByteArray* datagram, unsigned char * i);
    uint16_t getUint16FromDatagram (const QByteArray* datagram, unsigned char * i);
Alejandro's avatar
Alejandro committed
149
150
151
152
153
    void setUInt16ToDatagram(QByteArray& datagram, unsigned char* pos, uint16_t value);


    void sendMessageToSlugs();

Alejandro's avatar
Alejandro committed
154
    void commandDatagramToSimulink();
155

156
157
};

158
#endif // SLUGSHILSIM_H