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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
118
119
120
121
122
/*=====================================================================
QGroundControl Open Source Ground Control Station
(c) 2009 - 2011 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 Message Handler
* @author Gus Grubba <mavlink@grubba.com>
*/
#ifndef QGCMESSAGEHANDLER_H
#define QGCMESSAGEHANDLER_H
#include <QObject>
#include <QVector>
#include <QMutex>
#include "QGCSingleton.h"
class UASInterface;
class QGCMessageHandler;
/*!
* @class QGCUasMessage
* @brief Message element
*/
class QGCUasMessage
{
friend class QGCMessageHandler;
public:
/**
* @brief Get message source component ID
*/
int getComponentID() { return _compId; }
/**
* @brief Get message severity (from MAV_SEVERITY_XXX enum)
*/
int getSeverity() { return _severity; }
/**
* @brief Get message text (e.g. "[pm] sending list")
*/
QString getText() { return _text; }
/**
* @brief Get (html) formatted text (in the form: "[11:44:21.137 - COMP:50] Info: [pm] sending list")
*/
QString getFormatedText() { return _formatedText; }
private:
QGCUasMessage(int componentid, int severity, QString text);
void _setFormatedText(const QString formatedText) { _formatedText = formatedText; }
int _compId;
int _severity;
QString _text;
QString _formatedText;
};
class QGCMessageHandler : public QGCSingleton
{
Q_OBJECT
DECLARE_QGC_SINGLETON(QGCMessageHandler, QGCMessageHandler)
public:
explicit QGCMessageHandler(QObject *parent = 0);
~QGCMessageHandler();
/**
* @brief Locks access to the message list
*/
void lockAccess() {_mutex.lock(); }
/**
* @brief Unlocks access to the message list
*/
void unlockAccess() {_mutex.unlock(); }
/**
* @brief Access to the message list
*/
const QVector<QGCUasMessage*>& messages() { return _messages; }
public slots:
/**
* @brief Set currently active UAS
* @param uas The current active UAS
*/
void setActiveUAS(UASInterface* uas);
/**
* @brief Handle text message from current active UAS
* @param uasid UAS Id
* @param componentid Component Id
* @param severity Message severity
* @param text Message Text
*/
void handleTextMessage(int uasid, int componentid, int severity, QString text);
signals:
/**
* @brief Sent out when new message arrives
* @param message A pointer to the message. NULL if resetting (new UAS assigned)
*/
void textMessageReceived(QGCUasMessage* message);
private:
void _clearMessages();
// Stores the UAS that we're currently receiving messages from.
UASInterface* _activeUAS;
QVector<QGCUasMessage*> _messages;
QMutex _mutex;
};
#endif // QGCMESSAGEHANDLER_H