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 
9 #include "string_view.hpp"
10 
12 
14 {
15 public:
17  {
31  };
32 
33  struct Field
34  {
36  {
37  }
39  std::string field_name;
40  std::string other_type_ID;
42  };
43 
44  struct Parameter
45  {
46  std::string name;
47  union
48  {
49  int32_t val_int;
50  float val_real;
51  } value;
53  };
54 
55  struct Format
56  {
57  Format() : padding(0)
58  {
59  }
60  std::string name;
61  std::vector<Field> fields;
62  int padding;
63  };
64 
65  struct MessageLog
66  {
67  char level;
68  uint64_t timestamp;
69  std::string msg;
70  };
71 
72  struct Subscription
73  {
74  Subscription() : msg_id(0), multi_id(0), format(nullptr)
75  {
76  }
77 
78  uint16_t msg_id;
79  uint8_t multi_id;
80  std::string message_name;
81  const Format* format;
82  };
83 
84  struct Timeseries
85  {
86  std::vector<uint64_t> timestamps;
87  std::vector<std::pair<std::string, std::vector<double>>> data;
88  };
89 
90 public:
91  ULogParser(const std::string& filename);
92 
93  const std::map<std::string, Timeseries>& getTimeseriesMap() const;
94 
95  const std::vector<Parameter>& getParameters() const;
96 
97  const std::map<std::string, std::string>& getInfo() const;
98 
99  const std::vector<MessageLog>& getLogs() const;
100 
101 private:
102  struct DataStream
103  {
104  DataStream(): offset(0) {}
105 
106  std::vector<char> data;
107  size_t offset;
108 
109  void read(char* dst, int len)
110  {
111  memcpy(dst, &data[offset], len);
112  offset += len;
113  }
114 
115  operator bool() { return offset < data.size(); }
116  };
117 
118  bool readFileHeader(DataStream& datastream);
119 
120  bool readFileDefinitions(DataStream& datastream);
121 
122  bool readFormat(DataStream& datastream, uint16_t msg_size);
123 
124  bool readFlagBits(DataStream& datastream, uint16_t msg_size);
125 
126  bool readInfo(DataStream& datastream, uint16_t msg_size);
127 
128  bool readParameter(DataStream& datastream, uint16_t msg_size);
129 
130  bool readSubscription(DataStream& datastream, uint16_t msg_size);
131 
132  size_t fieldsCount(const Format& format) const;
133 
134  Timeseries createTimeseries(const Format* format);
135 
137 
138  std::vector<Parameter> _parameters;
139 
140  std::vector<uint8_t> _read_buffer;
141 
142  std::streampos _data_section_start;
143 
144  int64_t _read_until_file_position = 1ULL << 60;
145 
146  std::set<std::string> _overridden_params;
147 
148  std::map<std::string, Format> _formats;
149 
150  std::map<std::string, std::string> _info;
151 
152  std::map<uint16_t, Subscription> _subscriptions;
153 
154  std::map<std::string, Timeseries> _timeseries;
155 
156  std::vector<StringView> splitString(const StringView& strToSplit, char delimeter);
157 
158  std::set<std::string> _message_name_with_multi_id;
159 
160  std::vector<MessageLog> _message_logs;
161 
162  void parseDataMessage(const Subscription& sub, char* message);
163 
164  char* parseSimpleDataMessage(Timeseries& timeseries, const Format* format, char* message, size_t* index);
165 };
166 
std::vector< uint64_t > timestamps
Definition: ulog_parser.h:86
const std::vector< MessageLog > & getLogs() const
enum MQTTPropertyCodes value
Timeseries createTimeseries(const Format *format)
std::vector< Field > fields
Definition: ulog_parser.h:61
FMT_INLINE std::basic_string< Char > format(const S &format_str, Args &&...args)
Definition: core.h:2081
std::vector< MessageLog > _message_logs
Definition: ulog_parser.h:160
#define nullptr
Definition: backward.hpp:386
std::streampos _data_section_start
first ADD_LOGGED_MSG message
Definition: ulog_parser.h:142
std::string message_name
Definition: ulog_parser.h:80
bool readParameter(DataStream &datastream, uint16_t msg_size)
uint64_t _file_start_time
Definition: ulog_parser.h:136
std::vector< Parameter > _parameters
Definition: ulog_parser.h:138
unsigned int bool
Definition: MQTTPacket.h:31
std::map< std::string, Timeseries > _timeseries
Definition: ulog_parser.h:154
nonstd::string_view StringView
Definition: ulog_parser.h:11
std::string name
Definition: ulog_parser.h:60
basic_string_view< char > string_view
Definition: core.h:432
const Format * format
Definition: ulog_parser.h:81
std::vector< StringView > splitString(const StringView &strToSplit, char delimeter)
bool readSubscription(DataStream &datastream, uint16_t msg_size)
int64_t _read_until_file_position
read limit if log contains appended data
Definition: ulog_parser.h:144
std::set< std::string > _overridden_params
Definition: ulog_parser.h:146
const std::map< std::string, Timeseries > & getTimeseriesMap() const
ULogParser(const std::string &filename)
Definition: ulog_parser.cpp:15
size_t fieldsCount(const Format &format) const
std::map< std::string, std::string > _info
Definition: ulog_parser.h:150
std::vector< char > data
Definition: ulog_parser.h:106
const std::vector< Parameter > & getParameters() const
std::vector< uint8_t > _read_buffer
Definition: ulog_parser.h:140
std::set< std::string > _message_name_with_multi_id
Definition: ulog_parser.h:158
void read(char *dst, int len)
Definition: ulog_parser.h:109
FormatType type
Definition: ulog_parser.h:38
char * parseSimpleDataMessage(Timeseries &timeseries, const Format *format, char *message, size_t *index)
bool readInfo(DataStream &datastream, uint16_t msg_size)
bool readFormat(DataStream &datastream, uint16_t msg_size)
std::map< std::string, Format > _formats
Definition: ulog_parser.h:148
std::vector< std::pair< std::string, std::vector< double > > > data
Definition: ulog_parser.h:87
void parseDataMessage(const Subscription &sub, char *message)
std::map< uint16_t, Subscription > _subscriptions
Definition: ulog_parser.h:152
bool readFlagBits(DataStream &datastream, uint16_t msg_size)
bool readFileHeader(DataStream &datastream)
bool readFileDefinitions(DataStream &datastream)
std::string field_name
Definition: ulog_parser.h:39
int len
Definition: utf-8.c:46
const std::map< std::string, std::string > & getInfo() const
std::string other_type_ID
Definition: ulog_parser.h:40


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Dec 6 2020 04:02:48