code: def controlRead(
              self, request_type, request, value, index, length, timeout=0):
          
          # pylint: disable=undefined-variable
          request_type = (request_type & ~ENDPOINT_DIR_MASK) | ENDPOINT_IN
          # pylint: enable=undefined-variable
          data, data_buffer = create_binary_buffer(length)
          transferred = self._controlTransfer(
              request_type, request, value, index, data, length, timeout,
          )
          return data_buffer[:transferred]
docs: Synchronous control read.
          timeout: in milliseconds, how long to wait for data. Set to 0 to
            disable.
          See controlWrite for other parameters description.
  
          To avoid memory copies, use an object implementing the writeable buffer
          interface (ex: bytearray) for the "data" parameter.
  
          Returns received data.