async def future_command(self, cmd):
        """Run command as a coroutine and return a future.

        Args:
            loop (BackgroundEventLoop): The loop that we should attach
                the future too.
            cmd (list): The command and arguments that we wish to call.

        Returns:
            asyncio.Future: An awaitable future with the result of the operation.
        """

        if self._asyncio_cmd_lock is None:
            raise HardwareError("Cannot use future_command because no event loop attached")

        async with self._asyncio_cmd_lock:
            return await self._future_command_unlocked(cmd)
Run command as a coroutine and return a future.

        Args:
            loop (BackgroundEventLoop): The loop that we should attach
                the future too.
            cmd (list): The command and arguments that we wish to call.

        Returns:
            asyncio.Future: An awaitable future with the result of the operation.