code: def usb_control_in(library, session, request_type_bitmap_field, request_id, request_value,
                     index, length=0):
      
      buffer = create_string_buffer(length)
      return_count = ViUInt16()
      ret = library.viUsbControlIn(session, request_type_bitmap_field, request_id,
                                   request_value, index, length, buffer,
                                   byref(return_count))
      return buffer.raw[:return_count.value], ret
docs: Performs a USB control pipe transfer from the device.
  
      Corresponds to viUsbControlIn function of the VISA library.
  
      :param library: the visa library wrapped by ctypes.
      :param session: Unique logical identifier to a session.
      :param request_type_bitmap_field: bmRequestType parameter of the setup stage of a USB control transfer.
      :param request_id: bRequest parameter of the setup stage of a USB control transfer.
      :param request_value: wValue parameter of the setup stage of a USB control transfer.
      :param index: wIndex parameter of the setup stage of a USB control transfer.
                    This is usually the index of the interface or endpoint.
      :param length: wLength parameter of the setup stage of a USB control transfer.
                     This value also specifies the size of the data buffer to receive the data from the
                     optional data stage of the control transfer.
      :return: - The data buffer that receives the data from the optional data stage of the control transfer
               - return value of the library call.
      :rtype: - bytes
              - :class:`pyvisa.constants.StatusCode`