def open
      ppHandle = FFI::MemoryPointer.new :pointer
      res = Call.libusb_open(@pDev, ppHandle)
      LIBUSB.raise_error res, "in libusb_open" if res!=0
      handle = DevHandle.new self, ppHandle.read_pointer
      return handle unless block_given?
      begin
        yield handle
      ensure
        handle.close
      end
    end
def open
      ppHandle = FFI::MemoryPointer.new :pointer
      res = Call.libusb_open(@pDev, ppHandle)
      LIBUSB.raise_error res, "in libusb_open" if res!=0
      handle = DevHandle.new self, ppHandle.read_pointer
      return handle unless block_given?
      begin
        yield handle
      ensure
        handle.close
      end
    end
Open the device and obtain a device handle.

 A handle allows you to perform I/O on the device in question.
 This is a non-blocking function; no requests are sent over the bus.

 If called with a block, the handle is passed to the block
 and is closed when the block has finished.

 You need proper device access:
 * Linux: read+write permissions to <tt>/dev/bus/usb/<bus>/<dev></tt>
 * Windows: by installing a WinUSB-driver for the device (see {file:README.rdoc#Usage_on_Windows} )

 @return [DevHandle] Handle to the device.