43 const std::vector<T>& list2,
44 std::function<
bool(
T,
T)>
equal = [](
T first,
T second) {
return first == second; })
46 if (list1.size() != list2.size())
49 for (
auto dev1 : list1)
52 for (
auto dev2 : list2)
83 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)
87 std::vector<uint8_t>
min;
88 std::vector<uint8_t>
max;
90 std::vector<uint8_t>
def;
133 return std::make_tuple(width, height, fps, format);
147 #pragma pack(push, 1) 184 typedef std::function<void(stream_profile, frame_object, std::function<void()>)>
frame_callback;
193 std::string device_path =
"";
194 std::string serial =
"";
197 bool has_metadata_node =
false;
198 std::string metadata_node_id =
"";
200 operator std::string()
204 "\nvid- " << std::hex << vid <<
205 "\npid- " << std::hex << pid <<
206 "\nmi- " << std::dec << mi <<
207 "\nunique_id- " << unique_id <<
208 "\npath- " << device_path <<
209 "\nUVC capabilities- " << std::hex << uvc_capabilities <<
210 "\nUVC specification- " << std::hex << (
uint16_t)conn_spec << std::dec <<
211 (has_metadata_node ? (
"\nmetadata node-" + metadata_node_id) :
"") << std::endl;
218 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));
226 return (a.
vid == b.
vid) &&
238 return (a.
id == b.
id) &&
252 operator std::string()
268 operator std::string()
const 270 std::ostringstream oss;
321 #pragma pack(push, 1) 341 virtual void register_profiles(
const std::vector<hid_profile>& hid_profiles) = 0;
342 virtual void open(
const std::vector<hid_profile>& hid_profiles) = 0;
343 virtual void close() = 0;
344 virtual void stop_capture() = 0;
345 virtual void start_capture(hid_callback
callback) = 0;
346 virtual std::vector<hid_sensor> get_sensors() = 0;
347 virtual std::vector<uint8_t> get_custom_report_data(
const std::string& custom_sensor_name,
348 const std::string& report_name,
352 struct request_mapping;
359 virtual void start_callbacks() = 0;
360 virtual void stop_callbacks() = 0;
375 virtual std::vector<stream_profile> get_profiles()
const = 0;
377 virtual void lock()
const = 0;
378 virtual void unlock()
const = 0;
380 virtual std::string get_device_location()
const = 0;
381 virtual usb_spec get_usb_specification()
const = 0;
397 _dev->probe_and_commit(profile, callback, buffers);
402 _dev->stream_on(error_handler);
407 _dev->start_callbacks();
412 _dev->stop_callbacks();
417 _dev->close(profile);
422 _dev->set_power_state(state);
427 return _dev->get_power_state();
439 if (_dev->set_xu(xu, ctrl, data, len))
451 if (_dev->get_xu(xu, ctrl, data, len))
461 return _dev->get_xu_range(xu, ctrl, len);
468 if (_dev->get_pu(opt, value))
480 if (_dev->set_pu(opt, value))
490 return _dev->get_pu_range(opt);
495 return _dev->get_profiles();
500 return _dev->get_device_location();
505 return _dev->get_usb_specification();
508 void lock()
const override { _dev->lock(); }
509 void unlock()
const override { _dev->unlock(); }
512 std::shared_ptr<uvc_device>
_dev;
522 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)
523 :uvc_devices(uvc_devices), usb_devices(usb_devices), hid_devices(hid_devices) {}
526 :usb_devices(usb_devices) {}
528 backend_device_group(
const std::vector<uvc_device_info>& uvc_devices,
const std::vector<usb_device_info>& usb_devices)
529 :uvc_devices(uvc_devices), usb_devices(usb_devices) {}
531 backend_device_group(
const std::vector<playback_device_info>& playback_devices) : playback_devices(playback_devices) {}
545 operator std::string()
548 s = uvc_devices.size()>0 ?
"uvc devices:\n" :
"";
549 for (
auto uvc : uvc_devices)
555 s += usb_devices.size()>0 ?
"usb devices:\n" :
"";
556 for (
auto usb : usb_devices)
562 s += hid_devices.size()>0 ?
"hid devices: \n" :
"";
563 for (
auto hid : hid_devices)
569 s += playback_devices.size()>0 ?
"playback devices: \n" :
"";
596 virtual std::shared_ptr<time_service> create_time_service()
const = 0;
598 virtual std::shared_ptr<device_watcher> create_device_watcher()
const = 0;
602 std::string empty_str;
612 void register_profiles(
const std::vector<hid_profile>& hid_profiles)
override { _hid_profiles = hid_profiles; }
613 void open(
const std::vector<hid_profile>& sensor_iio)
override 615 for (
auto&&
dev : _dev)
dev->open(sensor_iio);
620 for (
auto&&
dev : _dev)
dev->close();
625 _dev.front()->stop_capture();
630 _dev.front()->start_capture(callback);
635 return _dev.front()->get_sensors();
644 const std::string& report_name,
647 return _dev.front()->get_custom_report_data(custom_sensor_name, report_name, report_field);
651 std::vector<std::shared_ptr<hid_device>>
_dev;
664 auto dev_index = get_dev_index_by_profiles(profile);
665 _configured_indexes.insert(dev_index);
666 _dev[dev_index]->probe_and_commit(profile, callback, buffers);
672 for (
auto& elem : _configured_indexes)
674 _dev[elem]->stream_on(error_handler);
679 for (
auto& elem : _configured_indexes)
681 _dev[elem]->start_callbacks();
687 for (
auto& elem : _configured_indexes)
689 _dev[elem]->stop_callbacks();
695 auto dev_index = get_dev_index_by_profiles(profile);
696 _dev[dev_index]->close(profile);
697 _configured_indexes.erase(dev_index);
702 for (
auto& elem : _dev)
704 elem->set_power_state(state);
710 return _dev.front()->get_power_state();
715 _dev.front()->init_xu(xu);
720 return _dev.front()->set_xu(xu, ctrl, data, len);
725 return _dev.front()->get_xu(xu, ctrl, data, len);
730 return _dev.front()->get_xu_range(xu, ctrl, len);
735 return _dev.front()->get_pu(opt, value);
740 return _dev.front()->set_pu(opt, value);
745 return _dev.front()->get_pu_range(opt);
750 std::vector<stream_profile> all_stream_profiles;
751 for (
auto& elem : _dev)
753 auto pin_stream_profiles = elem->get_profiles();
754 all_stream_profiles.insert(all_stream_profiles.end(),
755 pin_stream_profiles.begin(), pin_stream_profiles.end());
757 return all_stream_profiles;
762 return _dev.front()->get_device_location();
767 return _dev.front()->get_usb_specification();
772 std::vector<uvc_device*> locked_dev;
774 for (
auto& elem : _dev)
777 locked_dev.push_back(elem.get());
782 for (
auto& elem : locked_dev)
792 for (
auto& elem : _dev)
802 for (
auto& elem : _dev)
804 auto pin_stream_profiles = elem->get_profiles();
805 auto it =
find(pin_stream_profiles.begin(), pin_stream_profiles.end(),
profile);
806 if (
it != pin_stream_profiles.end())
812 throw std::runtime_error(
"profile not found");
815 std::vector<std::shared_ptr<uvc_device>>
_dev;
827 virtual void stop() = 0;
828 virtual bool is_stopped()
const = 0;
static const textual_icon lock
const int POLLING_DEVICES_INTERVAL_MS
static const textual_icon unlock
rs2_option
Defines general configuration controls. These can generally be mapped to camera UVC controls...
const uint8_t MAX_META_DATA_SIZE
static const textual_icon stop
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;})
def info(name, value, persistent=False)
const uint16_t MAX_RETRIES
GLboolean GLboolean GLboolean GLboolean a
const int DISCONNECT_PERIOD_MS
Exposes RealSense structs.
const uint16_t DELAY_FOR_RETRIES
bool operator<(const stream_profile &lhs, const stream_profile &rhs)
unsigned __int64 uint64_t
Exposes sensor options functionality for C compilers.
GLboolean GLboolean GLboolean b
double monotonic_to_realtime(double monotonic)
const uint8_t DEFAULT_V4L2_FRAME_BUFFERS