code: def ccid_xfr_block(self, data, timeout=0.1):
          
          frame = struct.pack("<BI5B", 0x6F, len(data), 0, 0, 0, 0, 0) + data
          self.transport.write(bytearray(frame))
          frame = self.transport.read(int(timeout * 1000))
          if not frame or len(frame) < 10:
              log.error("insufficient data for decoding ccid response")
              raise IOError(errno.EIO, os.strerror(errno.EIO))
          if frame[0] != 0x80:
              log.error("expected a RDR_to_PC_DataBlock")
              raise IOError(errno.EIO, os.strerror(errno.EIO))
          # if len(frame) != 10 + struct.unpack("<I", buffer(frame, 1, 4))[0]:
          if len(frame) != 10 + struct.unpack("<I", frame[1:5])[0]:
              log.error("RDR_to_PC_DataBlock length mismatch")
              raise IOError(errno.EIO, os.strerror(errno.EIO))
          return frame[10:]
docs: Encapsulate host command *data* into an PC/SC Escape command to
          send to the device and extract the chip response if received
          within *timeout* seconds.