public static void Packet_Decoding_To_Group_And_Clear_List_(ref List <byte> RawData, out List <Received_Data_Group> decoding_Group, out List <byte[]> decoding_Data) { decoding_Group = new List <Received_Data_Group>(); decoding_Data = new List <byte[]>(); byte[] raw_data = RawData.ToArray <byte>(); byte[] out_data = RawData.ToArray <byte>(); int segStartIndex = 0; int segEndIndex = 0; Received_Data_Group group = Packet_Decoding(raw_data, out out_data, out segStartIndex, out segEndIndex); }
}//public static void Packet_Decoding_To_Group_And_Clear_List public static Received_Data_Group Packet_Decoding(byte[] receivingRawData, out byte[] decoding_Data, out int segStartIndex, out int segEndIndex) { segStartIndex = 0; segEndIndex = 0; int dataStartIndex = 0; int dataEndIndex = 0; bool formFound = false; decoding_Data = new byte[0]; Received_Data_Group status = Received_Data_Group.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 < receivingRawData.Length - 4; i++) { if ((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 = Received_Data_Group.OneWire_SystemData_Group; dataStartIndex = i + 4; segStartIndex = i; break; } else if ((receivingRawData[i + 2] == ONE_WIRE_EEPROM_Seg_PrecedingCode_HighByte) && (receivingRawData[i + 3] == ONE_WIRE_EEPROM_Seg_PrecedingCode_LowByte)) { status = Received_Data_Group.OneWire_EEPROM_Group; dataStartIndex = i + 4; segStartIndex = i; break; } else { return(Received_Data_Group.None); } } }//for if ((status == Received_Data_Group.OneWire_SystemData_Group) || (status == Received_Data_Group.OneWire_EEPROM_Group)) { for (int j = dataStartIndex; j < receivingRawData.Length - 4; j++) { if ((receivingRawData[j] == ONE_WIRE_EndCheckCode_HighByte) && (receivingRawData[j + 1] == ONE_WIRE_EndCheckCode_LowByte) && (receivingRawData[j + 2] == ONE_WIRE_EndCheckCode_HighByte) && (receivingRawData[j + 3] == ONE_WIRE_EndCheckCode_LowByte)) { formFound = true; dataEndIndex = j - 1; segEndIndex = j + 3; break; } } //for } //if if (formFound) { 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)) { return(status); } else { decoding_Data = new byte[0]; return(Received_Data_Group.None); } } return(Received_Data_Group.None); }//public static Received_Data_Group Packet_Decoding(byte[] receivingRawData, out byte[] decoding_Data)
public static void Packet_Decoding_To_Group_And_Clear_List(ref List <byte> RawData, out List <Received_Data_Group> 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 <Received_Data_Group>(); 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; Received_Data_Group status = Received_Data_Group.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 = Received_Data_Group.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 = Received_Data_Group.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 = Received_Data_Group.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