//private void OnDataReceived(object sender, SerialDataReceivedEventArgs e) //{ // lock (_locker) // { // try // { // lastCommandResponce = DateTime.Now; // // If the com port has been closed, do nothing // if (!COMPort.IsOpen) return; // // Obtain the number of bytes waiting in the port's buffer // int bytes = COMPort.BytesToRead; // // Create a byte array buffer to hold the incoming data // IList<byte> buffer = new List<byte>(); // // Read the data from the port and store it in our buffer // var buffertmp = new byte[bytes]; // COMPort.Read(buffertmp, 0, bytes); // foreach (var b in buffertmp) // { // buffer.Add(b); // } // while (buffer.Count < LastCommand.ResponceLength) // { // buffertmp = new byte[bytes]; // COMPort.Read(buffertmp, 0, bytes); // foreach (var b in buffertmp) // { // buffer.Add(b); // } // } // var res = new byte[buffer.Count]; // for (int i = 0; i < buffer.Count; i++) // { // res[i] = buffer[i]; // } // SendResponse(res); // } // catch (Exception ex) // { // throw; // } // Monitor.Pulse(_locker); // } //} /// <summary> Send the user's data currently entered in the 'send' box.</summary> public ReaderEvent Send(Command command) { ReaderEvent e1 = new ReaderEvent(); LastCommand = command; try { SendCommand(command.Data); Thread.Sleep(250); lastCommandResponce = DateTime.Now; // If the com port has been closed, do nothing if (!COMPort.IsOpen) { COMPort.Open(); } // Obtain the number of bytes waiting in the port's buffer int bytes = 1; // Create a byte array buffer to hold the incoming data IList <byte> buffer = new List <byte>(); // Read the data from the port and store it in our buffer var buffertmp = new byte[bytes]; COMPort.Read(buffertmp, 0, bytes); foreach (var b in buffertmp) { buffer.Add(b); } while (COMPort.BytesToRead > 0) { if (COMPort.BytesToRead < 1) { break; } buffertmp = new byte[bytes]; COMPort.Read(buffertmp, 0, bytes); foreach (var b in buffertmp) { buffer.Add(b); } } var res = new byte[buffer.Count]; for (int i = 0; i < buffer.Count; i++) { res[i] = buffer[i]; } e1.Data = Encoding.ASCII.GetString(res); return(e1); } catch (Exception ex) { throw; } }
//private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(CommandParser)); public static void Parse(Command command, ReaderEvent response) { //Console.WriteLine(response.Data); switch (command.Operation) { case Operation.TransferData: { if (response.Data.Length < 5) { Link862Reader.COMPort.Close(); Link862Reader.COMPort.Open(); break; } Log.Debug(response.Data); if (response.Data.Contains("!!")) { Link862Reader.COMPort.DiscardOutBuffer(); Link862Reader.COMPort.DiscardInBuffer(); Link862Reader.COMPort.Dispose(); Link862Reader.COMPort.Close(); Link862Reader.COMPort.Open(); Link862Reader.CardNumber = ""; Link862Reader.IsNew = false; break; } string cardNumber = response.Data.Substring(4); cardNumber = cardNumber.Replace("\0", ""); var cardNumberNoquestins = cardNumber; cardNumber = cardNumber.Replace("?", ""); Link862Reader.CardNumber = cardNumber; Link862Reader.IsNew = cardNumberNoquestins.Contains("?????") && cardNumber.Length < 2; if (Link862Reader.IsNew) { Link862Reader.CardNumber = "?????????????????????????"; } Log.Debug("Card number:" + cardNumber); } break; case Operation.ActivateChip: break; case Operation.SaveData: Link862Reader.COMPort.Close(); Link862Reader.COMPort.Open(); break; case Operation.CheckPosition: if (response.Data.Contains("ss")) { Link862Reader.State = 1; } if (response.Data.Contains("pp")) { Link862Reader.State = 0; } break; case Operation.CheckDescriptors: try { if (response.Data.Length > 5) { int len = response.Data.Length - 5; Link862Reader.IdReaderHW = response.Data.Substring(4, len); } else { Link862Reader.IdReaderHW = null; } } catch { Link862Reader.IdReaderHW = null; } break; case Operation.CheckSN: try { if (response.Data.Length > 5) { int len = response.Data.Length - 5; Link862Reader.IdReaderSN = response.Data.Substring(4, len); } else { Link862Reader.IdReaderSN = null; } } catch { Link862Reader.IdReaderSN = null; } break; } }