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();
108 struct guid { uint32_t data1; uint16_t data2, data3; uint8_t data4[8]; };
115 virtual std::vector<uint8_t> send_receive(
116 const std::vector<uint8_t>& data,
117 int timeout_ms = 5000,
118 bool require_response =
true) = 0;
140 return std::make_tuple(width, height, fps, format);
154 #pragma pack(push, 1) 161 uint8_t source_clock[6];
177 typedef std::function<void(stream_profile, frame_object, std::function<void()>)>
frame_callback;
191 static const std::map<usb_spec, std::string> usb_spec_names = {
209 std::string device_path =
"";
212 operator std::string()
216 "\nvid- " << std::hex << vid <<
217 "\npid- " << std::hex << pid <<
219 "\nunique_id- " << unique_id <<
220 "\npath- " << device_path <<
221 "\nsusb specification- " << std::hex << (uint16_t)conn_spec << std::dec;
228 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));
235 return (a.
vid == b.
vid) &&
254 operator std::string()
258 s <<
"vid- " << std::hex << vid <<
259 "\npid- " << std::hex << pid <<
261 "\nsusb specification- " << std::hex << (uint16_t)conn_spec << std::dec <<
262 "\nunique_id- " << unique_id;
271 return (a.
id == b.
id) &&
287 operator std::string()
291 "\nvid- " << std::hex << vid <<
292 "\npid- " << std::hex << pid <<
293 "\nunique_id- " << unique_id <<
294 "\npath- " << device_path;
303 return (a.
id == b.
id) &&
314 operator std::string()
330 operator std::string()
332 std::ostringstream oss;
401 virtual void open(
const std::vector<hid_profile>& hid_profiles) = 0;
402 virtual void close() = 0;
403 virtual void stop_capture() = 0;
404 virtual void start_capture(hid_callback callback) = 0;
405 virtual std::vector<hid_sensor> get_sensors() = 0;
406 virtual std::vector<uint8_t> get_custom_report_data(
const std::string& custom_sensor_name,
407 const std::string& report_name,
418 virtual void start_callbacks() = 0;
419 virtual void stop_callbacks() = 0;
422 virtual void set_power_state(
power_state state) = 0;
426 virtual bool set_xu(
const extension_unit& xu, uint8_t ctrl,
const uint8_t* data,
int len) = 0;
427 virtual bool get_xu(
const extension_unit& xu, uint8_t ctrl, uint8_t* data,
int len)
const = 0;
431 virtual bool set_pu(
rs2_option opt, int32_t value) = 0;
434 virtual std::vector<stream_profile> get_profiles()
const = 0;
436 virtual void lock()
const = 0;
437 virtual void unlock()
const = 0;
439 virtual std::string get_device_location()
const = 0;
440 virtual usb_spec get_usb_specification()
const = 0;
456 _dev->probe_and_commit(profile, callback, buffers);
461 _dev->stream_on(error_handler);
466 _dev->start_callbacks();
471 _dev->stop_callbacks();
476 _dev->close(profile);
481 _dev->set_power_state(state);
486 return _dev->get_power_state();
498 if (_dev->set_xu(xu, ctrl, data, len))
510 if (_dev->get_xu(xu, ctrl, data, len))
520 return _dev->get_xu_range(xu, ctrl, len);
527 if (_dev->get_pu(opt, value))
539 if (_dev->set_pu(opt, value))
549 return _dev->get_pu_range(opt);
554 return _dev->get_profiles();
559 return _dev->get_device_location();
564 return _dev->get_usb_specification();
567 void lock()
const override { _dev->lock(); }
568 void unlock()
const override { _dev->unlock(); }
571 std::shared_ptr<uvc_device> _dev;
588 backend_device_group(
const std::vector<uvc_device_info>& uvc_devices,
const std::vector<usb_device_info>& usb_devices,
const std::vector<hid_device_info>& hid_devices)
589 :uvc_devices(uvc_devices), usb_devices(usb_devices), hid_devices(hid_devices) {}
592 :usb_devices(usb_devices) {}
594 backend_device_group(
const std::vector<uvc_device_info>& uvc_devices,
const std::vector<usb_device_info>& usb_devices)
595 :uvc_devices(uvc_devices), usb_devices(usb_devices) {}
597 backend_device_group(
const std::vector<playback_device_info>& playback_devices) : playback_devices(playback_devices) {}
613 operator std::string()
616 s = uvc_devices.size()>0 ?
"uvc devices:\n" :
"";
617 for (
auto uvc : uvc_devices)
623 s += usb_devices.size()>0 ?
"usb devices:\n" :
"";
624 for (
auto usb : usb_devices)
630 s += hid_devices.size()>0 ?
"hid devices: \n" :
"";
631 for (
auto hid : hid_devices)
637 s += playback_devices.size()>0 ?
"playback devices: \n" :
"";
664 virtual std::shared_ptr<time_service> create_time_service()
const = 0;
666 virtual std::shared_ptr<device_watcher> create_device_watcher()
const = 0;
674 void open(
const std::vector<hid_profile>& sensor_iio)
override 676 for (
auto&& dev : _dev) dev->open(sensor_iio);
681 for (
auto&& dev : _dev) dev->close();
686 _dev.front()->stop_capture();
691 _dev.front()->start_capture(callback);
696 return _dev.front()->get_sensors();
705 const std::string& report_name,
708 return _dev.front()->get_custom_report_data(custom_sensor_name, report_name, report_field);
712 std::vector<std::shared_ptr<hid_device>> _dev;
724 auto dev_index = get_dev_index_by_profiles(profile);
725 _configured_indexes.insert(dev_index);
726 _dev[dev_index]->probe_and_commit(profile, callback, buffers);
732 for (
auto& elem : _configured_indexes)
734 _dev[elem]->stream_on(error_handler);
739 for (
auto& elem : _configured_indexes)
741 _dev[elem]->start_callbacks();
747 for (
auto& elem : _configured_indexes)
749 _dev[elem]->stop_callbacks();
755 auto dev_index = get_dev_index_by_profiles(profile);
756 _dev[dev_index]->close(profile);
757 _configured_indexes.erase(dev_index);
762 for (
auto& elem : _dev)
764 elem->set_power_state(state);
770 return _dev.front()->get_power_state();
775 _dev.front()->init_xu(xu);
780 return _dev.front()->set_xu(xu, ctrl, data, len);
785 return _dev.front()->get_xu(xu, ctrl, data, len);
790 return _dev.front()->get_xu_range(xu, ctrl, len);
795 return _dev.front()->get_pu(opt, value);
800 return _dev.front()->set_pu(opt, value);
805 return _dev.front()->get_pu_range(opt);
810 std::vector<stream_profile> all_stream_profiles;
811 for (
auto& elem : _dev)
813 auto pin_stream_profiles = elem->get_profiles();
814 all_stream_profiles.insert(all_stream_profiles.end(),
815 pin_stream_profiles.begin(), pin_stream_profiles.end());
817 return all_stream_profiles;
822 return _dev.front()->get_device_location();
827 return _dev.front()->get_usb_specification();
832 std::vector<uvc_device*> locked_dev;
834 for (
auto& elem : _dev)
837 locked_dev.push_back(elem.get());
842 for (
auto& elem : locked_dev)
852 for (
auto& elem : _dev)
859 uint32_t get_dev_index_by_profiles(
const stream_profile& profile)
const 861 uint32_t dev_index = 0;
862 for (
auto& elem : _dev)
864 auto pin_stream_profiles = elem->get_profiles();
865 auto it = find(pin_stream_profiles.begin(), pin_stream_profiles.end(), profile);
866 if (it != pin_stream_profiles.end())
872 throw std::runtime_error(
"profile not found");
875 std::vector<std::shared_ptr<uvc_device>> _dev;
876 std::set<uint32_t> _configured_indexes;
886 virtual void start(device_changed_callback callback) = 0;
887 virtual void stop() = 0;
bool operator<(const request_mapping &first, const request_mapping &second)
Definition: types.h:624
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:180
double get_time()
Definition: rs_internal.hpp:61
Definition: playback_device.h:17