diff --git a/host/source/inlprog.c b/host/source/inlprog.c index 4323ba9..56e60e2 100644 --- a/host/source/inlprog.c +++ b/host/source/inlprog.c @@ -40,6 +40,7 @@ int main(int argc, char *argv[]) { + int rv = 0; //context set to NULL since only acting as single user of libusb libusb_context *context = NULL; @@ -70,7 +71,6 @@ int main(int argc, char *argv[]) ssize_t dev_count = libusb_get_device_list( context, &device_list); check( dev_count >= 0, "libusb unable to find any devices: %s", libusb_strerror(dev_count)); - int rv = 0; ssize_t i = 0; libusb_device *retroprog = NULL; @@ -242,12 +242,10 @@ int main(int argc, char *argv[]) return 0; + error: printf("program went to error\n"); - //must close device before exiting - // libusb_close(handle); - if (device_list) { printf("freeing device list\n"); libusb_free_device_list( device_list, 1); @@ -259,11 +257,16 @@ error: } if (usb_init == LIBUSB_SUCCESS) { - //deinitialize libusb to be called after closing all devices and before teminating application - printf("exiting libusb\n"); + printf("deinitializing libusb\n"); libusb_exit(context); } + if (rv == LIBUSB_ERROR_ACCESS) { + printf("-------------------------------------------------------\n"); + printf("Denied Permission is expected for initial use on Linux.\n"); + printf("See udev-rule-help/Readme.txt in host dir for help gaining permission.\n"); + printf("Try command with sudo for a cheap temporary solution.\n"); + } return 1; diff --git a/host/udev-rule-help/Readme.txt b/host/udev-rule-help/Readme.txt index e28d476..c9b52de 100644 --- a/host/udev-rule-help/Readme.txt +++ b/host/udev-rule-help/Readme.txt @@ -1,5 +1,11 @@ -You'll probably have issues where the host app can't detect the device. +You'll probably have issues where the host app can't detect the device with linux systems. + +If you don't have permission to write to the device you'll get an error message such as: +libusbx: error [_get_usbfs_fd] libusbx couldn't open USB device /dev/bus/usb/002/021: Permission denied +libusbx: error [_get_usbfs_fd] libusbx requires write access to USB device nodes. +[ERROR] (source/inlprog.c:99: errno: Permission denied) Unable to open USB device: Access denied (insufficient permissions) + This can be temporarily corrected by running as sudo But you'll want to update permissions so don't need to run as sudo need to create udev rule to give user permissions to device when inserted. @@ -23,7 +29,7 @@ Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub The "Van Ooijen..." device is the INL-retroprog as noted with 16c0:05dc Vendor:Prod ID you can check current permissions by checking /dev/ location use the Bus number and Device number to check permissions on the INL retro-prog -I'm not sure if all unix systems place usb devices in this location.. +the initial error should point out the /dev/ location of the device In my example: paul@eeepc:~$ ls -ltr /dev/bus/usb/002/021 crw-rw-r-- 1 root root 189, 148 Nov 18 01:36 /dev/bus/usb/002/021