4#ifndef LIBREALSENSE_RS2_OPTIONS_HPP
5#define LIBREALSENSE_RS2_OPTIONS_HPP
28 std::shared_ptr< const rs2_option_value > _value;
31 std::shared_ptr< rs2_options_list > _list;
41 , _list( std::move( list ) )
86 return get_range(
range );
95 if( ! get_range(
range ) )
96 throw std::runtime_error( std::string(
"no range available for option " )
120 : _list( std::move( list ) )
138 return option_value( value, _list,
static_cast< int >( index ) );
141 size_t size()
const {
return _size; }
148 iterator(
const options_list & list,
size_t index )
159 return other._index != _index || &other._list != &_list;
163 return ! ( *
this != other );
181 std::shared_ptr< rs2_options_list >
get()
const {
return _list; };
184 std::shared_ptr< rs2_options_list > _list;
190 std::function< void(
const options_list & ) > _callback;
194 : _callback( callback )
202 _callback( opt_list );
354 std::vector<rs2_option> res;
369 std::shared_ptr< rs2_options_list > sptr(
391 if( size > (std::numeric_limits< unsigned int >::max)() )
392 throw std::runtime_error(
"composite option payload size (" + std::to_string( size )
393 +
") exceeds what the C API can represent" );
410 return unwrap_raw_data_buffer( buffer, e );
422 return unwrap_raw_data_buffer( buffer, e );
432 template<
typename T >
447 template<
typename TRange >
462 template<
typename T >
465 check_version_supported( value );
513 std::vector< rs2_composite_option_id > res;
521 for(
auto i = 0; i < size; i++ )
531 _options = other._options;
566 std::vector< uint8_t > result;
567 result.insert( result.begin(), start, start + size );
574 template<
typename U >
575 class has_header_version
577 template<
typename V >
static auto test(
int ) ->
decltype( std::declval< V >().header.version, std::true_type{} );
578 template<
typename >
static std::false_type test( ... );
580 static const bool value =
decltype( test< U >( 0 ) )::value;
586 template<
typename U >
587 class has_min_header_version
589 template<
typename V >
static auto test(
int ) ->
decltype( std::declval< V >().min.header.version, std::true_type{} );
590 template<
typename >
static std::false_type test( ... );
592 static const bool value =
decltype( test< U >( 0 ) )::value;
598 template<
typename T >
599 static typename std::enable_if< ! has_header_version< T >::value && ! has_min_header_version< T >::value >::type
600 check_version_supported(
const T & )
607 template<
typename T >
608 static typename std::enable_if< has_header_version< T >::value >::type
609 check_version_supported(
const T & value )
612 throw std::runtime_error(
"composite option struct has unsupported wire version "
613 + std::to_string( (
int)value.header.version ) +
" (this SDK build supports version "
615 +
") - wrong struct for this option id, a zero-initialized header about to "
616 "be sent, or a newer device/firmware speaking a wire version this build "
617 "doesn't know yet?" );
622 template<
typename T >
623 static typename std::enable_if< has_min_header_version< T >::value >::type
624 check_version_supported(
const T & value )
626 check_version_supported( value.min );
627 check_version_supported( value.max );
628 check_version_supported( value.step );
629 check_version_supported( value.def );
632 template<
typename T >
633 static void cast_composite_payload(
const std::vector< uint8_t > & raw, T & out )
635 if( raw.size() !=
sizeof( T ) )
636 throw std::runtime_error(
"composite option payload size (" + std::to_string( raw.size() )
637 +
") does not match sizeof(T) (" + std::to_string(
sizeof( T ) )
638 +
") - wrong struct for this option id?" );
639 std::memcpy( &out, raw.data(),
sizeof( T ) );
640 check_version_supported( out );
static void handle(rs2_error *e)
Definition rs_types.hpp:162
Definition rs_options.hpp:27
option_value(rs2_option_value const *handle)
Definition rs_options.hpp:35
option_value(rs2_option option_id, char const *as_string)
Definition rs_options.hpp:63
option_value & operator=(option_value &&)=default
option_value(option_value &&)=default
option_range range() const
Definition rs_options.hpp:92
option_value(rs2_option option_id, invalid_t)
Definition rs_options.hpp:50
option_value & operator=(option_value const &)=default
bool has_range() const
Definition rs_options.hpp:83
option_value(rs2_option option_id, bool as_boolean)
Definition rs_options.hpp:68
option_value(rs2_option option_id, int64_t as_integer)
Definition rs_options.hpp:53
rs2_option_value const * operator->() const
Definition rs_options.hpp:77
option_value(rs2_option_value const *handle, std::shared_ptr< rs2_options_list > list, int index)
Definition rs_options.hpp:39
invalid_t
Definition rs_options.hpp:49
@ invalid
Definition rs_options.hpp:49
option_value(rs2_option option_id, float as_float)
Definition rs_options.hpp:58
option_value(option_value const &)=default
void on_value_changed(rs2_options_list *list) override
Definition rs_options.hpp:198
options_changed_callback(const std::function< void(const options_list &) > &callback)
Definition rs_options.hpp:193
void release() override
Definition rs_options.hpp:205
Definition rs_options.hpp:147
iterator & operator++()
Definition rs_options.hpp:166
bool operator==(const iterator &other) const
Definition rs_options.hpp:161
option_value operator*() const
Definition rs_options.hpp:155
bool operator!=(const iterator &other) const
Definition rs_options.hpp:157
Definition rs_options.hpp:114
iterator end() const
Definition rs_options.hpp:179
option_value back() const
Definition rs_options.hpp:144
option_value front() const
Definition rs_options.hpp:143
option_value operator[](size_t index) const
Definition rs_options.hpp:133
std::shared_ptr< rs2_options_list > get() const
Definition rs_options.hpp:181
options_list(std::shared_ptr< rs2_options_list > list)
Definition rs_options.hpp:119
iterator begin() const
Definition rs_options.hpp:178
options_list()
Definition rs_options.hpp:127
options_list(options_list const &)=default
options_list(options_list &&)=default
size_t size() const
Definition rs_options.hpp:141
virtual ~options()=default
float get_option(rs2_option option) const
Definition rs_options.hpp:269
const char * get_option_description(rs2_option option) const
Definition rs_options.hpp:229
option_range get_option_range(rs2_option option) const
Definition rs_options.hpp:294
std::vector< uint8_t > get_composite_option_range(rs2_composite_option_id id) const
Definition rs_options.hpp:418
std::vector< rs2_option > get_supported_options()
Definition rs_options.hpp:352
const char * get_option_value_description(rs2_option option, float val) const
Definition rs_options.hpp:256
options & operator=(const T &dev)
Definition rs_options.hpp:545
void on_options_changed(std::function< void(const options_list &) > callback) const
Definition rs_options.hpp:345
options & operator=(const options &other)
Definition rs_options.hpp:529
options(const options &other)
Definition rs_options.hpp:535
std::vector< uint8_t > get_composite_option(rs2_composite_option_id id) const
Definition rs_options.hpp:406
std::vector< rs2_composite_option_id > get_supported_composite_options() const
Definition rs_options.hpp:511
void set_option(rs2_option option, float value) const
Definition rs_options.hpp:309
const char * get_option_name(rs2_option option) const
Definition rs_options.hpp:242
bool is_composite_option_read_only(rs2_composite_option_id id) const
Definition rs_options.hpp:487
bool is_option_read_only(rs2_option option) const
Definition rs_options.hpp:333
TRange get_composite_option_range_as(rs2_composite_option_id id) const
Definition rs_options.hpp:448
T get_composite_option_as(rs2_composite_option_id id) const
Definition rs_options.hpp:433
void set_option_value(option_value const &value) const
Definition rs_options.hpp:321
bool supports_composite_option(rs2_composite_option_id id) const
Definition rs_options.hpp:474
options(rs2_options *o=nullptr)
Definition rs_options.hpp:540
void set_composite_option(rs2_composite_option_id id, const void *data, size_t size) const
Definition rs_options.hpp:387
const char * get_composite_option_description(rs2_composite_option_id id) const
Definition rs_options.hpp:500
options_list get_supported_option_values()
Definition rs_options.hpp:366
void set_composite_option_from(rs2_composite_option_id id, const T &value) const
Definition rs_options.hpp:463
option_value get_option_value(rs2_option option_id) const
Definition rs_options.hpp:282
bool supports(rs2_option option) const
Definition rs_options.hpp:216
Definition rs_processing_gl.hpp:13
const unsigned char * rs2_get_raw_data(const rs2_raw_data_buffer *buffer, rs2_error **error)
int rs2_get_raw_data_size(const rs2_raw_data_buffer *buffer, rs2_error **error)
void rs2_delete_raw_data(const rs2_raw_data_buffer *buffer)
Generic entry points shared by every composite (multi-field, atomically-exchanged) XU control....
void rs2_set_composite_option(const rs2_options *options, rs2_composite_option_id option, const void *data, unsigned int size, rs2_error **error)
const rs2_raw_data_buffer * rs2_get_composite_option(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
int rs2_supports_composite_option(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
const rs2_raw_data_buffer * rs2_get_composite_option_range(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
void rs2_delete_composite_options_list(rs2_composite_options_list *list)
const char * rs2_get_composite_option_description(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
rs2_composite_option_id
Definition rs_composite_option.h:24
int rs2_is_composite_option_read_only(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
int rs2_get_composite_options_list_size(const rs2_composite_options_list *list, rs2_error **error)
rs2_composite_options_list * rs2_get_composite_options_list(const rs2_options *options, rs2_error **error)
rs2_composite_option_id rs2_get_composite_option_from_list(const rs2_composite_options_list *list, int i, rs2_error **error)
void rs2_set_option_value(rs2_options const *options, rs2_option_value const *option_value, rs2_error **error)
void rs2_delete_option_value(rs2_option_value const *handle)
const char * rs2_get_option_name(const rs2_options *options, rs2_option option, rs2_error **error)
rs2_option_value const * rs2_get_option_value(const rs2_options *options, rs2_option option_id, rs2_error **error)
const char * rs2_option_to_string(rs2_option option)
int rs2_get_option_range_from_list(const rs2_options_list *options, int i, rs2_option_range *out_range, rs2_error **error)
void rs2_set_option(const rs2_options *options, rs2_option option, float value, rs2_error **error)
@ RS2_OPTION_TYPE_STRING
Definition rs_option.h:170
@ RS2_OPTION_TYPE_COUNT
Definition rs_option.h:174
@ RS2_OPTION_TYPE_FLOAT
Definition rs_option.h:169
@ RS2_OPTION_TYPE_BOOLEAN
Definition rs_option.h:171
@ RS2_OPTION_TYPE_INTEGER
Definition rs_option.h:168
rs2_option_value const * rs2_get_option_value_from_list(const rs2_options_list *options, int i, rs2_error **error)
int rs2_get_options_list_size(const rs2_options_list *options, rs2_error **error)
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls,...
Definition rs_option.h:27
@ RS2_OPTION_COUNT
Definition rs_option.h:147
rs2_options_list * rs2_get_options_list(const rs2_options *options, rs2_error **error)
rs2_option rs2_get_option_from_list(const rs2_options_list *options, int i, rs2_error **error)
void rs2_delete_options_list(rs2_options_list *list)
int rs2_is_option_read_only(const rs2_options *options, rs2_option option, rs2_error **error)
void rs2_get_option_range(const rs2_options *sensor, rs2_option option, float *min, float *max, float *step, float *def, rs2_error **error)
const char * rs2_get_option_value_description(const rs2_options *options, rs2_option option, float value, rs2_error **error)
const char * rs2_get_option_description(const rs2_options *options, rs2_option option, rs2_error **error)
void rs2_set_options_changed_callback_cpp(rs2_options *options, rs2_options_changed_callback *callback, rs2_error **error)
float rs2_get_option(const rs2_options *options, rs2_option option, rs2_error **error)
int rs2_supports_option(const rs2_options *options, rs2_option option, rs2_error **error)
Exposes RealSense structs.
struct rs2_error rs2_error
Definition rs_types.h:296
struct rs2_raw_data_buffer rs2_raw_data_buffer
Definition rs_types.h:298
struct rs2_options_list rs2_options_list
Definition rs_types.h:324
struct rs2_options rs2_options
Definition rs_types.h:323
Definition rs_types.hpp:195
float def
Definition rs_types.hpp:198
float step
Definition rs_types.hpp:199
float max
Definition rs_types.hpp:197
float min
Definition rs_types.hpp:196
Definition rs_option.h:198
float step
Definition rs_option.h:202
float max
Definition rs_option.h:200
float def
Definition rs_option.h:201
float min
Definition rs_option.h:199
The value of an option, in a known option type.
Definition rs_option.h:208
Definition rs_types.hpp:101