QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MockLinkMissionItemHandler.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtCore/QMap>
5#include <QtCore/QObject>
6#include <QtCore/QTimer>
7
8#include "MAVLinkLib.h"
9
10class MockLink;
11
12Q_DECLARE_LOGGING_CATEGORY(MockLinkMissionItemHandlerLog)
13
14class MockLinkMissionItemHandler : public QObject
15{
16 Q_OBJECT
17
18public:
21
22 // Prepares for destruction on correct thread
23 void shutdown();
24
28 bool handleMavlinkMessage(const mavlink_message_t &msg);
29
31 FailNone, // No failures
32 FailReadRequestListNoResponse, // Don't send MISSION_COUNT in response to MISSION_REQUEST_LIST
33 FailReadRequestListFirstResponse, // Don't send MISSION_COUNT in response to first MISSION_REQUEST_LIST, allow subsequent to go through
34 FailReadRequest0NoResponse, // Don't send MISSION_ITEM in response to MISSION_REQUEST item 0
35 FailReadRequest1NoResponse, // Don't send MISSION_ITEM in response to MISSION_REQUEST item 1
36 FailReadRequest1FirstResponse, // Don't send MISSION_ITEM in response to MISSION_REQUEST item 1 on first try, allow subsequent request to go through
37 FailReadRequest0IncorrectSequence, // Respond to MISSION_REQUEST 0 with incorrect sequence number in MISSION_ITEM
38 FailReadRequest1IncorrectSequence, // Respond to MISSION_REQUEST 1 with incorrect sequence number in MISSION_ITEM
39 FailReadRequest0ErrorAck, // Respond to MISSION_REQUEST 0 with MISSION_ACK error
40 FailReadRequest1ErrorAck, // Respond to MISSION_REQUEST 1 bogus MISSION_ACK error
41 FailWriteMissionCountNoResponse, // Don't respond to MISSION_COUNT with MISSION_REQUEST 0
42 FailWriteMissionCountFirstResponse, // Don't respond to first MISSION_COUNT with MISSION_REQUEST 0, respond to subsequent MISSION_COUNT requests
43 FailWriteRequest1NoResponse, // Don't respond to MISSION_ITEM 0 with MISSION_REQUEST 1
44 FailWriteRequest0IncorrectSequence, // Item 0 MISSION_REQUEST sent has wrong sequence number
45 FailWriteRequest1IncorrectSequence, // Item 1 MISSION_REQUEST sent has wrong sequence number
46 FailWriteRequest0ErrorAck, // Instead of sending MISSION_REQUEST 0, send MISSION_ACK error
47 FailWriteRequest1ErrorAck, // Instead of sending MISSION_REQUEST 1, send MISSION_ACK error
48 FailWriteFinalAckNoResponse, // Don't send the final MISSION_ACK
49 FailWriteFinalAckErrorAck, // Send an error as the final MISSION_ACK
50 FailWriteFinalAckMissingRequests, // Send the MISSION_ACK before all items have been requested
51 };
52
56 void setFailureMode(FailureMode_t failureMode, MAV_MISSION_RESULT failureAckResult);
57
59 void sendUnexpectedMissionAck(MAV_MISSION_RESULT ackType);
60
63
66
68 void reset() { _missionItems.clear(); }
69
70 void setSendHomePositionOnEmptyList(bool sendHomePositionOnEmptyList) { _sendHomePositionOnEmptyList = sendHomePositionOnEmptyList; }
71
72private slots:
73 void _missionItemResponseTimeout();
74
75private:
76 void _handleMissionRequestList(const mavlink_message_t &msg);
77 void _handleMissionRequest(const mavlink_message_t &msg);
78 void _handleMissionItem(const mavlink_message_t &msg);
79 void _handleMissionCount(const mavlink_message_t &msg);
80 void _handleMissionClearAll(const mavlink_message_t &msg);
81 void _requestNextMissionItem(int sequenceNumber);
82 void _sendAck(MAV_MISSION_RESULT ackType) const;
83 void _startMissionItemResponseTimer();
84
85 MockLink *_mockLink = nullptr;
86
87 int _writeSequenceCount = 0;
88 int _writeSequenceIndex = 0;
89
90 typedef QMap<uint16_t, mavlink_mission_item_int_t> MissionItemList_t;
91
92 MAV_MISSION_TYPE _requestType = MAV_MISSION_TYPE_MISSION;
93 MissionItemList_t _missionItems;
94 MissionItemList_t _fenceItems;
95 MissionItemList_t _rallyItems;
96
97 QTimer _missionItemResponseTimer;
98 FailureMode_t _failureMode = FailNone;
99 MAV_MISSION_RESULT _failureAckResult;
100 bool _sendHomePositionOnEmptyList = false;
101 bool _failReadRequestListFirstResponse = true;
102 bool _failReadRequest1FirstResponse = true;
103 bool _failWriteMissionCountFirstResponse = true;
104};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
struct __mavlink_message mavlink_message_t
void reset()
Reset the state of the MissionItemHandler to no items, no transactions in progress.
void setSendHomePositionOnEmptyList(bool sendHomePositionOnEmptyList)