significant update to Isobus covering bug fixes and functionality
diff --git a/demo/Isobus.ttcn b/demo/Isobus.ttcn
index 4ac98b8..bfc7afa 100644
--- a/demo/Isobus.ttcn
+++ b/demo/Isobus.ttcn
@@ -11,12 +11,11 @@
// File: Isobus.ttcn
// Description: Encoder / Decoder for Isobus message frames
//
-
+// Revision R1A
module Isobus {
import from General_Types all
import from Can all
-import from IsobusMessageTypes all
import from IsobusCMMessageTypes all
import from IsobusNMMessageTypes all
import from IsobusVTMessageTypes all
@@ -75,14 +74,17 @@
type union AnyIsoBusPdu {
- TopLevelMessage_VT2ECU_PDU vt2ecu, // Message Virtual Terminal (VT) to ECU
- TopLevelMessage_ECU2VT_PDU ecu2vt, // Message ECU to Virtual Terminal (VT)
+ ETP_DT etp_dt, // extended TP data transfer
+ ETP_CM etp_cm, // extended TP connection management
+ VT2ECU vt2ecu, // Message Virtual Terminal (VT) to ECU
+ ECU2VT ecu2vt, // Message ECU to Virtual Terminal (VT)
RequestForAddressClaimed requestForAddressClaimed,
- TP_DT tp_dt,
- TP_CM tp_cm,
- CannotClaimSourceAddress cannotClaimSourceAddress,
- AddressClaimed addressClaimed,
- CommandedAddress commandedAddress
+ TP_DT tp_dt, // TP data transfer
+ TP_CM tp_cm, // TP connection management
+ NetworkMessage networkMessage, // Network Message according ISO 11873-4
+ CannotClaimSourceAddress cannotClaimSourceAddress,
+ AddressClaimed addressClaimed,
+ CommandedAddress commandedAddress
// other upper layer isobus protocols like Task Comtroller are added here ...
}
with { variant "" }
@@ -97,17 +99,22 @@
J1939mod can_j1939,
AnyIsoBusPdu can_pdu
}with {
- variant (can_pdu) "CROSSTAG(
+ variant (can_pdu) "CROSSTAG(
+ etp_dt, can_j1939.comp = 'C70000'O; //199
+ etp_cm, can_j1939.comp = 'C80000'O; //200
vt2ecu, can_j1939.comp = 'E60000'O; //230
ecu2vt, can_j1939.comp = 'E70000'O; //231
requestForAddressClaimed, can_j1939.comp = 'EA0000'O; //234
- tp_dt, can_j1939.comp = 'EB0000'O;
- tp_cm, can_j1939.comp = 'EC0000'O;
- cannotClaimSourceAddress, can_j1939.comp = 'EEFFFE'O; //238 all and conjuction needed!!!!!!
+ tp_dt, can_j1939.comp = 'EB0000'O; //235
+ tp_cm, can_j1939.comp = 'EC0000'O; //236
+ networkMessage, can_j1939.comp = 'ED0000'O; //237
+ cannotClaimSourceAddress, can_j1939.comp = 'EEFFFE'O; //238 all and conjuction needed!!!!!!
addressClaimed, can_j1939.comp = 'EEFF00'O; //238 all and conjuction needed!!!!!!
commandedAddress, can_j1939.comp = 'FED800'O)" //254 all and conjuction needed!!!!!!
}
+
+
//---------------------------------------------------------------------------------------
function j1939frame2can(in CAN_frame_j1939 p_can_frame_j1939, in Priority p_priority, in DestinationAddress p_da, in SourceAddress p_sa) return CAN_frame {
//---------------------------------------------------------------------------------------
@@ -125,22 +132,43 @@
((p_j1939.res) << 25) or4b (int2bit(bit2int(p_priority), 32) << 26))
return v_can_id
}
+
+/*
+function j1939id2canid(in J1939 p_j1939) return CAN_id{
+var CAN_id v_can_id
+v_can_id := (p_j1939.sa << 0) or4b (p_j1939.ps << 8) or4b (p_j1939.pf << 16) or4b bit2oct(p_j1939.dp << 24) or4b
+bit2oct(p_j1939.res << 25) or4b bit2oct(p_j1939.prio << 26)
+return v_can_id
+}
+*/
+
+function j1939id2canid(in J1939 p_j1939) return CAN_id{
+ var CAN_id v_can_id
+
+ v_can_id := int2oct(
+ oct2int(p_j1939.sa) + oct2int(p_j1939.ps)*256 + oct2int(p_j1939.pf) * 256 * 256 +
+ bit2int(p_j1939.dp) * 256 * 256 * 256 + bit2int(p_j1939.res) * 256 * 256 * 256 * 2 +
+ bit2int(p_j1939.prio) * 256 * 256 * 256 * 2 * 2,
+ 4 )
+ return v_can_id
+}
+
//---------------------------------------------------------------------------------------
function can2j1939frame(CAN_frame p_can_frame) return CAN_frame_j1939 {
//---------------------------------------------------------------------------------------
var CAN_frame_j1939 v_can_frame_j1939
- log("can_id", p_can_frame.can_id)
- log("can_pdu", p_can_frame.can_pdu)
+ //log("can_id", p_can_frame.can_id)
+ //log("can_pdu", p_can_frame.can_pdu)
v_can_frame_j1939:=f_decode_CAN_frame_j1939(p_can_frame.can_id& p_can_frame.can_pdu)
- log("Higher layer octet pdustring: ", v_can_frame_j1939)
+ //log("Higher layer octet pdustring: ", v_can_frame_j1939)
return v_can_frame_j1939
}
function canid2j1939(in CAN_id p_can_id) return J1939 {
-//---------------------------------------------------------------------------------------
+ //---------------------------------------------------------------------------------------
var bitstring v_can_id_bitstring:= oct2bit(p_can_id)
var J1939 v_j1939
@@ -151,8 +179,8 @@
v_j1939.pf :=p_can_id[1];//(p_can_id and4b ISOBUS_PDUFORMAT_MASK) >> 2 // shift 16 bits = 2 octets
v_j1939.ps :=p_can_id[2];// (p_can_id and4b ISOBUS_PDUSPECIFIC_MASK) >> 1 // shift 8 bits = 1 octet
v_j1939.sa :=p_can_id[3];//(p_can_id and4b ISOBUS_SOURCEADDRESS_MASK)
-
- return v_j1939
+
+ return v_j1939
}
//********************************************************************************-
@@ -290,7 +318,6 @@
function f_decode_CAN_frame_j1939(in octetstring data) return CAN_frame_j1939
//---------------------------------------------------------------------------
{
-
return f_map_mod2frame(decode_CAN_frame_j1939mod(f_insert_aux_hdr(data)))
@@ -298,3 +325,4 @@
} with { encode "RAW" }
+
diff --git a/demo/IsobusCMMessageTypes.ttcn b/demo/IsobusCMMessageTypes.ttcn
index 276916e..715dcac 100644
--- a/demo/IsobusCMMessageTypes.ttcn
+++ b/demo/IsobusCMMessageTypes.ttcn
@@ -1,61 +1,69 @@
-/* Copyright (c) 2010, 2016 Ericsson AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
-
-
module IsobusCMMessageTypes {
import from General_Types all
import from IsobusMessageTypes all
+type integer SEQ_NO (1..255) with { variant "FIELDLENGTH(8)" }
+type integer NUMBER_OF_PACKETS (1..255) with { variant "FIELDLENGTH(8)" }
+
type OCT1 Ctrl
type record RequestToSend{
- Ctrl ctrl ('10'O),
- INT2 msgSizeInByte,
- INT1 totalNumberOfPackets,
- INT1 maxNoOfPacketsInResponseToCTS,
- PGN pgnOfMultiPacketMessage
+ Ctrl ctrl ('10'O),
+ INT2 msgSizeInBytes,
+ NUMBER_OF_PACKETS totalNumberOfPackets,
+ INT1 maxNoOfPacketsInResponseToCTS,
+ PGN pgnOfMultiPacketMessage
} with { variant "" };
type record ClearToSend{
- Ctrl ctrl ('11'O),
- INT1 totalNumberOfPackets,
- INT1 nextPacketNumber,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- PGN pgnOfMultiPacketMessage
+ Ctrl ctrl ('11'O),
+ NUMBER_OF_PACKETS totalNumberOfPackets,
+ INT1 nextPacketNumber,
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ PGN pgnOfMultiPacketMessage
} with { variant "" };
type record EndOfMessageAcknowledgement{
- Ctrl ctrl ('13'O),
- INT2 msgSizeInByte,
- INT1 totalNumberOfPackets,
- OCT1 reserved5 ('FF'O),
- PGN pgnOfMultiPacketMessage
+ Ctrl ctrl ('13'O),
+ INT2 msgSizeInByte,
+ NUMBER_OF_PACKETS totalNumberOfPackets,
+ OCT1 reserved5 ('FF'O),
+ PGN pgnOfMultiPacketMessage
} with { variant "" };
+
+type enumerated e_ConnectionAbort_AbortReason {
+ alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother (1),
+ systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated (2),
+ aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession (3),
+ cts_MessagesReceivedWhenDataTransferIsInProgress (4),
+ maximumRetransmitRequestLimitReached (5),
+ unexpectedDataTransferPacket (6),
+ badSequenceNumber (7),
+ duplicateSequenceNumber (8),
+ iso_11783_7_error_code_251 (251),
+ iso_11783_7_error_code_252 (252),
+ iso_11783_7_error_code_253 (253),
+ iso_11783_7_error_code_254 (254),
+ iso_11783_7_error_code_255 (255)}
+with {variant "PADDING(octet)" };
+
type record ConnectionAbort{
- Ctrl ctrl ('FF'O),
- OCT1 connectionAbortReason,
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- PGN pgnOfMultiPacketMessage
+ Ctrl ctrl ('FF'O),
+ e_ConnectionAbort_AbortReason connectionAbortReason,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ PGN pgnOfMultiPacketMessage
} with { variant "" };
-type record BroadcastAnnonce{
- Ctrl ctrl ('20'O),
- INT2 msgSizeInByte,
- INT1 totalNumberOfPackets,
- OCT1 reserved5 ('FF'O),
- PGN pgnOfMultiPacketMessage
+type record BroadcastAnnounce{
+ Ctrl ctrl ('20'O),
+ INT2 msgSizeInByte,
+ NUMBER_OF_PACKETS totalNumberOfPackets,
+ OCT1 reserved5 ('FF'O),
+ PGN pgnOfMultiPacketMessage
} with { variant "" };
type union TP_CM
@@ -63,11 +71,11 @@
RequestToSend requestToSend,
ClearToSend clearToSend,
EndOfMessageAcknowledgement endOfMessageAcknowledgement,
- BroadcastAnnonce broadcastAnnounce,
+ BroadcastAnnounce broadcastAnnounce,
ConnectionAbort connectionAbort
}
with {variant "TAG (
- // put all ECU2VT request messages here
+ // put all TP_CM request messages here
requestToSend, ctrl = '10'O;
clearToSend, ctrl = '11'O;
endOfMessageAcknowledgement, ctrl = '13'O;
@@ -75,11 +83,101 @@
connectionAbort, ctrl = 'FF'O;
) "
}
+// ETP_CM
+type integer ETP_MSG_SIZE (1786..117440505)
+with { variant "FIELDLENGTH(32)" };
+type record ExtendedMessageRequestToSend{
+ Ctrl ctrl ('20'O),
+ ETP_MSG_SIZE msgSizeInBytes,
+ PGN pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type integer ETP_NextPacketNumberToSend (0..16777215)
+with { variant "FIELDLENGTH(32)" };
+
+type record ExtendedMessageClearToSend{
+ Ctrl ctrl ('21'O),
+ INT1 NumberOfPacketsToSend,
+ ETP_NextPacketNumberToSend nextPacketNumberToSend,
+ PGN pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type integer ETP_NoPacketForOffset (1..255)
+with { variant "FIELDLENGTH(8)" };
+
+type record ExtendedMessageDataPacketOffset{
+ Ctrl ctrl ('22'O),
+ ETP_NoPacketForOffset numberOfPacketsToWhichToApplyTheOffset,
+ NUMBER_OF_PACKETS totalNumberOfPackets,
+ ETP_NextPacketNumberToSend dataPacketOffset,
+ PGN pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type record ExtendedMessageEndOfMessageAcknowledgement{
+ Ctrl ctrl ('23'O),
+ ETP_MSG_SIZE numberOfBytesTransferred,
+ PGN pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type enumerated e_ETP_ConnectionAbort_AbortReason {
+ alreadyInOneOrMoreConnectionManagedSessionsAndCannotSupportAnother (1),
+ systemResourcesWereNeededForAnotherTaskSoThisConnectionManagedSessionWasTerminated (2),
+ aTimeoutOccurredAndThisIsTheConnectionAbortToCloseTheSession (3),
+ cts_MessagesReceivedWhenDataTransferIsInProgress (4),
+ maximumRetransmitRequestLimitReached (5),
+ unexpectedDataTransferPacket (6),
+ badSequenceNumber (7),
+ duplicateSequenceNumber (8),
+ unexpectedEDPO_Packet (9),
+ unexpectedEDPO_PGN (10),
+ edpo_numberOfPacketsIsGreaterThanCTS (11),
+ badEDPO_Offset (12),
+ unexpectedECTS_PGN (14),
+ ECTS_requestedPacketsExceedsMessageSize (15),
+ iso_11783_7_error_code_251 (251),
+ iso_11783_7_error_code_252 (252),
+ iso_11783_7_error_code_253 (253),
+ iso_11783_7_error_code_254 (254),
+ iso_11783_7_error_code_255 (255)}
+with {variant "PADDING(octet)" };
+
+type record ExtendedMessageConnectionAbort{
+ Ctrl ctrl ('FF'O),
+ e_ETP_ConnectionAbort_AbortReason connectionAbortReason,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ PGN pgnOfExtendedPacketedMessage
+} with { variant "" };
+
+type union ETP_CM
+{
+ ExtendedMessageRequestToSend extendedMessageRequestToSend,
+ ExtendedMessageClearToSend extendedMessageClearToSend,
+ ExtendedMessageDataPacketOffset extendedMessageDataPacketOffset,
+ ExtendedMessageEndOfMessageAcknowledgement extendedMessageEndOfMessageAcknowledgement,
+ ExtendedMessageConnectionAbort extendedMessageConnectionAbort
+}
+with {variant "TAG (
+ // put all ETP_CM request messages here
+ extendedMessageRequestToSend, ctrl = '20'O;
+ extendedMessageClearToSend, ctrl = '21'O;
+ extendedMessageDataPacketOffset, ctrl = '22'O;
+ extendedMessageEndOfMessageAcknowledgement, ctrl = '23'O;
+ extendedMessageConnectionAbort, ctrl = 'FF'O;
+ ) "
+}
type record TP_DT{
- INT1 seq_no,
- OCT7 data
+ SEQ_NO seq_no,
+ OCT7 data
+} with { variant "" }
+
+type record ETP_DT{
+ SEQ_NO seq_no,
+ OCT7 data
} with { variant "" }
} with { encode "RAW" }
+
diff --git a/demo/IsobusMessageTypes.ttcn b/demo/IsobusMessageTypes.ttcn
index d44a57b..e706f17 100644
--- a/demo/IsobusMessageTypes.ttcn
+++ b/demo/IsobusMessageTypes.ttcn
@@ -1,12 +1,7 @@
-/* Copyright (c) 2010, 2016 Ericsson AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
+/*
* Contributors:
* Michael Josenhans
-******************************************************************************/
+*/
module IsobusMessageTypes {
@@ -14,12 +9,14 @@
type integer INT24nb (0..16777215) with { variant "FIELDLENGTH(24), COMP(nosign), BYTEORDER(last)" };
type INT24nb PGN
-
-
+type bitstring BIT21 length(21) with { variant "FIELDLENGTH(21)" };
+
type integer INT2 (0..65535)
with { variant "FIELDLENGTH(16)" };
type integer INT3 (0..16777215)
with { variant "FIELDLENGTH(24)" };
+
}
with { encode "RAW" }
+
diff --git a/demo/IsobusNMMessageTypes.ttcn b/demo/IsobusNMMessageTypes.ttcn
index 2e293eb..7b2171c 100644
--- a/demo/IsobusNMMessageTypes.ttcn
+++ b/demo/IsobusNMMessageTypes.ttcn
@@ -1,12 +1,7 @@
-/* Copyright (c) 2010, 2016 Ericsson AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
+/*
* Contributors:
* Michael Josenhans
-******************************************************************************/
+*/
module IsobusNMMessageTypes {
@@ -17,7 +12,38 @@
type OCT1 PDUFormat
type OCT1 SourceAddress
-type OCT8 NAME
+//type OCT8 NAME
+
+type bitstring Priority length(6)
+with {
+ variant "ALIGN(left)";
+ variant "FIELDLENGTH(6)"
+}
+
+type BIT1 SelfConfigurableAddressBits
+type BIT3 IndustryGroupBits
+type BIT4 DeviceClassInstanceBits
+type BIT7 DeviceClassBits
+type BIT1 ReservedBits
+type BIT8 FunctionBits
+type BIT5 FunctionInstanceBits
+type BIT3 ECUInstanceBits
+type BIT11 ManufacturerCodeBits
+type BIT21 IdentityNumberBits
+
+type record NAME {
+ SelfConfigurableAddressBits selfConfigurableAddressValue,
+ IndustryGroupBits industryGroupValue,
+ DeviceClassInstanceBits deviceClassInstanceValue,
+ DeviceClassBits deviceClassValue,
+ ReservedBits reserveValued,
+ FunctionBits functionValue,
+ FunctionInstanceBits functionInstanceValue,
+ ECUInstanceBits ecuInstancceValue,
+ ManufacturerCodeBits manufacturerCodeValue,
+ IdentityNumberBits identityNumberBits
+} with { variant "FIELDORDER(msb)" }
+
type record CannotClaimSourceAddress
{
@@ -40,4 +66,397 @@
SourceAddress newSourceAddress
} with { variant "" }
+// --------- NetworkMessage -------------
+
+type INT1 Function
+
+type record N_MFDB_Request
+{
+ Function MsgFunction (0),
+ PortPair portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record N_MFDB_Response
+{
+ Function MsgFunction (1),
+ PortPair portPair,
+ e_FilterMode filterMode,
+ record length (1..infinity) of PGN pgnEntries
+} with {variant "" };
+
+
+type record N_MFDB_Add
+{
+ Function MsgFunction (2),
+ PortPair portPair,
+ record length (1..infinity) of PGN pgnEntries
+} with {variant "" };
+
+type record N_MFDB_Delete
+{
+ Function MsgFunction (3),
+ PortPair portPair,
+ record length (1..infinity) of PGN pgnEntries
+} with {variant "" };
+
+type record N_MFDB_Clear
+{
+ Function MsgFunction (4),
+ PortPair portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record N_MFDB_Create_Entry
+{
+ Function MsgFunction (6),
+ PortPair portPair,
+ e_FilterMode filterMode,
+ record length (1..infinity) of PGN pgnEntries
+} with {variant "" };
+
+type record PGNEntry
+{
+ INT1 maxTransferRate,
+ PGN pgn,
+ NAME name,
+ OCT8 nameQualifier
+} with {variant "" };
+
+type record N_MFDBNQ_Add
+{
+ Function MsgFunction (7),
+ PortPair portPair,
+ e_FilterMode filterMode,
+ OCT1 reserved4 ('FF'O),
+ record length (1..infinity) of PGNEntry pgnEntries
+} with {variant "" };
+
+
+type record N_NT_Request
+{
+ Function MsgFunction (64),
+ PortNibble portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record N_NT_Response
+{
+ Function MsgFunction (65),
+ PortNibble portPair,
+ record length (1..infinity) of SourceAddress SourceAddressEntries
+} with {variant "" };
+
+type record N_NTX_Request
+{
+ Function MsgFunction (66),
+ PortNibble portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+
+type record SA_NAME_pair
+{
+ SourceAddress sourceAddress,
+ NAME name
+} with {variant "" };
+
+type record N_NTX_Response
+{
+ Function MsgFunction (67),
+ PortNibble portPair,
+ INT1 numberOfReportedPorts,
+ record length (1..infinity) of SA_NAME_pair sourceaddress_NAME_pairs
+} with {
+ variant (numberOfReportedPorts) "LENGTHTO(sourceaddress_NAME_pairs)";
+ variant (numberOfReportedPorts) "UNIT(elements)"
+}
+
+type enumerated e_ParametricIdentifier {
+ requestAllParameters (0),
+ buffersize (1),
+ maximumFilterDatabaseSize (2),
+ numberOfFilterDatabaseEntries (3),
+ maximumNumberOfMessagesReceivedPerSecond (4),
+ maximumNumberOfMessagesForwardedPerSecond (5),
+ maximumNumberOfMessagesFilteredPerSecond (6),
+ maximumTransitDelayTime_ms (7),
+ averageTransitDelayTime_ms (8),
+ numberOfMessagesLostDueToBufferOverflow (9),
+ numberOfMessagesWithExcessTransitDelayTime (10),
+ averageNumberOfMessagesReceivedPerSecond (11),
+ averageNumberOfMessagesForwardedPerSecond (12),
+ averageNumberOfMessagesFilteredPerSecond (13),
+ uptimeSinceLastPowerOnReset_s (14),
+ numberOfPorts (15),
+ networkInterconnectionUnitType (16),
+ reserved (255) // for message padding (workaround)
+}
+with {variant "PADDING(octet)"}
+
+type record N_GP_Request
+{
+ Function MsgFunction (128),
+ record length (6..255) of e_ParametricIdentifier parametricIdentifiers
+ // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
+ // this is the easiest way to handle it
+} with {
+ variant "" }
+
+// begin not used
+// the following is currently not used as it is impossible to handle it with raw encoding
+type OCT2 Buffersize
+type OCT2 MaximumFilterDatabaseSize
+type OCT2 NumberOfFilterDatabaseEntries
+type OCT2 MaximumNumberOfMessagesReceivedPerSecond
+type OCT2 MaximumNumberOfMessagesForwardedPerSecond
+type OCT2 MaximumNumberOfMessagesFilteredPerSecond
+type OCT2 MaximumTransitDelayTime_ms
+type OCT2 AverageTransitDelayTime_ms
+type OCT2 NumberOfMessagesLostDueToBufferOverflow
+type OCT2 NumberOfMessagesWithExcessTransitDelayTime
+type OCT2 AverageNumberOfMessagesReceivedPerSecond
+type OCT2 AverageNumberOfMessagesForwardedPerSecond
+type OCT2 AverageNumberOfMessagesFilteredPerSecond
+type OCT4 UptimeSinceLastPowerOnReset_s
+type OCT1 NumberOfPorts
+type OCT1 NetworkInterconnectionUnitType
+type OCT1 Reserved ('FF'O)
+
+type union RequestedParametric
+{
+ Buffersize buffersize,
+ MaximumFilterDatabaseSize maximumFilterDatabaseSize,
+ NumberOfFilterDatabaseEntries numberOfFilterDatabaseEntries,
+ MaximumNumberOfMessagesReceivedPerSecond maximumNumberOfMessagesReceivedPerSecond,
+ MaximumNumberOfMessagesForwardedPerSecond maximumNumberOfMessagesForwardedPerSecond,
+ MaximumNumberOfMessagesFilteredPerSecond maximumNumberOfMessagesFilteredPerSecond,
+ MaximumTransitDelayTime_ms maximumTransitDelayTime_ms,
+ AverageTransitDelayTime_ms averageTransitDelayTime_ms,
+ NumberOfMessagesLostDueToBufferOverflow numberOfMessagesLostDueToBufferOverflow,
+ NumberOfMessagesWithExcessTransitDelayTime numberOfMessagesWithExcessTransitDelayTime,
+ AverageNumberOfMessagesReceivedPerSecond averageNumberOfMessagesReceivedPerSecond,
+ AverageNumberOfMessagesForwardedPerSecond averageNumberOfMessagesForwardedPerSecond,
+ AverageNumberOfMessagesFilteredPerSecond averageNumberOfMessagesFilteredPerSecond,
+ UptimeSinceLastPowerOnReset_s uptimeSinceLastPowerOnReset_s,
+ NumberOfPorts numberOfPorts,
+ NetworkInterconnectionUnitType networkInterconnectionUnitType,
+ Reserved reserved
+} with {variant ""}
+
+// end not used
+
+type record N_GP_Response
+{
+ Function MsgFunction (129),
+ OCT1 requestedParametrics [6 .. 255]
+ // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
+ // this is the easiest way to handle it
+} with {
+ variant "" }
+
+type record N_GP_Reset_Statistics
+{
+ Function MsgFunction (130),
+ PortNibble portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record N_SP_Request
+{
+ Function MsgFunction (131),
+ PortPair portPair,
+ record length (5..255) of e_ParametricIdentifier parametricIdentifiers
+ // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved within ParametricIdentifiers
+ // this is the easiest way to handle it
+} with {
+ variant "" }
+
+type record N_SP_Response
+{
+ Function MsgFunction (132),
+ PortPair portPair,
+ OCT1 requestedParametrics [5 .. 255]
+ // Note: If total length below 8 bytes shall be padded to 8 bytes with reserved ('FF'O) within RequestedParametrics
+ // this is the easiest way to handle it
+} with {
+ variant "" }
+
+
+
+type record N_SP_Reset_Statistics
+{
+ Function MsgFunction (133),
+ PortPair portPair,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {
+ variant "" }
+
+
+type record N_OC_Request
+{
+ Function MsgFunction (192),
+ PortPair portPair,
+ NAME nameOfCF
+} with {
+ variant "" }
+
+type record N_CC_Request
+{
+ Function MsgFunction (193),
+ PortPair portPair,
+ NAME nameOfCF
+} with {
+ variant "" }
+
+type enumerated e_Status {
+ failure (0),
+ success (1)
+}
+with {variant "PADDING(octet)"}
+
+type enumerated e_FailureReasonCode {
+ cannotFindCFwithNAME (0),
+ numberOfConnectionsToNAMEexceeded (1),
+ numberOfConnectionsToNIUexceeded (2),
+ busy (3),
+ requestTypeNotSupported (4),
+ notAvailable (255)
+}
+with {variant "PADDING(octet)"}
+
+
+type record N_OC_Response
+{
+ Function MsgFunction (194),
+ PortPair portPair,
+ e_Status status,
+ e_FailureReasonCode failureReasonCode
+} with {
+ variant "" }
+
+type record N_CC_Response
+{
+ Function MsgFunction (195),
+ PortPair portPair,
+ e_Status status,
+ e_FailureReasonCode failureReasonCode
+} with {
+ variant "" }
+
+type union NetworkMessage
+{
+ N_MFDB_Request n_MFDB_Request, // CF to NIU
+ N_MFDB_Response n_MFDB_Response, // NIU to CF
+ N_MFDB_Add n_MFDB_Add, // CF to NIU
+ N_MFDB_Delete n_MFDB_Delete, // CF to NIU
+ N_MFDB_Clear n_MFDB_Clear, // CF to NIU
+ N_MFDB_Create_Entry n_MFDB_Create_Entry, // CF to NIU
+ N_MFDBNQ_Add n_MFDBNQ_Add, // CF to NIU
+ N_NT_Request n_NT_Request, // CF to NIU
+ N_NT_Response n_NT_Response, // NIU to CF
+ N_NTX_Request n_NTX_Request, // CF to NIU
+ N_NTX_Response n_NTX_Response, // NIU to CF
+ N_GP_Request n_GP_Request, // CF to NIU
+ N_GP_Response n_GP_Response, // NIU to CF
+ N_GP_Reset_Statistics n_GP_Reset_Statistics, // CF to NIU
+ N_SP_Request n_SP_Request, // CF to NIU
+ N_SP_Response n_SP_Response, // NIU to CF
+ N_SP_Reset_Statistics n_SP_Reset_Statistics, // CF to NIU
+ N_OC_Request n_OC_Request, // CF to NIU
+ N_OC_Response n_OC_Response, // NIU to CF
+ N_CC_Request n_CC_Request, // CF to NIU
+ N_CC_Response n_CC_Response // NIU to CF
+}
+with {variant "TAG (
+ n_MFDB_Request, MsgFunction = 0;
+ n_MFDB_Response, MsgFunction = 1;
+ n_MFDB_Add, MsgFunction = 2;
+ n_MFDB_Delete, MsgFunction = 3;
+ n_MFDB_Clear, MsgFunction = 4;
+ n_MFDB_Create_Entry, MsgFunction = 6;
+ n_MFDBNQ_Add, MsgFunction = 7;
+ n_NT_Request, MsgFunction = 64;
+ n_NT_Response, MsgFunction = 65;
+ n_NTX_Request, MsgFunction = 66;
+ n_NTX_Response, MsgFunction = 67;
+ n_GP_Request, MsgFunction = 128;
+ n_GP_Response, MsgFunction = 129;
+ n_GP_Reset_Statistics, MsgFunction = 130;
+ n_SP_Request, MsgFunction = 131;
+ n_SP_Response, MsgFunction = 132;
+ n_SP_Reset_Statistics, MsgFunction = 133;
+ n_OC_Request, MsgFunction = 192;
+ n_OC_Response, MsgFunction = 193; // there is a specification inconsistency concerning this value 193 vs. 194
+ n_CC_Request, MsgFunction = 194; // there is a specification inconsistency concerning this value 194 vs. 193
+ n_CC_Response, MsgFunction = 195; ) "
+}
+
+type enumerated e_PortNumber {
+ port_local (0),
+ port_1 (1),
+ port_2 (2),
+ port_3 (3),
+ port_4 (4),
+ port_5 (5),
+ port_6 (6),
+ port_7 (7),
+ port_8 (8),
+ port_9 (9),
+ port_10 (10),
+ port_11 (11),
+ port_12 (12),
+ port_13 (13),
+ port_14 (14),
+ port_global (15)}
+with {variant "PADDING(nibble)" };
+
+type enumerated e_FilterMode {
+ blockSpecificPGNs (0),
+ passSecificPGNs (1)}
+with {variant "PADDING(octet)" };
+
+type record PortPair
+{
+ e_PortNumber fromPort,
+ e_PortNumber toPort
+} with { variant "" }
+
+type record PortNibble
+{
+ e_PortNumber portNumber,
+ HEX1 reserved ('F'H)
+} with { variant "" }
+
}with { encode "RAW" }
+
diff --git a/demo/IsobusVTMessageTypes.ttcn b/demo/IsobusVTMessageTypes.ttcn
index 7dac40c..c55996d 100644
--- a/demo/IsobusVTMessageTypes.ttcn
+++ b/demo/IsobusVTMessageTypes.ttcn
@@ -1,12 +1,3 @@
-/* Copyright (c) 2010, 2016 Ericsson AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
module IsobusVTMessageTypes {
import from General_Types all
@@ -14,376 +5,1059 @@
type INT1 VTfunction
+type integer AnyObjectID (0..65535) with { variant "FIELDLENGTH(16)" }; // includes also 65535 as no object
+type integer ValidObjectID (0..65534) with { variant "FIELDLENGTH(16)" };
+type integer AttributeID (0..255) with { variant "FIELDLENGTH(8)" };
+type INT2 PositionType
+type INT1 KeyNumberType
+type INT2 FrequencyType
+
+type enumerated e_SoftKeyActivationReq_KeyAactivationCode {
+ keyHasBeenReleased (0),
+ keyHasBeenPressed (1),
+ keyIsStillPressed (2),
+ keyPressAborted (3)}
+with {variant "PADDING(octet)" };
+
+type record SoftKeyActivationReq
+{
+ VTfunction vtfunction (0),
+ e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
+ ValidObjectID objectID,
+ ValidObjectID parentObjectID,
+ KeyNumberType keyNumber,
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record SoftKeyActivationRes
+{
+ VTfunction vtfunction (0),
+ e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
+ ValidObjectID objectID,
+ ValidObjectID parentObjectID,
+ KeyNumberType keyNumber,
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_ButtonActivationReq_KeyAactivationCode {
+ buttonHasBeenUnlatchedorReleased (0),
+ buttonHasBeenPressedOrLatched (1),
+ buttonIsStillHeld (2),
+ buttonPressAborted (3)}
+with {variant "PADDING(octet)" };
+
+type record ButtonActivationReq
+{
+ VTfunction vtfunction (1),
+ e_ButtonActivationReq_KeyAactivationCode keyAactivationCode,
+ ValidObjectID objectID,
+ ValidObjectID parentObjectID,
+ KeyNumberType buttonKeyCode,
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_ButtonActivationRes_KeyAactivationCode {
+ buttonHasBeenUnlatchedorReleased (0),
+ buttonHasBeenPressedOrLatched (1),
+ buttonIsStillHeld (2),
+ buttonPressAborted (3)}
+with {variant "PADDING(octet)" };
+
+type record ButtonActivationRes
+{
+ VTfunction vtfunction (1),
+ e_ButtonActivationRes_KeyAactivationCode keyAactivationCode,
+ ValidObjectID objectID,
+ ValidObjectID parentObjectID,
+ KeyNumberType buttonKeyCode,
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_PointingEvent_touchState {
+ released (0), // version 4 and later
+ pressed (1), // version 4 and later
+ held (2), // version 4 and later
+ reserved (255)} // version 3 and prior
+with {variant "PADDING(octet)" };
+
+type record PointingEventReq {
+ VTfunction vtfunction (2),
+ PositionType x_position,
+ PositionType y_position,
+ e_PointingEvent_touchState touchState,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record PointingEventRes {
+ VTfunction vtfunction (2),
+ PositionType x_position,
+ PositionType y_position,
+ e_PointingEvent_touchState touchState,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_VTOnUserLayoutHideShow_state {
+ hidden (0),
+ shown (1)}
+with {variant "PADDING(octet)" };
+
+type enumerated e_VTSelectInputObject_selection {
+ objectIsDeselected (0),
+ objectIsSelected (1)}
+with {variant "PADDING(octet)" };
+
+type record VTSelectInputObject_v4AndLater_Bitmask{
+ boolean objectIsOpenForDataInput,
+ boolean reserved1 (false),
+ boolean reserved2 (false),
+ boolean reserved3 (false),
+ boolean reserved4 (false),
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record VTSelectInputObjectReq_v3AndPrior {
+ VTfunction vtfunction (3),
+ ValidObjectID objectID,
+ e_VTSelectInputObject_selection selection,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectReq_v4AndLater {
+ VTfunction vtfunction (3),
+ ValidObjectID objectID,
+ e_VTSelectInputObject_selection selection,
+ VTSelectInputObject_v4AndLater_Bitmask bitmask,
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectRes_v4AndPrior {
+ VTfunction vtfunction (3),
+ ValidObjectID objectID,
+ e_VTSelectInputObject_selection selection,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record VTSelectInputObjectRes_v5AndLater {
+ VTfunction vtfunction (3),
+ ValidObjectID objectID,
+ e_VTSelectInputObject_selection selection,
+ VTSelectInputObject_v4AndLater_Bitmask bitmask,
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record VTChangeNumericValueReq
+{
+ VTfunction vtfunction (5),
+ ValidObjectID objectID,
+ OCT1 reserved4 ('FF'O),
+ OCT4 value_
+} with { variant "" };
+
+type record VTChangeNumericValueRes
+{
+ VTfunction vtfunction (5),
+ ValidObjectID objectID,
+ OCT1 reserved4 ('FF'O),
+ OCT4 value_
+} with { variant "" };
+
+type record VTOnUserLayoutHideShowReq
+{
+ VTfunction vtfunction (9),
+ ValidObjectID objectID1,
+ e_VTOnUserLayoutHideShow_state state1,
+ AnyObjectID objectID2,
+ e_VTOnUserLayoutHideShow_state state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+ OCT1 reserved8 ('FF'O)
+} with { variant "" };
+
+type record VTOnUserLayoutHideShowRes
+{
+ VTfunction vtfunction (9),
+ ValidObjectID objectID1,
+ e_VTOnUserLayoutHideShow_state state1,
+ AnyObjectID objectID2,
+ e_VTOnUserLayoutHideShow_state state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+ OCT1 reserved8 ('FF'O)
+} with { variant "" };
+
+type enumerated e_HideShowObject_state {
+ hide (0),
+ show (1)}
+with {variant "PADDING(octet)" };
+
+type record HideShowObjectReq
+{
+ VTfunction vtfunction (160),
+ ValidObjectID objectID,
+ e_HideShowObject_state hideShow,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record HideShowObjectRes_errorCodes{
+ boolean referencesToMissingObjects,
+ boolean invalidObjectID,
+ boolean undefined (false),
+ boolean AnyOtherError,
+ boolean reserved4 (false),
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record HideShowObjectRes
+{
+ VTfunction vtfunction (160),
+ ValidObjectID objectID,
+ e_HideShowObject_state hideShow,
+ HideShowObjectRes_errorCodes errorCodes,
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_SelectInputObjectReq_Option {
+ activateForDataInputTheObjectReferencedByObjectID (0),
+ activateForDataInputTheObjectReferencedByObjectID1 (1),
+ setFocusToObjectReferencedByObjectID (255)}
+with {variant "PADDING(octet)" };
+
+type record SelectInputObjectReq{
+ VTfunction vtfunction (162),
+ AnyObjectID objectID,
+ e_SelectInputObjectReq_Option option,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type enumerated e_SelectInputObjectRes_Response {
+ objectReferencedByObjectIDisNotSelectedOrObjectIDisTheNULLobject (0),
+ objectReferencedByObjectIDisSelected (1),
+ objectReferencedByObjectIDisOpenedForEdit (2)}
+with {variant "PADDING(octet)" };
+
+type record SelectInputObjectRes_errorCodes {
+ boolean objectIsDisabled,
+ boolean invalidObjectID,
+ boolean objectIsNotOnTheActiveMaskOrObjectIsInAHiddenContainer,
+ boolean couldNotCompleteAnotherInputFieldIsCurrentlyBeingModifiedOrAButtonOrSoftKeyisCurrentlyBeingHeld,
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record SelectInputObjectRes{
+ VTfunction vtfunction (162),
+ AnyObjectID objectID,
+ e_SelectInputObjectRes_Response response,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record ControlAudioSignalReq{
+ VTfunction vtfunction (163),
+ INT1 activations,
+ FrequencyType frequencyInHz,
+ INT2 onTimeDuration_ms,
+ INT2 offTimeDuration_ms
+} with {variant "" };
+
+type enumerated e_ControlAudioSignalRes_ErrorCodes {
+ audioDeviceIsBusy (0),
+ undefined (1),
+ objectReferencedByObjectIDisOpenedForEdit (2)}
+with {variant "PADDING(octet)" };
+
+type record ControlAudioSignalRes_ErrorCodes {
+ boolean audioDeviceIsBusy,
+ boolean undefined1 (false),
+ boolean undefined2 (false),
+ boolean undefined3 (false),
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ControlAudioSignalRes{
+ VTfunction vtfunction (163),
+ ControlAudioSignalRes_ErrorCodes errorCodes,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record ChangeNumericValueReq{
+ VTfunction vtfunction (168),
+ ValidObjectID objectID,
+ OCT1 reserved4 ('FF'O),
+ OCT4 newValueForValueAttribute
+} with {variant "" };
+
+type record ChangeNumericValueRes_errorCodes {
+ boolean invalidObjectID,
+ boolean invalidValue,
+ boolean valueInUse,
+ boolean undefined (false),
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeNumericValueRes{
+ VTfunction vtfunction (168),
+ ValidObjectID objectID,
+ ChangeNumericValueRes_errorCodes errorCodes,
+ OCT4 valueForValueAttribute
+} with {variant "" };
+
+type record ChangeActiveMaskReq
+{
+ VTfunction vtfunction (173),
+ ValidObjectID workingSetObjectID,
+ ValidObjectID newActiveMaskObjectID,
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record ChangeActiveMaskRes_errorCodes {
+ boolean invalidWorkingSetObjectID,
+ boolean invalidMaskObjectID,
+ boolean undefined1 (false),
+ boolean undefined2 (false),
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeActiveMaskRes
+{
+ VTfunction vtfunction (173),
+ ValidObjectID newActiveMaskObjectID,
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+}
+with {variant "" };
+
+type enumerated e_ChangeSoftKeyMaskReq_MaskType {
+ Data (1),
+ Alarm (2)}
+with {variant "PADDING(octet)" };
+
+type record ChangeSoftKeyMaskReq
+{
+ VTfunction vtfunction (174),
+ e_ChangeSoftKeyMaskReq_MaskType maskType,
+ ValidObjectID DataOrAlarmMaskObjectID,
+ ValidObjectID NewSoftKeyMaskObjectID,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)}
+with {variant "" };
+
+type record ChangeSoftKeyMaskRes_errorCodes {
+ boolean invalidDataOrAlarmMaskObjectID,
+ boolean invalidSoftKeyMaskObjectID,
+ boolean missingObjects,
+ boolean MaskOrChildObjectHasErrors,
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeSoftKeyMaskRes
+{
+ VTfunction vtfunction (174),
+ ValidObjectID DataOrAlarmMaskObjectID,
+ ValidObjectID NewSoftKeyMaskObjectID,
+ ChangeSoftKeyMaskRes_errorCodes errorCodes,
+ OCT1 reserved8 ('FF'O)}
+with {variant "" };
+
+type record ChangeAttributeReq
+{
+ VTfunction vtfunction (175),
+ ValidObjectID objectID,
+ AttributeID attributeID,
+ OCT4 newValueOfAttribute
+}
+with {variant "" };
+
+type record ChangeAttributeRes_errorCodes {
+ boolean invalidWorkingSetObjectID,
+ boolean invalidAttributeID,
+ boolean invalidValue,
+ boolean valueInUse,
+ boolean AnyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeAttributeRes
+{
+ VTfunction vtfunction (175),
+ ValidObjectID objectID,
+ AttributeID attributeID,
+ ChangeAttributeRes_errorCodes errorCodes,
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+}
+with {variant "" };
+
+type record DeleteObjectPoolReq
+{
+ VTfunction vtfunction (178),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record DeleteObjectPoolRes_ErrorCodes {
+ boolean deletionError,
+ boolean undefined1 (false),
+ boolean undefined2 (false),
+ boolean undefined3 (false),
+ boolean anyOtherError,
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+
+type record DeleteObjectPoolRes
+{
+ VTfunction vtfunction (178),
+ DeleteObjectPoolRes_ErrorCodes errorCodes,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+type record ChangeStringValueReq
+{
+ VTfunction vtfunction (179),
+ ValidObjectID objectID,
+ INT2 numberOfBytes ,
+ octetstring newStringValue
+}
+with {
+ variant (numberOfBytes) "LENGTHTO(newStringValue)";
+ variant (numberOfBytes) "UNIT(octets)"
+}
+
+type record ChangeStringValueRes_ErrorCodes {
+ boolean undefined (false),
+ boolean invalidObjectID,
+ boolean stringTooLong,
+ boolean anyOtherError,
+ boolean reserved4 (false),
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeStringValueRes
+{
+ VTfunction vtfunction (179),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ ValidObjectID objectID,
+ ChangeStringValueRes_ErrorCodes errorCodes,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with {variant "" };
+
+
+type ValidObjectID AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID
+
+type BIT2np AuxiliaryInputType2StatusInd_OperatingStateType
+
+type record AuxiliaryInputType2StatusInd
+{
+ VTfunction vtfunction (38),
+ AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID auxiliaryInputObjectID,
+ OCT2 value1,
+ OCT2 value2,
+ AuxiliaryInputType2StatusInd_OperatingStateType operationState
+} with { variant "" };
+
+type record ChangeChildPositionReq
+{
+ VTfunction vtfunction (180),
+ ValidObjectID parentObjectID,
+ ValidObjectID objectID,
+ PositionType pos_x_relative,
+ PositionType pos_y_relative
+} with { variant "" };
+
+type record ChangeChildPositionRes_ErrorCodes {
+ boolean invalidParentObjectID,
+ boolean invalidObjectID,
+ boolean undefined (false),
+ boolean anyOtherError,
+ boolean reserved4 (false),
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
+}
+with {variant "" };
+
+type record ChangeChildPositionRes
+{
+ VTfunction vtfunction (180),
+ ValidObjectID parentObjectID,
+ ValidObjectID objectID,
+ ChangeChildPositionRes_ErrorCodes errorCodes,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with { variant "" };
+
type record GetMemoryReq
{
- VTfunction vtfunction (194),
- OCT1 reserved2 ('FF'O),
- INT3 memoryRequired,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (194),
+ OCT1 reserved2 ('FF'O),
+ INT3 memoryRequired,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type enumerated e_GetMemoryResVersionNumber {
- compliantWithHannoverAgritechnica_2001_limitedfeatureSet (0),
- compliantWithFDISVersionISO11783_6_2002_E_Final_Draft (1),
- compliantWithISVersionISO11783_6_2004_E_First_Edition (2),
- compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_3 (3),
- compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4 (4),
- compliantWithISVersionISO11783_6_2014_E_Third_Edition (5)}
+ compliantWithHannoverAgritechnica_2001_limitedfeatureSet (0),
+ compliantWithFDISVersionISO11783_6_2002_E_Final_Draft (1),
+ compliantWithISVersionISO11783_6_2004_E_First_Edition (2),
+ compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_3 (3),
+ compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4 (4),
+ compliantWithISVersionISO11783_6_2014_E_Third_Edition (5)}
with {variant "PADDING(octet)" };
type enumerated e_GetMemoryResStatus {
- thereCanBeEnoughMemory (0),
- thereIsNotEnoughMemoryAvailable (1)}
+ thereCanBeEnoughMemory (0),
+ thereIsNotEnoughMemoryAvailable (1)}
with {variant "PADDING(octet)" }
type record GetMemoryRes
{
- VTfunction vtfunction (194),
- e_GetMemoryResVersionNumber versionNumber,
- e_GetMemoryResStatus status,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (194),
+ e_GetMemoryResVersionNumber versionNumber,
+ e_GetMemoryResStatus status,
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record GetNumberOfSoftKeysReq
{
- VTfunction vtfunction (192),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (192),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record GetNumberOfSoftKeysRes
{
- VTfunction vtfunction (192),
- OCT1 navigationSoftKeys_,
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 x_dots,
- OCT1 y_dots,
- OCT1 numberOfVirtualSoftKeys_,
- OCT1 numberOfPhysicalSoftKeys_
+ VTfunction vtfunction (192),
+ OCT1 navigationSoftKeys_,
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 x_dots,
+ OCT1 y_dots,
+ OCT1 numberOfVirtualSoftKeys_,
+ OCT1 numberOfPhysicalSoftKeys_
} with { variant "" };
type record GetTextFontDataReq
{
- VTfunction vtfunction (195),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (195),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
-type enumerated e_TextFontDataRes_small_font_sizes {
- font_6x8 (0),
- font_8x8 (1),
- font_8x12 (2),
- font_12x16 (4),
- font_16x16 (8),
- font_16x24 (16),
- font_24x32 (32),
- font_32x32 (64),
- reserved (128)
- }
-with {variant "PADDING(octet)" };
+type record TextFontDataRes_small_font_sizes {
+ boolean font_8x8,
+ boolean font_8x12,
+ boolean font_12x16,
+ boolean font_16x16,
+ boolean font_16x24,
+ boolean font_24x32,
+ boolean font_32x32,
+ boolean reserved
+}
+with {variant "" };
-type enumerated e_TextFontDataRes_large_font_sizes {
- font_32x48 (1),
- font_48x64 (2),
- font_64x64 (4),
- font_64x96 (8),
- font_96x128 (16),
- font_128x128 (32),
- font_128x192 (64),
- reserved (128)
- }
-with {variant "PADDING(octet)" }
+type record TextFontDataRes_large_font_sizes {
+ boolean font_32x48,
+ boolean font_48x64,
+ boolean font_64x64,
+ boolean font_64x96,
+ boolean font_96x128,
+ boolean font_128x128,
+ boolean font_128x192,
+ boolean reserved (false)
+}
+with {variant "" }
-type enumerated e_TextFontDataRes_type_attribute {
- normal_text (0),
- bold_text (1),
- crossed_out_text (2),
- underlined_text (4),
- italics_text (8),
- inverted_text (16),
- flash_inverted (32),
- flash_background_and_foreground (64),
- proportional_font_rendering_ (128)
- }
-with {variant "PADDING(octet)"}
+type record TextFontDataRes_type_attribute {
+ boolean bold_text,
+ boolean crossed_out_text,
+ boolean underlined_text,
+ boolean italics_text,
+ boolean inverted_text,
+ boolean flash_inverted,
+ boolean flash_background_and_foreground,
+ boolean proportional_font_rendering
+}
+with {variant ""}
type record GetTextFontDataRes
{
- VTfunction vtfunction (195),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- e_TextFontDataRes_small_font_sizes small_font_sizes,
- e_TextFontDataRes_large_font_sizes large_font_sizes,
- e_TextFontDataRes_type_attribute type_attribute
+ VTfunction vtfunction (195),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ TextFontDataRes_small_font_sizes small_font_sizes,
+ TextFontDataRes_large_font_sizes large_font_sizes,
+ TextFontDataRes_type_attribute type_attribute
} with { variant "" };
type record GetHardwareReq
{
- VTfunction vtfunction (199),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (199),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type enumerated e_GetHardwareResGraphicType {
- monochrome (0),
- colors16 (1),
- colors256 (2)
- }
+ monochrome (0),
+ colors16 (1),
+ colors256 (2)
+}
with {variant "PADDING(octet)"}
-type record e_GetHardwareResHardware {
- boolean touchScreenandPointingEvent,
- boolean pointingDeviceAndPointingEvent,
- boolean multipleFrequencyAudioOutput,
- boolean adjustableVolumeAudioOutput,
- boolean simultaneousActivationsOfPhysicalSoftKeys,
- boolean simultaneousActivationsOfButtons,
- boolean dragOperationViaPointingEvent,
- boolean intermediateCoordinatesDuringDragOperation
+type record GetHardwareResHardwareType {
+ boolean touchScreenandPointingEvent,
+ boolean pointingDeviceAndPointingEvent,
+ boolean multipleFrequencyAudioOutput,
+ boolean adjustableVolumeAudioOutput,
+ boolean simultaneousActivationsOfPhysicalSoftKeys,
+ boolean simultaneousActivationsOfButtons,
+ boolean dragOperationViaPointingEvent,
+ boolean intermediateCoordinatesDuringDragOperation
} with { variant "" };
+type INT1 BootTimeType
+
type record GetHardwareRes
{
- VTfunction vtfunction (199),
- e_GetHardwareResGraphicType graphicType,
- e_GetHardwareResHardware hardware,
- INT2 xPixels,
- INT2 yPixels
+ VTfunction vtfunction (199),
+ BootTimeType bootTimeInSeconds, // 255 for information not available
+ e_GetHardwareResGraphicType graphicType,
+ GetHardwareResHardwareType hardware,
+ INT2 xPixels,
+ INT2 yPixels
} with { variant "" };
type enumerated e_Codeplane {
- codeplane0 (0),
- codeplane1 (1),
- codeplane2 (2),
- codeplane3 (3),
- codeplane4 (4),
- codeplane5 (5),
- codeplane6 (6),
- codeplane7 (7),
- codeplane8 (8),
- codeplane9 (9),
- codeplane10 (10),
- codeplane11 (11),
- codeplane12 (12),
- codeplane13 (13),
- codeplane14 (14),
- codeplane15 (15),
- codeplane16 (16)}
+ codeplane0 (0),
+ codeplane1 (1),
+ codeplane2 (2),
+ codeplane3 (3),
+ codeplane4 (4),
+ codeplane5 (5),
+ codeplane6 (6),
+ codeplane7 (7),
+ codeplane8 (8),
+ codeplane9 (9),
+ codeplane10 (10),
+ codeplane11 (11),
+ codeplane12 (12),
+ codeplane13 (13),
+ codeplane14 (14),
+ codeplane15 (15),
+ codeplane16 (16)}
with {variant "PADDING(octet)"}
type record GetSupportedWidecharsReq
{
- VTfunction vtfunction (193),
- e_Codeplane codeplane,
- OCT2 firstWideCharInInquiryRange,
- OCT2 lastWideCharInInquiryRange,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (193),
+ e_Codeplane codeplane,
+ OCT2 firstWideCharInInquiryRange,
+ OCT2 lastWideCharInInquiryRange,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record WideCharRange
{
- OCT2 firstWideChar,
- OCT2 lastWideChar
+ OCT2 firstWideChar,
+ OCT2 lastWideChar
} with { variant "" };
type record of WideCharRange WideCharRangeArray
type record GetSupportedWidecharsRes
{
- VTfunction vtfunction (193),
- e_Codeplane codeplane,
- OCT2 firstWideCharInInquiryRange,
- OCT2 lastWideCharInInquiryRange,
- INT1 numberOfRanges,
- WideCharRangeArray wideCharRangeArray
+ VTfunction vtfunction (193),
+ e_Codeplane codeplane,
+ OCT2 firstWideCharInInquiryRange,
+ OCT2 lastWideCharInInquiryRange,
+ INT1 numberOfRanges,
+ WideCharRangeArray wideCharRangeArray
} with {
- variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
- variant (numberOfRanges) "UNIT(elements)"}
+ variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
+ variant (numberOfRanges) "UNIT(elements)"}
type record GetWindowMaskDataReq
{
- VTfunction vtfunction (196),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (196),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record GetWindowMaskDataRes
{
- VTfunction vtfunction (196),
- OCT1 BackgroundColourVTUserLayoutDataMasks,
- OCT1 BackgroundColourVTKeyCells,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (196),
+ OCT1 BackgroundColourVTUserLayoutDataMasks,
+ OCT1 BackgroundColourVTKeyCells,
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record GetSupportedObjectsReq
{
- VTfunction vtfunction (197),
- OCT1 reserved2 ('FF'O),
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (197),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
type record GetSupportedObjectsRes
{
- VTfunction vtfunction (197),
- INT2 numberOfBytesToFollow,
- OCT1 supportedObjectTypes
+ VTfunction vtfunction (197),
+ INT2 numberOfBytesToFollow,
+ OCT1 supportedObjectTypes
} with {
- variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
- variant (numberOfBytesToFollow) "UNIT(elements)"}
+ variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
+ variant (numberOfBytesToFollow) "UNIT(elements)"}
type enumerated e_BusyCodes {
- vtIsBusyUpdatingVisibleMask (0),
- vtIsBusySavingDataToNonVolatileMemory (1),
- vtIsBusyExecutingACommand (2),
- vtIsBusyExecutingAMacro (3),
- vtIsBusyParsingAnObjectPool (4),
- reserved (5),
- auxiliaryControlsLearnModeActive (6),
- vtIsOutOfMemory (7)}
+ vtIsBusyUpdatingVisibleMask (0),
+ vtIsBusySavingDataToNonVolatileMemory (1),
+ vtIsBusyExecutingACommand (2),
+ vtIsBusyExecutingAMacro (3),
+ vtIsBusyParsingAnObjectPool (4),
+ reserved (5),
+ auxiliaryControlsLearnModeActive (6),
+ vtIsOutOfMemory (7)}
with {variant "PADDING(octet)"}
type record VTStatusReq
{
- VTfunction vtfunction (254),
- OCT1 sourceAddressOfActiveWorkingSetMaster,
- OCT2 objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
- OCT2 objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
- e_BusyCodes vtBusyCodes,
- OCT1 vtFunctionCode
+ VTfunction vtfunction (254),
+ OCT1 sourceAddressOfActiveWorkingSetMaster,
+ OCT2 objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+ OCT2 objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+ e_BusyCodes vtBusyCodes,
+ OCT1 vtFunctionCode
} with { variant "" };
type record WorkingSetMaintenanceBitMask {
- boolean InitiatingWorkingSetMaintenance,
- boolean reserved2 (false),
- boolean reserved3 (false),
- boolean reserved4 (false),
- boolean reserved5 (false),
- boolean reserved6 (false),
- boolean reserved7 (false)
+ boolean initiatingWorkingSetMaintenance,
+ boolean reserved1 (false),
+ boolean reserved2 (false),
+ boolean reserved3 (false),
+ boolean reserved4 (false),
+ boolean reserved5 (false),
+ boolean reserved6 (false),
+ boolean reserved7 (false)
} with { variant "" };
type enumerated e_WorkingSetMaintenanceVersionNumber {
- reserved0 (0),
- reserved1 (1),
- reserved2 (2),
- compliantWithVTVersion3 (3),
- compliantWithVTVersion4 (4),
- compliantWithVTVersion5 (5),
- compliantWithVTVersion2 (255)}
+ reserved0 (0),
+ reserved1 (1),
+ reserved2 (2),
+ compliantWithVTVersion3 (3),
+ compliantWithVTVersion4 (4),
+ compliantWithVTVersion5 (5),
+ compliantWithVTVersion2 (255)}
with {variant "PADDING(octet)"}
+
+type OCT7 VersionLabel7Char
+
+type record LoadVersionReq
+{
+ VTfunction vtfunction (209),
+ VersionLabel7Char versionLabel
+} with { variant "" };
+
+type record LoadVersionRes_errorCodesType {
+ boolean fileSystemErrorOrPoolDataCorruption,
+ boolean versionLabelIsNotCorrectOrVersionLabeUnknown,
+ boolean insufficientMemoryAvailable,
+ boolean anyOtherError,
+ boolean reserved5,
+ boolean reserved6,
+ boolean reserved7,
+ boolean reserved8
+} with {variant ""}
+
+type record LoadVersionRes
+{
+ VTfunction vtfunction (209),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ LoadVersionRes_errorCodesType errorCodes,
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with { variant "" };
+
+type record GetVersionsReq
+{
+ VTfunction vtfunction (223),
+ OCT1 reserved2 ('FF'O),
+ OCT1 reserved3 ('FF'O),
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
+} with { variant "" };
+
+type record GetVersionsRes
+{
+ VTfunction vtfunction (223),
+ INT1 numberOfVersionStrings,
+ VersionLabel7Char versionStrings
+}
+with{
+ variant (numberOfVersionStrings) "LENGTHTO(versionStrings)";
+ variant (numberOfVersionStrings) "UNIT(elements)"
+}
+
type record WorkingSetMaintenanceReq
{
- VTfunction vtfunction (255),
- WorkingSetMaintenanceBitMask bitMask,
- e_WorkingSetMaintenanceVersionNumber versionNumber,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ VTfunction vtfunction (255),
+ WorkingSetMaintenanceBitMask bitMask,
+ e_WorkingSetMaintenanceVersionNumber versionNumber,
+ OCT1 reserved4 ('FF'O),
+ OCT1 reserved5 ('FF'O),
+ OCT1 reserved6 ('FF'O),
+ OCT1 reserved7 ('FF'O),
+ OCT1 reserved8 ('FF'O)
} with { variant "" };
-type record DummyVTStatusRes
+type union VT2ECU
{
- VTfunction vtfunction (254)
-} with { variant "" };
-
-type union TopLevelMessage_VT2ECU_PDU
-{
-// put all VT2ECU request messages here
- VTStatusReq vtStatusReq,
-// put all VT2ECU response messages here
- GetMemoryRes getMemoryRes,
- GetNumberOfSoftKeysRes getNumberOfSoftKeysRes,
- GetTextFontDataRes getTextFontDataRes,
- GetHardwareRes getHardwareRes,
- GetSupportedWidecharsRes getSupportedWidecharsRes,
- GetWindowMaskDataRes getWindowMaskDataRes,
- GetSupportedObjectsRes getSupportedObjectsRes
+ // put all VT2ECU request messages here
+ SoftKeyActivationReq softKeyActivationReq,
+ ButtonActivationReq buttonActivationReq,
+ PointingEventReq pointingEventReq,
+ //VTSelectInputObjectReq_v3AndPrior vtSelectInputObjectReq, // for v3 and prior
+ VTSelectInputObjectReq_v4AndLater vtSelectInputObjectReq, // for v4 and later
+ VTChangeNumericValueReq vtChangeNumericValueReq,
+ VTOnUserLayoutHideShowReq vtOnUserLayoutHideShowReq,
+ VTStatusReq vtStatusReq,
+ // put all VT2ECU response messages here
+ HideShowObjectRes hideShowObjectRes,
+ SelectInputObjectRes selectInputObjectRes,
+ ControlAudioSignalRes controlAudioSignalRes,
+ ChangeNumericValueRes changeNumericValueRes,
+ ChangeActiveMaskRes changeActiveMaskRes,
+ ChangeSoftKeyMaskRes changeSoftKeyMaskRes,
+ ChangeAttributeRes changeAttributeRes,
+ DeleteObjectPoolRes deleteObjectPoolRes,
+ ChangeStringValueRes changeStringValueRes,
+ ChangeChildPositionRes changeChildPositionRes,
+ GetMemoryRes getMemoryRes,
+ GetNumberOfSoftKeysRes getNumberOfSoftKeysRes,
+ GetTextFontDataRes getTextFontDataRes,
+ GetHardwareRes getHardwareRes,
+ GetSupportedWidecharsRes getSupportedWidecharsRes,
+ GetWindowMaskDataRes getWindowMaskDataRes,
+ GetSupportedObjectsRes getSupportedObjectsRes,
+ LoadVersionRes loadVersionRes,
+ GetVersionsRes getVersionsRes
}
with {variant "TAG (
-// put all VT2ECU request messages here
- vtStatusReq, vtfunction = 254;
-// put all VT2ECU response messages here
- getMemoryRes, vtfunction = 194;
- getNumberOfSoftKeysRes, vtfunction = 192;
- getTextFontDataRes, vtfunction = 195;
- getHardwareRes, vtfunction = 199;
- getSupportedWidecharsRes, vtfunction = 193;
- getWindowMaskDataRes, vtfunction = 196;
- getSupportedObjectsRes, vtfunction = 197;)"
+ // put all VT2ECU request messages here
+ softKeyActivationReq, vtfunction = 0;
+ buttonActivationReq, vtfunction = 1;
+ pointingEventReq, vtfunction = 2;
+ vtSelectInputObjectReq, vtfunction = 3;
+ vtChangeNumericValueReq, vtfunction = 5;
+ vtOnUserLayoutHideShowReq, vtfunction = 9;
+ vtStatusReq, vtfunction = 254;
+ // put all VT2ECU response messages here
+ hideShowObjectRes, vtfunction = 160;
+ selectInputObjectRes, vtfunction = 162;
+ controlAudioSignalRes, vtfunction = 163;
+ changeNumericValueRes, vtfunction = 168;
+ changeActiveMaskRes, vtfunction = 173;
+ changeSoftKeyMaskRes, vtfunction = 174;
+ changeAttributeRes, vtfunction = 175;
+ deleteObjectPoolRes, vtfunction = 178;
+ changeStringValueRes, vtfunction = 179;
+ changeChildPositionRes, vtfunction = 180;
+ getMemoryRes, vtfunction = 192;
+ getNumberOfSoftKeysRes, vtfunction = 194;
+ getTextFontDataRes, vtfunction = 195;
+ getHardwareRes, vtfunction = 199;
+ getSupportedWidecharsRes, vtfunction = 193;
+ getWindowMaskDataRes, vtfunction = 196;
+ getSupportedObjectsRes, vtfunction = 197;
+ loadVersionRes, vtfunction = 209;
+ getVersionsRes, vtfunction = 223;)"
}
-type union TopLevelMessage_ECU2VT_PDU
+type union ECU2VT
{
-// put all ECU2VT request messages here
- GetMemoryReq getMemoryReq,
- GetNumberOfSoftKeysReq getNumberOfSoftKeysReq,
- GetTextFontDataReq getTextFontDataReq,
- GetHardwareReq getHardwareReq,
- GetSupportedWidecharsReq getSupportedWidecharsReq,
- GetWindowMaskDataReq getWindowMaskDataReq,
- GetSupportedObjectsReq getSupportedObjectsReq,
- WorkingSetMaintenanceReq workingSetMaintenanceReq
-// put all ECU2VT response messages here
- //Dummy_ECU2VT_Res dummy_ECU2VT_Res
+ // put all ECU2VT request messages here
+ SoftKeyActivationRes softKeyActivationRes,
+ ButtonActivationRes buttonActivationRes,
+ PointingEventRes pointingEventRes,
+ // VTSelectInputObjectRes_v4AndPrior vtSelectInputObjectRes, // for v4 and prior
+ VTSelectInputObjectRes_v5AndLater vtSelectInputObjectRes, // for v5 and later
+ VTChangeNumericValueRes vtChangeNumericValueRes,
+ VTOnUserLayoutHideShowRes vtOnUserLayoutHideShowRes,
+ AuxiliaryInputType2StatusInd auxiliaryInputType2StatusInd, // Note: ECU2VT may not be the right addressing
+ HideShowObjectReq hideShowObjectReq,
+ SelectInputObjectReq selectInputObjectReq,
+ ControlAudioSignalReq controlAudioSignalReq,
+ ChangeNumericValueReq changeNumericValueReq,
+ ChangeActiveMaskReq changeActiveMaskReq,
+ ChangeSoftKeyMaskReq changeSoftKeyMaskReq,
+ ChangeAttributeReq changeAttributeReq,
+ DeleteObjectPoolReq deleteObjectPoolReq,
+ ChangeStringValueReq changeStringValueReq,
+ ChangeChildPositionReq changeChildPositionReq,
+ GetMemoryReq getMemoryReq,
+ GetNumberOfSoftKeysReq getNumberOfSoftKeysReq,
+ GetTextFontDataReq getTextFontDataReq,
+ GetHardwareReq getHardwareReq,
+ GetSupportedWidecharsReq getSupportedWidecharsReq,
+ GetWindowMaskDataReq getWindowMaskDataReq,
+ GetSupportedObjectsReq getSupportedObjectsReq,
+ LoadVersionReq loadVersionReq,
+ GetVersionsReq getVersionsReq,
+ WorkingSetMaintenanceReq workingSetMaintenanceReq
+ // put all ECU2VT response messages here
+ //Dummy_ECU2VT_Res dummy_ECU2VT_Res
}
with {variant "TAG (
-// put all ECU2VT request messages here
- getMemoryReq, vtfunction = 194;
- getNumberOfSoftKeysReq, vtfunction = 192;
- getTextFontDataReq, vtfunction = 195;
- getHardwareReq, vtfunction = 199;
- getSupportedWidecharsReq, vtfunction = 193;
- getWindowMaskDataReq, vtfunction = 196;
- getSupportedObjectsReq, vtfunction = 197;
- workingSetMaintenanceReq, vtfunction = 255;
-// put all ECU2VT response messages here
- //dummy_ECU2VT_Res, vtfunction = '00000000'B;
- ) "
- }
+ // put all ECU2VT request messages here
+ softKeyActivationRes, vtfunction = 0;
+ buttonActivationRes, vtfunction = 1;
+ pointingEventRes, vtfunction = 2;
+ vtSelectInputObjectRes, vtfunction = 3;
+ vtChangeNumericValueRes, vtfunction = 5;
+ vtOnUserLayoutHideShowRes, vtfunction = 9;
+ auxiliaryInputType2StatusInd, vtfunction = 38;
+ hideShowObjectReq, vtfunction = 160;
+ selectInputObjectReq, vtfunction = 162;
+ controlAudioSignalReq, vtfunction = 163;
+ changeNumericValueReq, vtfunction = 168;
+ changeActiveMaskReq, vtfunction = 173;
+ changeSoftKeyMaskReq, vtfunction = 174;
+ changeAttributeReq, vtfunction = 175;
+ deleteObjectPoolReq, vtfunction = 178;
+ changeStringValueReq, vtfunction = 179;
+ changeChildPositionReq, vtfunction = 180;
+ getMemoryReq, vtfunction = 192;
+ getNumberOfSoftKeysReq, vtfunction = 194;
+ getTextFontDataReq, vtfunction = 195;
+ getHardwareReq, vtfunction = 199;
+ getSupportedWidecharsReq, vtfunction = 193;
+ getWindowMaskDataReq, vtfunction = 196;
+ getSupportedObjectsReq, vtfunction = 197;
+ loadVersionReq, vtfunction = 209;
+ getVersionsReq, vtfunction = 223;
+ workingSetMaintenanceReq, vtfunction = 255;
+ // put all ECU2VT response messages here
+ //dummy_ECU2VT_Res, vtfunction = 0;
+ ) "
+}
} with { encode "RAW" }
+
diff --git a/demo/Isobus_Templates.ttcn b/demo/Isobus_Templates.ttcn
index aadca7f..13fdd15 100644
--- a/demo/Isobus_Templates.ttcn
+++ b/demo/Isobus_Templates.ttcn
@@ -1,13 +1,3 @@
-/* Copyright (c) 2010, 2016 Ericsson AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v1.0
-* which accompanies this distribution, and is available at
-* http://www.eclipse.org/legal/epl-v10.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
module Isobus_Templates {
import from IsobusMessageTypes all
@@ -16,7 +6,7 @@
import from General_Types all
-template TopLevelMessage_ECU2VT_PDU t_GetMemoryReqX( INT3 p_memoryRequired) := {
+template ECU2VT t_GetMemoryReqX( INT3 p_memoryRequired) := {
getMemoryReq := {
vtfunction := 194,
reserved2 := 'FF'O,
@@ -26,25 +16,25 @@
}
};
-template AnyIsoBusPdu t_ecu2vt(template TopLevelMessage_ECU2VT_PDU t_Message) := {
+template AnyIsoBusPdu t_ecu2vt(template ECU2VT t_Message) := {
ecu2vt := t_Message
};
-template AnyIsoBusPdu t_vt2ecu(template TopLevelMessage_VT2ECU_PDU t_Message) := {
+template AnyIsoBusPdu t_vt2ecu(template VT2ECU t_Message) := {
vt2ecu := t_Message
};
template AnyIsoBusPdu t_GetMemoryReq_pdu(INT3 p_memoryRequired) := {
- ecu2vt := {getMemoryReq := t_GetMemoryReq(p_memoryRequired)}
+ ecu2vt := {getMemoryReq := t_GetMemoryReq(p_memoryRequired)}
}
template GetMemoryReq t_GetMemoryReq(INT3 p_memoryRequired) := {
- vtfunction := 194,
- reserved2 := 'FF'O,
- memoryRequired := p_memoryRequired,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
+ vtfunction := 194,
+ reserved2 := 'FF'O,
+ memoryRequired := p_memoryRequired,
+ reserved7 := 'FF'O,
+ reserved8 := 'FF'O
}
template GetMemoryRes t_GetMemoryRes(e_GetMemoryResVersionNumber p_versionNumber, e_GetMemoryResStatus p_status) := {
@@ -71,4 +61,26 @@
numberOfRanges := p_numberOfRanges,
wideCharRangeArray := p_wideCharRangeArray
}
+
+
+template AnyIsoBusPdu t_WorkingSetMaintenanceReq_pdu(
+ WorkingSetMaintenanceBitMask p_bitMask,
+ e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+ ecu2vt := {workingSetMaintenanceReq := t_WorkingSetMaintenanceReq(p_bitMask, p_versionNumber)}
}
+
+template WorkingSetMaintenanceReq t_WorkingSetMaintenanceReq(
+ WorkingSetMaintenanceBitMask p_bitMask,
+ e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+ vtfunction := 255,
+ bitMask := p_bitMask,
+ versionNumber := p_versionNumber,
+ reserved4 := 'FF'O,
+ reserved5 := 'FF'O,
+ reserved6 := 'FF'O,
+ reserved7 := 'FF'O,
+ reserved8 := 'FF'O
+}
+
+}
+
diff --git a/demo/Isobustest.ttcn b/demo/Isobustest.ttcn
index 5938051..fc85669 100644
--- a/demo/Isobustest.ttcn
+++ b/demo/Isobustest.ttcn
@@ -11,6 +11,7 @@
// File: Isobustest.ttcn
// Description: Encoder / Decoder for Isobus message frames
//
+// Revision R1A
module Isobustest {
@@ -22,6 +23,7 @@
import from SocketCAN_Templates all
import from Can all
import from Isobus all
+import from IsobusMessageTypes all
import from Isobus_Templates all
@@ -70,17 +72,32 @@
timer T0:= 0.2
}
+const integer MAX_CONNECTIONS := 65535
+
+type record length (0..MAX_CONNECTIONS) of PTC2_CT OpenConnections
+type record length (0..MAX_CONNECTIONS) of boolean OpenConnectionsFlags
+
type component PTC1_CT
{
port Isobus_PT pt_isobus
//variables
+ var OpenConnections openConnections
+ var OpenConnectionsFlags openConnectionsFlags
//timers
timer T1:= 0.2
}
type component PTC2_CT
{
+ port Isobus_PT pt_isobus
//variables
+ var octetstring receivedUnacknowledgedData
+ var INT2 msgSizeInBytes
+ var INT2 receivedUnacknowledgedMsgSizeInBytes
+ var INT1 nextExpectedPacketNumber
+ var PGN pgnOfMultiPacketMessage
+ var OCT1 ps, sa
+ var CAN_id tp_dt_can_id
//timers
timer T2:= 0.2
}
@@ -234,13 +251,13 @@
{
//var SocketCAN_socket_result v_result_socketcan
var SocketCAN_receive_CAN_or_CAN_FD_frame v_result_socketcan
- var CAN_frame_j1939 v_result_can_frame_j1939
//T0.start;
alt
{
[] pt_socketCAN.receive(a_SocketCAN_receive_CAN_frame(v_socket_id, t_CAN_EFF_FLAG, ?)) -> value v_result_socketcan
- {log("SocketCan:Expected frame received", v_result_socketcan)
+ {
+ //log("SocketCan:Expected frame received", v_result_socketcan)
// it is assumed that no can fd frames are received here
if(ischosen(v_result_socketcan.frame.can_frame)){
var CAN_frame_j1939 v_CAN_frame_j1939 := can2j1939frame(v_result_socketcan.frame.can_frame)
@@ -249,10 +266,6 @@
setverdict(inconc, "reception of canfd frame not expected")
}
}
- [] pt_socketCAN.receive(?) -> value v_result_socketcan
- {log("SocketCan:Unexpected frame received!", v_result_socketcan)
- setverdict(fail)
- }
}//endalt
}
f_close_socket2(v_socket_id)
@@ -291,16 +304,253 @@
}
}//endfunction var boolean condition1
+function f_get_component (in OCT1 connectioninitiator, in OCT1 connectionresponder) runs on PTC1_CT return PTC2_CT {
+ var PTC2_CT v_PTC2
+
+ var integer index
+ index:= oct2int(connectioninitiator) + 256 * oct2int(connectionresponder)
+
+ if (openConnectionsFlags[index] == false){
+
+ v_PTC2 := PTC2_CT.create
+ v_PTC2.start(f_behaviour_connections());
+ openConnectionsFlags[index] := true
+ openConnections[index] := v_PTC2
+ connect(v_PTC2:pt_isobus, self:pt_isobus)
+ } else {
+ v_PTC2 := openConnections[index]
+ }
+ return v_PTC2
+}
+
+
+
+function f_behaviour2_sync() runs on PTC1_CT
+{
+
+ var boolean condition1 := true
+ var CAN_frame_j1939 v_can_frame_j1939
+
+ // initialization
+
+ var integer i
+ for(i:=1;i<=MAX_CONNECTIONS; i:= i+1){
+ openConnectionsFlags[i] := false
+ }
+
+ //periodic reception
+
+
+
+
+ while (condition1)
+ {
+ //T1.start;
+
+ alt
+ {
+
+ /* []syncport.receive("halt") {
+ condition1:=false } */
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { requestToSend := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { endOfMessageAcknowledgement := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { connectionAbort := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.ps, v_can_frame_j1939.can_j1939.sa)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { broadcastAnnounce := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_dt := ?}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received tp_ct: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+
+ var PTC2_CT v_PTC2
+ v_PTC2 := f_get_component(v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps)
+ pt_isobus.send(v_can_frame_j1939) to v_PTC2
+ }
+ []pt_isobus.receive(CAN_frame_j1939:?) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received: ", v_can_frame_j1939);
+ }
+
+ //[]T1.timeout;
+
+ }//endalt
+ }
+}//endfunction var boolean condition1
+function f_behaviour_connections() runs on PTC2_CT
+{
+
+ var boolean condition1 := true
+ var CAN_frame_j1939 v_can_frame_j1939
+
+ // initialization
+
+ //periodic reception
+
+
+
+
+ while (condition1)
+ {
+ //T1.start;
+
+ alt
+ {
+
+ /* []syncport.receive("halt") {
+ condition1:=false } */
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { requestToSend := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ msgSizeInBytes := v_can_frame_j1939.can_pdu.tp_cm.requestToSend.msgSizeInBytes
+ receivedUnacknowledgedData := ''O
+ receivedUnacknowledgedMsgSizeInBytes := 0
+ pgnOfMultiPacketMessage := v_can_frame_j1939.can_pdu.tp_cm.requestToSend.pgnOfMultiPacketMessage
+ ps := v_can_frame_j1939.can_j1939.ps
+ sa := v_can_frame_j1939.can_j1939.sa
+ //log incoming message
+ log ("received requestToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ alt // connection open requested
+ {
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := {ctrl := '11'O,
+ totalNumberOfPackets := ?,
+ nextPacketNumber :=1,
+ reserved4 := ?,
+ reserved5 := ?,
+ pgnOfMultiPacketMessage := ?}}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ nextExpectedPacketNumber := v_can_frame_j1939.can_pdu.tp_cm.clearToSend.nextPacketNumber
+ //log incoming message
+ log ("received clearToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ alt // connection open - receivig data
+ {
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_dt := ?}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ if ((msgSizeInBytes - receivedUnacknowledgedMsgSizeInBytes) > 7) {
+ tp_dt_can_id := j1939id2canid(v_can_frame_j1939.can_j1939) // actuallay it is only necessary to store it once
+ receivedUnacknowledgedData := receivedUnacknowledgedData & v_can_frame_j1939.can_pdu.tp_dt.data
+ receivedUnacknowledgedMsgSizeInBytes := receivedUnacknowledgedMsgSizeInBytes + 7
+ nextExpectedPacketNumber := nextExpectedPacketNumber + 1 }
+ else {
+ log("v_can_frame_j1939.can_j1939: ", v_can_frame_j1939.can_j1939)
+ tp_dt_can_id := j1939id2canid(v_can_frame_j1939.can_j1939) // actuallay it is only necessary to store it once
+ receivedUnacknowledgedData := receivedUnacknowledgedData & substr(v_can_frame_j1939.can_pdu.tp_dt.data
+ ,0 , (msgSizeInBytes - receivedUnacknowledgedMsgSizeInBytes))
+ nextExpectedPacketNumber := 0
+ receivedUnacknowledgedMsgSizeInBytes := msgSizeInBytes
+ }
+ //log incoming message
+ log ("received tp_dt: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ repeat
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { clearToSend := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ log ("received clearToSend: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ repeat
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { endOfMessageAcknowledgement := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ log ("received endOfMessageAcknowledgement: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ if (receivedUnacknowledgedMsgSizeInBytes == msgSizeInBytes) {
+ var octetstring receivedData
+ //var PGN pgn := v_can_frame_j1939.can_pdu.tp_cm.endOfMessageAcknowledgement.pgnOfMultiPacketMessage
+ if (oct2int((int2oct(pgnOfMultiPacketMessage, 3) and4b '00FF00'O)>> 1 ) < 240) {
+ log ("pgnOfMultiPacketMessage: ", pgnOfMultiPacketMessage, ", ", int2oct(pgnOfMultiPacketMessage, 3))
+ log ("ps: ", ps)
+ log ("sa: ", sa)
+ receivedData := int2oct(oct2int((int2oct(pgnOfMultiPacketMessage, 3) and4b '03FFFF'O)>> 1 ), 2) & ps & sa & receivedUnacknowledgedData
+ }
+ else
+ {
+ log ("pgnOfMultiPacketMessage: ", pgnOfMultiPacketMessage, ", ", int2oct(pgnOfMultiPacketMessage, 3))
+ log ("sa: ", sa)
+ receivedData := (int2oct(pgnOfMultiPacketMessage, 3) and4b '03FFFF'O) & sa & receivedUnacknowledgedData
+ }
+ //var octetstring receivedData := (tp_dt_can_id and4b '0003FFFF'O) & receivedUnacknowledgedData
+ log("tp_dt_can_id: ", tp_dt_can_id)
+ //var octetstring receivedData := tp_dt_can_id & receivedUnacknowledgedData
+ //var octetstring receivedData := receivedUnacknowledgedData
+ log ("received tp_dt frame with PGN: ", receivedData);
+
+ v_can_frame_j1939:=f_decode_CAN_frame_j1939(receivedData)
+ log ("received tp_dt frame j1939: ", v_can_frame_j1939);
+ }
+ else {
+ log ("received incomplete message frame: ", receivedUnacknowledgedData);
+ }
+ }
+ }
+ }
+ []pt_isobus.receive(CAN_frame_j1939:{can_j1939 := ?, can_pdu := {tp_cm := { connectionAbort := ?}}}) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ log ("received connectionAbort: ", v_can_frame_j1939, v_can_frame_j1939.can_j1939.sa, v_can_frame_j1939.can_j1939.ps);
+ }
+ }
+
+
+ }
+ []pt_isobus.receive(CAN_frame_j1939:?) -> value v_can_frame_j1939 {
+ //T1.stop;
+ //log incoming message
+ //log ("received: ", v_can_frame_j1939);
+ }
+
+ //[]T1.timeout;
+
+ }//endalt
+ }
+}//endfunction var boolean condition1
testcase tc_encdec() runs on MTC_CT
{
-
-
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E9'O, ps := 'FD'O, sa := 'E6'O }, can_pdu := { addressClaimed := { name := 'A80056AAABBCC778'O }}}
+ template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E9'O, ps := 'FD'O, sa := 'E6'O },
+ can_pdu := { addressClaimed := { name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B } }}}
log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939)))
log("--------------------------------------------")
log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
@@ -312,14 +562,14 @@
log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_2))))
log("--------------------------------------------")
- template CAN_frame_j1939 t_CAN_frame_j1939_3 := { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := '1122334455667788'O }}}
+ template CAN_frame_j1939 t_CAN_frame_j1939_3 := { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B } }}}
log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_3)))
log("--------------------------------------------")
log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_3))))
log("--------------------------------------------")
template CAN_frame_j1939 t_CAN_frame_j1939_6 := { can_j1939 := { prio := '000110'B, res := '0'B, dp := '1'B, pf := 'E6'O , ps := 'FD'O, sa := '00'O }, can_pdu := { commandedAddress := {
- name:='1122334455667788'O,
+ name := { selfConfigurableAddressValue := '0'B, industryGroupValue := '011'B, deviceClassInstanceValue := '0001'B, deviceClassValue := '0000001'B, reserveValued := '0'B, functionValue := '00000011'B, functionInstanceValue := '00101'B, ecuInstancceValue := '110'B, manufacturerCodeValue := '10000000000'B, identityNumberBits := '101000010000101000000'B },
newSourceAddress:='AA'O
} } }
log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_6)))
@@ -372,6 +622,23 @@
log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
}
+testcase tc_encdec_ecu2vt_workingSetMaintenanceReq() runs on MTC_CT // using a template
+{
+ template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := '000000'B, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu :=
+ t_WorkingSetMaintenanceReq_pdu({
+ initiatingWorkingSetMaintenance := true,
+ reserved1 := false,
+ reserved2 := false,
+ reserved3 := false,
+ reserved4 := false,
+ reserved5 := false,
+ reserved6 := false,
+ reserved7 := false}, compliantWithVTVersion4)}
+ log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939)))
+ log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939))))
+}
+
+
testcase tc_dec_requestForAddressClaimed() runs on MTC_CT
{
@@ -384,6 +651,39 @@
log("--------------------------------------------")
}
+
+
+testcase tc_dec_largemessage() runs on MTC_CT
+{
+
+ var octetstring j1939_pdu
+
+ j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
+ // j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
+ /*
+03FE00F82A66696C65207365727665722A3139373136392A2D2A
+03FE00262A6661726D20646973706C61792A3139373136392A2D2A
+03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A
+03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A
+01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A
+02FE00FD016661726D20646973706C617920312E33372E31362E3733352A
+02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A
+02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A
+9CFE0DF8FE01FFFFFFFFFFFFFF
+*/
+
+
+
+ log(j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_CAN_frame_j1939(j1939_pdu))
+ log("--------------------------------------------")
+}
+
//test case declarations
testcase tc_Example001() runs on MTC_CT
{
@@ -416,6 +716,39 @@
//when the test case terminates, MTC will terminate as well
//PTCs terminate (reach the state done) when the function with which they were started terminates
+//test case declarations
+testcase tc_Example002() runs on MTC_CT
+{
+
+ var PTC_isobus_CT v_PTC_isobus
+ var PTC1_CT v_PTC1
+
+ //create components
+ v_PTC_isobus:=PTC_isobus_CT.create;
+ v_PTC1:=PTC1_CT.create;
+
+ //connnect ports
+ //map ports
+
+ //start components
+
+ v_PTC1.start(f_behaviour2_sync());
+ v_PTC_isobus.start(f_behaviour_isobus(v_PTC1));
+
+ //wait for termination
+ all component.done
+
+
+ //unmap ports
+ //disconnect ports
+ //terminate all parallel test componenets
+ all component.kill
+
+}
+//when the test case terminates, MTC will terminate as well
+//PTCs terminate (reach the state done) when the function with which they were started terminates
+
+
control
{
@@ -426,3 +759,4 @@
}//endcontrol
} with { encode "RAW" }
+
diff --git a/src/SocketCAN_Templates.ttcn b/src/SocketCAN_Templates.ttcn
index 7ca8e96..e9e1678 100644
--- a/src/SocketCAN_Templates.ttcn
+++ b/src/SocketCAN_Templates.ttcn
@@ -1,3 +1,18 @@
+/* Copyright (c) 2010, 2016 Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+// File: SocketCANtest.ttcn
+// Description: SocketCAN port type test
+//
+
+
module SocketCAN_Templates {
import from SocketCAN_Types all;
@@ -90,3 +105,4 @@
}
}
+