コード例 #1
0
        private void StartWork()
        {
            wtoken = new CancellationTokenSource();
            int symmRetry = 0;

            task = Task.Factory.StartNew(action =>
            {
                ILinkManager manager = (ILinkManager)ServiceManagers[0];

                LLCPParameters paramsOut = new LLCPParameters(Version, MIUX, GetSupportedWelKnownServiceList(), manager.LinkTimeOut, LSC);
                LLCPParameters paramsIn;

                if (manager.LinkActivation(paramsOut, out paramsIn))
                {
                    ConnectionChanged?.Invoke(this, new LLCPLinkActivatedEventArgs()
                    {
                        Connected = true
                    });
                    while (true)
                    {
                        if (wtoken.IsCancellationRequested) //stop is requeste break the loop and send close connection
                        {
                            Console.WriteLine("Closing LLCP connection");
                            break;
                        }
                        if (!manager.Symm())
                        {
                            symmRetry++;
                            if (symmRetry > 5)
                            {
                                break; //stop LLCP
                            }
                        }
                        else
                        {
                            symmRetry = 0;
                        }
                    }

                    manager.LinkDeActivation();
                    ConnectionChanged?.Invoke(this, new LLCPLinkActivatedEventArgs()
                    {
                        Connected = false
                    });
                }
                else
                {
                    Console.WriteLine("Link activation failed");
                }
            }, wtoken, TaskCreationOptions.LongRunning);
        }
コード例 #2
0
            public bool Connect(byte ssap, LLCPParameters parameters)
            {
                bool result = false;

                if (LinkManager != null)
                {
                    this.SSAP = ssap;
                    byte[] payload        = parameters.GetParams();
                    byte[] connectRequest = LLCP.GetFrame((byte)WelKnownServiceAccessPoints.ServiceDiscoveryProtocolService, LLCP.PTYPES.CONNECT, ssap, 0, payload);
                    byte[] response       = new byte[0];
                    if (LinkManager.Tranceive(connectRequest, out response))
                    {
                        if (response.Length > 2)
                        {
                            this.DSAP = (byte)(response[2] & 0x3F);
                            // check response
                            Connected = true;
                        }
                    }
                }
                return(result);
            }
 public bool LinkActivation(LLCPParameters paramsOut, out LLCPParameters paramsIn)
 {
     paramsIn = new LLCPParameters();
     byte[] payload = paramsOut.GetMagicHeader();
     byte[] reply   = new byte[0];
     Nfcip1.Reset();
     Console.WriteLine("Sending ATR_REQ");
     if (Nfcip1.Atr_req(Chip, TargetNumber, payload, out reply))
     {
         Console.WriteLine("ATR_RES received checking magic header");
         if (reply.Length > 3)
         {
             if ((reply[0] == 0x46) && (reply[1] == 0x66) && (reply[2] == 0x6D))
             {
                 byte[] paramA = new byte[reply.Length - 3];
                 Array.Copy(reply, 3, paramA, 0, paramA.Length);
                 paramsIn = new LLCPParameters(paramA);
                 return(true);
             }
         }
     }
     return(false);
 }