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); }
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); }