code: def read_string(index, on_failure = '')
        begin
          # does not require an interface, so open from the usb_dev instead of using our open method.
          data = mutex.synchronize do
            if open?
              handle.string_descriptor_ascii(index)
            else
              usb_device.open { |handle| handle.string_descriptor_ascii(index) }
            end
          end
  
          HIDAPI.debug("read string at index #{index} for device #{path}: #{data.inspect}")
          data
        rescue =>e
          HIDAPI.debug("failed to read string at index #{index} for device #{path}: #{e.inspect}")
          on_failure || ''
        end
      end
docs: Reads a string descriptor from the USB device.