ulog_parser.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include <map>
6 #include <set>
7 #include <string.h>
8 #include <cstdint>
9 
10 #include "string_view.hpp"
11 
13 
15 {
16 public:
17  struct DataStream
18  {
19  const char* _data;
20  const size_t _length;
21  size_t offset;
22 
23  DataStream(char* data, int len) : _data(data), _length(len), offset(0)
24  {
25  }
26 
27  void read(char* dst, int len)
28  {
29  memcpy(dst, &_data[offset], len);
30  offset += len;
31  }
32 
33  operator bool()
34  {
35  return offset < _length;
36  }
37  };
38 
40  {
54  };
55 
56  struct Field
57  {
59  {
60  }
62  std::string field_name;
63  std::string other_type_ID;
65  };
66 
67  struct Parameter
68  {
69  std::string name;
70  union
71  {
72  int32_t val_int;
73  float val_real;
74  } value;
76 
77  bool readFromBuffer(const char* message);
78  };
79 
80  struct Format
81  {
83  {
84  }
85  std::string name;
86  std::vector<Field> fields;
87  int padding;
89  };
90 
91  struct MessageLog
92  {
93  char level;
94  uint64_t timestamp;
95  std::string msg;
96  };
97 
98  struct Subscription
99  {
101  {
102  }
103 
104  uint16_t msg_id;
105  uint8_t multi_id;
106  std::string message_name;
107  const Format* format;
108  };
109 
110  struct Timeseries
111  {
112  std::vector<uint64_t> timestamps;
113  std::vector<std::pair<std::string, std::vector<double>>> data;
114  };
115 
116 public:
117  ULogParser(DataStream& datastream);
118 
119  const std::map<std::string, Timeseries>& getTimeseriesMap() const;
120 
121  const std::vector<Parameter>& getParameters() const;
122 
123  const std::map<std::string, std::string>& getInfo() const;
124 
125  const std::vector<MessageLog>& getLogs() const;
126 
127 private:
128  bool readFileHeader(DataStream& datastream);
129 
130  bool readFileDefinitions(DataStream& datastream);
131 
132  bool readFormat(DataStream& datastream, uint16_t msg_size);
133 
134  bool readFlagBits(DataStream& datastream, uint16_t msg_size);
135 
136  bool readInfo(DataStream& datastream, uint16_t msg_size);
137 
138  bool readParameter(DataStream& datastream, uint16_t msg_size);
139 
140  bool readSubscription(DataStream& datastream, uint16_t msg_size);
141 
142  size_t fieldsCount(const Format& format) const;
143 
145 
147 
148  std::vector<Parameter> _parameters;
149 
150  std::vector<uint8_t> _read_buffer;
151 
152  std::streampos _data_section_start;
153 
155  1ULL << 60;
156 
157  std::set<std::string> _overridden_params;
158 
159  std::map<std::string, Format> _formats;
160 
161  std::map<std::string, std::string> _info;
162 
163  std::map<uint16_t, Subscription> _subscriptions;
164 
165  std::map<std::string, Timeseries> _timeseries;
166 
167  std::vector<StringView> splitString(const StringView& strToSplit, char delimeter);
168 
169  std::set<std::string> _message_name_with_multi_id;
170 
171  std::vector<MessageLog> _message_logs;
172 
173  void parseDataMessage(const Subscription& sub, char* message);
174 
175  char* parseSimpleDataMessage(Timeseries& timeseries, const Format* format,
176  char* message, size_t* index);
177 };
ULogParser::Format::fields
std::vector< Field > fields
Definition: ulog_parser.h:86
ULogParser::readParameter
bool readParameter(DataStream &datastream, uint16_t msg_size)
Definition: ulog_parser.cpp:747
ULogParser::readFileDefinitions
bool readFileDefinitions(DataStream &datastream)
Definition: ulog_parser.cpp:363
ULogParser::_file_start_time
uint64_t _file_start_time
Definition: ulog_parser.h:146
ULogParser::Timeseries::data
std::vector< std::pair< std::string, std::vector< double > > > data
Definition: ulog_parser.h:113
ULogParser::Parameter::val_type
FormatType val_type
Definition: ulog_parser.h:75
ULogParser::_subscriptions
std::map< uint16_t, Subscription > _subscriptions
Definition: ulog_parser.h:163
ULogParser::_timeseries
std::map< std::string, Timeseries > _timeseries
Definition: ulog_parser.h:165
ULogParser::Field::field_name
std::string field_name
Definition: ulog_parser.h:62
string_view.hpp
ULogParser
Definition: ulog_parser.h:14
ULogParser::UINT8
@ UINT8
Definition: ulog_parser.h:41
ULogParser::Format::name
std::string name
Definition: ulog_parser.h:85
ULogParser::getParameters
const std::vector< Parameter > & getParameters() const
Definition: ulog_parser.cpp:269
ULogParser::DataStream::_data
const char * _data
Definition: ulog_parser.h:19
ULogParser::FormatType
FormatType
Definition: ulog_parser.h:39
ULogParser::Field::type
FormatType type
Definition: ulog_parser.h:61
ULogParser::Subscription::multi_id
uint8_t multi_id
Definition: ulog_parser.h:105
ULogParser::createTimeseries
Timeseries createTimeseries(const Format *format)
Definition: ulog_parser.cpp:763
ULogParser::MessageLog::timestamp
uint64_t timestamp
Definition: ulog_parser.h:94
ULogParser::DataStream::offset
size_t offset
Definition: ulog_parser.h:21
ULogParser::Parameter::value
union ULogParser::Parameter::@57 value
ULogParser::UINT32
@ UINT32
Definition: ulog_parser.h:43
ULogParser::splitString
std::vector< StringView > splitString(const StringView &strToSplit, char delimeter)
Definition: ulog_parser.cpp:318
ULogParser::_message_logs
std::vector< MessageLog > _message_logs
Definition: ulog_parser.h:171
ULogParser::DataStream::read
void read(char *dst, int len)
Definition: ulog_parser.h:27
ULogParser::CHAR
@ CHAR
Definition: ulog_parser.h:52
ULogParser::_data_section_start
std::streampos _data_section_start
first ADD_LOGGED_MSG message
Definition: ulog_parser.h:152
ULogParser::Format
Definition: ulog_parser.h:80
ULogParser::fieldsCount
size_t fieldsCount(const Format &format) const
Definition: ulog_parser.cpp:300
ULogParser::_parameters
std::vector< Parameter > _parameters
Definition: ulog_parser.h:148
ULogParser::getTimeseriesMap
const std::map< std::string, Timeseries > & getTimeseriesMap() const
Definition: ulog_parser.cpp:264
ULogParser::UINT64
@ UINT64
Definition: ulog_parser.h:44
ULogParser::readSubscription
bool readSubscription(DataStream &datastream, uint16_t msg_size)
Definition: ulog_parser.cpp:284
ULogParser::INT32
@ INT32
Definition: ulog_parser.h:47
ULogParser::MessageLog
Definition: ulog_parser.h:91
ULogParser::Field::Field
Field()
Definition: ulog_parser.h:58
ULogParser::BOOL
@ BOOL
Definition: ulog_parser.h:51
StringView
nonstd::string_view StringView
Definition: ulog_parser.h:12
ULogParser::_info
std::map< std::string, std::string > _info
Definition: ulog_parser.h:161
ULogParser::Parameter::val_int
int32_t val_int
Definition: ulog_parser.h:72
ULogParser::Format::padding
int padding
Definition: ulog_parser.h:87
ULogParser::_read_until_file_position
int64_t _read_until_file_position
read limit if log contains appended data
Definition: ulog_parser.h:154
ULogParser::Timeseries
Definition: ulog_parser.h:110
ULogParser::Format::Format
Format()
Definition: ulog_parser.h:82
ULogParser::getLogs
const std::vector< MessageLog > & getLogs() const
Definition: ulog_parser.cpp:279
ULogParser::Timeseries::timestamps
std::vector< uint64_t > timestamps
Definition: ulog_parser.h:112
ULogParser::Field
Definition: ulog_parser.h:56
ULogParser::Subscription::message_name
std::string message_name
Definition: ulog_parser.h:106
ULogParser::Subscription
Definition: ulog_parser.h:98
ULogParser::UINT16
@ UINT16
Definition: ulog_parser.h:42
ULogParser::_overridden_params
std::set< std::string > _overridden_params
Definition: ulog_parser.h:157
ULogParser::INT8
@ INT8
Definition: ulog_parser.h:45
format
auto format(const text_style &ts, const S &format_str, const Args &... args) -> std::basic_string< Char >
Definition: color.h:543
string_view
basic_string_view< char > string_view
Definition: core.h:518
ULogParser::DataStream::_length
const size_t _length
Definition: ulog_parser.h:20
ULogParser::Field::other_type_ID
std::string other_type_ID
Definition: ulog_parser.h:63
ULogParser::_formats
std::map< std::string, Format > _formats
Definition: ulog_parser.h:159
ULogParser::Parameter::val_real
float val_real
Definition: ulog_parser.h:73
ULogParser::parseSimpleDataMessage
char * parseSimpleDataMessage(Timeseries &timeseries, const Format *format, char *message, size_t *index)
Definition: ulog_parser.cpp:160
ULogParser::ULogParser
ULogParser(DataStream &datastream)
Definition: ulog_parser.cpp:12
ULogParser::DataStream
Definition: ulog_parser.h:17
ULogParser::Parameter
Definition: ulog_parser.h:67
ULogParser::parseDataMessage
void parseDataMessage(const Subscription &sub, char *message)
Definition: ulog_parser.cpp:128
ULogParser::Format::timestamp_idx
int timestamp_idx
Definition: ulog_parser.h:88
ULogParser::DOUBLE
@ DOUBLE
Definition: ulog_parser.h:50
ULogParser::Parameter::readFromBuffer
bool readFromBuffer(const char *message)
Definition: ulog_parser.cpp:805
ULogParser::readFlagBits
bool readFlagBits(DataStream &datastream, uint16_t msg_size)
Definition: ulog_parser.cpp:433
ULogParser::INT64
@ INT64
Definition: ulog_parser.h:48
ULogParser::_message_name_with_multi_id
std::set< std::string > _message_name_with_multi_id
Definition: ulog_parser.h:169
ULogParser::Field::array_size
int array_size
Definition: ulog_parser.h:64
ULogParser::readFileHeader
bool readFileHeader(DataStream &datastream)
Definition: ulog_parser.cpp:339
ULogParser::Subscription::Subscription
Subscription()
Definition: ulog_parser.h:100
mqtt_test.data
dictionary data
Definition: mqtt_test.py:22
ULogParser::_read_buffer
std::vector< uint8_t > _read_buffer
Definition: ulog_parser.h:150
ULogParser::readFormat
bool readFormat(DataStream &datastream, uint16_t msg_size)
Definition: ulog_parser.cpp:488
ULogParser::INT16
@ INT16
Definition: ulog_parser.h:46
dst
char * dst
Definition: lz4.h:792
ULogParser::Parameter::name
std::string name
Definition: ulog_parser.h:69
ULogParser::Subscription::format
const Format * format
Definition: ulog_parser.h:107
ULogParser::MessageLog::msg
std::string msg
Definition: ulog_parser.h:95
ULogParser::FLOAT
@ FLOAT
Definition: ulog_parser.h:49
ULogParser::getInfo
const std::map< std::string, std::string > & getInfo() const
Definition: ulog_parser.cpp:274
ULogParser::Subscription::msg_id
uint16_t msg_id
Definition: ulog_parser.h:104
ULogParser::readInfo
bool readInfo(DataStream &datastream, uint16_t msg_size)
Definition: ulog_parser.cpp:655
ULogParser::MessageLog::level
char level
Definition: ulog_parser.h:93
nullptr
#define nullptr
Definition: backward.hpp:386
ULogParser::OTHER
@ OTHER
Definition: ulog_parser.h:53
ULogParser::DataStream::DataStream
DataStream(char *data, int len)
Definition: ulog_parser.h:23


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Jan 26 2025 03:23:27