def usb_open_desc(vendor, product, description, serial)
      raise ArgumentError.new('vendor should be Fixnum')  unless vendor.kind_of?(Fixnum)
      raise ArgumentError.new('product should be Fixnum')  unless product.kind_of?(Fixnum)
      check_result(Ftdi.ftdi_usb_open_desc(ctx, vendor, product, description, serial))
    end
def usb_open_desc(vendor, product, description, serial)
      raise ArgumentError.new('vendor should be Fixnum')  unless vendor.kind_of?(Fixnum)
      raise ArgumentError.new('product should be Fixnum')  unless product.kind_of?(Fixnum)
      check_result(Ftdi.ftdi_usb_open_desc(ctx, vendor, product, description, serial))
    end
Opens the first device with a given vendor and product ids, description and serial.
 @param [Fixnum] vendor Vendor id.
 @param [Fixnum] product Product id.
 @param [String] description Description to search for. Use nil if not needed.
 @param [String] serial Serial to search for. Use nil if not needed.
 @return [NilClass] nil
 @raise [StatusCodeError] libftdi reports error.
 @raise [ArgumentError] Bad arguments.