QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
MessageIntervalManager.h
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4
5#include <QtCore/QHash>
6#include <QtCore/QMultiHash>
7#include <QtCore/QObject>
8
9#include "VehicleTypes.h"
10
11class MavCommandQueue;
13class Vehicle;
14
20
21class MessageIntervalManager : public QObject, public VehicleTypes
22{
23 Q_OBJECT
24
25public:
26 MessageIntervalManager(Vehicle* vehicle, MavCommandQueue* commandQueue, RequestMessageCoordinator* reqMsgCoord);
27
30 int32_t getMessageRate(uint8_t compId, uint16_t msgId);
31
34 void setMessageRate(uint8_t compId, uint16_t msgId, int32_t rate);
35
38 void handleMessageInterval(const mavlink_message_t& message);
39
40signals:
41 void mavlinkMsgIntervalsChanged(uint8_t compid, uint16_t msgId, int32_t rate);
42
43private:
44 using MavCompMsgId = std::pair<uint8_t /* compId */, uint16_t /* msgId */>;
45
46 static void _requestMessageIntervalResultHandler(void* resultHandlerData, MAV_RESULT result, RequestMessageResultHandlerFailureCode_t failureCode, const mavlink_message_t& message);
47 static void _setMessageRateCommandResultHandler(void* resultHandlerData, int compId, const mavlink_command_ack_t& ack, MavCmdResultFailureCode_t failureCode);
48
49 void _requestMessageInterval(uint8_t compId, uint16_t msgId);
50
51 Vehicle* _vehicle = nullptr;
52 MavCommandQueue* _commandQueue = nullptr;
53 RequestMessageCoordinator* _reqMsgCoord = nullptr;
54
55 QHash<MavCompMsgId, int32_t> _mavlinkMsgIntervals;
56 QMultiHash<uint8_t, uint16_t> _unsupportedMessageIds;
57};
struct __mavlink_message mavlink_message_t
struct __mavlink_command_ack_t mavlink_command_ack_t
Owns the COMMAND_LONG / COMMAND_INT send/retry/ack pipeline for a single Vehicle.
Tracks per-component MAVLink message intervals and mediates SET_MESSAGE_INTERVAL commands plus MESSAG...
void handleMessageInterval(const mavlink_message_t &message)
void mavlinkMsgIntervalsChanged(uint8_t compid, uint16_t msgId, int32_t rate)
void setMessageRate(uint8_t compId, uint16_t msgId, int32_t rate)
int32_t getMessageRate(uint8_t compId, uint16_t msgId)
Coordinates MAV_CMD_REQUEST_MESSAGE workflows: per-component queueing, ack/message correlation,...
RequestMessageResultHandlerFailureCode_t