public ApduCollection TransmitAPDU(IZvtApdu apdu)
        {
            foreach (IApduHandler apduHandler in _apduHandlers)
            {
                apduHandler.StartCommand();
            }


            _transport.Transmit(_transport.CreateTpdu(apdu));

            ApduCollection responses = new ApduCollection();

            while (true)
            {
                byte[] apduData = _transport.ReceiveResponsePacket();
                byte[] apduCopy = new byte[apduData.Length];
                Array.Copy(apduData, apduCopy, apduData.Length);
                IZvtApdu responseApdu = ApduResponse.Create(apduData);

                if (responseApdu == null)
                {
                    throw new ArgumentException("Could not retrieve response");
                }

                if (this.ResponseReceived != null)
                {
                    ResponseReceived(responseApdu);
                }

                responses.Add(responseApdu);

                CallResponseApduHandlers(apdu, responseApdu);

                if (IsCompletionPacket == null && InternalIsCompletionPacket(apdu, responseApdu))
                {
                    break;
                }
                else if (IsCompletionPacket != null && IsCompletionPacket(apdu, responseApdu))
                {
                    break;
                }
            }

            return(responses);
        }
Example #2
0
 public void Process(IZvtApdu requestApdu, IZvtApdu responseApdu)
 {
     _transport.Transmit(_transport.CreateTpdu(new StatusApdu()));
 }