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);
        }
Esempio n. 2
0
        public LLCP(INfcTransceiver chip, Data106kbpsTypeA iso14443Device)
        {
            IsoIec18092LinkServiceManager linkManager = new IsoIec18092LinkServiceManager();

            linkManager.Chip         = chip;
            linkManager.TargetNumber = iso14443Device.TargetNumber;
            ServiceManagers.Add(linkManager.SSAP, linkManager);
            SnepServiceManager snepServiceManager = new SnepServiceManager(linkManager);

            ServiceManagers.Add(snepServiceManager.SSAP, snepServiceManager);
        }
        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);
        }