Verify existence of a service (or area) and get the key version.

        Each service (or area) to verify must be given as a
        :class:`~nfc.tag.tt3.ServiceCode` in the iterable
        *service_list*. The key versions are returned as a list of
        16-bit integers, in the order requested. If a specified
        service (or area) does not exist, the key version will be
        0xFFFF.

        Command execution errors raise :exc:`~nfc.tag.TagCommandError`.

def request_service(self, service_list):
        """Verify existence of a service (or area) and get the key version.

        Each service (or area) to verify must be given as a
        :class:`~nfc.tag.tt3.ServiceCode` in the iterable
        *service_list*. The key versions are returned as a list of
        16-bit integers, in the order requested. If a specified
        service (or area) does not exist, the key version will be
        0xFFFF.

        Command execution errors raise :exc:`~nfc.tag.TagCommandError`.

        """
        a, b, e = self.pmm[2] & 7, self.pmm[2] >> 3 & 7, self.pmm[2] >> 6
        timeout = 302E-6 * ((b + 1) * len(service_list) + a + 1) * 4**e
        pack = lambda x: x.pack()  # noqa: E731
        data = chr(len(service_list)) + ''.join(map(pack, service_list))
        data = self.send_cmd_recv_rsp(0x02, data, timeout, check_status=False)
        if len(data) != 1 + len(service_list) * 2:
            log.debug("insufficient data received from tag")
            raise tt3.Type3TagCommandError(tt3.DATA_SIZE_ERROR)
        return [unpack("<H", data[i:i+2])[0] for i in range(1, len(data), 2)]