public bool Atr_req(INfcTransceiver chip, byte targetNumber, byte[] genBytes, out byte[] response) { response = new byte[0]; bool result = false; byte[] req = AtrReq(NfcidGenerator.Nfcid, genBytes); Span <byte> res; if (chip.TransmitData(targetNumber, req) >= 0) { if (chip.ReceiveData(targetNumber, out res, 10) >= 0) { byte[] reply = res.ToArray(); if ((reply[2] == (byte)Nfcip1.Types.RES) && (reply[3] == (byte)Nfcip1.Commands.ATR_RES)) //hebben we een reply ontvangen { Array.Copy(reply, 4, Nfcid_RX, 0, 10); TimeOutTime = (reply[17] * 309.8); byte ppt = reply[18]; MaxBufferSize = ((ppt >> 4) + 1) * 64; if ((ppt & 0x02) > 0) { response = new byte[reply.Length - 19]; Array.Copy(reply, 19, response, 0, response.Length); } result = true; } } } return(result); }
public bool Dep_req(INfcTransceiver chip, byte targetNumber, PfbTypes type, byte[] payload, out byte[] response) { byte pni = PniGenerator.PNI; byte pfb = (byte)(((int)type << 5) | pni); // todo: // - MI NAD DID support // - ACk/Nack support // - Attention/Timeout support response = new byte[0]; byte[] req = DepReq(pfb, payload); Span <byte> res; if (chip.TransmitData(targetNumber, req) >= 0) { if (chip.ReceiveData(targetNumber, out res, 100) >= 0) { byte[] reply = res.ToArray(); if ((reply[2] == (byte)Nfcip1.Types.RES) && (reply[3] == (byte)Nfcip1.Commands.DEP_RES)) //hebben we een reply ontvangen { if ((reply[4] & 0x03) == pni) { PniGenerator.Increase(); int startIndex = 4; if ((reply[4] & 0x4) > 0) //NAD byte available { startIndex++; } if ((reply[4] & 0x2) > 0) //DID byte available { startIndex++; } // todo: // - MI NAD DID support // - ACk/Nack support // - Attention/Timeout support response = new byte[reply.Length - startIndex]; Array.Copy(reply, startIndex, response, 0, response.Length); return(true); } } } } return(false); }
public bool Dsl_req(INfcTransceiver chip, byte targetNumber) { byte[] req = DslReq(); Span <byte> res; if (chip.TransmitData(targetNumber, req) >= 0) { if (chip.ReceiveData(targetNumber, out res, 10) >= 0) { byte[] reply = res.ToArray(); if ((reply[2] == (byte)Nfcip1.Types.RES) && (reply[3] == (byte)Nfcip1.Commands.DSL_RES)) //hebben we een reply ontvangen { //todo data analyseren return(true); } } } return(false); }