4 #ifndef LIBREALSENSE_RS2_OPTIONS_HPP 5 #define LIBREALSENSE_RS2_OPTIONS_HPP 8 #include "../h/rs_types.h" 9 #include "../h/rs_composite_option.h" 10 #include "../h/rs_dpp_header.h" 19 #include <type_traits> 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; }
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 );
648 #endif // LIBREALSENSE_RS2_OIPTIONS_HPP options_list get_supported_option_values()
Definition: rs_options.hpp:366
void rs2_set_option_value(rs2_options const *options, rs2_option_value const *option_value, rs2_error **error)
std::vector< uint8_t > get_composite_option_range(rs2_composite_option_id id) const
Definition: rs_options.hpp:418
Definition: rs_option.h:147
rs2_option_value const * rs2_get_option_value(const rs2_options *options, rs2_option option_id, rs2_error **error)
Definition: rs_types.hpp:100
float rs2_get_option(const rs2_options *options, rs2_option option, rs2_error **error)
struct rs2_raw_data_buffer rs2_raw_data_buffer
Definition: rs_types.h:298
bool supports(rs2_option option) const
Definition: rs_options.hpp:216
void set_composite_option_from(rs2_composite_option_id id, const T &value) const
Definition: rs_options.hpp:463
Definition: rs_option.h:168
bool supports_composite_option(rs2_composite_option_id id) const
Definition: rs_options.hpp:474
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:26
option_value operator[](size_t index) const
Definition: rs_options.hpp:133
virtual ~options()=default
const char * get_option_name(rs2_option option) const
Definition: rs_options.hpp:242
Definition: rs_options.hpp:146
const char * rs2_option_to_string(rs2_option option)
void on_options_changed(std::function< void(const options_list &) > callback) const
Definition: rs_options.hpp:345
size_t size() const
Definition: rs_options.hpp:141
const unsigned char * rs2_get_raw_data(const rs2_raw_data_buffer *buffer, rs2_error **error)
float min
Definition: rs_types.hpp:196
TRange get_composite_option_range_as(rs2_composite_option_id id) const
Definition: rs_options.hpp:448
options & operator=(const T &dev)
Definition: rs_options.hpp:545
Definition: rs_context.hpp:11
rs2_option_value const * rs2_get_option_value_from_list(const rs2_options_list *options, int i, rs2_error **error)
void rs2_delete_raw_data(const rs2_raw_data_buffer *buffer)
options_list(std::shared_ptr< rs2_options_list > list)
Definition: rs_options.hpp:119
const char * get_option_description(rs2_option option) const
Definition: rs_options.hpp:229
void rs2_set_options_changed_callback_cpp(rs2_options *options, rs2_options_changed_callback *callback, rs2_error **error)
The value of an option, in a known option type.
Definition: rs_option.h:207
option_value(rs2_option option_id, invalid_t)
Definition: rs_options.hpp:50
bool operator==(const iterator &other) const
Definition: rs_options.hpp:161
options(const options &other)
Definition: rs_options.hpp:535
int rs2_is_composite_option_read_only(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
rs2_composite_options_list * rs2_get_composite_options_list(const rs2_options *options, rs2_error **error)
int rs2_get_raw_data_size(const rs2_raw_data_buffer *buffer, rs2_error **error)
float max
Definition: rs_types.hpp:197
float step
Definition: rs_types.hpp:199
option_value(rs2_option option_id, float as_float)
Definition: rs_options.hpp:58
void rs2_delete_option_value(rs2_option_value const *handle)
void release() override
Definition: rs_options.hpp:205
void rs2_delete_composite_options_list(rs2_composite_options_list *list)
float get_option(rs2_option option) const
Definition: rs_options.hpp:269
std::vector< rs2_option > get_supported_options()
Definition: rs_options.hpp:352
option_value(rs2_option option_id, char const *as_string)
Definition: rs_options.hpp:63
int rs2_get_option_range_from_list(const rs2_options_list *options, int i, rs2_option_range *out_range, rs2_error **error)
Definition: rs_option.h:197
std::vector< rs2_composite_option_id > get_supported_composite_options() const
Definition: rs_options.hpp:511
int rs2_supports_option(const rs2_options *options, rs2_option option, rs2_error **error)
const char * rs2_get_option_name(const rs2_options *options, rs2_option option, rs2_error **error)
Definition: rs_option.h:169
bool is_composite_option_read_only(rs2_composite_option_id id) const
Definition: rs_options.hpp:487
int rs2_get_composite_options_list_size(const rs2_composite_options_list *list, rs2_error **error)
iterator begin() const
Definition: rs_options.hpp:178
const char * rs2_get_option_value_description(const rs2_options *options, rs2_option option, float value, rs2_error **error)
Definition: rs_options.hpp:26
Definition: rs_types.hpp:194
Definition: rs_options.hpp:113
invalid_t
Definition: rs_options.hpp:49
options_list()
Definition: rs_options.hpp:127
std::vector< uint8_t > get_composite_option(rs2_composite_option_id id) const
Definition: rs_options.hpp:406
const rs2_raw_data_buffer * rs2_get_composite_option(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
Definition: rs_options.hpp:208
const char * get_option_value_description(rs2_option option, float val) const
Definition: rs_options.hpp:256
void rs2_get_option_range(const rs2_options *sensor, rs2_option option, float *min, float *max, float *step, float *def, rs2_error **error)
void on_value_changed(rs2_options_list *list) override
Definition: rs_options.hpp:198
rs2_options_list * rs2_get_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)
struct rs2_options rs2_options
Definition: rs_types.h:323
void set_composite_option(rs2_composite_option_id id, const void *data, size_t size) const
Definition: rs_options.hpp:387
Definition: rs_option.h:171
Definition: rs_option.h:174
option_value operator*() const
Definition: rs_options.hpp:155
static void handle(rs2_error *e)
Definition: rs_types.hpp:162
options(rs2_options *o=nullptr)
Definition: rs_options.hpp:540
const char * rs2_get_composite_option_description(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
Definition: rs_options.hpp:188
T get_composite_option_as(rs2_composite_option_id id) const
Definition: rs_options.hpp:433
bool has_range() const
Definition: rs_options.hpp:83
void rs2_set_composite_option(const rs2_options *options, rs2_composite_option_id option, const void *data, unsigned int size, rs2_error **error)
iterator & operator++()
Definition: rs_options.hpp:166
Definition: rs_options.hpp:49
rs2_option_value const * operator->() const
Definition: rs_options.hpp:77
bool is_option_read_only(rs2_option option) const
Definition: rs_options.hpp:333
option_value(rs2_option_value const *handle, std::shared_ptr< rs2_options_list > list, int index)
Definition: rs_options.hpp:39
Definition: rs_option.h:170
bool operator!=(const iterator &other) const
Definition: rs_options.hpp:157
int rs2_supports_composite_option(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
option_range get_option_range(rs2_option option) const
Definition: rs_options.hpp:294
void set_option(rs2_option option, float value) const
Definition: rs_options.hpp:309
float def
Definition: rs_types.hpp:198
const rs2_raw_data_buffer * rs2_get_composite_option_range(const rs2_options *options, rs2_composite_option_id option, rs2_error **error)
option_value(rs2_option option_id, int64_t as_integer)
Definition: rs_options.hpp:53
const char * rs2_get_option_description(const rs2_options *options, rs2_option option, rs2_error **error)
options & operator=(const options &other)
Definition: rs_options.hpp:529
std::shared_ptr< rs2_options_list > get() const
Definition: rs_options.hpp:181
int rs2_is_option_read_only(const rs2_options *options, rs2_option option, rs2_error **error)
rs2_composite_option_id
Definition: rs_composite_option.h:23
option_range range() const
Definition: rs_options.hpp:92
option_value get_option_value(rs2_option option_id) const
Definition: rs_options.hpp:282
void rs2_set_option(const rs2_options *options, rs2_option option, float value, rs2_error **error)
struct rs2_error rs2_error
Definition: rs_types.h:296
option_value front() const
Definition: rs_options.hpp:143
void rs2_delete_options_list(rs2_options_list *list)
struct rs2_options_list rs2_options_list
Definition: rs_types.h:324
option_value(rs2_option option_id, bool as_boolean)
Definition: rs_options.hpp:68
option_value(rs2_option_value const *handle)
Definition: rs_options.hpp:35
rs2_option rs2_get_option_from_list(const rs2_options_list *options, int i, rs2_error **error)
void set_option_value(option_value const &value) const
Definition: rs_options.hpp:321
int rs2_get_options_list_size(const rs2_options_list *options, rs2_error **error)
iterator end() const
Definition: rs_options.hpp:179
const char * get_composite_option_description(rs2_composite_option_id id) const
Definition: rs_options.hpp:500
option_value & operator=(option_value const &)=default
options_changed_callback(const std::function< void(const options_list &) > &callback)
Definition: rs_options.hpp:193
option_value back() const
Definition: rs_options.hpp:144