From 30b3cfd1d20fef41f3a1077d3be3bcd3bb383d77 Mon Sep 17 00:00:00 2001
From: Ken Tossell <ken@tossell.net>
Date: Sun, 12 Jan 2014 06:34:18 -0500
Subject: [PATCH] Added more informative error messages in the case of
 uvc_open() failure

---
 libuvc_camera/src/camera_driver.cpp | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/libuvc_camera/src/camera_driver.cpp b/libuvc_camera/src/camera_driver.cpp
index 7fee454..04bffed 100644
--- a/libuvc_camera/src/camera_driver.cpp
+++ b/libuvc_camera/src/camera_driver.cpp
@@ -271,7 +271,29 @@ void CameraDriver::OpenCamera(UVCCameraConfig &new_config) {
 
   uvc_error_t open_err = uvc_open(dev_, &devh_);
   if (open_err != UVC_SUCCESS) {
-    uvc_perror(open_err, "uvc_open");
+    switch (open_err) {
+    case UVC_ERROR_ACCESS:
+#ifdef __linux__
+      ROS_ERROR("Permission denied opening /dev/bus/usb/%03d/%03d",
+                uvc_get_bus_number(dev_), uvc_get_device_address(dev_));
+#else
+      ROS_ERROR("Permission denied opening device %d on bus %d",
+                uvc_get_device_address(dev_), uvc_get_bus_number(dev_));
+#endif
+      break;
+    default:
+#ifdef __linux__
+      ROS_ERROR("Can't open /dev/bus/usb/%03d/%03d: %s (%d)",
+                uvc_get_bus_number(dev_), uvc_get_device_address(dev_),
+                uvc_strerror(open_err), open_err);
+#else
+      ROS_ERROR("Can't open device %d on bus %d: %s (%d)",
+                uvc_get_device_address(dev_), uvc_get_bus_number(dev_),
+                uvc_strerror(open_err), open_err);
+#endif
+      break;
+    }
+
     uvc_unref_device(dev_);
     return;
   }
-- 
GitLab