Runs an extended pigpio socket command.

            sl:= command socket and lock.
           cmd:= the command to be executed.
            p1:= command parameter 1 (if applicable).
            p2:= command parameter 2 (if applicable).
            p3:= total size in bytes of following extents
        extents:= additional data blocks

def _pigpio_aio_command_ext(self, cmd, p1, p2, p3, extents, rl=True):
        """
        Runs an extended pigpio socket command.

            sl:= command socket and lock.
           cmd:= the command to be executed.
            p1:= command parameter 1 (if applicable).
            p2:= command parameter 2 (if applicable).
            p3:= total size in bytes of following extents
        extents:= additional data blocks
        """
        with (yield from self._lock):
            ext = bytearray(struct.pack('IIII', cmd, p1, p2, p3))
            for x in extents:
                if isinstance(x, str):
                    ext.extend(_b(x))
                else:
                    ext.extend(x)
            self._loop.sock_sendall(self.s, ext)
            response = yield from self._loop.sock_recv(self.s, 16)
            _, res = struct.unpack('12sI', response)
            return res