$darkmode
rdb_codec.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2020 Robert Bosch GmbH
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * SPDX-License-Identifier: Apache-2.0
17  */
23 #pragma once
24 
25 #include <map> // for map<>
26 #include <memory> // for unique_ptr<>
27 #include <string> // for string
28 #include <utility> // for move
29 
30 #include <cloe/core.hpp> // for Json, Duration
31 
32 #include "vtd_version.hpp"
33 #if (VTD_API_VERSION_EPOCH == 0)
34  #include <RDBHandler.hh> // for RDB_MSG_t
35 #else
36  #include <VtdToolkit/RDBHandler.hh>
37 #endif
38 
39 #include "rdb_transceiver.hpp" // for RdbTransceiver
40 
41 namespace vtd {
42 
46 class RdbCodec {
47  public:
48  virtual ~RdbCodec() = default;
49  RdbCodec() = delete;
50 
54  explicit RdbCodec(std::unique_ptr<RdbTransceiver>&& rdb_transceiver)
55  : rdb_(std::move(rdb_transceiver)) {}
56 
63  explicit RdbCodec(RdbTransceiver* rdb_transceiver) : rdb_(rdb_transceiver) {}
64 
69  virtual const std::string& get_name() const = 0;
70 
74  virtual uint64_t frame_number() const { return frame_number_; }
75 
79  virtual void step(uint64_t frame_number, bool& restart, cloe::Duration& sim_time);
80 
87  virtual void process(RDB_MSG_t* msg, bool& restart, cloe::Duration& sim_time);
88 
95  virtual void process(RDB_MSG_ENTRY_HDR_t* entry);
96 
102  virtual void process(RDB_START_OF_FRAME_t* /*start_of_frame*/) {}
103 
104  virtual void process(RDB_END_OF_FRAME_t* /*end_of_frame*/) {}
105  virtual void process(RDB_COORD_SYSTEM_t* /*coord_system*/) {}
106  virtual void process(RDB_COORD_t* /*coord*/) {}
107  virtual void process(RDB_ROAD_POS_t* /*road_pos*/) {}
108  virtual void process(RDB_LANE_INFO_t* /*lane_info*/) {}
109  virtual void process(RDB_ROADMARK_t* /*roadmark*/) {}
110  virtual void process(RDB_OBJECT_CFG_t* /*object_cfg*/) {}
111  virtual void process(RDB_OBJECT_STATE_t* /*object_state*/, bool /*extended*/) {}
112  virtual void process(RDB_VEHICLE_SYSTEMS_t* /*vehicle_systems*/) {}
113  virtual void process(RDB_VEHICLE_SETUP_t* /*vehicle_setup*/) {}
114  virtual void process(RDB_ENGINE_t* /*engine*/, bool /*extended*/) {}
115  virtual void process(RDB_DRIVETRAIN_t* /*drivetrain*/, bool /*extended*/) {}
116  virtual void process(RDB_WHEEL_t* /*wheel*/, bool /*extended*/) {}
117  virtual void process(RDB_PED_ANIMATION_t* /*ped_animation*/) {}
118  virtual void process(RDB_SENSOR_STATE_t* /*sensor_state*/) {}
119  virtual void process(RDB_SENSOR_OBJECT_t* /*sensor_object*/) {}
120  virtual void process(RDB_CAMERA_t* /*camera*/) {}
121  virtual void process(RDB_CONTACT_POINT_t* /*contact_point*/) {}
122  virtual void process(RDB_TRAFFIC_SIGN_t* /*traffic_sign*/) {}
123  virtual void process(RDB_ROAD_STATE_t* /*road_state*/) {}
124  virtual void process(RDB_IMAGE_t* /*image*/) {}
125  virtual void process(RDB_LIGHT_SOURCE_t* /*light_source*/, bool /*extended*/) {}
126  virtual void process(RDB_ENVIRONMENT_t* /*environment*/) {}
127  virtual void process(RDB_TRIGGER_t* /*trigger*/) {}
128  virtual void process(RDB_DRIVER_CTRL_t* /*driver_ctrl*/) {}
129  virtual void process(RDB_TRAFFIC_LIGHT_t* /*traffic_light*/, bool /*extended*/) {}
130  virtual void process(RDB_SYNC_t* /*sync*/) {}
131  virtual void process(RDB_DRIVER_PERCEPTION_t* /*driver_perception*/) {}
132  virtual void process(RDB_FUNCTION_t* /*function*/) {}
133  virtual void process(RDB_ROAD_QUERY_t* /*road_query*/) {}
134  virtual void process(RDB_TRAJECTORY_t* /*trajectory*/) {}
135  virtual void process(RDB_DYN_2_STEER_t* /*dyn_to_steer*/) {}
136  virtual void process(RDB_STEER_2_DYN_t* /*steer_to_dyn*/) {}
137  virtual void process(RDB_PROXY_t* /*proxy*/) {}
138  virtual void process(RDB_MOTION_SYSTEM_t* /*motion_system*/) {}
139  virtual void process(RDB_FREESPACE_t* /*freepsace*/) {}
140  virtual void process(RDB_DYN_EL_SWITCH_t* /*dyn_el_switch*/) {}
141  virtual void process(RDB_DYN_EL_DOF_t* /*dyn_el_dof*/) {}
142  virtual void process(RDB_IG_FRAME_t* /*ig_frame*/) {}
143  virtual void process(RDB_RT_PERFORMANCE_t* /*rt_performance*/) {}
144  virtual void process(RDB_CUSTOM_SCORING_t* /*custom_scoring*/) {}
145  virtual void process(RDB_CUSTOM_OBJECT_CTRL_TRACK_t* /*custom_object_ctrl_track*/) {}
146 
147  friend void to_json(cloe::Json& j, const RdbCodec& c) {
148  j = cloe::Json{
149  {"rdb_connection", *c.rdb_},
150  {"frame_number", c.frame_number_},
151  };
152  }
153 
154  protected:
157  std::unique_ptr<RdbTransceiver> rdb_;
158 
160  uint64_t frame_number_ = 0;
161 
163  bool processing_frame_ = false;
164 };
165 
166 inline std::string vtd_pkg_id_to_string(uint16_t vtd_pkg_id) {
167  // clang-format off
168  static const std::map<int, const char*> vtd_pkg_id_name_map{
169  {RDB_PKG_ID_START_OF_FRAME, "RDB_PKG_ID_START_OF_FRAME"},
170  {RDB_PKG_ID_END_OF_FRAME, "RDB_PKG_ID_END_OF_FRAME"},
171  {RDB_PKG_ID_COORD_SYSTEM, "RDB_PKG_ID_COORD_SYSTEM"},
172  {RDB_PKG_ID_COORD, "RDB_PKG_ID_COORD"},
173  {RDB_PKG_ID_ROAD_POS, "RDB_PKG_ID_ROAD_POS"},
174  {RDB_PKG_ID_LANE_INFO, "RDB_PKG_ID_LANE_INFO"},
175  {RDB_PKG_ID_ROADMARK, "RDB_PKG_ID_ROADMARK"},
176  {RDB_PKG_ID_OBJECT_CFG, "RDB_PKG_ID_OBJECT_CFG"},
177  {RDB_PKG_ID_OBJECT_STATE, "RDB_PKG_ID_OBJECT_STATE"},
178  {RDB_PKG_ID_VEHICLE_SYSTEMS, "RDB_PKG_ID_VEHICLE_SYSTEMS"},
179  {RDB_PKG_ID_VEHICLE_SETUP, "RDB_PKG_ID_VEHICLE_SETUP"},
180  {RDB_PKG_ID_ENGINE, "RDB_PKG_ID_ENGINE"},
181  {RDB_PKG_ID_DRIVETRAIN, "RDB_PKG_ID_DRIVETRAIN"},
182  {RDB_PKG_ID_WHEEL, "RDB_PKG_ID_WHEEL"},
183  {RDB_PKG_ID_PED_ANIMATION, "RDB_PKG_ID_PED_ANIMATION"},
184  {RDB_PKG_ID_SENSOR_STATE, "RDB_PKG_ID_SENSOR_STATE"},
185  {RDB_PKG_ID_SENSOR_OBJECT, "RDB_PKG_ID_SENSOR_OBJECT"},
186  {RDB_PKG_ID_CAMERA, "RDB_PKG_ID_CAMERA"},
187  {RDB_PKG_ID_CONTACT_POINT, "RDB_PKG_ID_CONTACT_POINT"},
188  {RDB_PKG_ID_TRAFFIC_SIGN, "RDB_PKG_ID_TRAFFIC_SIGN"},
189  {RDB_PKG_ID_ROAD_STATE, "RDB_PKG_ID_ROAD_STATE"},
190  {RDB_PKG_ID_IMAGE, "RDB_PKG_ID_IMAGE"},
191  {RDB_PKG_ID_LIGHT_SOURCE, "RDB_PKG_ID_LIGHT_SOURCE"},
192  {RDB_PKG_ID_ENVIRONMENT, "RDB_PKG_ID_ENVIRONMENT"},
193  {RDB_PKG_ID_TRIGGER, "RDB_PKG_ID_TRIGGER"},
194  {RDB_PKG_ID_DRIVER_CTRL, "RDB_PKG_ID_DRIVER_CTRL"},
195  {RDB_PKG_ID_TRAFFIC_LIGHT, "RDB_PKG_ID_TRAFFIC_LIGHT"},
196  {RDB_PKG_ID_SYNC, "RDB_PKG_ID_SYNC"},
197  {RDB_PKG_ID_DRIVER_PERCEPTION, "RDB_PKG_ID_DRIVER_PERCEPTION"},
198  {RDB_PKG_ID_LIGHT_MAP, "RDB_PKG_ID_LIGHT_MAP"},
199  {RDB_PKG_ID_TONE_MAPPING, "RDB_PKG_ID_TONE_MAPPING"},
200  {RDB_PKG_ID_ROAD_QUERY, "RDB_PKG_ID_ROAD_QUERY"},
201  {RDB_PKG_ID_SCP, "RDB_PKG_ID_SCP"},
202  {RDB_PKG_ID_TRAJECTORY, "RDB_PKG_ID_TRAJECTORY"},
203  {RDB_PKG_ID_DYN_2_STEER, "RDB_PKG_ID_DYN_2_STEER"},
204  {RDB_PKG_ID_STEER_2_DYN, "RDB_PKG_ID_STEER_2_DYN"},
205  {RDB_PKG_ID_PROXY, "RDB_PKG_ID_PROXY"},
206  {RDB_PKG_ID_MOTION_SYSTEM, "RDB_PKG_ID_MOTION_SYSTEM"},
207  {RDB_PKG_ID_OCCLUSION_MATRIX, "RDB_PKG_ID_OCCLUSION_MATRIX"},
208  {RDB_PKG_ID_FREESPACE, "RDB_PKG_ID_FREESPACE"},
209  {RDB_PKG_ID_DYN_EL_SWITCH, "RDB_PKG_ID_DYN_EL_SWITCH"},
210  {RDB_PKG_ID_DYN_EL_DOF, "RDB_PKG_ID_DYN_EL_DOF"},
211  {RDB_PKG_ID_IG_FRAME, "RDB_PKG_ID_IG_FRAME"},
212  {RDB_PKG_ID_RAY, "RDB_PKG_ID_RAY"},
213  {RDB_PKG_ID_RT_PERFORMANCE, "RDB_PKG_ID_RT_PERFORMANCE"},
214  {RDB_PKG_ID_CUSTOM_SCORING, "RDB_PKG_ID_CUSTOM_SCORING"},
215  {RDB_PKG_ID_CUSTOM_OBJECT_CTRL_TRACK, "RDB_PKG_ID_CUSTOM_OBJECT_CTRL_TRACK"},
216  {RDB_PKG_ID_CUSTOM_LIGHT_B, "RDB_PKG_ID_CUSTOM_LIGHT_B"},
217  {RDB_PKG_ID_CUSTOM_LIGHT_A, "RDB_PKG_ID_CUSTOM_LIGHT_A"},
218  {RDB_PKG_ID_CUSTOM_LIGHT_GROUP_B, "RDB_PKG_ID_CUSTOM_LIGHT_GROUP_B"},
219 #if RDB_VERSION >= 0x011E
220  {RDB_PKG_ID_CUSTOM_LOOK_AHEAD, "RDB_PKG_ID_CUSTOM_LOOK_AHEAD"},
221 #endif
222  {RDB_PKG_ID_CUSTOM_AUDI_FORUM, "RDB_PKG_ID_CUSTOM_AUDI_FORUM"},
223  {RDB_PKG_ID_CUSTOM_OPTIX_START, "RDB_PKG_ID_CUSTOM_OPTIX_START"},
224  {RDB_PKG_ID_OPTIX_BUFFER, "RDB_PKG_ID_OPTIX_BUFFER"},
225  {RDB_PKG_ID_CUSTOM_OPTIX_END, "RDB_PKG_ID_CUSTOM_OPTIX_END"},
226  {RDB_PKG_ID_CUSTOM_USER_A_START, "RDB_PKG_ID_CUSTOM_USER_A_START"},
227  {RDB_PKG_ID_CUSTOM_USER_A_END, "RDB_PKG_ID_CUSTOM_USER_A_END"},
228  {RDB_PKG_ID_CUSTOM_USER_B_START, "RDB_PKG_ID_CUSTOM_USER_B_START"},
229  {RDB_PKG_ID_CUSTOM_USER_B_END, "RDB_PKG_ID_CUSTOM_USER_B_END"}};
230  // clang-format on
231  return vtd_pkg_id_name_map.at(vtd_pkg_id);
232 }
233 
234 } // namespace vtd
Definition: rdb_codec.hpp:46
virtual void step(uint64_t frame_number, bool &restart, cloe::Duration &sim_time)
Definition: rdb_codec.cpp:290
bool processing_frame_
Indicates whether in between a start of frame and an end of frame message.
Definition: rdb_codec.hpp:163
RdbCodec(std::unique_ptr< RdbTransceiver > &&rdb_transceiver)
Definition: rdb_codec.hpp:54
virtual void process(RDB_START_OF_FRAME_t *)
Definition: rdb_codec.hpp:102
std::unique_ptr< RdbTransceiver > rdb_
Definition: rdb_codec.hpp:157
virtual const std::string & get_name() const =0
virtual void process(RDB_MSG_t *msg, bool &restart, cloe::Duration &sim_time)
Definition: rdb_codec.cpp:249
uint64_t frame_number_
Frame number from last processed RDB message.
Definition: rdb_codec.hpp:160
RdbCodec(RdbTransceiver *rdb_transceiver)
Definition: rdb_codec.hpp:63
virtual uint64_t frame_number() const
Definition: rdb_codec.hpp:74
Definition: rdb_transceiver.hpp:59
std::chrono::nanoseconds Duration
Definition: cloe_fwd.hpp:36