Intel® RealSense™ Cross Platform API
Intel Realsense Cross-platform API
advanced_mode.h
Go to the documentation of this file.
1 // License: Apache 2.0. See LICENSE file in root directory.
2 // Copyright(c) 2017 Intel Corporation. All Rights Reserved.
3 #pragma once
4 
5 #include "ds5/ds5-private.h"
6 #include "hw-monitor.h"
7 #include "streaming.h"
8 #include "option.h"
9 #define RS400_ADVANCED_MODE_HPP
11 #include "../../include/librealsense2/h/rs_advanced_mode_command.h"
12 #undef RS400_ADVANCED_MODE_HPP
13 
14 
15 typedef enum
16 {
18  etRsm = 1,
24  etHdad = 7,
29  etLastAdvancedModeGroup = 12, // Must be last
30 }
32 
33 namespace librealsense
34 {
35  class ds5_color_sensor;
36 
37  template<class T>
39 
40  #define MAP_ADVANCED_MODE(T, E) template<> struct advanced_mode_traits<T> { static const EtAdvancedModeRegGroup group = E; }
41 
54 
55 
56  class ds5_advanced_mode_interface : public recordable<ds5_advanced_mode_interface>
57  {
58  public:
59  virtual bool is_enabled() const = 0;
60 
61  virtual void toggle_advanced_mode(bool enable) = 0;
62 
63  virtual void apply_preset(const std::vector<platform::stream_profile>& configuration,
64  rs2_rs400_visual_preset preset, uint16_t device_pid,
65  const firmware_version& fw_version) = 0;
66 
67  virtual void get_depth_control_group(STDepthControlGroup* ptr, int mode = 0) const = 0;
68  virtual void get_rsm(STRsm* ptr, int mode = 0) const = 0;
69  virtual void get_rau_support_vector_control(STRauSupportVectorControl* ptr, int mode = 0) const = 0;
70  virtual void get_color_control(STColorControl* ptr, int mode = 0) const = 0;
71  virtual void get_rau_color_thresholds_control(STRauColorThresholdsControl* ptr, int mode = 0) const = 0;
72  virtual void get_slo_color_thresholds_control(STSloColorThresholdsControl* ptr, int mode = 0) const = 0;
73  virtual void get_slo_penalty_control(STSloPenaltyControl* ptr, int mode = 0) const = 0;
74  virtual void get_hdad(STHdad* ptr, int mode = 0) const = 0;
75  virtual void get_color_correction(STColorCorrection* ptr, int mode = 0) const = 0;
76  virtual void get_depth_table_control(STDepthTableControl* ptr, int mode = 0) const = 0;
77  virtual void get_ae_control(STAEControl* ptr, int mode = 0) const = 0;
78  virtual void get_census_radius(STCensusRadius* ptr, int mode = 0) const = 0;
79 
80  virtual void set_depth_control_group(const STDepthControlGroup& val) = 0;
81  virtual void set_rsm(const STRsm& val) = 0;
82  virtual void set_rau_support_vector_control(const STRauSupportVectorControl& val) = 0;
83  virtual void set_color_control(const STColorControl& val) = 0;
86  virtual void set_slo_penalty_control(const STSloPenaltyControl& val) = 0;
87  virtual void set_hdad(const STHdad& val) = 0;
88  virtual void set_color_correction(const STColorCorrection& val) = 0;
89  virtual void set_depth_table_control(const STDepthTableControl& val) = 0;
90  virtual void set_ae_control(const STAEControl& val) = 0;
91  virtual void set_census_radius(const STCensusRadius& val) = 0;
92 
93  virtual std::vector<uint8_t> serialize_json() const = 0;
94  virtual void load_json(const std::string& json_content) = 0;
95 
96  virtual ~ds5_advanced_mode_interface() = default;
97  };
98 
100 
102 
104  {
105  public:
106  explicit ds5_advanced_mode_base(std::shared_ptr<hw_monitor> hwm,
108 
109  void create_snapshot(std::shared_ptr<ds5_advanced_mode_interface>& snapshot) const override {};
110  void enable_recording(std::function<void(const ds5_advanced_mode_interface&)> recording_function) override {};
111 
112  virtual ~ds5_advanced_mode_base() = default;
113 
114  bool is_enabled() const override;
115  void toggle_advanced_mode(bool enable) override;
116  void apply_preset(const std::vector<platform::stream_profile>& configuration,
117  rs2_rs400_visual_preset preset, uint16_t device_pid,
118  const firmware_version& fw_version) override;
119 
120  void get_depth_control_group(STDepthControlGroup* ptr, int mode = 0) const override;
121  void get_rsm(STRsm* ptr, int mode = 0) const override;
122  void get_rau_support_vector_control(STRauSupportVectorControl* ptr, int mode = 0) const override;
123  void get_color_control(STColorControl* ptr, int mode = 0) const override;
124  void get_rau_color_thresholds_control(STRauColorThresholdsControl* ptr, int mode = 0) const override;
125  void get_slo_color_thresholds_control(STSloColorThresholdsControl* ptr, int mode = 0) const override;
126  void get_slo_penalty_control(STSloPenaltyControl* ptr, int mode = 0) const override;
127  void get_hdad(STHdad* ptr, int mode = 0) const override;
128  void get_color_correction(STColorCorrection* ptr, int mode = 0) const override;
129  void get_depth_table_control(STDepthTableControl* ptr, int mode = 0) const override;
130  void get_ae_control(STAEControl* ptr, int mode = 0) const override;
131  void get_census_radius(STCensusRadius* ptr, int mode = 0) const override;
132 
133  void set_depth_control_group(const STDepthControlGroup& val) override;
134  void set_rsm(const STRsm& val) override;
136  void set_color_control(const STColorControl& val) override;
139  void set_slo_penalty_control(const STSloPenaltyControl& val) override;
140  void set_hdad(const STHdad& val) override;
141  void set_color_correction(const STColorCorrection& val) override;
142  void set_depth_table_control(const STDepthTableControl& val) override;
143  void set_ae_control(const STAEControl& val) override;
144  void set_census_radius(const STCensusRadius& val) override;
145 
146  std::vector<uint8_t> serialize_json() const;
147  void load_json(const std::string& json_content);
148 
149  private:
150  void set_exposure(uvc_sensor& sensor, const exposure_control& val);
151  void set_auto_exposure(uvc_sensor& sensor, const auto_exposure_control& val);
152  void get_exposure(uvc_sensor& sensor, exposure_control* ptr) const;
153  void get_auto_exposure(uvc_sensor& sensor, auto_exposure_control* ptr) const;
154 
155  void get_laser_power(laser_power_control* ptr) const;
156  void get_laser_state(laser_state_control* ptr) const;
157  void get_depth_exposure(exposure_control* ptr) const;
158  void get_depth_auto_exposure(auto_exposure_control* ptr) const;
159  void get_depth_gain(gain_control* ptr) const;
160  void get_depth_auto_white_balance(auto_white_balance_control* ptr) const;
161  void get_color_exposure(exposure_control* ptr) const;
162  void get_color_auto_exposure(auto_exposure_control* ptr) const;
163  void get_color_backlight_compensation(backlight_compensation_control* ptr) const;
164  void get_color_brightness(brightness_control* ptr) const;
165  void get_color_contrast(contrast_control* ptr) const;
166  void get_color_gain(gain_control* ptr) const;
167  void get_color_gamma(gamma_control* ptr) const;
168  void get_color_hue(hue_control* ptr) const;
169  void get_color_saturation(saturation_control* ptr) const;
170  void get_color_sharpness(sharpness_control* ptr) const;
171  void get_color_white_balance(white_balance_control* ptr) const;
172  void get_color_auto_white_balance(auto_white_balance_control* ptr) const;
173  void get_color_power_line_frequency(power_line_frequency_control* ptr) const;
174 
175  void set_laser_power(const laser_power_control& val);
176  void set_laser_state(const laser_state_control& val);
177  void set_depth_exposure(const exposure_control& val);
178  void set_depth_auto_exposure(const auto_exposure_control& val);
179  void set_depth_gain(const gain_control& val);
180  void set_depth_auto_white_balance(const auto_white_balance_control& val);
181  void set_color_exposure(const exposure_control& val);
182  void set_color_auto_exposure(const auto_exposure_control& val);
183  void set_color_backlight_compensation(const backlight_compensation_control& val);
184  void set_color_brightness(const brightness_control& val);
185  void set_color_contrast(const contrast_control& val);
186  void set_color_gain(const gain_control& val);
187  void set_color_gamma(const gamma_control& val);
188  void set_color_hue(const hue_control& val);
189  void set_color_saturation(const saturation_control& val);
190  void set_color_sharpness(const sharpness_control& val);
191  void set_color_white_balance(const white_balance_control& val);
192  void set_color_auto_white_balance(const auto_white_balance_control& val);
193  void set_color_power_line_frequency(const power_line_frequency_control& val);
194 
195  bool supports_option(const uvc_sensor& sensor, rs2_option opt) const;
196 
197  std::shared_ptr<hw_monitor> _hw_monitor;
198  uvc_sensor& _depth_sensor;
199  lazy<ds5_color_sensor*> _color_sensor;
200  lazy<bool> _enabled;
201  std::shared_ptr<advanced_mode_preset_option> _preset_opt;
202 
203  static const uint16_t HW_MONITOR_COMMAND_SIZE = 1000;
204  static const uint16_t HW_MONITOR_BUFFER_SIZE = 1024;
205 
206  preset get_all() const;
207  void set_all(const preset& p);
208 
209  std::vector<uint8_t> send_receive(const std::vector<uint8_t>& input) const;
210 
211  template<class T>
212  void set(const T& strct, EtAdvancedModeRegGroup cmd) const
213  {
214  auto ptr = (uint8_t*)(&strct);
215  std::vector<uint8_t> data(ptr, ptr + sizeof(T));
216 
217  assert_no_error(ds::fw_cmd::SET_ADV,
218  send_receive(encode_command(ds::fw_cmd::SET_ADV, static_cast<uint32_t>(cmd), 0, 0, 0, data)));
219  std::this_thread::sleep_for(std::chrono::milliseconds(20));
220  }
221 
222  template<class T>
223  T get(EtAdvancedModeRegGroup cmd, T* ptr = static_cast<T*>(nullptr), int mode = 0) const
224  {
225  T res;
226  auto data = assert_no_error(ds::fw_cmd::GET_ADV,
227  send_receive(encode_command(ds::fw_cmd::GET_ADV,
228  static_cast<uint32_t>(cmd), mode)));
229  if (data.size() < sizeof(T))
230  {
231  throw std::runtime_error("The camera returned invalid sized result!");
232  }
233  res = *reinterpret_cast<T*>(data.data());
234  return res;
235  }
236 
237  static uint32_t pack(uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3);
238 
239  static std::vector<uint8_t> assert_no_error(ds::fw_cmd opcode, const std::vector<uint8_t>& results);
240 
241  std::vector<uint8_t> encode_command(ds::fw_cmd opcode,
242  uint32_t p1 = 0,
243  uint32_t p2 = 0,
244  uint32_t p3 = 0,
245  uint32_t p4 = 0,
246  std::vector<uint8_t> data = std::vector<uint8_t>()) const;
247  };
248 
249 
251  {
252  public:
254  const option_range& opt_range);
255 
256  static rs2_rs400_visual_preset to_preset(float x);
257  void set(float value) override;
258  float query() const override;
259  bool is_enabled() const override;
260  const char* get_description() const override;
261  const char* get_value_description(float val) const override;
262 
263  private:
264  uint16_t get_device_pid(const uvc_sensor& sensor) const;
265  firmware_version get_firmware_version(const uvc_sensor& sensor) const;
266 
267  std::mutex _mtx;
268  uvc_sensor& _ep;
269  ds5_advanced_mode_base& _advanced;
270  rs2_rs400_visual_preset _last_preset;
271  };
272 }
virtual void get_hdad(STHdad *ptr, int mode=0) const =0
virtual void load_json(const std::string &json_content)=0
Definition: advanced_mode.h:25
virtual void set_color_control(const STColorControl &val)=0
virtual void set_rau_support_vector_control(const STRauSupportVectorControl &val)=0
Definition: presets.h:27
virtual void set_color_correction(const STColorCorrection &val)=0
Definition: backend.h:380
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
Definition: rs_advanced_mode_command.h:48
virtual void set_depth_control_group(const STDepthControlGroup &val)=0
virtual void get_rau_support_vector_control(STRauSupportVectorControl *ptr, int mode=0) const =0
Definition: presets.h:81
Definition: advanced_mode.h:21
Definition: types.h:269
virtual void set_hdad(const STHdad &val)=0
Definition: rs_advanced_mode_command.h:14
virtual void set_depth_table_control(const STDepthTableControl &val)=0
virtual void get_ae_control(STAEControl *ptr, int mode=0) const =0
Definition: advanced_mode.h:23
Definition: advanced_mode.h:18
Definition: presets.h:75
Definition: advanced_mode.h:24
MAP_ADVANCED_MODE(STDepthControlGroup, etDepthControl)
virtual void set_slo_color_thresholds_control(const STSloColorThresholdsControl &val)=0
Definition: rs_types.h:109
Definition: presets.h:9
Definition: presets.h:45
Definition: rs_advanced_mode_command.h:71
Definition: rs_advanced_mode_command.h:28
virtual void apply_preset(const std::vector< platform::stream_profile > &configuration, rs2_rs400_visual_preset preset, uint16_t device_pid, const firmware_version &fw_version)=0
Definition: algo.h:16
virtual void get_color_correction(STColorCorrection *ptr, int mode=0) const =0
Definition: advanced_mode.h:17
virtual void set_census_radius(const STCensusRadius &val)=0
virtual void get_rsm(STRsm *ptr, int mode=0) const =0
Definition: option.h:64
Definition: presets.h:15
Definition: advanced_mode.h:29
Definition: advanced_mode.h:103
Definition: advanced_mode.h:28
Definition: presets.h:69
virtual void get_color_control(STColorControl *ptr, int mode=0) const =0
Definition: rs_advanced_mode_command.h:64
Definition: advanced_mode.h:26
void enable_recording(std::function< void(const ds5_advanced_mode_interface &)> recording_function) override
Definition: advanced_mode.h:110
Definition: advanced_mode.h:250
virtual void get_depth_control_group(STDepthControlGroup *ptr, int mode=0) const =0
virtual void get_census_radius(STCensusRadius *ptr, int mode=0) const =0
Definition: rs_advanced_mode_command.h:89
Definition: rs_advanced_mode_command.h:105
Definition: rs_advanced_mode_command.h:119
Definition: options.h:12
Definition: advanced_mode.h:56
virtual void get_slo_penalty_control(STSloPenaltyControl *ptr, int mode=0) const =0
virtual void get_depth_table_control(STDepthTableControl *ptr, int mode=0) const =0
const uint16_t HW_MONITOR_BUFFER_SIZE
Definition: hw-monitor.h:38
Definition: advanced_mode.h:22
Definition: ds5-private.h:93
const uint16_t HW_MONITOR_COMMAND_SIZE
Definition: hw-monitor.h:37
virtual void set_ae_control(const STAEControl &val)=0
Definition: advanced_mode.h:19
Definition: advanced_mode.h:27
virtual std::vector< uint8_t > serialize_json() const =0
Definition: presets.h:33
Definition: types.h:674
Definition: presets.h:63
Definition: presets.h:99
Definition: advanced_mode.h:20
Definition: rs_advanced_mode_command.h:82
virtual void set_rsm(const STRsm &val)=0
rs2_rs400_visual_preset
For RS400 devices: provides optimized settings (presets) for specific types of usage.
Definition: rs_option.h:89
Definition: ds5-color.h:33
virtual void toggle_advanced_mode(bool enable)=0
Definition: extension.h:46
Definition: ds5-private.h:94
Definition: advanced_mode.h:38
Definition: presets.h:57
Definition: presets.h:21
virtual void get_slo_color_thresholds_control(STSloColorThresholdsControl *ptr, int mode=0) const =0
Definition: rs_advanced_mode_command.h:57
Definition: streaming.h:158
virtual void set_slo_penalty_control(const STSloPenaltyControl &val)=0
virtual void set_rau_color_thresholds_control(const STRauColorThresholdsControl &val)=0
Definition: rs_advanced_mode_command.h:110
uint32_t pack(uint8_t c0, uint8_t c1, uint8_t c2, uint8_t c3)
Definition: types.h:979
Definition: presets.h:51
Definition: rs_advanced_mode_command.h:36
MAP_EXTENSION(RS2_EXTENSION_POINTS, librealsense::points)
Definition: sensor.h:175
virtual void get_rau_color_thresholds_control(STRauColorThresholdsControl *ptr, int mode=0) const =0
void create_snapshot(std::shared_ptr< ds5_advanced_mode_interface > &snapshot) const override
Definition: advanced_mode.h:109
EtAdvancedModeRegGroup
Definition: advanced_mode.h:15
fw_cmd
Definition: ds5-private.h:86