$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 // This comes from VTD:
31 #ifdef VTD_API_2_2_0
32  #include <RDBHandler.hh> // for RDB_MSG_t
33 #else
34  #include <VtdToolkit/RDBHandler.hh>
35 #endif
36 #include <cloe/core.hpp> // for Json, Duration
37 
38 #include "rdb_transceiver.hpp" // for RdbTransceiver
39 
40 namespace vtd {
41 
45 class RdbCodec {
46  public:
47  virtual ~RdbCodec() = default;
48  RdbCodec() = delete;
49 
53  explicit RdbCodec(std::unique_ptr<RdbTransceiver>&& rdb_transceiver)
54  : rdb_(std::move(rdb_transceiver)) {}
55 
62  explicit RdbCodec(RdbTransceiver* rdb_transceiver) : rdb_(rdb_transceiver) {}
63 
68  virtual const std::string& get_name() const = 0;
69 
73  virtual uint64_t frame_number() const { return frame_number_; }
74 
78  virtual void step(uint64_t frame_number, bool& restart, cloe::Duration& sim_time);
79 
86  virtual void process(RDB_MSG_t* msg, bool& restart, cloe::Duration& sim_time);
87 
94  virtual void process(RDB_MSG_ENTRY_HDR_t* entry);
95 
101  virtual void process(RDB_START_OF_FRAME_t* /*start_of_frame*/) {}
102 
103  virtual void process(RDB_END_OF_FRAME_t* /*end_of_frame*/) {}
104  virtual void process(RDB_COORD_SYSTEM_t* /*coord_system*/) {}
105  virtual void process(RDB_COORD_t* /*coord*/) {}
106  virtual void process(RDB_ROAD_POS_t* /*road_pos*/) {}
107  virtual void process(RDB_LANE_INFO_t* /*lane_info*/) {}
108  virtual void process(RDB_ROADMARK_t* /*roadmark*/) {}
109  virtual void process(RDB_OBJECT_CFG_t* /*object_cfg*/) {}
110  virtual void process(RDB_OBJECT_STATE_t* /*object_state*/, bool /*extended*/) {}
111  virtual void process(RDB_VEHICLE_SYSTEMS_t* /*vehicle_systems*/) {}
112  virtual void process(RDB_VEHICLE_SETUP_t* /*vehicle_setup*/) {}
113  virtual void process(RDB_ENGINE_t* /*engine*/, bool /*extended*/) {}
114  virtual void process(RDB_DRIVETRAIN_t* /*drivetrain*/, bool /*extended*/) {}
115  virtual void process(RDB_WHEEL_t* /*wheel*/, bool /*extended*/) {}
116  virtual void process(RDB_PED_ANIMATION_t* /*ped_animation*/) {}
117  virtual void process(RDB_SENSOR_STATE_t* /*sensor_state*/) {}
118  virtual void process(RDB_SENSOR_OBJECT_t* /*sensor_object*/) {}
119  virtual void process(RDB_CAMERA_t* /*camera*/) {}
120  virtual void process(RDB_CONTACT_POINT_t* /*contact_point*/) {}
121  virtual void process(RDB_TRAFFIC_SIGN_t* /*traffic_sign*/) {}
122  virtual void process(RDB_ROAD_STATE_t* /*road_state*/) {}
123  virtual void process(RDB_IMAGE_t* /*image*/) {}
124  virtual void process(RDB_LIGHT_SOURCE_t* /*light_source*/, bool /*extended*/) {}
125  virtual void process(RDB_ENVIRONMENT_t* /*environment*/) {}
126  virtual void process(RDB_TRIGGER_t* /*trigger*/) {}
127  virtual void process(RDB_DRIVER_CTRL_t* /*driver_ctrl*/) {}
128  virtual void process(RDB_TRAFFIC_LIGHT_t* /*traffic_light*/, bool /*extended*/) {}
129  virtual void process(RDB_SYNC_t* /*sync*/) {}
130  virtual void process(RDB_DRIVER_PERCEPTION_t* /*driver_perception*/) {}
131  virtual void process(RDB_FUNCTION_t* /*function*/) {}
132  virtual void process(RDB_ROAD_QUERY_t* /*road_query*/) {}
133  virtual void process(RDB_TRAJECTORY_t* /*trajectory*/) {}
134  virtual void process(RDB_DYN_2_STEER_t* /*dyn_to_steer*/) {}
135  virtual void process(RDB_STEER_2_DYN_t* /*steer_to_dyn*/) {}
136  virtual void process(RDB_PROXY_t* /*proxy*/) {}
137  virtual void process(RDB_MOTION_SYSTEM_t* /*motion_system*/) {}
138  virtual void process(RDB_FREESPACE_t* /*freepsace*/) {}
139  virtual void process(RDB_DYN_EL_SWITCH_t* /*dyn_el_switch*/) {}
140  virtual void process(RDB_DYN_EL_DOF_t* /*dyn_el_dof*/) {}
141  virtual void process(RDB_IG_FRAME_t* /*ig_frame*/) {}
142  virtual void process(RDB_RT_PERFORMANCE_t* /*rt_performance*/) {}
143  virtual void process(RDB_CUSTOM_SCORING_t* /*custom_scoring*/) {}
144  virtual void process(RDB_CUSTOM_OBJECT_CTRL_TRACK_t* /*custom_object_ctrl_track*/) {}
145 
146  friend void to_json(cloe::Json& j, const RdbCodec& c) {
147  j = cloe::Json{
148  {"rdb_connection", *c.rdb_},
149  {"frame_number", c.frame_number_},
150  };
151  }
152 
153  protected:
156  std::unique_ptr<RdbTransceiver> rdb_;
157 
159  uint64_t frame_number_ = 0;
160 
162  bool processing_frame_ = false;
163 };
164 
165 inline std::string vtd_pkg_id_to_string(uint16_t vtd_pkg_id) {
166  // clang-format off
167  static const std::map<int, const char*> vtd_pkg_id_name_map{
168  {RDB_PKG_ID_START_OF_FRAME, "RDB_PKG_ID_START_OF_FRAME"},
169  {RDB_PKG_ID_END_OF_FRAME, "RDB_PKG_ID_END_OF_FRAME"},
170  {RDB_PKG_ID_COORD_SYSTEM, "RDB_PKG_ID_COORD_SYSTEM"},
171  {RDB_PKG_ID_COORD, "RDB_PKG_ID_COORD"},
172  {RDB_PKG_ID_ROAD_POS, "RDB_PKG_ID_ROAD_POS"},
173  {RDB_PKG_ID_LANE_INFO, "RDB_PKG_ID_LANE_INFO"},
174  {RDB_PKG_ID_ROADMARK, "RDB_PKG_ID_ROADMARK"},
175  {RDB_PKG_ID_OBJECT_CFG, "RDB_PKG_ID_OBJECT_CFG"},
176  {RDB_PKG_ID_OBJECT_STATE, "RDB_PKG_ID_OBJECT_STATE"},
177  {RDB_PKG_ID_VEHICLE_SYSTEMS, "RDB_PKG_ID_VEHICLE_SYSTEMS"},
178  {RDB_PKG_ID_VEHICLE_SETUP, "RDB_PKG_ID_VEHICLE_SETUP"},
179  {RDB_PKG_ID_ENGINE, "RDB_PKG_ID_ENGINE"},
180  {RDB_PKG_ID_DRIVETRAIN, "RDB_PKG_ID_DRIVETRAIN"},
181  {RDB_PKG_ID_WHEEL, "RDB_PKG_ID_WHEEL"},
182  {RDB_PKG_ID_PED_ANIMATION, "RDB_PKG_ID_PED_ANIMATION"},
183  {RDB_PKG_ID_SENSOR_STATE, "RDB_PKG_ID_SENSOR_STATE"},
184  {RDB_PKG_ID_SENSOR_OBJECT, "RDB_PKG_ID_SENSOR_OBJECT"},
185  {RDB_PKG_ID_CAMERA, "RDB_PKG_ID_CAMERA"},
186  {RDB_PKG_ID_CONTACT_POINT, "RDB_PKG_ID_CONTACT_POINT"},
187  {RDB_PKG_ID_TRAFFIC_SIGN, "RDB_PKG_ID_TRAFFIC_SIGN"},
188  {RDB_PKG_ID_ROAD_STATE, "RDB_PKG_ID_ROAD_STATE"},
189  {RDB_PKG_ID_IMAGE, "RDB_PKG_ID_IMAGE"},
190  {RDB_PKG_ID_LIGHT_SOURCE, "RDB_PKG_ID_LIGHT_SOURCE"},
191  {RDB_PKG_ID_ENVIRONMENT, "RDB_PKG_ID_ENVIRONMENT"},
192  {RDB_PKG_ID_TRIGGER, "RDB_PKG_ID_TRIGGER"},
193  {RDB_PKG_ID_DRIVER_CTRL, "RDB_PKG_ID_DRIVER_CTRL"},
194  {RDB_PKG_ID_TRAFFIC_LIGHT, "RDB_PKG_ID_TRAFFIC_LIGHT"},
195  {RDB_PKG_ID_SYNC, "RDB_PKG_ID_SYNC"},
196  {RDB_PKG_ID_DRIVER_PERCEPTION, "RDB_PKG_ID_DRIVER_PERCEPTION"},
197  {RDB_PKG_ID_LIGHT_MAP, "RDB_PKG_ID_LIGHT_MAP"},
198  {RDB_PKG_ID_TONE_MAPPING, "RDB_PKG_ID_TONE_MAPPING"},
199  {RDB_PKG_ID_ROAD_QUERY, "RDB_PKG_ID_ROAD_QUERY"},
200  {RDB_PKG_ID_SCP, "RDB_PKG_ID_SCP"},
201  {RDB_PKG_ID_TRAJECTORY, "RDB_PKG_ID_TRAJECTORY"},
202  {RDB_PKG_ID_DYN_2_STEER, "RDB_PKG_ID_DYN_2_STEER"},
203  {RDB_PKG_ID_STEER_2_DYN, "RDB_PKG_ID_STEER_2_DYN"},
204  {RDB_PKG_ID_PROXY, "RDB_PKG_ID_PROXY"},
205  {RDB_PKG_ID_MOTION_SYSTEM, "RDB_PKG_ID_MOTION_SYSTEM"},
206  {RDB_PKG_ID_OCCLUSION_MATRIX, "RDB_PKG_ID_OCCLUSION_MATRIX"},
207  {RDB_PKG_ID_FREESPACE, "RDB_PKG_ID_FREESPACE"},
208  {RDB_PKG_ID_DYN_EL_SWITCH, "RDB_PKG_ID_DYN_EL_SWITCH"},
209  {RDB_PKG_ID_DYN_EL_DOF, "RDB_PKG_ID_DYN_EL_DOF"},
210  {RDB_PKG_ID_IG_FRAME, "RDB_PKG_ID_IG_FRAME"},
211  {RDB_PKG_ID_RAY, "RDB_PKG_ID_RAY"},
212  {RDB_PKG_ID_RT_PERFORMANCE, "RDB_PKG_ID_RT_PERFORMANCE"},
213  {RDB_PKG_ID_CUSTOM_SCORING, "RDB_PKG_ID_CUSTOM_SCORING"},
214  {RDB_PKG_ID_CUSTOM_OBJECT_CTRL_TRACK, "RDB_PKG_ID_CUSTOM_OBJECT_CTRL_TRACK"},
215  {RDB_PKG_ID_CUSTOM_LIGHT_B, "RDB_PKG_ID_CUSTOM_LIGHT_B"},
216  {RDB_PKG_ID_CUSTOM_LIGHT_A, "RDB_PKG_ID_CUSTOM_LIGHT_A"},
217  {RDB_PKG_ID_CUSTOM_LIGHT_GROUP_B, "RDB_PKG_ID_CUSTOM_LIGHT_GROUP_B"},
218 #if RDB_VERSION >= 0x011E
219  {RDB_PKG_ID_CUSTOM_LOOK_AHEAD, "RDB_PKG_ID_CUSTOM_LOOK_AHEAD"},
220 #endif
221  {RDB_PKG_ID_CUSTOM_AUDI_FORUM, "RDB_PKG_ID_CUSTOM_AUDI_FORUM"},
222  {RDB_PKG_ID_CUSTOM_OPTIX_START, "RDB_PKG_ID_CUSTOM_OPTIX_START"},
223  {RDB_PKG_ID_OPTIX_BUFFER, "RDB_PKG_ID_OPTIX_BUFFER"},
224  {RDB_PKG_ID_CUSTOM_OPTIX_END, "RDB_PKG_ID_CUSTOM_OPTIX_END"},
225  {RDB_PKG_ID_CUSTOM_USER_A_START, "RDB_PKG_ID_CUSTOM_USER_A_START"},
226  {RDB_PKG_ID_CUSTOM_USER_A_END, "RDB_PKG_ID_CUSTOM_USER_A_END"},
227  {RDB_PKG_ID_CUSTOM_USER_B_START, "RDB_PKG_ID_CUSTOM_USER_B_START"},
228  {RDB_PKG_ID_CUSTOM_USER_B_END, "RDB_PKG_ID_CUSTOM_USER_B_END"}};
229  // clang-format on
230  return vtd_pkg_id_name_map.at(vtd_pkg_id);
231 }
232 
233 } // namespace vtd
virtual void step(uint64_t frame_number, bool &restart, cloe::Duration &sim_time)
Definition: rdb_codec.cpp:290
Definition: actuator_component.hpp:35
virtual void process(RDB_MSG_t *msg, bool &restart, cloe::Duration &sim_time)
Definition: rdb_codec.cpp:249
std::chrono::nanoseconds Duration
Definition: duration.hpp:45
bool processing_frame_
Indicates whether in between a start of frame and an end of frame message.
Definition: rdb_codec.hpp:162
RdbCodec(RdbTransceiver *rdb_transceiver)
Definition: rdb_codec.hpp:62
virtual uint64_t frame_number() const
Definition: rdb_codec.hpp:73
virtual const std::string & get_name() const =0
RdbCodec(std::unique_ptr< RdbTransceiver > &&rdb_transceiver)
Definition: rdb_codec.hpp:53
Definition: rdb_codec.hpp:45
virtual void process(RDB_START_OF_FRAME_t *)
Definition: rdb_codec.hpp:101
std::unique_ptr< RdbTransceiver > rdb_
Definition: rdb_codec.hpp:156
Definition: rdb_transceiver.hpp:56
uint64_t frame_number_
Frame number from last processed RDB message.
Definition: rdb_codec.hpp:159