async def METHOD_NAME(self, buf, timeout_ms=None, chunk_size=None):
    self._assert_connected()
    offset = 0
    chunk_size = min(self.our_mtu * 2, self.peer_mtu, chunk_size or self.peer_mtu)
    mv = memoryview(buf)
    while offset < len(buf):
        if self._stalled:
            await self.flush(timeout_ms)
        # l2cap_send returns True if you can send immediately.
        self._stalled = not ble.l2cap_send(
            self._connection._conn_handle,
            self._cid,
            mv[offset : offset + chunk_size],
        )
        offset += chunk_size