Ejemplo n.º 1
0
        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
Ejemplo n.º 2
0
        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)