public override ParseResult ParsePackage(ref ArrayList irReceived, ref Frame_Stu ruleinfo, ref int startindex, ref int endindex) { ruleinfo.dataArray = new ArrayList(); ArrayList temp = new ArrayList(); temp.AddRange(irReceived); //报文中不包含任何数据段时,最短长度为15字节 if (irReceived.Count <= 15) { startindex = 0; endindex = 0; return(ParseResult.Unintegrated); } int indexof68 = 0; while (startindex < irReceived.Count) { //查找起始0x68 startindex = irReceived.IndexOf((byte)0x68, indexof68); if (startindex < 0) { return(ParseResult.Error); } endindex = startindex; indexof68 = startindex; if ((byte)irReceived[startindex + 5] != 0x68) { irReceived.RemoveRange(0, 1); continue; } else { endindex = startindex + 5;//endindex指向了第二个0x68 } int length = 0; length = Convert.ToInt32((byte)irReceived[startindex + 2]); length <<= 6; length |= Convert.ToInt32(((byte)irReceived[startindex + 1]) >> 2); //报文收到的不完整 帧起始索引 头 数据长度 if (irReceived.Count < startindex + 5 + length) { return(ParseResult.Unintegrated); } else { endindex = startindex + 5 + length; } ruleinfo.ctrl = (byte)irReceived[startindex + 6]; endindex = startindex + 5 + length; //endindex指向了用户数据段的末尾 endindex = endindex + 2; //endindex指向了报文末尾的16 if (irReceived.Count < endindex) { return(ParseResult.Unintegrated); } if ((byte)irReceived[endindex] != 0x16) { return(ParseResult.Error); } byte[] addr = new byte[5]; addr[0] = (byte)irReceived[startindex + 7]; addr[1] = (byte)irReceived[startindex + 8]; addr[2] = (byte)irReceived[startindex + 9]; addr[3] = (byte)irReceived[startindex + 10]; addr[4] = (byte)irReceived[startindex + 11]; ruleinfo.afn = (byte)irReceived[startindex + 12]; Array altemp = irReceived.GetRange(startindex + 6, endindex - startindex - 6 - 1).ToArray(typeof(byte)); if ((byte)irReceived[endindex - 1] != getCS(altemp)) { return(ParseResult.Error); } ruleinfo.dataArray.Clear(); ruleinfo.dataArray.AddRange(irReceived.GetRange(startindex + 18, (endindex - 2) - (startindex + 18) + 1).ToArray(typeof(byte))); return(ParseResult.OK); } return(ParseResult.Unintegrated); }
virtual public ParseResult ParsePackage(ref ArrayList irReceived, ref Frame_Stu ruleinfo, ref int startindex, ref int endindex) { return(ParseResult.OK); }