QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
RTCMParser.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QByteArray>
4#include <QtCore/QSet>
5#include <QtCore/QVector>
6#include <cstddef>
7#include <cstdint>
8
10{
11public:
12 static constexpr uint8_t kPreamble = 0xD3;
13
14 RTCMParser();
15 void reset();
16
17 void setWhitelist(const QVector<int>& ids) { _whitelist = QSet<int>(ids.begin(), ids.end()); }
18
19 bool isWhitelisted(uint16_t id) const { return _whitelist.isEmpty() || _whitelist.contains(id); }
20
21 bool addByte(uint8_t byte);
22
23 uint8_t* message() { return _buffer; }
24
25 uint16_t messageLength() const { return _messageLength; }
26
27 uint16_t messageId() const;
28
29 const uint8_t* crcBytes() const { return _crcBytes; }
30
31 static constexpr int kCrcSize = 3;
32 static constexpr int kHeaderSize = 3;
33
34 bool validateCrc() const;
35 static uint32_t crc24q(const uint8_t* data, size_t len);
36
39 QByteArray currentFrame() const;
40
41private:
42 enum class State
43 {
44 WaitingForPreamble,
45 ReadingLength,
46 ReadingMessage,
47 ReadingCRC
48 };
49
50 static constexpr uint16_t kMaxPayloadLength = 1023;
51
52 QSet<int> _whitelist;
53 State _state;
54 uint8_t _buffer[kHeaderSize + kMaxPayloadLength];
55 uint16_t _messageLength;
56 uint16_t _bytesRead;
57 uint16_t _lengthBytesRead;
58 uint8_t _lengthBytes[2];
59 uint16_t _crcBytesRead;
60 uint8_t _crcBytes[3];
61};
void reset()
Definition RTCMParser.cc:8
bool validateCrc() const
Definition RTCMParser.cc:91
void setWhitelist(const QVector< int > &ids)
Definition RTCMParser.h:17
static uint32_t crc24q(const uint8_t *data, size_t len)
Definition RTCMParser.cc:75
static constexpr int kCrcSize
Definition RTCMParser.h:31
QByteArray currentFrame() const
bool isWhitelisted(uint16_t id) const
Definition RTCMParser.h:19
uint8_t * message()
Definition RTCMParser.h:23
static constexpr int kHeaderSize
Definition RTCMParser.h:32
const uint8_t * crcBytes() const
Definition RTCMParser.h:29
uint16_t messageId() const
Definition RTCMParser.cc:67
uint16_t messageLength() const
Definition RTCMParser.h:25
bool addByte(uint8_t byte)
Definition RTCMParser.cc:17
static constexpr uint8_t kPreamble
Definition RTCMParser.h:12