24 void set(float)
override 39 : _val(
lazy<float>([val]() {
return val; })), _desc(std::move(desc)) {}
42 : _val(
std::move(val)), _desc(
std::move(desc)) {}
44 float query()
const override {
return *_val; }
50 void update(std::shared_ptr<extension_snapshot> ext)
override 52 if (
auto opt = As<option>(ext))
54 auto new_val = opt->query();
56 _desc = opt->get_description();
68 : _opt_range(opt_range)
71 bool is_valid(
float value)
const;
78 std::function<void(const option&)> _recording_function = [](
const option&) {};
88 static_cast<float>(max),
89 static_cast<float>(step),
90 static_cast<float>(def), }),
91 _min(min), _max(max), _step(step), _def(def), _value(
value), _desc(desc)
94 _on_set = [](
float x) {};
99 T val =
static_cast<T
>(
value);
100 if ((_max < val) || (_min > val))
108 return static_cast<float>(*_value);
113 (float)_min, (
float)_max,
114 (float)_step, (
float)_def };
125 auto it = _item_desc.find(val);
126 if (it != _item_desc.end())
128 return it->second.c_str();
135 _item_desc[val] = desc;
140 T _min, _max, _step, _def;
143 std::map<float, std::string> _item_desc;
144 std::function<void(float)> _on_set;
150 void set(
float value)
override;
152 float query()
const override;
167 : _ep(ep), _id(id), _description_per_value(description_per_value)
175 if (_description_per_value.find(val) != _description_per_value.end())
176 return _description_per_value.at(val).c_str();
181 _record = record_action;
186 const std::map<float, std::string> _description_per_value;
187 std::function<void(const option &)> _record = [](
const option &) {};
199 T t =
static_cast<T
>(
value);
200 if (!dev.
set_xu(_xu, _id, reinterpret_cast<uint8_t*>(&t),
sizeof(T)))
202 _recording_function(*
this);
208 return static_cast<float>(_ep.invoke_powered(
212 if (!dev.
get_xu(_xu, _id, reinterpret_cast<uint8_t*>(&t),
sizeof(T)))
215 return static_cast<float>(t);
221 auto uvc_range = _ep.invoke_powered(
227 if (uvc_range.min.size() <
sizeof(int32_t))
return option_range{0,0,1,0};
229 auto min = *(
reinterpret_cast<int32_t*
>(uvc_range.min.data()));
230 auto max = *(
reinterpret_cast<int32_t*
>(uvc_range.max.data()));
231 auto step = *(
reinterpret_cast<int32_t*
>(uvc_range.step.data()));
232 auto def = *(
reinterpret_cast<int32_t*
>(uvc_range.def.data()));
234 static_cast<float>(max),
235 static_cast<float>(step),
236 static_cast<float>(def)};
242 : _ep(ep), _xu(xu), _id(id), _desciption(
std::move(description))
247 return _desciption.c_str();
251 _recording_function = record_action;
258 std::function<void(const option&)> _recording_function = [](
const option&) {};
261 inline std::string
hexify(
unsigned char n)
267 res +=
"0123456789ABCDEF"[n % 16];
271 reverse(res.begin(), res.end());
281 template<
class T,
class R,
class W,
class U>
287 _struct_interface->
set(_field,
value);
288 _recording_function(*
this);
292 return _struct_interface->get(_field);
313 _recording_function = record_action;
316 std::shared_ptr<struct_interface<T, R, W>> _struct_interface;
319 std::function<void(const option&)> _recording_function = [](
const option&) {};
322 template<
class T,
class R,
class W,
class U>
327 return std::make_shared<struct_field_option<T, R, W, U>>
334 std::vector<uint8_t> send_receive(
const std::vector<uint8_t>& data,
int,
bool require_response)
override;
338 : _uvc(uvc), _xu(
std::move(xu)), _ctrl(ctrl)
353 : _polling_error_handler(handler), _value(1)
356 void set(
float value);
370 _recording_function = record_action;
375 std::function<void(const option&)> _recording_function = [](
const option&) {};
385 return _auto_disabling_control->get_value_description(val);
389 return _auto_disabling_control->get_description();
393 auto strong = _auto_exposure.lock();
396 auto move_to_manual =
false;
397 auto val = strong->query();
399 if (std::find(_move_to_manual_values.begin(),
400 _move_to_manual_values.end(), val) != _move_to_manual_values.end())
402 move_to_manual =
true;
405 if (strong && move_to_manual)
407 LOG_DEBUG(
"Move option to manual mode in order to set a value");
408 strong->set(_manual_value);
410 _auto_disabling_control->set(value);
411 _recording_function(*
this);
416 return _auto_disabling_control->query();
421 return _auto_disabling_control->get_range();
426 return _auto_disabling_control->is_enabled();
431 return _auto_disabling_control->is_read_only();
436 std::vector<float> move_to_manual_values = {1.f},
437 float manual_value = 0.f)
439 : _auto_disabling_control(auto_disabling), _auto_exposure(auto_exposure),
440 _move_to_manual_values(move_to_manual_values), _manual_value(manual_value)
444 _recording_function = record_action;
447 std::shared_ptr<option> _auto_disabling_control;
448 std::weak_ptr<option> _auto_exposure;
449 std::vector<float> _move_to_manual_values;
451 std::function<void(const option&)> _recording_function = [](
const option&) {};
Definition: error-handling.h:9
bool is_enabled() const override
Definition: option.h:298
const option_range _opt_range
Definition: option.h:77
option_range get_range() const override
Definition: option.h:294
bool is_enabled() const override
Definition: option.h:46
virtual const char * get_description() const =0
const char * get_description() const override
Definition: option.h:121
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
const char * get_value_description(float val) const override
Definition: option.h:173
option_range get_range() const override
Definition: option.h:219
bool is_read_only() const override
Definition: option.h:429
virtual void set(float value)=0
float query() const override
Definition: option.h:106
uvc_pu_option(uvc_sensor &ep, rs2_option id)
Definition: option.h:161
bool is_enabled() const override
Definition: option.h:424
std::string _desciption
Definition: option.h:257
float query() const override
Definition: option.h:206
uvc_xu_option(uvc_sensor &ep, platform::extension_unit xu, uint8_t id, std::string description)
Definition: option.h:241
option_range get_range() const override
Definition: option.h:45
auto_disabling_control class provided a control that disable auto-control when changing the auto disa...
Definition: option.h:380
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:119
virtual option_range get_range() const =0
bool is_read_only() const override
Definition: option.h:22
const char * get_value_description(float val) const override
Definition: option.h:123
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:368
virtual float query() const =0
const char * get_description() const override
Definition: option.h:387
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:442
struct_field_option(std::shared_ptr< struct_interface< T, R, W >> struct_interface, U T::*field, const option_range &range)
Definition: option.h:300
std::shared_ptr< struct_field_option< T, R, W, U > > make_field_option(std::shared_ptr< struct_interface< T, R, W >> struct_interface, U T::*field, const option_range &range)
Definition: option.h:323
const char * get_value_description(float val) const override
Definition: option.h:383
#define LOG_DEBUG(...)
Definition: types.h:108
uvc_sensor & _ep
Definition: option.h:254
void set_description(float val, const std::string &desc)
Definition: option.h:133
const char * get_description() const override
Definition: option.h:306
virtual const char * get_value_description(float) const
Definition: options.h:29
virtual bool is_enabled() const =0
polling_errors_disable(polling_error_handler *handler)
Definition: option.h:352
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:179
uvc_pu_option(uvc_sensor &ep, rs2_option id, const std::map< float, std::string > &description_per_value)
Definition: option.h:166
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:29
auto_disabling_control(std::shared_ptr< option > auto_disabling, std::shared_ptr< option > auto_exposure, std::vector< float > move_to_manual_values={1.f}, float manual_value=0.f)
Definition: option.h:434
float query() const override
Definition: option.h:290
const_value_option(std::string desc, float val)
Definition: option.h:38
float query() const override
Definition: option.h:44
ptr_option(T min, T max, T step, T def, T *value, const std::string &desc)
Definition: option.h:86
platform::extension_unit _xu
Definition: option.h:255
option_range get_range() const override
Definition: option.h:419
const_value_option(std::string desc, lazy< float > val)
Definition: option.h:41
command_transfer_over_xu(uvc_sensor &uvc, platform::extension_unit xu, uint8_t ctrl)
Definition: option.h:336
bool is_enabled() const override
Definition: option.h:117
option_range get_range() const override
Definition: option.h:111
std::string hexify(unsigned char n)
Definition: option.h:261
const char * get_description() const override
Definition: option.h:245
void update(std::shared_ptr< extension_snapshot > ext) override
Definition: option.h:50
const char * get_description() const override
Definition: option.h:48
bool is_enabled() const override
Definition: option.h:156
uint8_t _id
Definition: option.h:256
void on_set(std::function< void(float)> on_set)
Definition: option.h:138
Definition: extension.h:33
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:311
bool is_enabled() const override
Definition: option.h:239
option_base(const option_range &opt_range)
Definition: option.h:67
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:249
float query() const override
Definition: option.h:414