connect
Initiate connection. May throw MeshtasticException.Transport on fatal errors.
The transport should transition state to TransportState.Connecting, then TransportState.Connected when ready. State changes are observed by the engine to coordinate handshake timing.
Cancellation: if the calling coroutine is cancelled while connect is suspended, the implementation must release any partially acquired OS resources (sockets, BLE connections, USB handles) and rethrow kotlin.coroutines.cancellation.CancellationException. The transport's state should settle on TransportState.Disconnected (or TransportState.Error) after a cancelled connect; it must not leak a "Connecting" state after the coroutine returns.