5 #ifndef LIBREALSENSE_BACKEND_H 6 #define LIBREALSENSE_BACKEND_H 8 #include "../include/librealsense2/h/rs_types.h" 9 #include "../include/librealsense2/h/rs_option.h" 39 const std::vector<T>& list2,
40 std::function<
bool(T, T)> equal = [](T first, T second) {
return first == second; })
42 if (list1.size() != list2.size())
45 for (
auto dev1 : list1)
48 for (
auto dev2 : list2)
72 control_range(int32_t in_min, int32_t in_max, int32_t in_step, int32_t in_def)
74 populate_raw_data(
min, in_min);
75 populate_raw_data(
max, in_max);
76 populate_raw_data(
step, in_step);
77 populate_raw_data(
def, in_def);
79 control_range(std::vector<uint8_t> in_min, std::vector<uint8_t> in_max, std::vector<uint8_t> in_step, std::vector<uint8_t> in_def)
83 std::vector<uint8_t>
min;
84 std::vector<uint8_t>
max;
86 std::vector<uint8_t>
def;
89 void populate_raw_data(std::vector<uint8_t>& vec, int32_t
value);
104 return std::chrono::duration<double, std::milli>(std::chrono::system_clock::now().time_since_epoch()).count();
116 const std::vector<uint8_t>& data,
117 int timeout_ms = 5000,
118 bool require_response =
true) = 0;
154 #pragma pack(push, 1) 177 typedef std::function<void(stream_profile, frame_object, std::function<void()>)>
frame_callback;
188 operator std::string()
192 "\nvid- " << std::hex <<
vid <<
193 "\npid- " << std::hex <<
pid <<
203 return (std::make_tuple(
id,
vid,
pid,
mi,
unique_id,
device_path) < std::make_tuple(obj.
id, obj.
vid, obj.
pid, obj.
mi, obj.
unique_id, obj.
device_path));
210 return (a.
vid == b.
vid) &&
227 operator std::string()
231 s <<
"vid- " << std::hex <<
vid <<
232 "\npid- " << std::hex <<
pid <<
243 return (a.
id == b.
id) &&
258 operator std::string()
262 "\nvid- " << std::hex <<
vid <<
263 "\npid- " << std::hex <<
pid <<
274 return (a.
id == b.
id) &&
285 operator std::string()
301 operator std::string()
303 std::ostringstream oss;
372 virtual void open(
const std::vector<hid_profile>& hid_profiles) = 0;
373 virtual void close() = 0;
378 const std::string& report_name,
408 virtual std::vector<stream_profile>
get_profiles()
const = 0;
410 virtual void lock()
const = 0;
411 virtual void unlock()
const = 0;
430 _dev->probe_and_commit(profile, callback, buffers);
435 _dev->stream_on(error_handler);
440 _dev->start_callbacks();
445 _dev->stop_callbacks();
450 _dev->close(profile);
455 _dev->set_power_state(state);
460 return _dev->get_power_state();
472 if (_dev->set_xu(xu, ctrl, data, len))
484 if (_dev->get_xu(xu, ctrl, data, len))
494 return _dev->get_xu_range(xu, ctrl, len);
501 if (_dev->get_pu(opt,
value))
513 if (_dev->set_pu(opt,
value))
523 return _dev->get_pu_range(opt);
528 return _dev->get_profiles();
533 return _dev->get_device_location();
536 void lock()
const override { _dev->lock(); }
537 void unlock()
const override { _dev->unlock(); }
540 std::shared_ptr<uvc_device> _dev;
582 operator std::string()
599 s +=
hid_devices.size()>0 ?
"hid devices: \n" :
"";
643 void open(
const std::vector<hid_profile>& sensor_iio)
override 645 for (
auto&& dev : _dev) dev->open(sensor_iio);
650 for (
auto&& dev : _dev) dev->close();
655 _dev.front()->stop_capture();
660 _dev.front()->start_capture(callback);
665 return _dev.front()->get_sensors();
674 const std::string& report_name,
677 return _dev.front()->get_custom_report_data(custom_sensor_name, report_name, report_field);
681 std::vector<std::shared_ptr<hid_device>> _dev;
693 auto dev_index = get_dev_index_by_profiles(profile);
694 _configured_indexes.insert(dev_index);
695 _dev[dev_index]->probe_and_commit(profile, callback, buffers);
701 for (
auto& elem : _configured_indexes)
703 _dev[elem]->stream_on(error_handler);
708 for (
auto& elem : _configured_indexes)
710 _dev[elem]->start_callbacks();
716 for (
auto& elem : _configured_indexes)
718 _dev[elem]->stop_callbacks();
724 auto dev_index = get_dev_index_by_profiles(profile);
725 _dev[dev_index]->close(profile);
726 _configured_indexes.erase(dev_index);
731 for (
auto& elem : _dev)
733 elem->set_power_state(state);
739 return _dev.front()->get_power_state();
744 _dev.front()->init_xu(xu);
749 return _dev.front()->set_xu(xu, ctrl, data, len);
754 return _dev.front()->get_xu(xu, ctrl, data, len);
759 return _dev.front()->get_xu_range(xu, ctrl, len);
764 return _dev.front()->get_pu(opt,
value);
769 return _dev.front()->set_pu(opt,
value);
774 return _dev.front()->get_pu_range(opt);
779 std::vector<stream_profile> all_stream_profiles;
780 for (
auto& elem : _dev)
782 auto pin_stream_profiles = elem->get_profiles();
783 all_stream_profiles.insert(all_stream_profiles.end(),
784 pin_stream_profiles.begin(), pin_stream_profiles.end());
786 return all_stream_profiles;
791 return _dev.front()->get_device_location();
796 std::vector<uvc_device*> locked_dev;
798 for (
auto& elem : _dev)
801 locked_dev.push_back(elem.get());
806 for (
auto& elem : locked_dev)
816 for (
auto& elem : _dev)
823 uint32_t get_dev_index_by_profiles(
const stream_profile& profile)
const 825 uint32_t dev_index = 0;
826 for (
auto& elem : _dev)
828 auto pin_stream_profiles = elem->get_profiles();
829 auto it = find(pin_stream_profiles.begin(), pin_stream_profiles.end(), profile);
830 if (it != pin_stream_profiles.end())
836 throw std::runtime_error(
"profile not found");
839 std::vector<std::shared_ptr<uvc_device>> _dev;
840 std::set<uint32_t> _configured_indexes;
851 virtual void stop() = 0;
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
Definition: rs_option.h:22
const uint8_t MAX_META_DATA_SIZE
Definition: backend.h:30
bool list_changed(const std::vector< T > &list1, const std::vector< T > &list2, std::function< bool(T, T)> equal=[](T first, T second) { return first==second;})
Definition: backend.h:38
const uint16_t MAX_RETRIES
Definition: backend.h:25
const uint16_t VID_INTEL_CAMERA
Definition: backend.h:26
const uint16_t DELAY_FOR_RETRIES
Definition: backend.h:28
double monotonic_to_realtime(double monotonic)
const uint8_t DEFAULT_V4L2_FRAME_BUFFERS
Definition: backend.h:27
double rs2_time_t
Definition: rs_types.h:179
Definition: playback_device.h:17