async def METHOD_NAME(connection, psm, mtu, timeout_ms):
    if _listening:
        raise ValueError("Can't connect while listening")
    channel = L2CAPChannel(connection)
    with connection.timeout(timeout_ms):
        ble.l2cap_connect(connection._conn_handle, psm, mtu)
        # Wait for the connect irq from the remote connection.
        # If the connection fails, we get a disconnect event (with status) instead.
        await channel._event.wait()
        if channel._cid is not None:
            return channel
        else:
            raise L2CAPConnectionError(channel._status)