Beispiel #1
0
        /// <summary>
        /// 将接收到的字节数组转换为结构体
        /// </summary>
        /// <param name="receivedBuffer"></param>
        public void ReadBuffer(byte[] receivedBuffer)
        {
            //检验是否有帧头帧尾
            int dataLen = receivedBuffer.Length;
            IsValidData = true;

            if (dataLen < 10)
            {
                IsValidData = false;
                return;
            }
            if (receivedBuffer[0] == 0x78 && receivedBuffer[1] == 0x78)
            {
                //去掉帧头帧尾的数据帧
                byte[] dataBuffer = new byte[dataLen - 4];
                Array.Copy(receivedBuffer, 2, dataBuffer, 0, dataBuffer.Length);
                //包长度
                FrameLen = dataBuffer[0];
                //校验和
                ProtocolNo = (KKSProtocolNO)dataBuffer[1];

                CRCVerCode = new byte[2];
                Array.Copy(receivedBuffer, dataLen - 4, CRCVerCode, 0, 2);

                SerialNum = new byte[2];
                Array.Copy(receivedBuffer, dataLen - 6, SerialNum, 0, 2);

                //用户数据
                Data = new byte[dataLen - 10];
                Array.Copy(receivedBuffer, 4, Data, 0, dataLen - 10);

                _CRCContext = new byte[dataLen - 6];
                Array.Copy(receivedBuffer, 2, _CRCContext, 0, _CRCContext.Length);

                if (!KangKaiSiTool.CheckCRCCode(_CRCContext, CRCVerCode))
                {
                    IsValidData = false;
                    return;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 将接收到的字节数组转换为结构体
        /// </summary>
        /// <param name="receivedBuffer"></param>
        public void ReadBuffer(byte[] receivedBuffer)
        {
            IsValidData = true;
            //检验是否有帧头帧尾
            int dataLen = receivedBuffer.Length;

            if (dataLen < 20 || receivedBuffer[0] != 0x68 || receivedBuffer[1] != 0x68 || receivedBuffer[dataLen - 2] != 0x0D || receivedBuffer[dataLen - 1] != 0x0A)
            {
                IsValidData = false;
                return;
            }
            if (receivedBuffer[15] == 0x10 && dataLen == 42)
            {
                //去掉帧头帧尾的数据帧
                byte[] dataBuffer = new byte[dataLen - 4];
                Array.Copy(receivedBuffer, 2, dataBuffer, 0, dataBuffer.Length);

                //包长度
                FrameLen = dataBuffer[0];

                //保留位
                ReserveData = new byte[2];
                Array.Copy(dataBuffer, 1, ReserveData, 0, 2);

                //终端ID
                byte[] imeiBuffer = new byte[8];
                Array.Copy(dataBuffer, 3, imeiBuffer, 0, 8);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < imeiBuffer.Length; i++)
                {
                    sb.Append(imeiBuffer[i].ToString("X2"));
                }
                TerminalIMEI = ulong.Parse(sb.ToString());

                //协议号
                ProtocolNo = (KKSProtocolNO)dataBuffer[13];

                //用户数据
                Data = new byte[24];
                Array.Copy(dataBuffer, 14, Data, 0, 24);
            }
            else if (receivedBuffer[15] == 0x1A)
            {
                //去掉帧头帧尾的数据帧
                byte[] dataBuffer = new byte[dataLen - 4];
                Array.Copy(receivedBuffer, 2, dataBuffer, 0, dataBuffer.Length);

                //包长度
                FrameLen = dataBuffer[0];

                Voltage = dataBuffer[1];

                GSMLevel = dataBuffer[2];

                byte[] imeiBuffer = new byte[8];
                Array.Copy(dataBuffer, 3, imeiBuffer, 0, 8);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < imeiBuffer.Length; i++)
                {
                    sb.Append(imeiBuffer[i].ToString("X2"));
                }
                TerminalIMEI = ulong.Parse(sb.ToString());

                SerialNum = new byte[2];
                Array.Copy(dataBuffer, 11, SerialNum, 0, 2);

                ProtocolNo = (KKSProtocolNO)dataBuffer[13];

                Data = new byte[dataLen - 18];
                Array.Copy(dataBuffer, 14, Data, 0, dataLen - 18);
            }
            else if (receivedBuffer[15] == 0x1B)//短信查询位置信息
            {
                byte[] dataBuffer = new byte[dataLen - 4];
                Array.Copy(receivedBuffer, 2, dataBuffer, 0, dataBuffer.Length);

                //包长度
                FrameLen = dataBuffer[0];

                byte[] imeiBuffer = new byte[8];
                Array.Copy(dataBuffer, 3, imeiBuffer, 0, 8);
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < imeiBuffer.Length; i++)
                {
                    sb.Append(imeiBuffer[i].ToString("X2"));
                }
                TerminalIMEI = ulong.Parse(sb.ToString());

                SerialNum = new byte[2];
                Array.Copy(dataBuffer, 11, SerialNum, 0, 2);

                ProtocolNo = (KKSProtocolNO)dataBuffer[13];

                Data = new byte[dataLen - 18];
                Array.Copy(dataBuffer, 14, Data, 0, dataLen - 18);
            }
            else
            {
                IsValidData = false;
            }
        }
 /// <summary>
 /// 根据GPSCODE,更新最后上传数据的类型
 /// </summary>
 /// <param name="gpsCode"></param>
 /// <param name="protocolNo"></param>
 private void UpdateLastProtocolNo(string gpsCode, KKSProtocolNO protocolNo)
 {
     lock (objLocker)
     {
         if (_LastReceiveDataProtocolNo.ContainsKey(gpsCode))
         {
             _LastReceiveDataProtocolNo[gpsCode] = protocolNo;
         }
         else
         {
             _LastReceiveDataProtocolNo.Add(gpsCode, protocolNo);
         }
     }
 }