Example #1
0
    public byte[] BuildHeader ( Commando_Struct send )
    {
        byte[] Frame = new byte[(byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__ + send.DataLength];

        Frame[(byte)Communication_Header_Enum.CMD_HEADER_LENGHT]        = (byte)(Communication_Header_Enum.__CMD_HEADER_ENTRYS__ + send.DataLength);
        Frame[(byte)Communication_Header_Enum.CMD_HEADER_DATA_TYP]      = send.DataType;
        Frame[(byte)Communication_Header_Enum.CMD_HEADER_ID]            = send.MessageID;
        Frame[(byte)Communication_Header_Enum.CMD_HEADER_EXITCODE]      = send.Exitcode;
        Frame[(byte)Communication_Header_Enum.CMD_HEADER_CRC]           = 0;

        byte FrameMasterCRC = 0;

        for ( int x = 0; x < (byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__; x++)
        {
            FrameMasterCRC = CmdCrc8CCITTUpdate(FrameMasterCRC, Frame[x]);
        }

        if ( send.DataLength > 0 )
        {
            for ( int x = 0; x < send.DataLength; x++ )
            {
                FrameMasterCRC = CmdCrc8CCITTUpdate(FrameMasterCRC, send.Data[x]);
                Frame[(byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__ + x] = send.Data[x];
            }
        }

        Frame[(byte)Communication_Header_Enum.CMD_HEADER_CRC] = FrameMasterCRC;

#if DEBUG
        Debug.WriteLine("Cmd(BuildHeader()): " + BitConverter.ToString(Frame, 0, Frame.Length));
#endif
        return Frame;
    }
Example #2
0
 public void CommandoFrameEventFnc( Commando_Struct Parsed )
 {
     // Prüft ob das Event überhaupt einen Abonnenten hat.
     CommandoFrameEvent?.Invoke( Parsed );    
 }
Example #3
0
    public int Parse(byte[] buffer, ref Commando_Struct Commando)
    {
        if (buffer.Length < (byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__)
        {
            return -1;
        }

        Commando.Data = new byte[buffer[(byte)Cmd.Communication_Header_Enum.CMD_HEADER_LENGHT]];

        try
        {
            Commando.DataLength = buffer[(byte)Communication_Header_Enum.CMD_HEADER_LENGHT];
            Commando.DataType   = buffer[(byte)Communication_Header_Enum.CMD_HEADER_DATA_TYP];
            Commando.MessageID  = buffer[(byte)Communication_Header_Enum.CMD_HEADER_ID];
            Commando.Exitcode   = buffer[(byte)Communication_Header_Enum.CMD_HEADER_EXITCODE];
            SlaveCRC            = buffer[(byte)Communication_Header_Enum.CMD_HEADER_CRC];
        }
        catch
        {
            return -1;
        }


        /*  Temporärer Speicher für die Checksummenbildung
        */
        byte[] Frame_ = new byte[]
        {
            Commando.DataLength,
            Commando.DataType,
            Commando.MessageID,
            Commando.Exitcode,
            0, // CRC ( Muss für die Bildung "0" sein! )
        };


        /*	Checksumme vom Header bilden
        */
        MasterCRC = 0;
        for (int x = 0; x < (byte)Cmd.Communication_Header_Enum.__CMD_HEADER_ENTRYS__; x++)
        {
            MasterCRC = CmdCrc8CCITTUpdate(MasterCRC, Frame_[x]);
        }


        /*	Checksumme von Nutzdaten bilden
        */
        int DataLength = (int)Commando.DataLength - (byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__;

        if (DataLength > 0)
        {
            for (int x = 0; x < DataLength; x++)
            {
                try
                {
                    MasterCRC = CmdCrc8CCITTUpdate(MasterCRC, buffer[(byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__ + x]);
                    Commando.Data[x] = buffer[(byte)Communication_Header_Enum.__CMD_HEADER_ENTRYS__ + x];
                }
                catch
                {
                    return -4;
                }
            }
        }

        Commando.DataLength = (byte)DataLength;

        if (MasterCRC == SlaveCRC)
        {

#if DEBUG
            Debug.WriteLine("Cmd(Parse()):" + "MasterCRC -> " + MasterCRC + " | " + "SlaveCRC -> " + SlaveCRC);
#endif
            GoodFrameIncomming++;

            if ( SyncForm != null && SyncForm.InvokeRequired )
            {
                SyncForm.Invoke(new EventDelegate(this.CommandoFrameEventFnc), CommandoParsed);
            }
        }
        else
        {
            BadFrameIncomming++;

            return -5;
        }

        return 0;
    }