QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
RallyPointManager.cc
Go to the documentation of this file.
1#include "RallyPointManager.h"
2#include "Vehicle.h"
4
5QGC_LOGGING_CATEGORY(RallyPointManagerLog, "PlanManager.RallyPointManager")
6
8 : PlanManager(vehicle, MAV_MISSION_TYPE_RALLY)
9{
11 connect(this, &PlanManager::error, this, &RallyPointManager::error);
13 connect(this, &PlanManager::sendComplete, this, &RallyPointManager::_sendComplete);
14 connect(this, &PlanManager::newMissionItemsAvailable, this, &RallyPointManager::_planManagerLoadComplete);
15}
16
17
22
23void RallyPointManager::_sendError(ErrorCode_t errorCode, const QString& errorMsg)
24{
25 qCDebug(RallyPointManagerLog) << "Sending error" << errorCode << errorMsg;
26
27 emit error(errorCode, errorMsg);
28}
29
30void RallyPointManager::sendToVehicle(const QList<QGeoCoordinate>& rgPoints)
31{
32 _rgSendPoints.clear();
33 for (const QGeoCoordinate& rallyPoint: rgPoints) {
34 _rgSendPoints.append(rallyPoint);
35 }
36
37 QList<MissionItem*> rallyItems;
38 for (int i=0; i<rgPoints.count(); i++) {
39
40 MissionItem* item = new MissionItem(0,
41 MAV_CMD_NAV_RALLY_POINT,
42 MAV_FRAME_GLOBAL_RELATIVE_ALT,
43 0, 0, 0, 0, // param 1-4 unused
44 rgPoints[i].latitude(),
45 rgPoints[i].longitude(),
46 rgPoints[i].altitude(),
47 false, // autocontinue
48 false, // isCurrentItem
49 this); // parent
50 rallyItems.append(item);
51 }
52
53 // Plan manager takes control of MissionItems, so no need to delete
54 writeMissionItems(rallyItems);
55}
56
62
64{
65 return _vehicle->capabilityBits() & MAV_PROTOCOL_CAPABILITY_MISSION_RALLY;
66}
67
68void RallyPointManager::_planManagerLoadComplete(bool removeAllRequested)
69{
70 _rgPoints.clear();
71
72 Q_UNUSED(removeAllRequested);
73
74 const QList<MissionItem*>& rallyItems = missionItems();
75
76 for (int i=0; i<rallyItems.count(); i++) {
77 MissionItem* item = rallyItems[i];
78
79 MAV_CMD command = item->command();
80
81 if (command == MAV_CMD_NAV_RALLY_POINT) {
82 _rgPoints.append(QGeoCoordinate(item->param5(), item->param6(), item->param7()));
83 } else {
84 qCDebug(RallyPointManagerLog) << "RallyPointManager load: Unsupported command %1" << item->command();
85 break;
86 }
87 }
88
89
90 emit loadComplete();
91}
92
93void RallyPointManager::_sendComplete(bool error)
94{
95 if (error) {
96 _rgPoints.clear();
97 } else {
99 }
100 _rgSendPoints.clear();
101 emit sendComplete(error);
102}
Error error
#define QGC_LOGGING_CATEGORY(name, categoryStr)
MAV_CMD command(void) const
Definition MissionItem.h:49
double param5(void) const
Definition MissionItem.h:58
double param7(void) const
Definition MissionItem.h:60
double param6(void) const
Definition MissionItem.h:59
void sendComplete(bool error)
void removeAll(void)
void newMissionItemsAvailable(bool removeAllRequested)
void removeAllComplete(bool error)
void writeMissionItems(const QList< MissionItem * > &missionItems)
void inProgressChanged(bool inProgress)
const QList< MissionItem * > & missionItems(void)
Definition PlanManager.h:25
Vehicle * _vehicle
void error(int errorCode, const QString &errorMsg)
void inProgressChanged(bool inProgress)
void sendToVehicle(const QList< QGeoCoordinate > &rgPoints)
bool supported(void) const
ErrorCode_t
Error codes returned in error signal.
void loadComplete(void)
void sendComplete(bool error)
QList< QGeoCoordinate > _rgPoints
void _sendError(ErrorCode_t errorCode, const QString &errorMsg)
void removeAllComplete(bool error)
QList< QGeoCoordinate > _rgSendPoints
void error(int errorCode, const QString &errorMsg)
uint64_t capabilityBits() const
Definition Vehicle.h:738