Exemple #1
0
 /// <summary>
 /// 向读卡器请求命令,并取得返回包
 /// </summary>
 /// <param name="cmd">请求的命令</param>
 /// <param name="data">请求中包含的数据</param>
 /// <returns></returns>
 public YCTPacket Request(YCTCommandType cmd, byte[] data)
 {
     lock (_PortLocker)
     {
         byte[] request = CreateRequest(cmd, data);
         if (Log)
         {
             Ralid.GeneralLibrary.LOG.FileLog.Log("羊城通读卡器", "发送数据: " + HexStringConverter.HexToString(request, " "));
         }
         _Port.OnDataArrivedEvent -= _Port_OnDataArrivedEvent;
         _buffer.Clear();
         _Responsed.Reset();
         _Response = null;
         _Port.OnDataArrivedEvent += _Port_OnDataArrivedEvent;
         _Port.SendData(request);
         if (_Responsed.WaitOne(5000))
         {
             if (_Response != null && _Response.CheckCRC() && _Response.Command == (byte)cmd)
             {
                 _LastError = _Response.Status;
                 return(_Response);
             }
         }
     }
     _LastError = -1;
     return(null);
 }
Exemple #2
0
        private byte[] CreateRequest(YCTCommandType cmd, byte[] data)
        {
            ////包结构 头(1byte) + 包长(1byte) + Command(1byte) + data(nbyte) + checksum(1byte)
            List <byte> ret = new List <byte>();

            ret.Add(0xBA);                                         //头
            ret.Add((byte)(2 + (data != null ? data.Length : 0))); //命令+数据+crc的长度
            ret.Add((byte)cmd);
            if (data != null)
            {
                ret.AddRange(data);
            }
            ret.Add(CRCHelper.CalCRC(ret));
            return(ret.ToArray());
        }