QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
ULogFullHandler.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <QtCore/QHash>
6#include <QtCore/QPointF>
7#include <QtCore/QSet>
8#include <QtCore/QString>
9#include <QtCore/QVector>
10
11#include <map>
12#include <memory>
13#include <string>
14
15#include <ulog_cpp/data_handler_interface.hpp>
16#include <ulog_cpp/messages.hpp>
17
18struct LogParseResult;
19
26class ULogFullHandler final : public ulog_cpp::DataHandlerInterface
27{
28public:
29 explicit ULogFullHandler(LogParseResult &result, const ProgressCallback &progressCallback = nullptr); // progressCallback unused; progress is reported by the caller's chunk loop
30 ~ULogFullHandler() = default;
31
32 void error(const std::string &msg, bool is_recoverable) override;
33 void fileHeader(const ulog_cpp::FileHeader& header) override;
34 void messageFormat(const ulog_cpp::MessageFormat &message_format) override;
35 void addLoggedMessage(const ulog_cpp::AddLoggedMessage &add_logged_message) override;
36 void headerComplete() override;
37 void data(const ulog_cpp::Data &data) override;
38 void logging(const ulog_cpp::Logging &logging) override;
39 void parameter(const ulog_cpp::Parameter &parameter) override;
40 void parameterDefault(const ulog_cpp::ParameterDefault &parameter_default) override;
41 void dropout(const ulog_cpp::Dropout &dropout) override;
42
43 bool hadFatalError() const { return _hadFatalError; }
44 bool isHeaderComplete() const { return _headerComplete; }
45
48 void finalize();
49
50private:
51 // Flattens arrays to "name[i]" and nested structs to "name.sub" so each numeric element is a signal
52 void _collectFieldSamples(const QString& fieldName, const ulog_cpp::Field& field, const ulog_cpp::Value& value,
53 double timestampSecs);
54 void _collectElementSamples(const QString& fieldName, const ulog_cpp::Field& field, const ulog_cpp::Value& value,
55 double timestampSecs);
56
57 LogParseResult &_result;
58
59 struct SubscriptionInfo {
60 std::shared_ptr<ulog_cpp::MessageFormat> format;
61 uint8_t multiId{0};
62 std::string topicName;
63 };
64
65 std::map<std::string, std::shared_ptr<ulog_cpp::MessageFormat>> _formats;
66 std::map<uint16_t, SubscriptionInfo> _subscriptions;
67 QSet<QString> _fieldSet;
68 QSet<QString> _plottableFieldSet;
69 // Map of parameter name -> default value (system default, from ParameterDefault messages)
70 QHash<QString, double> _paramDefaults;
71 double _logStartSecs{0.0};
72 int _staleSampleCount{0};
73 double _lastTimestampSecs{-1.0};
74 bool _hadFatalError{false};
75 bool _headerComplete{false};
76};
std::function< void(float)> ProgressCallback
Error error
Full-scan ULog DataHandlerInterface implementation.
void parameter(const ulog_cpp::Parameter &parameter) override
void fileHeader(const ulog_cpp::FileHeader &header) override
~ULogFullHandler()=default
bool isHeaderComplete() const
void addLoggedMessage(const ulog_cpp::AddLoggedMessage &add_logged_message) override
void logging(const ulog_cpp::Logging &logging) override
bool hadFatalError() const
void messageFormat(const ulog_cpp::MessageFormat &message_format) override
void parameterDefault(const ulog_cpp::ParameterDefault &parameter_default) override
void data(const ulog_cpp::Data &data) override
void dropout(const ulog_cpp::Dropout &dropout) override
void headerComplete() override