public DiagnosticSessionControl(ISO_TP.Message message) : base(message) { SessionType = (DiagnosticSessionType)message.Payload[1]; if (base.MessageType == ServiceMessageType.Request) { } else { } }
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 { } }
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 { } }
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(); } }
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; } } }
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; } }
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(); } }
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); }
public RequestUpload(ISO_TP.Message message) : base(message) { }