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();
80 return (fabs(fmod(n, 1)) < std::numeric_limits<float>::min());
103 static_cast<float>(max),
104 static_cast<float>(step),
105 static_cast<float>(def), }),
106 _min(min), _max(max), _step(step), _def(def), _value(
value), _desc(desc)
109 _on_set = [](
float x) {};
114 T val =
static_cast<T
>(
value);
115 if ((_max < val) || (_min > val))
123 return static_cast<float>(*_value);
128 (float)_min, (
float)_max,
129 (float)_step, (
float)_def };
140 auto it = _item_desc.find(val);
141 if (it != _item_desc.end())
143 return it->second.c_str();
150 _item_desc[val] = desc;
155 T _min, _max, _step, _def;
158 std::map<float, std::string> _item_desc;
159 std::function<void(float)> _on_set;
165 void set(
float value)
override;
167 float query()
const override;
182 : _ep(ep), _id(id), _description_per_value(description_per_value)
190 if (_description_per_value.find(val) != _description_per_value.end())
191 return _description_per_value.at(val).c_str();
196 _record = record_action;
201 const std::map<float, std::string> _description_per_value;
202 std::function<void(const option &)> _record = [](
const option &) {};
214 T t =
static_cast<T
>(
value);
215 if (!dev.
set_xu(
_xu,
_id, reinterpret_cast<uint8_t*>(&t),
sizeof(T)))
227 if (!dev.
get_xu(
_xu,
_id, reinterpret_cast<uint8_t*>(&t),
sizeof(T)))
230 return static_cast<float>(t);
242 if (uvc_range.min.size() <
sizeof(int32_t))
return option_range{0,0,1,0};
244 auto min = *(
reinterpret_cast<int32_t*
>(uvc_range.min.data()));
245 auto max = *(
reinterpret_cast<int32_t*
>(uvc_range.max.data()));
246 auto step = *(
reinterpret_cast<int32_t*
>(uvc_range.step.data()));
247 auto def = *(
reinterpret_cast<int32_t*
>(uvc_range.def.data()));
249 static_cast<float>(max),
250 static_cast<float>(step),
251 static_cast<float>(def)};
276 inline std::string
hexify(
unsigned char n)
282 res +=
"0123456789ABCDEF"[n % 16];
286 reverse(res.begin(), res.end());
296 template<
class T,
class R,
class W,
class U>
302 _struct_interface->set(_field,
value);
303 _recording_function(*
this);
307 return _struct_interface->get(_field);
328 _recording_function = record_action;
331 std::shared_ptr<struct_interface<T, R, W>> _struct_interface;
334 std::function<void(const option&)> _recording_function = [](
const option&) {};
337 template<
class T,
class R,
class W,
class U>
342 return std::make_shared<struct_field_option<T, R, W, U>>
349 std::vector<uint8_t>
send_receive(
const std::vector<uint8_t>& data,
int,
bool require_response)
override;
353 : _uvc(uvc), _xu(
std::move(xu)), _ctrl(ctrl)
368 : _polling_error_handler(handler), _value(1)
371 void set(
float value);
385 _recording_function = record_action;
390 std::function<void(const option&)> _recording_function = [](
const option&) {};
400 return _auto_disabling_control->get_value_description(val);
404 return _auto_disabling_control->get_description();
408 auto strong = _auto_exposure.lock();
411 auto move_to_manual =
false;
412 auto val = strong->query();
414 if (std::find(_move_to_manual_values.begin(),
415 _move_to_manual_values.end(), val) != _move_to_manual_values.end())
417 move_to_manual =
true;
420 if (strong && move_to_manual)
422 LOG_DEBUG(
"Move option to manual mode in order to set a value");
423 strong->set(_manual_value);
425 _auto_disabling_control->set(
value);
426 _recording_function(*
this);
431 return _auto_disabling_control->query();
436 return _auto_disabling_control->get_range();
441 return _auto_disabling_control->is_enabled();
446 return _auto_disabling_control->is_read_only();
451 std::vector<float> move_to_manual_values = {1.f},
452 float manual_value = 0.f)
454 : _auto_disabling_control(auto_disabling), _auto_exposure(
auto_exposure),
455 _move_to_manual_values(move_to_manual_values), _manual_value(manual_value)
459 _recording_function = record_action;
462 std::shared_ptr<option> _auto_disabling_control;
463 std::weak_ptr<option> _auto_exposure;
464 std::vector<float> _move_to_manual_values;
466 std::function<void(const option&)> _recording_function = [](
const option&) {};
Definition: error-handling.h:9
bool is_enabled() const override
Definition: option.h:313
const option_range _opt_range
Definition: option.h:92
auto invoke_powered(T action) -> decltype(action(*static_cast< platform::uvc_device *>(nullptr)))
Definition: sensor.h:194
option_range get_range() const override
Definition: option.h:309
const char * get_value_description(float value) const
bool is_enabled() const override
Definition: option.h:46
const char * get_description() const override
Definition: option.h:136
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:188
option_range get_range() const override
Definition: option.h:234
bool is_read_only() const override
Definition: option.h:444
float query() const override
float query() const override
Definition: option.h:121
option_range get_range() const override
Definition: option.h:83
uvc_pu_option(uvc_sensor &ep, rs2_option id)
Definition: option.h:176
bool is_enabled() const override
Definition: option.h:439
std::string _desciption
Definition: option.h:272
float query() const override
Definition: option.h:221
float max
Definition: options.h:15
uvc_xu_option(uvc_sensor &ep, platform::extension_unit xu, uint8_t id, std::string description)
Definition: option.h:256
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:395
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:134
bool is_read_only() const override
Definition: option.h:22
const char * get_value_description(float val) const override
Definition: option.h:138
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:383
const char * get_description() const override
Definition: option.h:402
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:457
struct_field_option(std::shared_ptr< struct_interface< T, R, W >> struct_interface, U T::*field, const option_range &range)
Definition: option.h:315
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:338
const char * get_value_description(float val) const override
Definition: option.h:398
#define LOG_DEBUG(...)
Definition: types.h:107
uvc_sensor & _ep
Definition: option.h:269
void set_description(float val, const std::string &desc)
Definition: option.h:148
const char * get_description() const override
Definition: option.h:321
option_range get_range() const override
polling_errors_disable(polling_error_handler *handler)
Definition: option.h:367
option_range get_range() const
const char * get_description() const
std::vector< uint8_t > send_receive(const std::vector< uint8_t > &data, int, bool require_response) override
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:194
uvc_pu_option(uvc_sensor &ep, rs2_option id, const std::map< float, std::string > &description_per_value)
Definition: option.h:181
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:449
float query() const override
Definition: option.h:305
virtual void enable_recording(std::function< void(const option &)> recording_action) override
Definition: option.h:87
const_value_option(std::string desc, float val)
Definition: option.h:38
std::function< void(const option &)> _recording_function
Definition: option.h:93
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:101
platform::extension_unit _xu
Definition: option.h:270
const char * get_description() const override
option_range get_range() const override
Definition: option.h:434
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:351
bool is_enabled() const override
Definition: option.h:132
option_range get_range() const override
Definition: option.h:126
bool is_valid(float value) const
Definition: option.h:71
std::string hexify(unsigned char n)
Definition: option.h:276
std::function< void(const option &)> _recording_function
Definition: option.h:273
const char * get_description() const override
Definition: option.h:260
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:171
uint8_t _id
Definition: option.h:271
float min
Definition: options.h:14
void on_set(std::function< void(float)> on_set)
Definition: option.h:153
Definition: extension.h:33
void enable_recording(std::function< void(const option &)> record_action) override
Definition: option.h:326
bool is_enabled() const override
Definition: option.h:254
float step
Definition: options.h:16
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:264
float query() const override
Definition: option.h:429