コード例 #1
0
 public DiagnosticSessionControl(ISO_TP.Message message)
     : base(message)
 {
     SessionType = (DiagnosticSessionType)message.Payload[1];
     if (base.MessageType == ServiceMessageType.Request)
     {
     }
     else
     {
     }
 }
コード例 #2
0
ファイル: RoutineControl.cs プロジェクト: syntroniks/ghosen
 public RoutineControl(ISO_TP.Message message)
     : base(message)
 {
     SubFunction                = (RoutineControlType)message.Payload[1];
     RoutineIdentifier          = (ushort)(message.Payload[2] << 8 | message.Payload[3]); // big endian conversion
     RoutineControlOptionRecord = message.Payload.Skip(4).ToArray();
     if (base.MessageType == ServiceMessageType.Request)
     {
     }
     else
     {
     }
 }
コード例 #3
0
ファイル: TransferData.cs プロジェクト: syntroniks/ghosen
 public TransferData(ISO_TP.Message message)
     : base(message)
 {
     BlockSize            = message.PayloadSize - 2;
     BlockSequenceCounter = message.Payload[1];
     DataRecord           = message.Payload.Skip(2).Take(BlockSize).ToArray();
     if (base.MessageType == ServiceMessageType.Request)
     {
     }
     else
     {
     }
 }
コード例 #4
0
 public SecurityAccessControl(ISO_TP.Message message)
     : base(message)
 {
     SubFunction = GetSACType(message.Payload[1]);
     if (base.MessageType == ServiceMessageType.Request)
     {
         SecurityAccessDataRecord = message.Payload.Skip(2).ToArray();
     }
     else
     {
         // if it is a response, this is our seed
         SecurityAccessDataRecord = message.Payload.Skip(2).ToArray();
     }
 }
コード例 #5
0
ファイル: RequestDownload.cs プロジェクト: syntroniks/ghosen
        public RequestDownload(ISO_TP.Message message)
            : base(message)
        {
            if (base.MessageType == ServiceMessageType.Request)
            {
                // High nibble
                Compression = (CompressionMethod)((message.Payload[1] >> 4) & 0x0F);
                // low nibble
                Encryption = (EncryptionMethod)((message.Payload[1] >> 0) & 0x0F);

                // High nibble
                var memorySizeLength = (message.Payload[2] >> 4) & 0x0F;
                // low nibble
                var memoryAddressLength = (message.Payload[2] >> 0) & 0x0F;

                // Memory address MSB first
                for (int i = 0; i < memoryAddressLength; i++)
                {
                    // Larger shifting because we process MSB first
                    var shiftAmount = 8 * (memoryAddressLength - i - 1);

                    // build memory address one byte at a time
                    MemoryAddress += (uint)message.Payload[3 + i] << shiftAmount;
                }

                // Same thing for memory size
                for (int i = 0; i < memorySizeLength; i++)
                {
                    // Larger shifting because we process MSB first
                    var shiftAmount = 8 * (memorySizeLength - i - 1);

                    // build memory size one byte at a time
                    MemorySize += message.Payload[memoryAddressLength + 3 + i] << shiftAmount;
                }
            }
            else
            {
                MaxNumberOfBlockLengthLength = (message.Payload[1] >> 4) & 0x0F;
                for (int i = 0; i < MaxNumberOfBlockLengthLength; i++)
                {
                    // Larger shifting because we process MSB first
                    var shiftAmount = 8 * (MaxNumberOfBlockLengthLength - i - 1);

                    // build memory size one byte at a time
                    MaxNumberOfBlockLength += message.Payload[2 + i] << shiftAmount;
                }
            }
        }
コード例 #6
0
 public ISO14229Message(ISO_TP.Message msg)
 {
     if (msg.Payload[0] > 0x3F)
     {
         // responses
         Service     = (ServiceType)(msg.Payload[0] - 0x40);
         MessageType = ServiceMessageType.Response;
         Data        = new byte[0];
     }
     else
     {
         Service     = (ServiceType)(msg.Payload[0]);
         MessageType = ServiceMessageType.Request;
         Data        = msg.Payload;
     }
 }
コード例 #7
0
        public ReadDataByIdentifier(ISO_TP.Message message)
            : base(message)
        {
            Identifier = (ushort)(message.Payload[1] << 8 | message.Payload[2]); // big endian conversion

            if (base.MessageType == ServiceMessageType.Request)
            {
                // nbd
                // we don't handle multiple identifiers at the moment
            }
            else
            {
                // get response
                // skip service byte and identifier
                ResponseData = message.Payload.Skip(3).Take(message.PayloadSize - 3).ToArray();
            }
        }
コード例 #8
0
ファイル: RoutineControl.cs プロジェクト: syntroniks/ghosen
 public RoutineControl_SIMOS18(ISO_TP.Message message)
     : base(message)
 {
     this.RoutineIdentifier = (SIMOS18_RoutineIdentifier)base.RoutineIdentifier;
     var a = RoutineInformation.Parse(this.MessageType, this.RoutineIdentifier, this.RoutineControlOptionRecord);
 }
コード例 #9
0
 public RequestUpload(ISO_TP.Message message)
     : base(message)
 {
 }