예제 #1
0
 public static bool SetDevice(List<byte> macAddress)
 {
     string address = ByteConverter.ToHexString(macAddress);
     if (!DeviceList.ContainsKey(address))
     {
         DeviceList.Add(address, new BleDevice());
         DeviceList[address]._mac = macAddress;
         return true;
     }
     return false;
 }
예제 #2
0
        /// <summary>
        /// 切割資料
        /// </summary>
        /// <param name="data">待切割資料</param>
        /// <param name="output">切割後的資料</param>
        /// <returns>資料狀態</returns>
        public static List <List <byte> > ParseData(List <byte> data)
        {
            if (data == null)
            {
                return(null);
            }
            List <List <byte> > output = new List <List <byte> >();

            int pStx = 0, len, pEtx, totalLen;

            while ((pStx = data.IndexOf(RSTX, pStx)) != -1)
            {
                if (data.Count <= pStx + 1)
                {
                    //WriteLog.Console("Parse1", DataStatue.LengthNotEnough.ToString() + " " + BitConverter.ToString(data.ToArray()).Replace("-", " "));
                    return(null);
                }
                len      = data[pStx + 1];
                pEtx     = pStx + len + 3;
                totalLen = len + 4;
                if (data.Count <= pEtx)
                {
                    //WriteLog.Console("Parse2", $"{DataStatue.LengthNotEnough.ToString()} {BitConverter.ToString(data.ToArray()).Replace("-", " ")}");
                    return(null);
                }
                if (data[pEtx] != RETX)
                {
                    WriteLog.Console("Parse3", DataStatue.SETXFail.ToString() + " " + BitConverter.ToString(data.ToArray()).Replace("-", " ")); /*pStx += 1*/ data.RemoveAt(0); continue;
                }
                if (data[pEtx - 1] != MakeCrc(data, pStx, totalLen - 2))
                {
                    WriteLog.Console("Parse4", DataStatue.CrcFail.ToString() + " " + ByteConverter.ToHexString(data)); pStx += 1; continue;
                }
                output.Add(data.GetRange(pStx, totalLen));
                if (pStx != 0)
                {
                    data.RemoveRange(0, pStx);
                    WriteLog.Console("Parse5", DataStatue.DataFail.ToString() + " " + BitConverter.ToString(data.ToArray()).Replace("-", " "));
                    pStx = 0;
                }

                data.RemoveRange(pStx, totalLen);
            }
            return(output);
        }