private static void Packet_Decoding_To_Group_And_Clear_List(ref List <byte> RawData, out List <OneWireDataGroup> decoding_Group, out List <byte[]> decoding_Data_List) { int segStartIndex = 0; int segEndIndex = 0; int dataStartIndex = 0; int dataEndIndex = 0; byte[] decoding_Data = new byte[0]; decoding_Group = new List <OneWireDataGroup>(); decoding_Data_List = new List <byte[]>(); int RemoveEndIndex = 0; byte ONE_WIRE_PrecedingCheckCode_HighByte = (byte)(ONE_WIRE_PrecedingCheckCode >> 8); byte ONE_WIRE_PrecedingCheckCode_LowByte; byte ONE_WIRE_Data_PrecedingCode_HighByte = (byte)(ONE_WIRE_Data_PrecedingCode >> 8); byte ONE_WIRE_Data_PrecedingCode_LowByte; byte ONE_WIRE_EEPROM_Seg_PrecedingCode_HighByte = (byte)(ONE_WIRE_EEPROM_Seg_PrecedingCode >> 8); byte ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte; byte ONE_WIRE_EndCheckCode_HighByte = (byte)(ONE_WIRE_EndCheckCode >> 8); byte ONE_WIRE_EndCheckCode_LowByte; unchecked { ONE_WIRE_PrecedingCheckCode_LowByte = (byte)ONE_WIRE_PrecedingCheckCode; ONE_WIRE_Data_PrecedingCode_LowByte = (byte)ONE_WIRE_Data_PrecedingCode; ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte = (byte)ONE_WIRE_EEPROM_Seg_PrecedingCode; ONE_WIRE_EndCheckCode_LowByte = (byte)ONE_WIRE_EndCheckCode; } bool StartSrting = false; bool EndSrting = false; OneWireDataGroup status = OneWireDataGroup.None; byte[] receivingRawData = RawData.ToArray <byte>(); for (int i = 0; i < receivingRawData.Length - 3; i++) { if ((StartSrting == false) && (receivingRawData[i] == ONE_WIRE_PrecedingCheckCode_HighByte) && (receivingRawData[i + 1] == ONE_WIRE_PrecedingCheckCode_LowByte)) { if ((receivingRawData[i + 2] == ONE_WIRE_Data_PrecedingCode_HighByte) && (receivingRawData[i + 3] == ONE_WIRE_Data_PrecedingCode_LowByte)) { status = OneWireDataGroup.LEV_ST_G2_OneWire_SystemData_Group; dataStartIndex = i + 4; segStartIndex = i; StartSrting = true; //break; } else if ((receivingRawData[i + 2] == ONE_WIRE_EEPROM_Seg_PrecedingCode_HighByte) && (receivingRawData[i + 3] == ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte)) { status = OneWireDataGroup.LEV_ST_G2_OneWire_EEPROM_Group; dataStartIndex = i + 4; segStartIndex = i; StartSrting = true; //break; } }//if ((receivingRawData[i] == ONE_WIRE_PrecedingCheckCode_HighByte) && (receivingRawData[i + 1] == ONE_WIRE_PrecedingCheckCode_LowByte)) if ((StartSrting) && (EndSrting == false)) { if ((receivingRawData[i] == ONE_WIRE_EndCheckCode_HighByte) && (receivingRawData[i + 1] == ONE_WIRE_EndCheckCode_LowByte) && (receivingRawData[i + 2] == ONE_WIRE_EndCheckCode_HighByte) && (receivingRawData[i + 3] == ONE_WIRE_EndCheckCode_LowByte)) { dataEndIndex = i - 1; segEndIndex = i + 3; EndSrting = true; //break; } }//if ((status == Received_Data_Group.OneWire_SystemData_Group) || (status == Received_Data_Group.OneWire_EEPROM_Group)) // Packet Form Found if (StartSrting && EndSrting) { int length = dataEndIndex - dataStartIndex + 1; decoding_Data = new byte[length]; Array.Copy(receivingRawData, dataStartIndex, decoding_Data, 0, length); if (data_CRC16_Check(decoding_Data, out decoding_Data)) { decoding_Group.Add(status); decoding_Data_List.Add(decoding_Data); RemoveEndIndex = segEndIndex; } status = OneWireDataGroup.None; dataEndIndex = 0; dataStartIndex = 0; StartSrting = false; EndSrting = false; segEndIndex = 0; segStartIndex = 0; } }//for //Remove found Data if (decoding_Group.Count >= 1) { RawData.RemoveRange(0, RemoveEndIndex + 1); } }//public static void Packet_Decoding_To_Group_And_Clear_List
public static OneWireDataGroup UnPacking(byte[] ReceivedRawData, out byte[] UnpackingData, out int segStartIdxOfRawData, out int segEndIdxOfRawData, out int dataStartIdxOfRawData, out int dataEndIdxOfRawData) { segStartIdxOfRawData = 0; segEndIdxOfRawData = 0; dataStartIdxOfRawData = 0; dataEndIdxOfRawData = 0; bool formFound = false; UnpackingData = new byte[0]; OneWireDataGroup status = OneWireDataGroup.None; byte ONE_WIRE_PrecedingCheckCode_HighByte = (byte)(ONE_WIRE_PrecedingCheckCode >> 8); byte ONE_WIRE_PrecedingCheckCode_LowByte; byte ONE_WIRE_Data_PrecedingCode_HighByte = (byte)(ONE_WIRE_Data_PrecedingCode >> 8); byte ONE_WIRE_Data_PrecedingCode_LowByte; byte ONE_WIRE_EEPROM_Seg_PrecedingCode_HighByte = (byte)(ONE_WIRE_EEPROM_Seg_PrecedingCode >> 8); byte ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte; byte ONE_WIRE_EndCheckCode_HighByte = (byte)(ONE_WIRE_EndCheckCode >> 8); byte ONE_WIRE_EndCheckCode_LowByte; unchecked { ONE_WIRE_PrecedingCheckCode_LowByte = (byte)ONE_WIRE_PrecedingCheckCode; ONE_WIRE_Data_PrecedingCode_LowByte = (byte)ONE_WIRE_Data_PrecedingCode; ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte = (byte)ONE_WIRE_EEPROM_Seg_PrecedingCode; ONE_WIRE_EndCheckCode_LowByte = (byte)ONE_WIRE_EndCheckCode; } for (int i = 0; i < ReceivedRawData.Length - 4; i++) { if ((ReceivedRawData[i] == ONE_WIRE_PrecedingCheckCode_HighByte) && (ReceivedRawData[i + 1] == ONE_WIRE_PrecedingCheckCode_LowByte)) { if ((ReceivedRawData[i + 2] == ONE_WIRE_Data_PrecedingCode_HighByte) && (ReceivedRawData[i + 3] == ONE_WIRE_Data_PrecedingCode_LowByte)) { status = OneWireDataGroup.LEV_ST_G2_OneWire_SystemData_Group; dataStartIdxOfRawData = i + 4; segStartIdxOfRawData = i; break; } else if ((ReceivedRawData[i + 2] == ONE_WIRE_EEPROM_Seg_PrecedingCode_HighByte) && (ReceivedRawData[i + 3] == ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte)) { status = OneWireDataGroup.LEV_ST_G2_OneWire_EEPROM_Group; dataStartIdxOfRawData = i + 4; segStartIdxOfRawData = i; break; } else { return(OneWireDataGroup.None); } } }//for if ((status == OneWireDataGroup.LEV_ST_G2_OneWire_SystemData_Group) || (status == OneWireDataGroup.LEV_ST_G2_OneWire_EEPROM_Group)) { for (int j = dataStartIdxOfRawData; j < ReceivedRawData.Length - 3; j++) { if (j == 70) { formFound = false; } if ((ReceivedRawData[j] == ONE_WIRE_EndCheckCode_HighByte) && (ReceivedRawData[j + 1] == ONE_WIRE_EndCheckCode_LowByte) && (ReceivedRawData[j + 2] == ONE_WIRE_EndCheckCode_HighByte) && (ReceivedRawData[j + 3] == ONE_WIRE_EndCheckCode_LowByte)) { formFound = true; dataEndIdxOfRawData = j - 1; segEndIdxOfRawData = j + 3; break; } } //for } //if if (formFound) { int length = dataEndIdxOfRawData - dataStartIdxOfRawData + 1; UnpackingData = new byte[length]; Array.Copy(ReceivedRawData, dataStartIdxOfRawData, UnpackingData, 0, length); if (data_CRC16_Check(UnpackingData, out UnpackingData)) { dataEndIdxOfRawData -= 2; // exclude CRC 2 bytes return(status); } else { UnpackingData = new byte[0]; segStartIdxOfRawData = 0; segEndIdxOfRawData = 0; dataStartIdxOfRawData = 0; dataEndIdxOfRawData = 0; return(OneWireDataGroup.None); } } segStartIdxOfRawData = 0; segEndIdxOfRawData = 0; dataStartIdxOfRawData = 0; dataEndIdxOfRawData = 0; return(OneWireDataGroup.None); } //public static Received_Data_Group Packet_Decoding(byte[] receivingRawData, out byte[] decoding_Data)