<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def connect_direct(self, connection_string, no_rpc=False, force=False):
 """Directly connect to a device using its stream specific connection string. Normally, all connections to a device include opening the RPC interface to send RPCs. However, there are certain, very specific, circumstances when you would not want to or be able to open the RPC interface (such as when you are using the debug interface on a bare MCU that has not been programmed yet). In those cases you can pass no_rpc=True to not attempt to open the RPC interface. If you do not open the RPC interface at connection time, there is no public interface to open it later, so you must disconnect and reconnect to the device in order to open the interface. Args: connection_string (str):
 The connection string that identifies the desired device. no_rpc (bool):
 Do not open the RPC interface on the device (default=False). force (bool):
 Whether to force another connection even if we think we are currently connected. This is for internal use and not designed to be set externally. """


        if not force and self.connected:
            raise HardwareError("Cannot connect when we are already connected to '%s'" % self.connection_string)

        self._loop.run_coroutine(self.adapter.connect(0, connection_string))

        try:
            if no_rpc:
                self._logger.info("Not opening RPC interface on device %s", self.connection_string)
            else:
                self._loop.run_coroutine(self.adapter.open_interface(0, 'rpc'))
        except HardwareError as exc:
            self._logger.exception("Error opening RPC interface on device %s", connection_string)
            self._loop.run_coroutine(self.adapter.disconnect(0))
            raise exc
        except Exception as exc:
            self._logger.exception("Error opening RPC interface on device %s", connection_string)
            self._loop.run_coroutine(self.adapter.disconnect(0))
            raise HardwareError("Could not open RPC interface on device due to an exception: %s" % str(exc)) from exc

        self.connected = True
        self.connection_string = connection_string
        self.connection_interrupted = False