R4A version of SocketCAN test port
Signed-off-by: Lenard Nagy <lenard.nagy@ericsson.com>
diff --git a/README.md b/README.md
index 7e94e9e..c475a24 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-# titan.TestPorts.SocketCANasp
-# compiled with: Titan CRL 113 200/6 R5A
-# GCC 7.3.0 Using OpenSSL 1.0.2n
-
+# titan.TestPorts.SocketCANasp
Main project page:
@@ -22,28 +19,33 @@
http://www.can-cia.de/fileadmin/resources/documents/proceedings/2012_hartkopp.pdf
http://v2.can-newsletter.org/uploads/media/raw/46c15d02e1fdd3b04e671693ec548ff7.pdf
-# See file: src/initscript.sh:
+# See file: demo/initscript.sh:
#--------------------------------------
#!/bin/bash
+
+# create a virtual can interface:
+
+sudo modprobe vcan
+sudo ip link add dev vcan0 type vcan
+sudo ip link set vcan0 up
+
+#!/bin/bash
+
# Add vcan module to kernel
sudo modprobe vcan
# Setup of virtual can vcan0
sudo ip link add dev vcan0 type vcan
-# set it up at as a canfd can interface
+# set it up at as a canfd capable can interface
sudo ip link set vcan0 mtu 72
sudo ip link set vcan0 up
-# Setup of virtual can vcan1
-sudo ip link add dev vcan1 type vcan
-sudo ip link set vcan1 up
+# or create a physical can interface
+# sudo ip link set can0 up type can bitrate 1000000
-# example configuration of a physical can bus interface
-#sudo ip link set can0 up type can bitrate 1000000
-
-ifconfig
+ip a
#--------------------------------------
@@ -56,10 +58,12 @@
make clean; make
ttcn3_start SocketCAN SocketCAN.cfg
+or
+ttcn3_start SocketCAN CAN_matrix_test.cfg
or to run a certain testcase:
-ttcn3_start SocketCAN SocketCAN.cfg SocketCANtest.tc_can_raw1 SocketCANtest.tc_can_bcm1
+ttcn3_start SocketCAN SocketCAN.cfg SocketCAN_RAW_test.tc_can_raw_send_and_receive_can_frame SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FILTER
Review the newly created log files in the src directory
and use e.g. Wireshark to trace the CAN interfacce.
@@ -78,16 +82,22 @@
test interfaces for each interface have to be defined in the MTC.
-CAN RAW:
- CAN and CANFD has been implemented and tested.
- Depending on the availability of the C-code #define CANFD_SUPPORT
- in src/SocketCAN_PT.cc CAN-FD support is enabled at compile time.
- If you kernel does not have CANFD support comment out the #define CANFD_SUPPORT
- the file "src/SocketCAN_PT.cc"
+ CAN FD has been implemented, however not been tested.
+ Depending on the availability of the C-code #define "CAN_FD_FRAME"
+ in /usr/include/linux/can/bcm.h, CAN-FD support is enabled at compile time.
+ The RAW setsockopt has path coverage. However no test coverage that insures
+ the setsockopt functionality provided by the kernel is working correctly.
+ For this purpose in the future might be added additional test cases.
-CAN BCM:
TX_SETUP, TX_DELETE have been tested, TX_READ is known to fail test cases.
- The BCM has test coverage for TX_SETUP and TX_DELETE.
+ Some tests have indicated, that that SocketCAN BCM does not support concurrently
+ active BCM channels.
+ The BCM has test coverage for TX_SETUP and TX_DELETE. However no test coverage
+ that insures the BCM functionality provided by the kernel is working correctly.
+ For this purpose in the future might be added additional test cases.
Return values other than the error code by the BCM are not yet supported.
+ BCM wth CAN FD frames has not been tested yet.
-ISOTP:
Iso TP functionality has been added, however currently no options like padding
@@ -103,13 +113,45 @@
There is an endlessly running test case:
ttcn3_start SocketCAN SocketCAN.cfg Isotptest.tc_Isotp_Example001
+-CAN J1939:
+Configure CAN J1939 as following (requires Kernel 5.4 and compiled with can-j1939 kernel module):
+sudo modprobe vcan
+sudo ip link add vcan0 type vcan
+sudo ip link set vcan0 up
+sudo modprobe can-j1939
+
+For the following test cases, the messages are so huge that screen output of the log file takes too long.
+Thus comment out as following the following lines in J1939.cfg:
+//FileMask := LOG_ALL | DEBUG | MATCHING
+//ConsoleMask := LOG_ALL | DEBUG | MATCHING
+
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message_parallel
+
+Here above lines can be commented in:
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim
+ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_request_for_address_claimed
+
+
+
+
-Merging of logfiles:
To merge the logfies from multiple Parallel Test Componets (PTCs) from a
- single run in timely order into sigle file, run in demo directory:
- $ ./merge.sh
- the merged and pretty printed log file is found in "demo/log_merged_pretty.txt"
+ single run in timely order into sigle file, run:
+ ttcn3_logmerge -o log_merged.txt *.log
+ The merged log-file is found at log_merged.txt
-
--Dunping CAN Frames using SocketCAN:
+ -Pretty printing the log file:
+ ttcn3_logformat -o log_merged_format.log log_merged.log
+
+-Dumping CAN Frames using SocketCAN:
To dump all received can frames of e.g. "vcan0" run a seperate terminal:
- $ candump "vcan0"
+ $ candump -td -d "vcan0"
+
+-Spying J1939 CAN-Frames using SocketCAN (only for SocketCAN J1939):
+ $ j1939spy -td -P -b 4193977 vcan0
+
+- Runnung ttcn compiler and merging logs:
+
+rm *.log;make;ttcn3_start SocketCAN J1939.cfg J1939_Isobus_test.tc_can_j1939_IsobusVtEcuSimulation ;ttcn3_logmerge -o log_merged.log *.log;ttcn3_logformat -o log_merged_format.log log_merged.log;kate log_merged_format.log
+ 2004 history | grep ttcn
diff --git a/demo/Isobus.ttcn b/demo/Isobus.ttcn
index 6c525f6..20b6702 100644
--- a/demo/Isobus.ttcn
+++ b/demo/Isobus.ttcn
@@ -15,58 +15,27 @@
module Isobus {
import from General_Types all
-import from Can all
import from IsobusCMMessageTypes all
import from IsobusNMMessageTypes all
import from IsobusVTMessageTypes all
import from J1939 all
-// Note:
-// SocketCAN Error frames are not considered here
-// SocketCAN RTR frames are not considered here
-// SocketCAN Basic frames are not considered here
-
-external function encode_CAN_frame_j1939mod(in CAN_frame_j1939mod pdu) return octetstring
+external function f_encode_J1939_message(in J1939_messageWithPGN pdu) return octetstring
with { extension "prototype(convert) encode(RAW)" }
-external function decode_CAN_frame_j1939mod(in octetstring data) return CAN_frame_j1939mod
+external function f_decode_J1939_message(in octetstring data) return J1939_messageWithPGN
with { extension "prototype(convert) decode(RAW)" }
-const octetstring ISOBUS_PRIORITY_MASK := '1C000000'O;
-const octetstring ISOBUS_RESERVED_MASK := '02000000'O;
-const octetstring ISOBUS_DATAPAGE_MASK := '01000000'O;
-const octetstring ISOBUS_PDUFORMAT_MASK := '00FF0000'O;
-const octetstring ISOBUS_PDUSPECIFIC_MASK := '0000FF00'O;
-const octetstring ISOBUS_SOURCEADDRESS_MASK := '000000FF'O;
-
type J1939_Priority Priority
-type record J1939_header { // Error & RTR Frames are not considered here
- //PGN pgn optional,
- //BIT3 ignore,
- Priority prio,
- BIT1 res,
- BIT1 dp,
- OCT1 pf,
- OCT1 ps,
- SourceAddress sa
-} with { variant "FIELDORDER(msb)" }
+type record J1939PDU_with_NAME
+{
+ J1939_ADDR addr,
+ J1939_NAME name,
+ J1939_messageWithPGN pdu
+} with {variant "" };
-
-type record J1939mod { // Error & RTR Frames are not considered here
- //PGN pgn optional,
- //BIT3 ignore,
- Priority prio,
- BIT1 res,
- BIT1 dp,
- OCT1 pf,
- OCT1 ps,
- SourceAddress sa,
- OCT3 comp
-} with { variant "FIELDORDER(msb)" }
-
-
-type union AnyIsoBusPdu {
+type union Isobus_message {
ETP_DT etp_dt, // extended TP data transfer
ETP_CM etp_cm, // extended TP connection management
VT2ECU vt2ecu, // Message Virtual Terminal (VT) to ECU
@@ -75,240 +44,35 @@
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,
+ //CannotClaimSourceAddress cannotClaimSourceAddress,
+ //AddressClaimed addressClaimed,
+ AddressClaimed addressClaimedOrCannotClaimSourceAddress,
CommandedAddress commandedAddress
// other upper layer isobus protocols like Task Comtroller are added here ...
}
with { variant "" }
-type record CAN_frame_j1939 {
- J1939_header can_j1939,
- AnyIsoBusPdu can_pdu
-}with { variant "" }
-
-type record CAN_frame_j1939mod {
- J1939mod can_j1939,
- AnyIsoBusPdu can_pdu
-}with {
- 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; //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!!!!!!
+type record J1939_messageWithPGN {
+J1939_PGN pgn,
+Isobus_message pdu
}
-
-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 {
- var CAN_frame v_can_frame
- v_can_frame.can_id := pdu1_j1939id2canid(p_can_frame_j1939.can_j1939, p_priority, p_da, p_sa)
- // v_can_frame.can_pdu := encode_AnyIsoBusPdu(p_can_frame_j1939.can_pdu)
- v_can_frame.can_pdu := substr(f_encode_CAN_frame_j1939(p_can_frame_j1939),0,3)//strip 3 byte header
- return v_can_frame
-}
-
-function pdu1_j1939id2canid(in J1939_header p_j1939, in Priority p_priority, in DestinationAddress p_da, in SourceAddress p_sa) return CAN_id{
- var CAN_id v_can_id
- v_can_id := bit2oct(oct2bit(p_sa) or4b (oct2bit(p_da) << 8) or4b (oct2bit(p_j1939.pf) << 16) or4b ((p_j1939.dp) << 24) or4b
- ((p_j1939.res) << 25) or4b (int2bit(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_header 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 +
- 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)
-
- 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)
- return v_can_frame_j1939
-}
-
-function canid2j1939(in CAN_id p_can_id) return J1939_header {
- //---------------------------------------------------------------------------------------
-
- var bitstring v_can_id_bitstring:= oct2bit(p_can_id)
- var J1939_header v_j1939
-
- v_j1939.prio :=bit2int(substr(v_can_id_bitstring, 0, 6)); //3 ,3
- v_j1939.res :=v_can_id_bitstring[6];
- v_j1939.dp :=v_can_id_bitstring[7];
- 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
-}
-
-//********************************************************************************-
-
-
-
-//---------------------------------------------------------------------------
-function f_insert_aux_hdr(in octetstring p_os) return octetstring
-//---------------------------------------------------------------------------
-{
- var OCT3 v_os
-
-
- v_os[0]:=p_os[1];//pf
- if(p_os[1] == 'FE'O)
- {
- if (p_os[2]=='D8'O) {v_os[1]:='D8'O;v_os[2]:='00'O;}
- }
-
- else if(p_os[1] == 'EE'O)
- {
- if (p_os[2] == 'FF'O)
- { if (p_os[3]=='FE'O) {v_os[1]:='FF'O;v_os[2]:='FE'O;}
- else {v_os[1]:='FF'O;v_os[2]:='00'O;}
- }
-
- }
-
-
- else { v_os[1]:='00'O;v_os[2]:='00'O;}
-
-
- //log("replace(p_os,4,0,v_os) :",replace(p_os,4,0,v_os))
-
- return replace(p_os,4,0,v_os)//insert aux header
-}
-
-//---------------------------------------------------------------------------
-function f_remove_aux_hdr(in octetstring p_os) return octetstring
-//---------------------------------------------------------------------------
-{
- //log("p_os :",p_os)
-
-
- p_os[1]:=p_os[4]; //pf := aux[0];
- if (p_os[4] == 'EE'O)
- {
- if (p_os[6] == 'FE'O ) { //'EEFFFE' O
- p_os[2]:=p_os[5]; //ps := aux[1];
- p_os[3]:=p_os[6]; //sa := aux[2];
- }
- else { //'EEFFXX'O
- p_os[2]:=p_os[5]; //ps := aux[1];
- }
- }
- else if (p_os[4] == 'FE'O) //'FED8XX'O
- {
- p_os[2]:=p_os[5]; //ps := aux[1];
- }
-
-
- //log("p_os :",p_os)
-
- //log("replace(p_os,4,3,''O) :",replace(p_os,4,3,''O))
- return replace(p_os,4,3,''O); //remove aux header
-}
-
-//---------------------------------------------------------------------------
-function f_map_mod2frame(in CAN_frame_j1939mod p_frame) return CAN_frame_j1939
-//---------------------------------------------------------------------------
-{
- var CAN_frame_j1939 v_CAN_frame_j1939
-
- v_CAN_frame_j1939.can_pdu:=p_frame.can_pdu;
- v_CAN_frame_j1939.can_j1939.prio:=p_frame.can_j1939.prio;
- v_CAN_frame_j1939.can_j1939.res:=p_frame.can_j1939.res;
- v_CAN_frame_j1939.can_j1939.dp:=p_frame.can_j1939.dp;
- v_CAN_frame_j1939.can_j1939.pf:=p_frame.can_j1939.pf;
- v_CAN_frame_j1939.can_j1939.ps:=p_frame.can_j1939.ps;
- v_CAN_frame_j1939.can_j1939.sa:=p_frame.can_j1939.sa;
-
-
- //log("v_CAN_frame_j1939 :",v_CAN_frame_j1939)
- return v_CAN_frame_j1939
-
-}
-
-
-//---------------------------------------------------------------------------
-function f_map_frame2mod(in CAN_frame_j1939 p_frame) return CAN_frame_j1939mod
-//---------------------------------------------------------------------------
-{
- var CAN_frame_j1939mod v_CAN_frame_j1939mod
-
-
- v_CAN_frame_j1939mod.can_pdu:=p_frame.can_pdu;
- v_CAN_frame_j1939mod.can_j1939.prio:=p_frame.can_j1939.prio;
- v_CAN_frame_j1939mod.can_j1939.res:=p_frame.can_j1939.res;
- v_CAN_frame_j1939mod.can_j1939.dp:=p_frame.can_j1939.dp;
- v_CAN_frame_j1939mod.can_j1939.pf:=p_frame.can_j1939.pf;
- v_CAN_frame_j1939mod.can_j1939.ps:=p_frame.can_j1939.ps;
- v_CAN_frame_j1939mod.can_j1939.sa:=p_frame.can_j1939.sa;
- if (p_frame.can_j1939.pf == 'EE'O)
- {
- if (p_frame.can_j1939.ps == 'D8'O) {
- v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&p_frame.can_j1939.ps&'00'O;
- } else if (p_frame.can_j1939.ps == 'FF'O) {
- if (p_frame.can_j1939.sa == 'FE'O) {
- v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&p_frame.can_j1939.ps&p_frame.can_j1939.sa
- } else {//??
- v_CAN_frame_j1939mod.can_j1939.comp:=p_frame.can_j1939.pf&'0000'O;
- }
- } else {//??
- v_CAN_frame_j1939mod.can_j1939.comp:=p_frame.can_j1939.pf&'0000'O;
- }
- } else {
- v_CAN_frame_j1939mod.can_j1939.comp := p_frame.can_j1939.pf&'0000'O;
- }
- //log("v_CAN_frame_j1939mod :",v_CAN_frame_j1939mod)
- return v_CAN_frame_j1939mod;
-}
-
-
-
-//---------------------------------------------------------------------------
-function f_encode_CAN_frame_j1939(in CAN_frame_j1939 pdu) return octetstring
-//---------------------------------------------------------------------------
-{
-
- return f_remove_aux_hdr(encode_CAN_frame_j1939mod(f_map_frame2mod(pdu)))
-
-
-}
-//---------------------------------------------------------------------------
-function f_decode_CAN_frame_j1939(in octetstring data) return CAN_frame_j1939
-//---------------------------------------------------------------------------
-{
- log("f_insert_aux_hdr(data)", f_insert_aux_hdr(data));
- return f_map_mod2frame(decode_CAN_frame_j1939mod(f_insert_aux_hdr(data)))
-
-
+with {
+ variant (pdu) "CROSSTAG(
+ etp_dt, pgn = '00C700'O; //199
+ etp_cm, pgn = '00C800'O; //200
+ vt2ecu, pgn = '00E600'O; //230
+ ecu2vt, pgn = '00E700'O; //231
+ requestForAddressClaimed, pgn = '00EA00'O; //234
+ tp_dt, pgn = '00EB00'O; //235
+ tp_cm, pgn = '00EC00'O; //236
+ networkMessage, pgn = '00ED00'O; //237
+ // cannotClaimSourceAddress, pgn = '00EEFFFE'O; //238 where the SA is 'FE'O
+ // addressClaimed, pgn = '00EEFFXX'O; //238 where the SA is XX != FE!
+ addressClaimedOrCannotClaimSourceAddress, pgn = '00EEFF'O; //238, the SA determies
+ // if it is addressClaimed (SA != 'FE'O)
+ // or it is cannotClaimSourceAddress (SA == 'FE'O)
+ commandedAddress, pgn = '00FED8'O)" //254
}
diff --git a/demo/IsobusMessageTypes.ttcn b/demo/IsobusMessageTypes.ttcn
index e706f17..794f35d 100644
--- a/demo/IsobusMessageTypes.ttcn
+++ b/demo/IsobusMessageTypes.ttcn
@@ -9,8 +9,7 @@
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)" };
diff --git a/demo/IsobusNMMessageTypes.ttcn b/demo/IsobusNMMessageTypes.ttcn
index 3a4ed24..c110803 100644
--- a/demo/IsobusNMMessageTypes.ttcn
+++ b/demo/IsobusNMMessageTypes.ttcn
@@ -5,6 +5,7 @@
module IsobusNMMessageTypes {
+import from J1939 all
import from General_Types all
import from IsobusMessageTypes all
@@ -20,39 +21,22 @@
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
{
- NAME name
+ J1939_NAME_RECORD_REVERSE_BYTE_ENCODING name
+ // or alternatively
+ // J1939_NAME name
} with { variant "" }
type record AddressClaimed
{
- NAME name
+ J1939_NAME_RECORD_REVERSE_BYTE_ENCODING name
+ // or alternatively
+ // J1939_NAME name
} with { variant "" }
type record RequestForAddressClaimed {
@@ -62,8 +46,10 @@
type record CommandedAddress {
- NAME name,
- SourceAddress newSourceAddress
+ J1939_NAME_RECORD_REVERSE_BYTE_ENCODING name,
+ // or alternatively
+ // J1939_NAME name
+ SourceAddress newSourceAddress
} with { variant "" }
// --------- NetworkMessage -------------
@@ -129,7 +115,7 @@
{
INT1 maxTransferRate,
PGN pgn,
- NAME name,
+ J1939_NAME name,
OCT8 nameQualifier
} with {variant "" };
@@ -178,7 +164,7 @@
type record SA_NAME_pair
{
SourceAddress sourceAddress,
- NAME name
+ J1939_NAME name
} with {variant "" };
type record N_NTX_Response
@@ -327,7 +313,7 @@
{
Function msgFunction (192),
PortPair portPair,
- NAME nameOfCF
+ J1939_NAME nameOfCF
} with {
variant "" }
@@ -335,7 +321,7 @@
{
Function msgFunction (193),
PortPair portPair,
- NAME nameOfCF
+ J1939_NAME nameOfCF
} with {
variant "" }
diff --git a/demo/IsobusVTMessageTypes.ttcn b/demo/IsobusVTMessageTypes.ttcn
index ab0edba..b127d80 100644
--- a/demo/IsobusVTMessageTypes.ttcn
+++ b/demo/IsobusVTMessageTypes.ttcn
@@ -3,16 +3,6 @@
import from General_Types all
import from IsobusMessageTypes all
-external function encode_VT2ECU(in VT2ECU pdu) return octetstring
-with { extension "prototype(convert) encode(RAW)" }
-external function decode_VT2ECU(in octetstring data) return VT2ECU
-with { extension "prototype(convert) decode(RAW)" }
-
-external function encode_ECU2VT(in ECU2VT pdu) return octetstring
-with { extension "prototype(convert) encode(RAW)" }
-external function decode_ECU2VT(in octetstring data) return ECU2VT
-with { extension "prototype(convert) decode(RAW)" }
-
type INT1 VTfunction
type integer AnyObjectID (0..65535) with { variant "FIELDLENGTH(16)" }; // includes also 65535 as no object
@@ -62,9 +52,8 @@
e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
ValidObjectID objectID,
ValidObjectID parentObjectID,
- KeyNumberType keyNumber,
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ KeyNumberType keyNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SoftKeyActivationRes
{
@@ -72,9 +61,8 @@
e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
ValidObjectID objectID,
ValidObjectID parentObjectID,
- KeyNumberType keyNumber,
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ KeyNumberType keyNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_ButtonActivationReq_KeyAactivationCode {
buttonHasBeenUnlatchedorReleased (0),
@@ -89,9 +77,8 @@
e_ButtonActivationReq_KeyAactivationCode keyAactivationCode,
ValidObjectID objectID,
ValidObjectID parentObjectID,
- KeyNumberType buttonKeyCode,
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ KeyNumberType buttonKeyCode
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_ButtonActivationRes_KeyAactivationCode {
buttonHasBeenUnlatchedorReleased (0),
@@ -106,9 +93,8 @@
e_ButtonActivationRes_KeyAactivationCode keyAactivationCode,
ValidObjectID objectID,
ValidObjectID parentObjectID,
- KeyNumberType buttonKeyCode,
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ KeyNumberType buttonKeyCode
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_PointingEvent_touchState {
released (0), // version 4 and later
@@ -121,19 +107,15 @@
VTfunction vtfunction (2),
PositionType x_position,
PositionType y_position,
- e_PointingEvent_touchState touchState,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ e_PointingEvent_touchState touchState
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ e_PointingEvent_touchState touchState
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_VTOnUserLayoutHideShow_state {
hidden (0),
@@ -175,61 +157,41 @@
VTfunction vtfunction (3),
ValidObjectID objectID,
e_VTSelectInputObject_selection selection,
- VTSelectInputObject_Bitmask bitmask,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ VTSelectInputObject_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ e_VTSelectInputObject_selection selection
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ VTSelectInputObject_v4AndLater_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTSelectInputObjectRes {
VTfunction vtfunction (3),
ValidObjectID objectID,
e_VTSelectInputObject_selection selection,
- VTSelectInputObject_Bitmask bitmask,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ VTSelectInputObject_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ e_VTSelectInputObject_selection selection
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ VTSelectInputObject_v4AndLater_Bitmask bitmask
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTESC_ErrorCodes{
boolean noInputFieldIsSelected,
@@ -247,22 +209,13 @@
type record VTESCReq {
VTfunction vtfunction (4),
AnyObjectID objectID, // Object ID where input was aborted if no error code
- VTESC_ErrorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ VTESC_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTESCRes {
VTfunction vtfunction (4),
- AnyObjectID objectID, // Object ID where input was aborted if no error code
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ AnyObjectID objectID // Object ID where input was aborted if no error code
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTChangeNumericValueReq
{
@@ -304,13 +257,8 @@
type record VTChangeActiveMaskRes
{
VTfunction vtfunction (6),
- ValidObjectID activeMaskObjectID,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ValidObjectID activeMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTChangeSoftKeyMaskErrorCodes{
@@ -330,20 +278,15 @@
VTfunction vtfunction (7),
ValidObjectID dataOrAlarmMaskObjectID,
ValidObjectID softKeyMaskObjectID,
- VTChangeSoftKeyMaskErrorCodes errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ VTChangeSoftKeyMaskErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTChangeSoftKeyMaskRes
{
VTfunction vtfunction (7),
ValidObjectID dataOrAlarmMaskObjectID,
- ValidObjectID softKeyMaskObjectID,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ValidObjectID softKeyMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTChangeStringValueReq
{
@@ -361,11 +304,8 @@
VTfunction vtfunction (8),
OCT1 reserved2 ('FF'O),
OCT1 reserved3 ('FF'O),
- ValidObjectID inputStringOrStringVariableObjectID,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ValidObjectID inputStringOrStringVariableObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTOnUserLayoutHideShowReq
{
@@ -373,9 +313,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 "" };
+ e_VTOnUserLayoutHideShow_state state2 // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTOnUserLayoutHideShowRes
{
@@ -383,9 +323,8 @@
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 "" };
+ e_VTOnUserLayoutHideShow_state state2 // If the previous attribute is the NULL Object ID, this bit shall be set to false.
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTControlAudioSignalTerminationParameterTerminationCause
{
@@ -404,14 +343,8 @@
type record VTControlAudioSignalTerminationInd // version V4 or higher
{
VTfunction vtfunction (10),
- VTControlAudioSignalTerminationParameterTerminationCause terminationCause,
- 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 "" };
+ VTControlAudioSignalTerminationParameterTerminationCause terminationCause
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type octetstring ObjectPoolRecords with { variant "" };
@@ -423,15 +356,8 @@
type record EndOfObjectPoolReq
{
- VTfunction vtfunction (18),
- 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 "" };
+ VTfunction vtfunction (18)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record EndOfObjectPoolResErrorCodes
{
@@ -465,9 +391,8 @@
EndOfObjectPoolResErrorCodes errorCodes,
AnyObjectID parentObjectIDoFaultyObject, // set to NULL Object ID if there are no
AnyObjectID objectIDofFaultyObject, // set to NULL Object ID if there are no
- EndOfObjectPoolResObjectPoolErrorCodes objectPoolErrorCodes,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ EndOfObjectPoolResObjectPoolErrorCodes objectPoolErrorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTfunction32VT2ECU
{
@@ -552,15 +477,8 @@
type record ESCreq
{
- VTfunction vtfunction (146),
- 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 "" };
+ VTfunction vtfunction (146)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ESCerrorCodes
{
@@ -595,12 +513,8 @@
{
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 "" };
+ e_HideShowObject_state hideShow
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record HideShowObjectRes_errorCodes{
boolean referencesToMissingObjects,
@@ -619,11 +533,8 @@
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 "" };
+ HideShowObjectRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record VTfunction161VT2ECU
{
@@ -646,12 +557,8 @@
{
VTfunction vtfunction (161),
ValidObjectID objectID,
- e_EnableDisableObject_DisableEnable DisableEnable,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ e_EnableDisableObject_DisableEnable DisableEnable
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record EnableDisableObjectRes_errorCodes {
boolean reserved0 (false),
@@ -670,11 +577,8 @@
VTfunction vtfunction (161),
ValidObjectID objectID,
e_EnableDisableObject_DisableEnable DisableEnable,
- EnableDisableObjectRes_errorCodes errorCodes,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ EnableDisableObjectRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
@@ -688,12 +592,8 @@
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 "" };
+ e_SelectInputObjectReq_Option option
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_SelectInputObjectRes_Response {
objectReferencedByObjectIDisNotSelectedOrObjectIDisTheNULLobject (0),
@@ -716,12 +616,8 @@
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 "" };
+ e_SelectInputObjectRes_Response response
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ControlAudioSignalReq{
VTfunction vtfunction (163),
@@ -751,25 +647,14 @@
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 "" };
+ ControlAudioSignalRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SetAudioVolumeReq
{
VTfunction vtfunction (164),
- PercentType volumeInPercent,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ PercentType volumeInPercent
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SetAudioVolumeErrorCodes
{
@@ -787,14 +672,8 @@
type record SetAudioVolumeRes
{
VTfunction vtfunction (164),
- SetAudioVolumeErrorCodes 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 "" };
+ SetAudioVolumeErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeChildLocationReq
{
@@ -802,9 +681,8 @@
ValidObjectID parentObjectID,
ValidObjectID objectIDofObjectToMove,
DeltaPositionType relativeChangeInXposition,
- DeltaPositionType relativeChangeInYposition,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ DeltaPositionType relativeChangeInYposition
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeChildLocationRes_errorCodes
{
@@ -824,19 +702,16 @@
VTfunction vtfunction (165),
ValidObjectID parentObjectID,
ValidObjectID objectIDofObjectToMove,
- ChangeChildLocationRes_errorCodes errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeChildLocationRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeSizeReq
{
VTfunction vtfunction (166),
ValidObjectID objectIDofObjectToSize,
WidthType newWidth,
- HeightType newHeight,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ HeightType newHeight
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeSizeRes_errorCodes
@@ -856,23 +731,15 @@
{
VTfunction vtfunction (166),
ValidObjectID objectIDofObjectToSize,
- ChangeSizeRes_errorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeSizeRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeBackgroundColourReq
{
VTfunction vtfunction (167),
ValidObjectID objectIDofObjectToChange,
- ColorType newBackgroundColour,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ColorType newBackgroundColour
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeBackgroundColourRes_errorCodes {
boolean invalidObjectID,
@@ -891,11 +758,8 @@
VTfunction vtfunction (167),
ValidObjectID objectIDofObjectToChange,
ColorType newBackgroundColour,
- ChangeBackgroundColourRes_errorCodes errorCodes,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeBackgroundColourRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeNumericValueReq{
VTfunction vtfunction (168),
@@ -940,12 +804,8 @@
{
VTfunction vtfunction (169),
ValidObjectID objectID,
- ChangeEndPointRes_errorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeEndPointRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
@@ -980,12 +840,8 @@
{
VTfunction vtfunction (170),
ValidObjectID objectID,
- ChangeFontAttributesRes_errorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeFontAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeFontAttributesReq
{
@@ -994,9 +850,8 @@
ColorType fontColour,
FontSize fontSize,
FontType fontType,
- FontStyle fontStyle,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ FontStyle fontStyle
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeLineAttributesRes_errorCodes
{
@@ -1015,12 +870,8 @@
{
VTfunction vtfunction (171),
ValidObjectID objectID,
- ChangeLineAttributesRes_errorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeLineAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeLineAttributesReq
{
@@ -1028,9 +879,8 @@
ValidObjectID ObjectIDofObjectToChange,
ColorType lineColour,
LineWidth lineWidth,
- LineArt LineArt,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ LineArt LineArt
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeFillAttributesRes_errorCodes
{
@@ -1049,12 +899,8 @@
{
VTfunction vtfunction (172),
ValidObjectID objectID,
- ChangeFillAttributesRes_errorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangeFillAttributesRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeFillAttributesReq
{
@@ -1063,19 +909,15 @@
ColorType lineColour,
LineWidth lineWidth,
LineArt lineArt,
- ValidObjectID fillPatternObjectID,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ValidObjectID fillPatternObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeActiveMaskReq
{
VTfunction vtfunction (173),
ValidObjectID workingSetObjectID,
- ValidObjectID newActiveMaskObjectID,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ ValidObjectID newActiveMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeActiveMaskRes_errorCodes {
boolean invalidWorkingSetObjectID,
@@ -1092,13 +934,8 @@
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 "" };
+ ValidObjectID newActiveMaskObjectID
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_ChangeSoftKeyMaskReq_MaskType {
Data (1),
@@ -1110,10 +947,8 @@
VTfunction vtfunction (174),
e_ChangeSoftKeyMaskReq_MaskType maskType,
ValidObjectID DataOrAlarmMaskObjectID,
- ValidObjectID NewSoftKeyMaskObjectID,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)}
-with {variant "" };
+ ValidObjectID NewSoftKeyMaskObjectID
+ } with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeSoftKeyMaskRes_errorCodes {
boolean invalidDataOrAlarmMaskObjectID,
@@ -1132,9 +967,8 @@
VTfunction vtfunction (174),
ValidObjectID DataOrAlarmMaskObjectID,
ValidObjectID NewSoftKeyMaskObjectID,
- ChangeSoftKeyMaskRes_errorCodes errorCodes,
- OCT1 reserved8 ('FF'O)}
-with {variant "" };
+ ChangeSoftKeyMaskRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeAttributeReq
{
@@ -1162,12 +996,8 @@
VTfunction vtfunction (175),
ValidObjectID objectID,
AttributeID attributeID,
- ChangeAttributeRes_errorCodes errorCodes,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-}
-with {variant "" };
+ ChangeAttributeRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangePriorityRes_errorCodes {
boolean invalidObjectID,
@@ -1186,20 +1016,15 @@
VTfunction vtfunction (176),
ValidObjectID objectIDofArlarmMask,
Priority newPriority,
- ChangePriorityRes_errorCodes errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangePriorityRes_errorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangePriorityReq
{
VTfunction vtfunction (176),
ValidObjectID objectIDofArlarmMask,
- Priority newPriority,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ Priority newPriority
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeListItemRes_errorCodes {
boolean invalidObjectID, // Invalid Input List object ID or Output List object ID ,
@@ -1220,9 +1045,8 @@
ValidObjectID objectID, // of an Input List object, Output List object, Animation object,
// or External Object Definition object
Index listIndex, // (items are numbered 0-n)
- AnyObjectID newObjectID, // or 0xFFFF to set empty item
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ AnyObjectID newObjectID // or 0xFFFF to set empty item
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeListItemReq
{
@@ -1230,22 +1054,13 @@
ValidObjectID objectID, // of an Input List object, Output List object, Animation object,
// or External Object Definition object
Index listIndex, // (items are numbered 0-n)
- AnyObjectID newObjectID, // or 0xFFFF to set empty item
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ AnyObjectID newObjectID // or 0xFFFF to set empty item
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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 "" };
+ VTfunction vtfunction (178)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record DeleteObjectPoolRes_ErrorCodes {
boolean deletionError,
@@ -1261,14 +1076,8 @@
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 "" };
+ DeleteObjectPoolRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeStringValueReq
{
@@ -1300,10 +1109,8 @@
OCT1 reserved2 ('FF'O),
OCT1 reserved3 ('FF'O),
ValidObjectID objectID,
- ChangeStringValueRes_ErrorCodes errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with {variant "" };
+ ChangeStringValueRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeChildPositionReq
{
@@ -1351,14 +1158,8 @@
type record ChangeObjectLabelRes
{
VTfunction vtfunction (181),
- ChangeObjectLabelRes_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 "" };
+ ChangeObjectLabelRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangeObjectLabelReq
{
@@ -1393,13 +1194,8 @@
{
VTfunction vtfunction (182),
ValidObjectID objectIDofTheOutputPolygonObjectToChange,
- ChangePolygonPointRes_ErrorCodes errorCodes,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ChangePolygonPointRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ChangePolygonPointReq
{
@@ -1439,9 +1235,8 @@
VTfunction vtfunction (183),
ValidObjectID objectIDofaOutputPolygonObjectToScale,
WidthType newWidthAttribute,
- HeightType newHeightAttribute,
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ HeightType newHeightAttribute
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record GraphicsContextRes_ErrorCodes {
boolean invalidObjectIDorObjectIsNotAGraphics,
@@ -1460,11 +1255,8 @@
VTfunction vtfunction (184),
ValidObjectID objectIDofAGraphicsContextObject,
INT1 subcommandID,
- GraphicsContextRes_ErrorCodes errorCodes,
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ GraphicsContextRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SetGraphicsCursor
{
@@ -1694,12 +1486,8 @@
{
VTfunction vtfunction (185),
ValidObjectID objectID,
- AttributeID AttributeIDofTheObject,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ AttributeID AttributeIDofTheObject
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SelectColourMapRes_ErrorCodes {
boolean invalidObjectID,
@@ -1717,48 +1505,25 @@
{
VTfunction vtfunction (186),
ValidObjectID objectIDofTheColourMapObject,
- SelectColourMapRes_ErrorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ SelectColourMapRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record SelectColourMapReq
{
VTfunction vtfunction (186),
- ValidObjectID ObjectIDofTheColourMapObjectOrFFFFtoRestoreTheDefaultColourTable,
+ ValidObjectID ObjectIDofTheColourMapObjectOrFFFFtoRestoreTheDefaultColourTable
// (See A.3 VT standard colour palette)
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record IdentifyVTRes
{
- VTfunction vtfunction (187),
- 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 "" };
+ VTfunction vtfunction (187)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record IdentifyVTReq
{
- VTfunction vtfunction (187),
- 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 "" };
+ VTfunction vtfunction (187)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExecuteExtendedMacroRes_ErrorCodes {
boolean objectIDdoesNotExist,
@@ -1776,23 +1541,14 @@
{
VTfunction vtfunction (188),
ValidObjectID ObjectIDofMacroObject,
- ExecuteExtendedMacroRes_ErrorCodes errorCodes,
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ExecuteExtendedMacroRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExecuteExtendedMacroReq
{
VTfunction vtfunction (188),
- ValidObjectID ObjectIDofMacroObject,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ValidObjectID ObjectIDofMacroObject
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record LockUnlockMaskRes_ErrorCodes {
@@ -1811,13 +1567,8 @@
{
VTfunction vtfunction (189),
e_LockUnlockMaskReqCommand command,
- LockUnlockMaskRes_ErrorCodes errorCodes,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ LockUnlockMaskRes_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_LockUnlockMaskReqCommand {
unlockDataMaskOrUserLayoutDataMask (0),
@@ -1830,10 +1581,8 @@
VTfunction vtfunction (189),
e_LockUnlockMaskReqCommand command,
ValidObjectID ObjectIDofTheDataMaskOrUserLayoutDataMaskToLockOrUnlock,
- INT2 lockTimeout,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ INT2 lockTimeout
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExecuteMacroReq_ErrorCodes {
boolean objectIDdoesNotExist,
@@ -1851,34 +1600,21 @@
{
VTfunction vtfunction (190),
ValidObjectID objectIDofMacroObject,
- ExecuteMacroReq_ErrorCodes errorCodes,
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ExecuteMacroReq_ErrorCodes errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExecuteMacroReq
{
VTfunction vtfunction (190),
- ValidObjectID objectIDofMacroObject,
- 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 "" };
+ ValidObjectID objectIDofMacroObject
+ } with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record GetMemoryReq
{
- VTfunction vtfunction (194),
+ VTfunction vtfunction (192),
OCT1 reserved2 ('FF'O),
- INT3 memoryRequired,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ INT3 memoryRequired
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_GetMemoryResVersionNumber {
compliantWithHannoverAgritechnica_2001_limitedfeatureSet (0),
@@ -1896,51 +1632,32 @@
type record GetMemoryRes
{
- VTfunction vtfunction (194),
+ VTfunction vtfunction (192),
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 "" };
+ e_GetMemoryResStatus status
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
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)
-} with { variant "" };
+ VTfunction vtfunction (194)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record GetNumberOfSoftKeysRes
{
- VTfunction vtfunction (192),
- OCT1 navigationSoftKeys_,
+ VTfunction vtfunction (194),
+ OCT1 navigationSoftKeys,
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 x_dots,
OCT1 y_dots,
- OCT1 numberOfVirtualSoftKeys_,
- OCT1 numberOfPhysicalSoftKeys_
+ 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)
-} with { variant "" };
+ VTfunction vtfunction (195)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record TextFontDataRes_small_font_sizes {
@@ -1991,17 +1708,87 @@
TextFontDataRes_type_attribute type_attribute
} 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)}
+with {variant "PADDING(octet)"}
+
+
+type record GetSupportedWidecharsReq
+{
+ VTfunction vtfunction (193),
+ e_Codeplane codeplane,
+ OCT2 firstWideCharInInquiryRange,
+ OCT2 lastWideCharInInquiryRange
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record WideCharRange
+{
+ 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
+} with {
+ variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
+ variant (numberOfRanges) "UNIT(elements)"}
+
+type record GetWindowMaskDataReq
+{
+ VTfunction vtfunction (196)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetWindowMaskDataRes
+{
+ VTfunction vtfunction (196),
+ OCT1 BackgroundColourVTUserLayoutDataMasks,
+ OCT1 BackgroundColourVTKeyCells
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetSupportedObjectsReq
+{
+ VTfunction vtfunction (197)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record GetSupportedObjectsRes
+{
+ VTfunction vtfunction (197),
+ INT2 numberOfBytesToFollow,
+ OCT1 supportedObjectTypes
+} with {
+ variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
+ variant (numberOfBytesToFollow) "UNIT(elements)"}
+
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)
-} with { variant "" };
+ VTfunction vtfunction (199)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_GetHardwareResGraphicType {
@@ -2034,102 +1821,6 @@
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)}
-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)
-} with { variant "" };
-
-type record WideCharRange
-{
- 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
-} with {
- 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)
-} 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)
-} 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)
-} with { variant "" };
-
-type record GetSupportedObjectsRes
-{
- VTfunction vtfunction (197),
- INT2 numberOfBytesToFollow,
- OCT1 supportedObjectTypes
-} with {
- variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
- variant (numberOfBytesToFollow) "UNIT(elements)"}
-
type record StoreVersionRes_errorCodesType {
boolean reserved0,
boolean versionLabelIsNotCorrect,
@@ -2141,6 +1832,12 @@
boolean reserved7
} with {variant ""}
+type record StoreVersionReq
+{
+ VTfunction vtfunction (208),
+ VersionLabel7Char versionLabel
+} with { variant "" };
+
type record StoreVersionRes
{
VTfunction vtfunction (208),
@@ -2148,16 +1845,8 @@
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 reserved5 ('FF'O),
- StoreVersionRes_errorCodesType errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
-
-type record StoreVersionReq
-{
- VTfunction vtfunction (208),
- VersionLabel7Char versionLabel
-} with { variant "" };
+ StoreVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record WorkingSetMaintenanceBitMask {
boolean initiatingWorkingSetMaintenance,
@@ -2204,10 +1893,8 @@
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 "" };
+ LoadVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record DeleteVersionRes_errorCodesType {
boolean reserved0,
@@ -2227,10 +1914,8 @@
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 reserved5 ('FF'O),
- DeleteVersionRes_errorCodesType errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ DeleteVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record DeleteVersionReq
{
@@ -2254,15 +1939,8 @@
type record ExtendedGetVersionsReq
{
- VTfunction vtfunction (211),
- 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 "" };
+ VTfunction vtfunction (211)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExtendedStoreVersionRes_errorCodesType {
boolean reserved0,
@@ -2282,10 +1960,8 @@
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 reserved5 ('FF'O),
- ExtendedStoreVersionRes_errorCodesType errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ExtendedStoreVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExtendedStoreVersionReq
{
@@ -2311,10 +1987,8 @@
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 reserved5 ('FF'O),
- ExtendedLoadVersionRes_errorCodesType errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ExtendedLoadVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExtendedLoadVersionReq
{
@@ -2340,10 +2014,8 @@
OCT1 reserved3 ('FF'O),
OCT1 reserved4 ('FF'O),
OCT1 reserved5 ('FF'O),
- ExtendedDeleteVersionRes_errorCodesType errorCodes,
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
-} with { variant "" };
+ ExtendedDeleteVersionRes_errorCodesType errorCodes
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record ExtendedDeleteVersionReq
{
@@ -2353,21 +2025,16 @@
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 "" };
+ VTfunction vtfunction (223)
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
+
+type record of VersionLabel7Char VersionLabel7Chars
type record GetVersionsRes
{
VTfunction vtfunction (224),
INT1 numberOfVersionStrings,
- VersionLabel7Char versionStrings
+ VersionLabel7Chars versionStrings
}
with{
variant (numberOfVersionStrings) "LENGTHTO(versionStrings)";
@@ -2377,39 +2044,21 @@
type record VTUnsupportedVTFunctionInd
{
VTfunction vtfunction (253),
- OCT1 unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
- 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 "" };
+ OCT1 unsupportedVTfunction // should be VTfunction, but since unsupported is OCT1
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type record UnsupportedVTFunctionInd
{
VTfunction vtfunction (253),
- OCT1 unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
- OCT1 reserved3 ('FF'O),
- OCT1 reserved4 ('FF'O),
- OCT1 reserved5 ('FF'O),
- OCT1 reserved6 ('FF'O),
- OCT1 reserved7 ('FF'O),
- OCT1 reserved8 ('FF'O)
+ OCT1 unsupportedVTfunction // should be VTfunction, but since unsupported is OCT1
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
-} with { variant "" };
-
-type record WorkingSetMaintenanceReq
+type record WorkingSetMaintenanceInd
{
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 "" };
+ e_WorkingSetMaintenanceVersionNumber versionNumber
+} with {variant "PADDING(88), PADDING_PATTERN('11111111'B)"}
type enumerated e_BusyCodes {
vtIsBusyUpdatingVisibleMask (0),
@@ -2422,7 +2071,7 @@
vtIsOutOfMemory (7)}
with {variant "PADDING(octet)"}
-type record VTStatusReq
+type record VTStatusInd
{
VTfunction vtfunction (254),
OCT1 sourceAddressOfActiveWorkingSetMaster,
@@ -2487,10 +2136,10 @@
LockUnlockMaskRes lockUnlockMaskRes,
ExecuteMacroRes executeMacroRes,
GetMemoryRes getMemoryRes,
+ GetSupportedWidecharsRes getSupportedWidecharsRes,
GetNumberOfSoftKeysRes getNumberOfSoftKeysRes,
GetTextFontDataRes getTextFontDataRes,
GetHardwareRes getHardwareRes,
- GetSupportedWidecharsRes getSupportedWidecharsRes,
GetWindowMaskDataRes getWindowMaskDataRes,
GetSupportedObjectsRes getSupportedObjectsRes,
StoreVersionRes storeVersionRes,
@@ -2502,7 +2151,7 @@
ExtendedDeleteVersionRes extendedDeleteVersionRes,
GetVersionsRes getVersionsRes,
VTUnsupportedVTFunctionInd vtUnsupportedVTFunctionInd,
- VTStatusReq vtStatusReq
+ VTStatusInd vtStatusInd
}
with {variant "TAG (
// put all VT2ECU messages here
@@ -2556,10 +2205,10 @@
lockUnlockMaskRes, vtfunction = 189;
executeMacroRes, vtfunction = 190;
getMemoryRes, vtfunction = 192;
+ getSupportedWidecharsRes, vtfunction = 193;
getNumberOfSoftKeysRes, vtfunction = 194;
getTextFontDataRes, vtfunction = 195;
getHardwareRes, vtfunction = 199;
- getSupportedWidecharsRes, vtfunction = 193;
getWindowMaskDataRes, vtfunction = 196;
getSupportedObjectsRes, vtfunction = 197;
storeVersionRes, vtfunction = 208;
@@ -2571,7 +2220,7 @@
extendedDeleteVersionRes, vtfunction = 214;
getVersionsRes, vtfunction = 224;
vtUnsupportedVTFunctionInd, vtfunction = 253;
- vtStatusReq, vtfunction = 254;)"
+ vtStatusInd, vtfunction = 254;)"
}
type union ECU2VT
@@ -2586,7 +2235,7 @@
VTESCRes vtESCRes,
VTChangeNumericValueRes vtChangeNumericValueRes,
VTChangeActiveMaskRes vtChangeActiveMaskRes,
- VTChangeSoftKeyMaskReq vtChangeSoftKeyMaskReq,
+ VTChangeSoftKeyMaskRes vtChangeSoftKeyMaskRes,
VTChangeStringValueRes vtChangeStringValueRes,
VTOnUserLayoutHideShowRes vtOnUserLayoutHideShowRes,
ObjectPoolTransferInd objectPoolTransferInd,
@@ -2631,10 +2280,10 @@
LockUnlockMaskReq lockUnlockMaskReq,
ExecuteMacroReq executeMacroReq,
GetMemoryReq getMemoryReq,
+ GetSupportedWidecharsReq getSupportedWidecharsReq,
GetNumberOfSoftKeysReq getNumberOfSoftKeysReq,
GetTextFontDataReq getTextFontDataReq,
GetHardwareReq getHardwareReq,
- GetSupportedWidecharsReq getSupportedWidecharsReq,
GetWindowMaskDataReq getWindowMaskDataReq,
GetSupportedObjectsReq getSupportedObjectsReq,
StoreVersionReq storeVersionReq,
@@ -2646,7 +2295,7 @@
ExtendedDeleteVersionReq extendedDeleteVersionReq,
GetVersionsReq getVersionsReq,
UnsupportedVTFunctionInd unsupportedVTFunctionInd,
- WorkingSetMaintenanceReq workingSetMaintenanceReq
+ WorkingSetMaintenanceInd workingSetMaintenanceInd
// put all ECU2VT response messages here
//Dummy_ECU2VT_Res dummy_ECU2VT_Res
}
@@ -2659,7 +2308,7 @@
vtESCRes, vtfunction = 4;
vtChangeNumericValueRes, vtfunction = 5;
vtChangeActiveMaskRes, vtfunction = 6;
- vtChangeSoftKeyMaskReq, vtfunction = 7;
+ vtChangeSoftKeyMaskRes, vtfunction = 7;
vtChangeStringValueRes, vtfunction = 8;
vtOnUserLayoutHideShowRes, vtfunction = 9;
objectPoolTransferInd, vtfunction = 17;
@@ -2704,10 +2353,10 @@
lockUnlockMaskReq, vtfunction = 189;
executeMacroReq, vtfunction = 190;
getMemoryReq, vtfunction = 192;
+ getSupportedWidecharsReq, vtfunction = 193;
getNumberOfSoftKeysReq, vtfunction = 194;
getTextFontDataReq, vtfunction = 195;
getHardwareReq, vtfunction = 199;
- getSupportedWidecharsReq, vtfunction = 193;
getWindowMaskDataReq, vtfunction = 196;
getSupportedObjectsReq, vtfunction = 197;
storeVersionReq, vtfunction = 208;
@@ -2719,7 +2368,7 @@
extendedDeleteVersionReq, vtfunction = 214;
getVersionsReq, vtfunction = 223;
unsupportedVTFunctionInd, vtfunction = 253;
- workingSetMaintenanceReq, vtfunction = 255;
+ workingSetMaintenanceInd, vtfunction = 255;
) "
}
diff --git a/demo/IsobusVT_Templates.ttcn b/demo/IsobusVT_Templates.ttcn
new file mode 100644
index 0000000..e9d8cd5
--- /dev/null
+++ b/demo/IsobusVT_Templates.ttcn
@@ -0,0 +1,524 @@
+module IsobusVT_Templates {
+
+import from IsobusMessageTypes all
+import from IsobusVTMessageTypes all
+import from IsobusCMMessageTypes all
+import from IsobusNMMessageTypes all
+import from Isobus all
+import from General_Types all
+import from J1939 all
+
+template J1939PDU_with_NAME t_J1939PDU_with_NAME(template J1939_ADDR p_addr, template J1939_NAME p_name, template J1939_messageWithPGN p_pdu)
+:= {
+ addr := p_addr,
+ name := p_name,
+ pdu := p_pdu
+}
+
+template Isobus.J1939_messageWithPGN t_ButtonActivationReq(
+ template e_ButtonActivationReq_KeyAactivationCode p_keyAactivationCode,
+ template ValidObjectID p_objectID,
+ template ValidObjectID p_parentObjectID,
+ template KeyNumberType p_buttonKeyCode)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {buttonActivationReq := {
+ vtfunction := 1,
+ keyAactivationCode := p_keyAactivationCode,
+ objectID := p_objectID,
+ parentObjectID := p_parentObjectID,
+ buttonKeyCode := p_buttonKeyCode
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_ButtonActivationRes (
+ template e_ButtonActivationRes_KeyAactivationCode p_keyAactivationCode,
+ template ValidObjectID p_objectID,
+ template ValidObjectID p_parentObjectID,
+ template KeyNumberType p_buttonKeyCode
+)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {buttonActivationRes := {
+ vtfunction := 1,
+ keyAactivationCode := p_keyAactivationCode,
+ objectID := p_objectID,
+ parentObjectID := p_parentObjectID,
+ buttonKeyCode := p_buttonKeyCode
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_PointingEventReq (
+ template PositionType p_x_position,
+ template PositionType p_y_position,
+ template e_PointingEvent_touchState p_touchState)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {pointingEventReq := {
+ vtfunction := 2,
+ x_position := p_x_position,
+ y_position := p_y_position,
+ touchState := p_touchState
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_PointingEventRes (
+ template PositionType p_x_position,
+ template PositionType p_y_position,
+ template e_PointingEvent_touchState p_touchState)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {pointingEventRes := {
+ vtfunction := 2,
+ x_position := p_x_position,
+ y_position := p_y_position,
+ touchState := p_touchState
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTSelectInputObjectReq (
+ template ValidObjectID p_objectID,
+ template e_VTSelectInputObject_selection p_selection,
+ template boolean p_objectIsOpenForDataInput,
+ template boolean p_reserved
+ // p_reserved for v3 or earlier: true , for v4 and later: false
+) := {pgn := '00E600'O, pdu := {vt2ecu := {vtSelectInputObjectReq := {
+ vtfunction := 3,
+ objectID := p_objectID,
+ selection := p_selection,
+ bitmask := {
+ objectIsOpenForDataInput := p_objectIsOpenForDataInput,
+ reserved1 := p_reserved,
+ reserved2 := p_reserved,
+ reserved3 := p_reserved,
+ reserved4 := p_reserved,
+ reserved5 := p_reserved,
+ reserved6 := p_reserved,
+ reserved7 := p_reserved}
+ }}}}
+
+//template VTSelectInputObjectReq_v3AndPrior t_VTSelectInputObjectReq_v3AndPrior (
+// template ValidObjectID p_objectID,
+// template e_VTSelectInputObject_selection p_selection) := {
+// vtfunction := 3,
+// objectID := p_objectID,
+// selection := p_selection,
+// reserved5 := 'FF'O,
+// reserved6 := 'FF'O,
+// reserved7 := 'FF'O,
+// reserved8 := 'FF'O
+//}
+
+//template VTSelectInputObjectReq_v4AndLater t_VTSelectInputObjectReq_v4AndLater (
+// template ValidObjectID p_objectID,
+// template e_VTSelectInputObject_selection p_selection,
+// template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
+// vtfunction := 3,
+// objectID := p_objectID,
+// selection := p_selection,
+// bitmask := p_bitmask,
+// reserved6 := 'FF'O,
+// reserved7 := 'FF'O,
+// reserved8 := 'FF'O
+//}
+
+template Isobus.J1939_messageWithPGN t_VTSelectInputObjectRes(
+ template ValidObjectID p_objectID,
+ template e_VTSelectInputObject_selection p_selection,
+ template boolean p_objectIsOpenForDataInput,
+ template boolean p_reserved
+ // p_reserved for v3 or earlier: true , for v4 and later: false
+) := {pgn := '00E700'O, pdu := {ecu2vt := {vtSelectInputObjectRes := {
+ vtfunction := 3,
+ objectID := p_objectID,
+ selection := p_selection,
+ bitmask := {
+ objectIsOpenForDataInput := p_objectIsOpenForDataInput,
+ reserved1 := p_reserved,
+ reserved2 := p_reserved,
+ reserved3 := p_reserved,
+ reserved4 := p_reserved,
+ reserved5 := p_reserved,
+ reserved6 := p_reserved,
+ reserved7 := p_reserved}
+ }}}}
+
+//template VTSelectInputObjectRes_v4AndPrior t_VTSelectInputObjectRes_v4AndPrior(
+// template ValidObjectID p_objectID,
+// template e_VTSelectInputObject_selection p_selection) := {
+// vtfunction := 3,
+// objectID := p_objectID,
+// selection := p_selection
+//}
+
+//template VTSelectInputObjectRes_v5AndLater t_VTSelectInputObjectRes_v5AndLater(
+// template ValidObjectID p_objectID,
+// template e_VTSelectInputObject_selection p_selection,
+// template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
+// vtfunction := 3,
+// objectID := p_objectID,
+// selection := p_selection,
+// bitmask := p_bitmask
+//}
+
+template Isobus.J1939_messageWithPGN t_VTESCReq (
+ template AnyObjectID p_objectID,
+ template VTESC_ErrorCodes p_errorCodes)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtESCReq := {
+ vtfunction := 4,
+ objectID := p_objectID,
+ errorCodes := p_errorCodes
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTESCRes (
+ template AnyObjectID p_objectID)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtESCRes := {
+ vtfunction := 4,
+ objectID := p_objectID
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeNumericValueReq (
+ template ValidObjectID p_objectID,
+ template OCT4 p_value)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeNumericValueReq := {
+ vtfunction := 5,
+ objectID := p_objectID,
+ reserved4 := 'FF'O,
+ value_ := p_value
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeNumericValueRes (
+ template ValidObjectID p_objectID,
+ template OCT4 p_value)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeNumericValueRes := {
+ vtfunction := 5,
+ objectID := p_objectID,
+ reserved4 := 'FF'O,
+ value_ := p_value
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeActiveMaskReq (
+ template ValidObjectID p_activeMaskOrWindowMaskOrKeyGroupObjectID,
+ template VTChangeActiveMasErrorcodes p_errorCodes,
+ template ValidObjectID p_objectIDcontainingError,
+ template ValidObjectID p_parentObjectIDofErrorObjectID)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeActiveMaskReq := {
+ vtfunction := 6,
+ activeMaskOrWindowMaskOrKeyGroupObjectID := p_activeMaskOrWindowMaskOrKeyGroupObjectID,
+ errorCodes := p_errorCodes,
+ objectIDcontainingError := p_objectIDcontainingError,
+ parentObjectIDofErrorObjectID := p_parentObjectIDofErrorObjectID
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeActiveMaskRes (
+ template ValidObjectID p_activeMaskObjectID)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeActiveMaskRes := {
+ vtfunction := 6,
+ activeMaskObjectID := p_activeMaskObjectID
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeSoftKeyMaskReq(
+ template ValidObjectID p_dataOrAlarmMaskObjectID,
+ template ValidObjectID p_softKeyMaskObjectID,
+ template VTChangeSoftKeyMaskErrorCodes p_errorCodes)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeSoftKeyMaskReq := {
+ vtfunction := 7,
+ dataOrAlarmMaskObjectID := p_dataOrAlarmMaskObjectID,
+ softKeyMaskObjectID := p_softKeyMaskObjectID,
+ errorCodes := p_errorCodes
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeSoftKeyMaskRes(
+ template ValidObjectID p_dataOrAlarmMaskObjectID,
+ template ValidObjectID p_softKeyMaskObjectID)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeSoftKeyMaskRes := {
+ vtfunction := 7,
+ dataOrAlarmMaskObjectID := p_dataOrAlarmMaskObjectID,
+ softKeyMaskObjectID := p_softKeyMaskObjectID
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeStringValueReq (
+ template ValidObjectID p_inputStringOrStringVariableObjectID,
+ template INT1 p_numberOfBytes,
+ template octetstring p_enteredStringValue)
+:= {pgn := '00E600'O, pdu := {vt2ecu := {vtChangeStringValueReq := {
+ vtfunction := 8,
+ inputStringOrStringVariableObjectID := p_inputStringOrStringVariableObjectID,
+ numberOfBytes := lengthof(p_enteredStringValue),
+ enteredStringValue := p_enteredStringValue
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTChangeStringValueRes (
+ template ValidObjectID p_inputStringOrStringVariableObjectID)
+:= {pgn := '00E700'O, pdu := {ecu2vt := {vtChangeStringValueRes := {
+ vtfunction := 8,
+ reserved2 := 'FF'O,
+ reserved3 := 'FF'O,
+ inputStringOrStringVariableObjectID := p_inputStringOrStringVariableObjectID
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_ObjectPoolTransferInd(
+ template ObjectPoolRecords p_objectPoolRecords)
+:= {pgn := '00E700'O,
+ pdu := {ecu2vt := {objectPoolTransferInd := {
+ vtfunction := 17,
+ objectPoolRecords := p_objectPoolRecords
+ }}}
+}
+
+template Isobus.J1939_messageWithPGN t_EndOfObjectPoolReq
+:= {pgn := '00E700'O,
+ pdu := {ecu2vt := {endOfObjectPoolReq := {
+ vtfunction := 18
+ }}}
+}
+
+
+template Isobus.J1939_messageWithPGN t_EndOfObjectPoolRes (
+ template EndOfObjectPoolResErrorCodes p_errorCodes,
+ template AnyObjectID p_parentObjectIDoFaultyObject,
+ template AnyObjectID p_objectIDofFaultyObject,
+ template EndOfObjectPoolResObjectPoolErrorCodes p_objectPoolErrorCodes
+):= {pgn := '00E600'O,
+ pdu := {vt2ecu := {endOfObjectPoolRes := {
+ vtfunction := 18,
+ errorCodes := p_errorCodes,
+ parentObjectIDoFaultyObject := p_parentObjectIDoFaultyObject, // set to NULL Object ID if there are no
+ objectIDofFaultyObject := p_objectIDofFaultyObject, // set to NULL Object ID if there are no
+ objectPoolErrorCodes := p_objectPoolErrorCodes
+ }}}
+}
+
+template Isobus.J1939_messageWithPGN t_GetMemoryReq(
+ template INT3 p_memoryRequired)
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {getMemoryReq := {
+ vtfunction := 192,
+ reserved2 := 'FF'O,
+ memoryRequired := p_memoryRequired
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_GetMemoryRes(
+ template e_GetMemoryResVersionNumber p_versionNumber,
+ template e_GetMemoryResStatus p_status)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getMemoryRes := {
+ vtfunction := 192,
+ versionNumber := p_versionNumber,
+ status := p_status
+ }}}}
+
+
+template Isobus.J1939_messageWithPGN t_GetSupportedWidecharsReq(
+ template e_Codeplane p_codeplane,
+ template OCT2 p_firstWideCharInInquiryRange,
+ template OCT2 p_lastWideCharInInquiryRange)
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := { getSupportedWidecharsReq := {
+ vtfunction := 193,
+ codeplane := p_codeplane,
+ firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
+ lastWideCharInInquiryRange := p_lastWideCharInInquiryRange
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_GetSupportedWidecharsRes(
+ template e_Codeplane p_codeplane,
+ template OCT2 p_firstWideCharInInquiryRange,
+ template OCT2 p_lastWideCharInInquiryRange,
+ template INT1 p_numberOfRanges,
+ WideCharRangeArray p_wideCharRangeArray)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getSupportedWidecharsRes := {
+ vtfunction := 193,
+ codeplane := p_codeplane,
+ firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
+ lastWideCharInInquiryRange := p_lastWideCharInInquiryRange,
+ numberOfRanges := p_numberOfRanges,
+ wideCharRangeArray := p_wideCharRangeArray
+ }}}}
+
+
+template Isobus.J1939_messageWithPGN t_GetNumberOfSoftKeysReq
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {getNumberOfSoftKeysReq := {
+ vtfunction := 194
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_GetNumberOfSoftKeysRes(
+ template OCT1 p_navigationSoftKeys,
+ template OCT1 p_x_dots,
+ template OCT1 p_y_dots,
+ template OCT1 p_numberOfVirtualSoftKeys,
+ template OCT1 p_numberOfPhysicalSoftKeys
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getNumberOfSoftKeysRes := {
+ vtfunction := 194,
+ navigationSoftKeys := p_navigationSoftKeys,
+ reserved3 := 'FF'O,
+ reserved4 := 'FF'O,
+ x_dots := p_x_dots,
+ y_dots := p_y_dots,
+ numberOfVirtualSoftKeys := p_numberOfVirtualSoftKeys,
+ numberOfPhysicalSoftKeys := p_numberOfPhysicalSoftKeys
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_GetTextFontDataReq
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {getTextFontDataReq := {
+ vtfunction := 195
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_GetTextFontDataRes(
+ template TextFontDataRes_small_font_sizes p_small_font_sizes,
+ template TextFontDataRes_large_font_sizes p_large_font_sizes,
+ template TextFontDataRes_type_attribute p_type_attribute
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getTextFontDataRes := {
+ vtfunction := 195,
+ reserved2 := 'FF'O,
+ reserved3 := 'FF'O,
+ reserved4 := 'FF'O,
+ reserved5 := 'FF'O,
+ small_font_sizes := p_small_font_sizes,
+ large_font_sizes := p_large_font_sizes,
+ type_attribute := p_type_attribute
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_GetHardwareReq
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {getHardwareReq := {
+ vtfunction := 199
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_GetHardwareRes(
+ template BootTimeType p_bootTimeInSeconds,
+ template e_GetHardwareResGraphicType p_graphicType,
+ template GetHardwareResHardwareType p_hardware,
+ template INT2 p_xPixels,
+ template INT2 p_yPixels
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getHardwareRes := {
+ vtfunction := 199,
+ bootTimeInSeconds := p_bootTimeInSeconds, // 255 for information not available
+ graphicType := p_graphicType,
+ hardware := p_hardware,
+ xPixels := p_xPixels,
+ yPixels := p_yPixels
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_StoreVersionReq(VersionLabel7Char p_versionLabel)
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {storeVersionReq := {
+ vtfunction := 208,
+ versionLabel := p_versionLabel
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_StoreVersionRes(
+ StoreVersionRes_errorCodesType p_errorCodes
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {storeVersionRes := {
+ vtfunction := 208,
+ reserved2 := 'FF'O,
+ reserved3 := 'FF'O,
+ reserved4 := 'FF'O,
+ reserved5 := 'FF'O,
+ errorCodes := p_errorCodes
+ }}}}
+
+
+template Isobus.J1939_messageWithPGN t_LoadVersionReq(VersionLabel7Char p_versionLabel)
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {loadVersionReq := {
+ vtfunction := 209,
+ versionLabel := p_versionLabel
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_LoadVersionRes(
+ template LoadVersionRes_errorCodesType p_errorCodes
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {loadVersionRes := {
+ vtfunction := 209,
+ reserved2 := 'FF'O,
+ reserved3 := 'FF'O,
+ reserved4 := 'FF'O,
+ reserved5 := 'FF'O,
+ errorCodes := p_errorCodes
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_GetVersionsReq
+:= {
+ pgn := '00E700'O,
+ pdu := {ecu2vt := {getVersionsReq := {
+ vtfunction := 223
+ }
+ }
+ }
+}
+
+template Isobus.J1939_messageWithPGN t_GetVersionsRes(
+ template INT1 p_numberOfVersionStrings,
+ template VersionLabel7Chars p_versionStrings
+)
+:= {
+ pgn := '00E600'O,
+ pdu := {vt2ecu := {getVersionsRes := {
+ vtfunction := 224,
+ numberOfVersionStrings := p_numberOfVersionStrings,
+ versionStrings := p_versionStrings
+ }}}}
+
+template Isobus.J1939_messageWithPGN t_VTStatusInd(
+ template OCT1 p_sourceAddressOfActiveWorkingSetMaster,
+ template OCT2 p_objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+ template OCT2 p_objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+ template e_BusyCodes p_vtBusyCodes,
+ template OCT1 p_vtFunctionCode) := {pgn := '00E600'O,
+ pdu := {vt2ecu := {vtStatusInd := {
+ vtfunction := 254,
+ sourceAddressOfActiveWorkingSetMaster := p_sourceAddressOfActiveWorkingSetMaster,
+ objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := p_objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
+ objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet := p_objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
+ vtBusyCodes := p_vtBusyCodes,
+ vtFunctionCode := p_vtFunctionCode
+ }}}
+}
+
+template Isobus.J1939_messageWithPGN t_WorkingSetMaintenanceInd(
+ template boolean p_initiatingWorkingSetMaintenance,
+ template e_WorkingSetMaintenanceVersionNumber p_versionNumber) := {
+ pgn := '00E700'O,
+ pdu := {
+ ecu2vt := {workingSetMaintenanceInd := {
+ vtfunction := 255,
+ bitMask := { initiatingWorkingSetMaintenance := p_initiatingWorkingSetMaintenance, reserved1 := false, reserved2 := false, reserved3 := false, reserved4 := false, reserved5 := false, reserved6 := false, reserved7 := false },
+ versionNumber := p_versionNumber
+ }}}
+}
+
+}
+
diff --git a/demo/Isobus_Templates.ttcn b/demo/Isobus_Templates.ttcn
deleted file mode 100644
index 48e6e26..0000000
--- a/demo/Isobus_Templates.ttcn
+++ /dev/null
@@ -1,395 +0,0 @@
-module Isobus_Templates {
-
-import from IsobusMessageTypes all
-import from IsobusVTMessageTypes all
-import from IsobusCMMessageTypes all
-import from IsobusNMMessageTypes all
-import from Isobus all
-import from General_Types all
-
-
-template CAN_frame_j1939 t_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param,
- OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template AnyIsoBusPdu t_can_pdu)
-:= { can_j1939 := {
- prio := prio_param,
- res := res_param,
- dp := dp_param,
- pf := pf_param,
- ps := ps_param,
- sa := sa_param},
- can_pdu := t_can_pdu
-}
-
-template CAN_frame_j1939 t_network_message(Isobus.Priority prio_param, BIT1 res_param, BIT1 dp_param,
- OCT1 pf_param, OCT1 ps_param, SourceAddress sa_param, template IsobusNMMessageTypes.NetworkMessage t_networkMessage)
-:= { can_j1939 := {
- prio := prio_param,
- res := res_param,
- dp := dp_param,
- pf := pf_param,
- ps := ps_param,
- sa := sa_param},
- can_pdu := {networkMessage := t_networkMessage}
-}
-
-template ECU2VT t_GetMemoryReqX( INT3 p_memoryRequired) := {
- getMemoryReq := {
- vtfunction := 194,
- reserved2 := 'FF'O,
- memoryRequired := p_memoryRequired,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
- }
-};
-
-template AnyIsoBusPdu t_ecu2vt(template ECU2VT t_Message) := {
- ecu2vt := 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)}
-}
-
-
-template ButtonActivationReq t_ButtonActivationReq(
- template e_ButtonActivationReq_KeyAactivationCode p_keyAactivationCode,
- template ValidObjectID p_objectID,
- template ValidObjectID p_parentObjectID,
- template KeyNumberType p_buttonKeyCode) := {
- vtfunction := 1,
- keyAactivationCode := p_keyAactivationCode,
- objectID := p_objectID,
- parentObjectID := p_parentObjectID,
- buttonKeyCode := p_buttonKeyCode,
- reserved8 := 'FF'O
-}
-
-template ButtonActivationRes t_ButtonActivationRes (
- template e_ButtonActivationRes_KeyAactivationCode p_keyAactivationCode,
- template ValidObjectID p_objectID,
- template ValidObjectID p_parentObjectID,
- template KeyNumberType p_buttonKeyCode
-) := {
- vtfunction := 1,
- keyAactivationCode := p_keyAactivationCode,
- objectID := p_objectID,
- parentObjectID := p_parentObjectID,
- buttonKeyCode := p_buttonKeyCode,
- reserved8 := 'FF'O
-}
-
-template PointingEventReq t_PointingEventReq (
- template PositionType p_x_position,
- template PositionType p_y_position,
- template e_PointingEvent_touchState p_touchState) := {
- vtfunction := 2,
- x_position := p_x_position,
- y_position := p_y_position,
- touchState := p_touchState,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template PointingEventRes t_PointingEventRes (
- template PositionType p_x_position,
- template PositionType p_y_position,
- template e_PointingEvent_touchState p_touchState) := {
- vtfunction := 2,
- x_position := p_x_position,
- y_position := p_y_position,
- touchState := p_touchState,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectReq t_VTSelectInputObjectReq (
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection,
- template boolean p_objectIsOpenForDataInput,
- template boolean p_reserved
- // p_reserved for v3 or earlier: true , for v4 and later: false
-) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- bitmask := {
- objectIsOpenForDataInput := p_objectIsOpenForDataInput,
- reserved1 := p_reserved,
- reserved2 := p_reserved,
- reserved3 := p_reserved,
- reserved4 := p_reserved,
- reserved5 := p_reserved,
- reserved6 := p_reserved,
- reserved7 := p_reserved},
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectReq_v3AndPrior t_VTSelectInputObjectReq_v3AndPrior (
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectReq_v4AndLater t_VTSelectInputObjectReq_v4AndLater (
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection,
- template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- bitmask := p_bitmask,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectRes t_VTSelectInputObjectRes(
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection,
- template boolean p_objectIsOpenForDataInput,
- template boolean p_reserved
- // p_reserved for v3 or earlier: true , for v4 and later: false
-) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- bitmask := {
- objectIsOpenForDataInput := p_objectIsOpenForDataInput,
- reserved1 := p_reserved,
- reserved2 := p_reserved,
- reserved3 := p_reserved,
- reserved4 := p_reserved,
- reserved5 := p_reserved,
- reserved6 := p_reserved,
- reserved7 := p_reserved},
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectRes_v4AndPrior t_VTSelectInputObjectRes_v4AndPrior(
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTSelectInputObjectRes_v5AndLater t_VTSelectInputObjectRes_v5AndLater(
- template ValidObjectID p_objectID,
- template e_VTSelectInputObject_selection p_selection,
- template VTSelectInputObject_v4AndLater_Bitmask p_bitmask) := {
- vtfunction := 3,
- objectID := p_objectID,
- selection := p_selection,
- bitmask := p_bitmask,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTESCReq t_VTESCReq (
- template AnyObjectID p_objectID,
- template VTESC_ErrorCodes p_errorCodes) := {
- vtfunction := 4,
- objectID := p_objectID,
- errorCodes := p_errorCodes,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTESCRes t_VTESCRes (
- template AnyObjectID p_objectID) :={
- vtfunction := 4,
- objectID := p_objectID,
- reserved4 := 'FF'O,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTChangeNumericValueReq t_VTChangeNumericValueReq (
- template ValidObjectID p_objectID,
- template OCT4 p_value) := {
- vtfunction := 5,
- objectID := p_objectID,
- reserved4 := 'FF'O,
- value_ := p_value
-}
-
-template VTChangeNumericValueRes t_VTChangeNumericValueRes (
- template ValidObjectID p_objectID,
- template OCT4 p_value) := {
- vtfunction := 5,
- objectID := p_objectID,
- reserved4 := 'FF'O,
- value_ := p_value
-}
-
-template VTChangeActiveMaskReq t_VTChangeActiveMaskReq (
- template ValidObjectID p_activeMaskOrWindowMaskOrKeyGroupObjectID,
- template VTChangeActiveMasErrorcodes p_errorCodes,
- template ValidObjectID p_objectIDcontainingError,
- template ValidObjectID p_parentObjectIDofErrorObjectID) :=
-{
- vtfunction := 6,
- activeMaskOrWindowMaskOrKeyGroupObjectID := p_activeMaskOrWindowMaskOrKeyGroupObjectID,
- errorCodes := p_errorCodes,
- objectIDcontainingError := p_objectIDcontainingError,
- parentObjectIDofErrorObjectID := p_parentObjectIDofErrorObjectID
-}
-
-template VTChangeActiveMaskRes t_VTChangeActiveMaskRes (
- template ValidObjectID p_activeMaskObjectID) := {
- vtfunction := 6,
- activeMaskObjectID := p_activeMaskObjectID,
- reserved4 := 'FF'O,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTChangeSoftKeyMaskReq t_VTChangeSoftKeyMaskReq(
- template ValidObjectID p_dataOrAlarmMaskObjectID,
- template ValidObjectID p_softKeyMaskObjectID,
- template VTChangeSoftKeyMaskErrorCodes p_errorCodes) :=
-{
- vtfunction := 7,
- dataOrAlarmMaskObjectID := p_dataOrAlarmMaskObjectID,
- softKeyMaskObjectID := p_softKeyMaskObjectID,
- errorCodes := p_errorCodes,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTChangeSoftKeyMaskRes t_VTChangeSoftKeyMaskRes(
- template ValidObjectID p_dataOrAlarmMaskObjectID,
- template ValidObjectID p_softKeyMaskObjectID) :=
-{
- vtfunction := 7,
- dataOrAlarmMaskObjectID := p_dataOrAlarmMaskObjectID,
- softKeyMaskObjectID := p_softKeyMaskObjectID,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template VTChangeStringValueReq t_VTChangeStringValueReq (
- template ValidObjectID p_inputStringOrStringVariableObjectID,
- template octetstring p_enteredStringValue) :=
-{
- vtfunction := 8,
- inputStringOrStringVariableObjectID := p_inputStringOrStringVariableObjectID,
- numberOfBytes := lengthof(p_enteredStringValue),
- enteredStringValue := p_enteredStringValue
-}
-
-template VTChangeStringValueRes t_VTChangeStringValueRes (
- template ValidObjectID p_inputStringOrStringVariableObjectID) :=
-{
- vtfunction := 8,
- reserved2 := 'FF'O,
- reserved3 := 'FF'O,
- inputStringOrStringVariableObjectID := p_inputStringOrStringVariableObjectID,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template GetSupportedWidecharsReq t_GetSupportedWidecharsReq(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange, OCT2 p_lastWideCharInInquiryRange) := {
- vtfunction := 193,
- codeplane := p_codeplane,
- firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
- lastWideCharInInquiryRange := p_lastWideCharInInquiryRange,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-template GetSupportedWidecharsRes t_GetSupportedWidecharsRes(e_Codeplane p_codeplane, OCT2 p_firstWideCharInInquiryRange,
- OCT2 p_lastWideCharInInquiryRange,
- INT1 p_numberOfRanges,
- WideCharRangeArray p_wideCharRangeArray) :=
-{
- vtfunction := 193,
- codeplane := p_codeplane,
- firstWideCharInInquiryRange := p_firstWideCharInInquiryRange,
- lastWideCharInInquiryRange := p_lastWideCharInInquiryRange,
- numberOfRanges := p_numberOfRanges,
- wideCharRangeArray := p_wideCharRangeArray
-}
-
-template GetMemoryReq t_GetMemoryReq(INT3 p_memoryRequired) := {
- 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) := {
- vtfunction := 194,
- versionNumber := p_versionNumber,
- status := p_status,
- reserved4 := 'FF'O,
- reserved5 := 'FF'O,
- reserved6 := 'FF'O,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O
-}
-
-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
-}
-
-template N_SP_Response t_N_SP_Response(template e_PortNumber t_fromPort,
- template e_PortNumber t_toPort,
- template N_SP_Response.requestedParametrics requestedParametrics_param) := {
- msgFunction := 132,
- portPair := {fromPort := t_fromPort, toPort := t_toPort},
- requestedParametrics := requestedParametrics_param
-}
-
-template AnyIsoBusPdu t_N_SP_Response_pdu(template e_PortNumber t_fromPort,
- template e_PortNumber t_toPort,
- template N_SP_Response.requestedParametrics t_requestedParametrics_param) := {
- networkMessage := {n_SP_Response := t_N_SP_Response(t_fromPort, t_toPort, t_requestedParametrics_param)
- }}
-
-
-}
-
diff --git a/demo/Isobus_test.ttcn b/demo/Isobus_test.ttcn
new file mode 100644
index 0000000..d170980
--- /dev/null
+++ b/demo/Isobus_test.ttcn
@@ -0,0 +1,1290 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+// File: J1939test.ttcn
+// Description: J1939 port type test
+//
+
+
+module Isobus_test {
+
+import from SocketCAN_Types all;
+import from SocketCAN_PortType all;
+import from SocketCAN_Templates all;
+import from J1939 all;
+import from IsobusVT_Templates all;
+import from Isobus all;
+
+template WorkingSetMaintenanceMessages t_WorkingSetMaintenanceTick(template boolean p_tickvalue) :=
+{workingSetMaintenanceTick := p_tickvalue}
+
+template WorkingSetMaintenanceMessages t_WorkingSetMaintenanceInitialize(template boolean p_tickvalue) :=
+{workingSetMaintenanceInitialize := p_tickvalue}
+const float c_guard := 50.0
+
+type enumerated SocketCAN_open_socket_type
+{
+ OPEN_CAN_RAW,
+ OPEN_CAN_BCM,
+ OPEN_CAN_ISOTP,
+ OPEN_CAN_J1939
+}
+
+type enumerated e_Phase {
+ e_open_socket,
+ e_testbody1,
+ e_testbody2,
+ e_testbody3,
+ e_testbody4,
+ e_testbody5,
+ e_testbody6,
+ e_testbody7,
+ e_testbodyEnd,
+ e_testcase_complete
+}
+
+type record SocketCAN_open_j1939_result{
+ SocketCAN_ifr ifr,
+ SocketCAN_socketid socket_id}
+
+type record J1939_message {
+ e_Phase phase,
+ SocketCAN_J1939_PDU j1939_pdu
+}
+
+const integer J1939_MAX_PDU_NUMBER := 256; // for testing purposes
+
+type record length (0 .. J1939_MAX_PDU_NUMBER) of SocketCAN_J1939_PDU SocketCAN_J1939_PDUs
+
+// workarounds as (x .. enum2int(e_testcase_complete)) fails but:
+// workarounds as (x .. enum2int(c_testcase_complete)) works
+const e_Phase c_firstPhase := e_open_socket
+const e_Phase c_testcase_complete := e_testcase_complete
+
+type record PhaseStartReq {
+ e_Phase phase,
+ integer phase_int
+}
+type record PhaseEndInd {
+ e_Phase phase,
+ integer phase_int
+}
+
+type boolean HaltReq
+type boolean HaltInd
+
+type union Command_MTC2PTC{
+ PhaseStartReq phaseStartReq,
+ HaltReq haltReq
+}
+
+type union Command_PTC2MTC{
+ PhaseEndInd phaseEndInd,
+ HaltInd haltInd
+}
+
+type port SyncMasterPort message {
+ out Command_MTC2PTC
+ in Command_PTC2MTC
+} with { extension "internal" }
+
+type port SyncSlavePort message {
+ in Command_MTC2PTC
+ out Command_PTC2MTC
+} with { extension "internal" }
+
+type port J1939PDU_PT message {
+ inout J1939PDU_with_NAME
+} with { extension "internal" }
+
+type boolean PoolUploadOngoing
+
+type port PoolUploadOngoingIn message {
+ in PoolUploadOngoing
+} with { extension "internal" }
+
+type port PoolUploadOngoingOut message {
+ out PoolUploadOngoing
+} with { extension "internal" }
+
+type boolean VTStatusTick
+
+type port VTStatusTickIn message {
+ in VTStatusTick
+} with { extension "internal" }
+
+type port VTStatusTickOut message {
+ out VTStatusTick
+} with { extension "internal" }
+
+type boolean WorkingSetMaintenaceOnOff
+
+type port WorkingSetMaintenaceOnOffIn message {
+ in WorkingSetMaintenaceOnOff
+} with { extension "internal" }
+
+type port WorkingSetMaintenaceOnOffOut message {
+ out WorkingSetMaintenaceOnOff
+} with { extension "internal" }
+
+type union WorkingSetMaintenanceMessages
+{
+ // put all workingSetMaintenance messages here
+ boolean workingSetMaintenanceTick,
+ boolean workingSetMaintenanceInitialize
+}
+
+type port WorkingSetMaintenanceIn message {
+ in WorkingSetMaintenanceMessages
+} with { extension "internal" }
+
+type port WorkingSetMaintenanceOut message {
+ out WorkingSetMaintenanceMessages
+} with { extension "internal" }
+
+//component declarations
+
+type component SyncPTC {
+ port SyncSlavePort pt_sync
+ var e_Phase v_phase := c_firstPhase
+}
+
+type component PTC_Isobus_VT_VTSTATUSCycleSend_CT extends SyncPTC
+{
+ port VTStatusTickOut pt_VTStatusTick
+ port PoolUploadOngoingIn pt_PoolUploadOngoing
+ //variables
+ //timers
+}
+
+type component PTC_Isobus_ECU_VTSTATUSCycleReceive_CT extends SyncPTC
+{
+ port VTStatusTickIn pt_VTStatusTick
+ port WorkingSetMaintenaceOnOffOut pt_WorkingSetMaintenaceOnOff
+ //variables
+ //timers
+}
+
+type component PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT extends SyncPTC
+{
+ port WorkingSetMaintenaceOnOffIn pt_WorkingSetMaintenaceOnOff
+ port WorkingSetMaintenanceOut pt_WorkingSetMaintenance
+ //timers
+}
+
+type component PTC_Isobus_VT_CT extends SyncPTC
+{
+ port J1939PDU_PT pt_j1939PDU
+ port VTStatusTickIn pt_VTStatusTick
+ //variables
+ var J1939_ADDR v_peeraddr := J1939_NO_ADDR
+ var J1939_NAME v_peername := J1939_NO_NAME
+ //timers
+}
+
+type component PTC_Isobus_ECU_CT extends SyncPTC
+{
+ port J1939PDU_PT pt_j1939PDU
+ port WorkingSetMaintenanceIn pt_WorkingSetMaintenance
+ port VTStatusTickOut pt_VTStatusTick
+ //variables
+ var J1939_ADDR v_peeraddr := J1939_NO_ADDR
+ var J1939_NAME v_peername := J1939_NO_NAME
+ //timers
+}
+
+type component PTCAdapter extends SyncPTC {
+ port SocketCAN_PT pt_socketCAN
+ port J1939PDU_PT pt_j1939PDU
+}
+
+type record of PTCs PTCSet
+
+type union PTCs{
+ PTCAdapter ptc_Adapter,
+ PTC_Isobus_VT_VTSTATUSCycleSend_CT ptc_Isobus_VT_VTSTATUSCycleSend_CT,
+ PTC_Isobus_VT_CT ptc_Isobus_VT_CT,
+ PTC_Isobus_ECU_CT ptc_Isobus_ECU_CT,
+ PTC_Isobus_ECU_VTSTATUSCycleReceive_CT ptc_Isobus_ECU_VTSTATUSCycleReceive_CT,
+ PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT
+}
+
+
+type component MTC{
+ timer t_guard
+ port SyncMasterPort pt_sync
+ var PTCSet v_PTCSet := {}
+}
+
+altstep alt_awaitPhaseStartReq(in e_Phase p_phase) runs on SyncPTC {
+ var Command_MTC2PTC v_PhaseStartReq;
+ [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := p_phase, phase_int := ?}}){
+ log("PTC name: ", self)
+ log("Waits for start of phase: ", p_phase)
+ }
+ // between v_phase and p_phase
+ [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := ?, phase_int := (enum2int(c_firstPhase) .. enum2int(v_phase))}}) -> value v_PhaseStartReq
+ {
+ //v_phase := f_incPhase(v_phase)
+ log("PTC name: ", self)
+ log("Waits for start of phase: ", p_phase)
+ log("Received completion of phase: ", p_phase)
+ f_sendPhaseEndInd()
+ repeat
+ }
+ [] pt_sync.receive (Command_MTC2PTC:{phaseStartReq:={phase := ?, phase_int :=?}}) -> value v_PhaseStartReq
+ {log("Received unexpected message:", v_PhaseStartReq);setverdict(inconc)}
+}
+
+function f_startPhase (in e_Phase p_phase) runs on MTC {
+ var integer v_i
+ var integer v_amount := sizeof(v_PTCSet)
+ var Command_MTC2PTC v_phaseStartReq := {phaseStartReq:={ phase := p_phase, phase_int := enum2int(p_phase)}}
+
+ for (v_i := 0; v_i < v_amount; v_i := v_i +1){
+ log("MTC instance: ", self)
+ if (ischosen(v_PTCSet[v_i].ptc_Adapter)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Adapter}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_VT_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_CT)){ pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT)) { pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT)){ pt_sync.send(v_phaseStartReq) to v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT}
+ else {
+ log("Chosen PTC type misssing, please add handling for all PTC types!");
+ setverdict(inconc)}//something wrong, this should not happen
+ }
+}
+
+function f_haltAllComponents () runs on MTC {
+ var integer v_i
+ var integer v_amount := sizeof(v_PTCSet)
+ var Command_MTC2PTC v_haltReq := {haltReq:=true}
+ for (v_i := 0; v_i < v_amount; v_i := v_i +1){
+ log("MTC instance: ", self)
+ if (ischosen(v_PTCSet[v_i].ptc_Adapter)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Adapter}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_VT_VTSTATUSCycleSend_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_VT_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_VT_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_CT)){ pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT)) { pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_VTSTATUSCycleReceive_CT}
+ else if (ischosen(v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT)){ pt_sync.send(v_haltReq) to v_PTCSet[v_i].ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT}
+ else {
+ log("Chosen PTC type misssing, please add handling for all PTC types!");
+ setverdict(inconc)}//something wrong, this should not happen
+ }
+}
+
+function f_incPTCPhase(in e_Phase p_currentPhase) runs on SyncPTC return e_Phase {
+ var e_Phase v_nextPhase
+ log("PTC: ", self)
+ log("PTC instance: ", self)
+ log("Current PTC phase: ", p_currentPhase)
+ int2enum( enum2int(p_currentPhase)+1, v_nextPhase)
+ log("Next PTC phase:", v_nextPhase)
+ return v_nextPhase
+}
+
+function f_sendPhaseEndInd() runs on SyncPTC{
+ // just to allow matching with integer ranges on the reception side, as it is not poosible to do so with enums
+ var Command_PTC2MTC v_PhaseEndInd := {phaseEndInd :={phase := v_phase, phase_int := enum2int(v_phase)}}
+ pt_sync.send(v_PhaseEndInd)
+ log("PTC: PhaseEndInd to MTC with content: ", v_PhaseEndInd, self)
+ v_phase := f_incPTCPhase(v_phase)
+}
+
+function f_addSyncSlaveSet (in PTCs p_slave,
+ inout PTCSet p_set) {
+ p_set[sizeof(p_set)] := p_slave
+ return
+}
+function f_incMTCPhase(in e_Phase p_currentPhase) runs on MTC return e_Phase {
+ var e_Phase v_nextPhase
+ log("MTC: ", self)
+ log("Current phase: ", p_currentPhase)
+ int2enum( enum2int(p_currentPhase)+1, v_nextPhase)
+ log("Next phase:", v_nextPhase)
+ return v_nextPhase
+}
+
+function f_awaitEndPhase(in e_Phase p_phase) runs on MTC {
+ var integer v_amount:= sizeof(v_PTCSet);
+ var integer v_i
+ t_guard.start(c_guard)
+ var Command_PTC2MTC v_PhaseEndInd
+
+ log("Available PTCs", v_PTCSet)
+
+ for(v_i := 0; v_i < v_amount; v_i := v_i +1) {
+ alt {
+ [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:= {phase :=p_phase, phase_int := ?}}) -> value v_PhaseEndInd
+ {
+ log("Nth PTC", v_i, "of n PTCs: ", v_amount, "Ended phase: ", v_PhaseEndInd.phaseEndInd.phase)
+ }
+ // value between p_phase +1 and e_testcase_complete:
+ [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:= {phase :=?, phase_int := (enum2int(p_phase) .. (enum2int(c_testcase_complete)))}}) -> value v_PhaseEndInd
+ {
+ log("Nth PTC", v_i, "of n PTCs: ", v_amount, "Ended phase: ", v_PhaseEndInd.phaseEndInd.phase)
+ }
+ [] t_guard.timeout {
+ log("Timeout in MTC phase:", p_phase)
+ setverdict(inconc)
+ }
+ [] pt_sync.receive (Command_PTC2MTC:{phaseEndInd:=?}) -> value v_PhaseEndInd {
+ log("Unexpected phase recieved: ", v_PhaseEndInd)
+ log("Expected phase range: ", p_phase)
+ log(" to ", c_testcase_complete)
+ setverdict(inconc)
+ }
+ [] any port.receive{
+ log("Expected phase:", p_phase)
+ setverdict(inconc)
+ }
+
+ }
+ }
+ t_guard.stop
+}
+
+function f_awaitAllComponentsHalt() runs on MTC {
+ var integer v_amount:= sizeof(v_PTCSet);
+ var integer v_i
+ t_guard.start(c_guard)
+
+ for(v_i := 0; v_i < v_amount; v_i := v_i +1) {
+ alt {
+ [] pt_sync.receive (Command_PTC2MTC:{haltInd :=?}){
+ }
+ [] t_guard.timeout {
+ log("Timeout in MTC while waiting for command HaltRes")
+ setverdict(inconc)
+ }
+ [] any port.receive{
+ log("Received unexpeced message")
+ setverdict(inconc)
+ }
+ }
+ }
+ t_guard.stop
+}
+function f_open_socket(in SocketCAN_socket p_socket)
+runs on PTCAdapter
+return SocketCAN_socket_result {
+
+ var SocketCAN_socket_result v_result
+ timer t_guard
+ t_guard.start(c_guard)
+
+ pt_socketCAN.send(p_socket)
+
+ // receive response
+ alt {
+ [] pt_socketCAN.receive(
+ a_SocketCAN_socket_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("SocketCan:Socket opened: ", v_result.id)}
+ [] pt_socketCAN.receive(a_SocketCAN_socket_result(a_result(SocketCAN_ERROR)))
+ {log("Received Opening Socket failed"); setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)}
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_ioctl_get_if_index(in SocketCAN_socketid p_socket_id)
+runs on PTCAdapter
+return SocketCAN_ioctl_result {
+ var SocketCAN_ioctl_result v_result
+ timer t_guard
+ t_guard.start(c_guard)
+
+ pt_socketCAN.send(SocketCAN_ioctl:{id:= p_socket_id, ifu := omit});
+ // receive response
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Retrieved interface index", v_result.ifr.if_index)}
+ [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_ERROR)))
+ {log("Retrieving interface index failed", p_socket_id); setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)
+ }
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_connect(in SocketCAN_socketid p_socket_id,
+ in SocketCAN_if_index p_if_index,
+ in J1939_NAME p_j1939_name_destination,
+ in J1939_PGN p_j1939_pgn_destination,
+ in J1939_ADDR p_j1939_pgn_addr)
+runs on PTCAdapter
+return SocketCAN_connect_result {
+ var SocketCAN_connect_result v_result
+ timer t_guard
+ t_guard.start(c_guard)
+
+ pt_socketCAN.send(SocketCAN_Types.SocketCAN_connect:{id:= p_socket_id,
+ connectu := {j1939 := {if_index:= p_if_index,
+ j1939_destination:= {
+ name := p_j1939_name_destination /* or J1939_NO_NAME */,
+ pgn := p_j1939_pgn_destination /* or J1939_NO_PGN */,
+ addr := p_j1939_pgn_addr /* or J1939_NO_ADDR */}}}});
+ // SocketCAN_connect receive response
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_connect_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Connecting socket", p_socket_id)}
+ [] pt_socketCAN.receive(a_SocketCAN_connect_result(a_result(SocketCAN_ERROR)))
+ {log("Connecting socket failed.", p_socket_id); setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)}
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_bind(
+ in SocketCAN_socketid p_socket_id,
+ in SocketCAN_if_index p_if_index,
+ in J1939_NAME p_j1939_name_source,
+ in J1939_PGN p_j1939_pgn_source,
+ in J1939_ADDR p_j1939_addr_source)
+runs on PTCAdapter
+return SocketCAN_bind_result {
+ var SocketCAN_bind_result v_result
+ timer t_guard
+ t_guard.start(c_guard)
+
+ log("p_socket_id", p_socket_id)
+ log("p_if_index", p_if_index)
+ log("p_j1939_name_source", p_j1939_name_source)
+ log("p_j1939_pgn_source", p_j1939_pgn_source)
+ log("p_j1939_addr_source", p_j1939_addr_source)
+
+
+ pt_socketCAN.send(SocketCAN_bind:{id:= p_socket_id,
+ bindu := {j1939 := {if_index:= p_if_index,
+ j1939_source:=
+ {name := p_j1939_name_source /* or J1939_NO_NAME */,
+ pgn := p_j1939_pgn_source /* or J1939_NO_PGN */,
+ addr := p_j1939_addr_source /* or J1939_NO_ADDR or J1939_IDLE_ADDR */ }}}});
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Binding socket", p_socket_id)}
+ [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_ERROR))) {}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)
+ }
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_j1939_send_data_to(
+ in SocketCAN_socketid p_socket_id,
+ in SocketCAN_if_index p_if_index,
+ in J1939_hdr p_j1939_destination,
+ in SocketCAN_J1939_PDU p_pdu)
+runs on PTCAdapter
+return SocketCAN_j1939_send_data_to_result {
+ var SocketCAN_j1939_send_data_to_result v_result
+
+ timer t_guard
+ t_guard.start(c_guard)
+
+ pt_socketCAN.send(SocketCAN_j1939_send_data_to:{
+ id := p_socket_id,
+ if_index := p_if_index,
+ j1939_destination := p_j1939_destination,
+ pdu := p_pdu});
+
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Sending j1939_send_data_to", p_socket_id)}
+ [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_ERROR)))
+ {log("Sending j1939_send_data_to failed", p_socket_id); setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)
+ }
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_j1939_send_data(in SocketCAN_socketid p_socket_id,
+ in SocketCAN_J1939_PDU p_pdu)
+runs on PTCAdapter
+return SocketCAN_j1939_send_data_result {
+
+ var SocketCAN_j1939_send_data_result v_result
+
+ timer t_guard
+ t_guard.start(c_guard)
+ log("SocketCAN_j1939_send_data_to:{id}:", p_socket_id)
+ log("SocketCAN_j1939_send_data_to:{pdu}:", p_pdu)
+
+ pt_socketCAN.send(SocketCAN_j1939_send_data:{
+ id:= p_socket_id,
+ pdu:=p_pdu});
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Writing data on J1939 socket: ", p_socket_id)}
+ [] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_result(a_result(SocketCAN_ERROR)))
+ {log("Writing data on J1939 socket failed", p_socket_id);
+ setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)}
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_setsockopt(in SocketCAN_socketid p_socket_id,
+ in SocketCAN_setsockopt_commandu p_command)
+runs on PTCAdapter
+return SocketCAN_setsockopt_result{
+ var SocketCAN_setsockopt_result v_result
+
+ timer t_guard
+ t_guard.start(c_guard)
+
+ pt_socketCAN.send(SocketCAN_Types.SocketCAN_setsockopt:{id:= p_socket_id, command := p_command});
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_setsockopt_result(a_result(SocketCAN_SUCCESS))) -> value v_result
+ {log("Writing data", p_socket_id)}
+ [] pt_socketCAN.receive(a_SocketCAN_setsockopt_result(a_result(SocketCAN_ERROR)))
+ {log("Writing data failed", p_socket_id); setverdict(fail)}
+ [] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)
+ }
+ }
+ t_guard.stop
+ return v_result
+}
+
+function f_close_socket (in SocketCAN_socketid p_socket_id)
+runs on PTCAdapter {
+ pt_socketCAN.send(SocketCAN_close:{id:= p_socket_id});
+}
+
+function f_open_j1939()
+runs on PTCAdapter
+return SocketCAN_open_j1939_result {
+ var SocketCAN_socketid v_socket_id
+ v_socket_id := f_open_socket({domain:=PF_CAN, ptype := SOCK_DGRAM, protocol:= CAN_J1939}).id
+ var SocketCAN_ifr v_ifr
+ v_ifr := f_ioctl_get_if_index(v_socket_id).ifr
+
+ var SocketCAN_open_j1939_result v_result
+ v_result := {ifr := v_ifr, socket_id := v_socket_id}
+
+ return v_result
+}
+
+function f_ptc_J1939Adapter(
+ in e_Phase p_phase,
+ in J1939_Priority p_send_prio,
+ in J1939_NAME p_j1939_name_source) runs on PTCAdapter {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_source,
+ J1939_NO_PGN, /* p_j1939_pgn_source */
+ J1939_NO_ADDR /* p_j1939_addr_source */)
+ var SocketCAN_setsockopt_result v_setsockopt_result
+ v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+ const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable}
+ // configure broadcast:
+ v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+ f_sendPhaseEndInd() //e_open_socket
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+ f_sendPhaseEndInd()
+
+
+ var SocketCAN_receive_j1939_message v_result
+ var SocketCAN_j1939_send_data_to_result v_send_data_to_result
+ var J1939PDU_with_NAME v_pgn_and_pdu_with_name
+ var boolean condition := true
+ var boolean v_guard :=true
+
+ timer t_guard
+
+
+
+ while (condition)
+ {
+ alt
+ {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ [v_guard] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=?,pdu:=?})
+ -> value v_pgn_and_pdu_with_name
+ {
+ t_guard.start(c_guard)
+
+ var octetstring v_j1939_pdu, v_pgn_and_pdu
+ v_pgn_and_pdu := f_encode_J1939_message (v_pgn_and_pdu_with_name.pdu)
+ v_j1939_pdu := substr(v_pgn_and_pdu,3,lengthof(v_pgn_and_pdu)-3)// strip PGN
+
+ var J1939_hdr v_j1939_destination := {
+ name := v_pgn_and_pdu_with_name.name,
+ pgn := substr(v_pgn_and_pdu,0,3), // strip PDU, pgn_destination
+ addr:= v_pgn_and_pdu_with_name.addr
+ }
+
+
+ pt_socketCAN.send(SocketCAN_j1939_send_data_to:{
+ id := v_socket_id,
+ if_index := v_ifr.if_index,
+ j1939_destination := v_j1939_destination,
+ // strip PGN
+ pdu := v_j1939_pdu});
+
+ v_guard:=false; //stop receiving until send confirmation received
+ }
+
+ [not(v_guard)] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_SUCCESS))) -> value v_send_data_to_result
+ {
+ log("Sending j1939_send_data_to:", v_socket_id, ", ", v_ifr.if_index)
+ v_guard:=true
+ t_guard.stop
+ }
+
+ [not(v_guard)] pt_socketCAN.receive(a_SocketCAN_j1939_send_data_to_result(a_result(SocketCAN_ERROR)))
+ {
+ log("Sending j1939_send_data_to failed", v_socket_id);
+ v_guard:=true
+ t_guard.stop
+ setverdict(fail)
+ }
+
+ [] pt_socketCAN.receive(a_SocketCAN_receive_j1939_message(
+ v_socket_id,
+ v_ifr,
+ ?, /* any pgn */
+ ?, /* any peer_addr */
+ ?, /* any peer_name */
+ ? /* any j1939_pdu */)) -> value v_result
+ {
+ log("SocketCan:J1939 message from socket received", v_result)
+ pt_j1939PDU.send({addr:=v_result.destAddr, name:= v_result.name,
+ // concatenate received pgn and pdu
+ pdu:=f_decode_J1939_message(v_result.pgn & v_result.pdu) /* concatenate pgn & pdu */});
+ }
+ [] pt_sync.receive
+ {
+ log("Fail:Unexpected message from port pt_sync received");
+ setverdict(fail)
+ }
+ [v_guard] pt_socketCAN.receive
+ {
+ log("Fail:Unexpected message from port pt_socketCAN received")
+ //this should catch any incoming message type not matched on the first alternatives
+ setverdict(fail)
+ }
+
+ [v_guard] pt_j1939PDU.receive
+ {
+ log("Fail:Unexpected message from port pt_j1939PDU received")
+ //this should catch any incoming message type not matched on the first alternatives
+ setverdict(fail)
+ }
+
+ [v_guard] any port.receive
+ {
+ log("Fail:Message received on a different port")
+ //this should catch any incoming message type not matched on the first alternatives on any other port
+ setverdict(fail)
+ }
+
+ [not(v_guard)] t_guard.timeout {
+ log("guard timeout!")
+ setverdict(fail)
+ }
+ }//endalt
+ } // end while
+
+
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+}
+
+function f_ptc_J1939ECUApplication(in e_Phase p_phase) runs on PTC_Isobus_ECU_CT
+{
+
+ var boolean condition := true
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+
+
+ while (condition)
+ {
+ var J1939PDU_with_NAME v_pgn_and_pdu_with_name
+
+ alt
+ {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=?,
+ pdu:=t_VTStatusInd(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ v_peeraddr := v_pgn_and_pdu_with_name.addr
+ v_peername := v_pgn_and_pdu_with_name.name
+ // store peer name
+ //log incoming message
+ log("SocketCan:Expected message VTStatusReq received!", v_pgn_and_pdu_with_name)
+ pt_VTStatusTick.send( true );
+ }
+ [] pt_WorkingSetMaintenance.receive(t_WorkingSetMaintenanceTick(?)) {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_WorkingSetMaintenanceInd(true, compliantWithVTVersion4)
+
+ ))
+ }
+
+ []pt_WorkingSetMaintenance.receive(t_WorkingSetMaintenanceInitialize(true)) {
+ // the ECU has received the first VTStatus message
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_GetHardwareReq
+ ))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_GetHardwareRes(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ log("SocketCan:Expected message GetHardwareRes received!", v_pgn_and_pdu_with_name)
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_GetNumberOfSoftKeysReq
+ ))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_GetNumberOfSoftKeysRes(?, ?, ?, ?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ log("SocketCan:Expected message GetNumberOfSoftKeysRes received!", v_pgn_and_pdu_with_name)
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_GetTextFontDataReq
+ ))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_GetTextFontDataRes(?, ?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ log("SocketCan:Expected message GetTextFontDataRes received!", v_pgn_and_pdu_with_name)
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_GetMemoryReq(100000)
+ ))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_GetMemoryRes(?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ log("SocketCan:Expected message GetMemoryRes received!", v_pgn_and_pdu_with_name)
+ log("SocketCan:Sending broken object pool!")
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_ObjectPoolTransferInd('0123456789ABCDEF'O)))
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* set addr 0xFF, applies as name is set */
+ v_peername, /* set peername */
+ t_EndOfObjectPoolReq))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_EndOfObjectPoolRes(?, ?, ?,
+ /* objectPoolErrorCodes */ {
+ methodOrAttributeNotSupportedByTheVT :=?,
+ unknownObjectReference :=true,
+ anyOtherError :=?,
+ objectPoolWasDeletedFromVolatileMemory :=?,
+ reserved4 :=false,
+ reserved5 :=false,
+ reserved6 :=false,
+ reserved7 :=false
+ })}) -> value v_pgn_and_pdu_with_name
+ {
+ log("Expected message EndOfObjectPoolRes received!", v_pgn_and_pdu_with_name)
+ f_sendPhaseEndInd()
+
+ setverdict ( pass );
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:= ?, name:=v_peername,
+ pdu:=t_EndOfObjectPoolRes(?, ?, ?,
+ /* objectPoolErrorCodes */ {
+ methodOrAttributeNotSupportedByTheVT :=?,
+ unknownObjectReference :=?,
+ anyOtherError :=?,
+ objectPoolWasDeletedFromVolatileMemory :=?,
+ reserved4 :=false,
+ reserved5 :=false,
+ reserved6 :=false,
+ reserved7 :=false
+ })}) -> value v_pgn_and_pdu_with_name
+ {
+ log("Unxxpected message EndOfObjectPoolRes response parameter received!", v_pgn_and_pdu_with_name)
+ f_sendPhaseEndInd()
+
+ setverdict ( fail );
+ }
+
+ [] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr:=?, name:=?,pdu:=?}) -> value v_pgn_and_pdu_with_name
+ {
+ log("Unexpected message received!", v_pgn_and_pdu_with_name)
+ }
+
+ [] pt_j1939PDU.receive
+ {log("Unexpected message received")} //this should catch any incoming message type not matched on the first alternatives
+
+ // [] any port.receive
+ // {
+ // setverdict(fail)
+ // log("Message received on a different port") //this should catch any incoming message type not matched on the first alternatives on any other port
+ // }
+ }//endalt
+ } // end while
+}
+
+function f_ptc_J1939VTApplication(in e_Phase p_phase) runs on PTC_Isobus_VT_CT
+{
+ var boolean condition := true
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+
+
+ while (condition)
+ {
+ var J1939PDU_with_NAME v_pgn_and_pdu_with_name
+ alt
+ {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_VTStatusTick.receive(VTStatusTick:?)
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ J1939_NO_ADDR, /* send broadcast, as name is set to J1939_NO_NAME */
+ J1939_NO_NAME, /* set peername */
+ t_VTStatusInd(J1939_IDLE_ADDR,
+ 'FFFF'O,
+ 'FFFF'O,
+ vtIsBusyUpdatingVisibleMask,
+ 'FF'O)
+ ))
+ }
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_WorkingSetMaintenanceInd(?, ?)}) -> value v_pgn_and_pdu_with_name
+ {
+ //log incoming message
+ log("SocketCan:Expected WorkingSetMaintenanceInd message received!", v_pgn_and_pdu_with_name)
+ log("The version number is", v_pgn_and_pdu_with_name.pdu.pdu.ecu2vt.workingSetMaintenanceInd.versionNumber)
+ v_peeraddr := v_pgn_and_pdu_with_name.addr
+ v_peername := v_pgn_and_pdu_with_name.name
+ // store peer name
+ }
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_GetHardwareReq}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_GetHardwareRes(
+ /* bootTimeInSeconds */ 255,
+ /* graphicType */ colors256,
+ /* hardware */ {
+ touchScreenandPointingEvent := true,
+ pointingDeviceAndPointingEvent := false,
+ multipleFrequencyAudioOutput := true,
+ adjustableVolumeAudioOutput := true,
+ simultaneousActivationsOfPhysicalSoftKeys := false,
+ simultaneousActivationsOfButtons := false,
+ dragOperationViaPointingEvent := true,
+ intermediateCoordinatesDuringDragOperation := true },
+ /* xPixels */ 480,
+ /* yPixels */480)
+ ))
+ }
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_GetNumberOfSoftKeysReq}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_GetNumberOfSoftKeysRes(
+ /* navigationSoftKeys */ '00'O,
+ /* x_dots */ '7D'O,
+ /* y_dots */ '48'O,
+ /* numberOfVirtualSoftKeys */ '40'O ,
+ /* numberOfPhysicalSoftKeys */ '0C'O
+ )))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_GetTextFontDataReq}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_GetTextFontDataRes(
+ /* small_font_sizes */ {
+ font_8x8 := true,
+ font_8x12 := true,
+ font_12x16 := true,
+ font_16x16 := true,
+ font_16x24 := true,
+ font_24x32 := true,
+ font_32x32 := true,
+ reserved := false },
+ /* large_font_sizes */ {
+ font_32x48 := true,
+ font_48x64 := true,
+ font_64x64 := true,
+ font_64x96 := true,
+ font_96x128 := true,
+ font_128x128 := true,
+ font_128x192 := true,
+ reserved := false },
+ /* type_attribute */ {
+ bold_text := true,
+ crossed_out_text := true,
+ underlined_text := true,
+ italics_text := true,
+ inverted_text := true,
+ flash_inverted := true,
+ flash_background_and_foreground := true,
+ proportional_font_rendering := true }
+ )))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_GetMemoryReq(?)}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_GetMemoryRes(
+ /* versionNumber */ compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4,
+ /* status */ thereCanBeEnoughMemory
+ )))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_GetVersionsReq}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_GetVersionsRes(
+ /* numberOfVersionStrings */ 0,
+ /* versionStrings */ { }
+ )))
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_ObjectPoolTransferInd(?)}) -> value v_pgn_and_pdu_with_name
+ {
+ log("Received Object Pool", v_pgn_and_pdu_with_name.pdu.pdu.ecu2vt.objectPoolTransferInd.objectPoolRecords)
+ log("From addr:", v_pgn_and_pdu_with_name.addr)
+ log("From name:", v_pgn_and_pdu_with_name.name)
+ }
+
+ []pt_j1939PDU.receive(J1939PDU_with_NAME:{
+ addr := ?,
+ name:=?,
+ pdu:=t_EndOfObjectPoolReq}) -> value v_pgn_and_pdu_with_name
+ {
+ pt_j1939PDU.send(t_J1939PDU_with_NAME(
+ v_pgn_and_pdu_with_name.addr,
+ v_pgn_and_pdu_with_name.name, /* respond to sender */
+ t_EndOfObjectPoolRes(
+ /* errorCodes */ {
+ thereAreErrorsInTheObjectPool := false,
+ vtRanOutOfMemoryDuringTransfer := false,
+ reserved2 := false,
+ reserved3 := false,
+ anyOtherError := false,
+ reserved5 := false,
+ reserved6 := false,
+ reserved7 := false},
+ /* parentObjectIDoFaultyObject */ 1,
+ /* objectIDofFaultyObject */ 2,
+ /* objectPoolErrorCodes */ {
+ methodOrAttributeNotSupportedByTheVT :=false,
+ unknownObjectReference :=true,
+ anyOtherError :=false,
+ objectPoolWasDeletedFromVolatileMemory :=false,
+ reserved4 :=false,
+ reserved5 :=false,
+ reserved6 :=false,
+ reserved7 :=false
+ }
+ )))
+ f_sendPhaseEndInd()
+
+ setverdict ( pass );
+ }
+
+ [] pt_j1939PDU.receive(J1939PDU_with_NAME:{addr := ?, name:=?,pdu:=?}) -> value v_pgn_and_pdu_with_name
+ {
+ log("SocketCan:Unexpected message received!", v_pgn_and_pdu_with_name)
+ }
+
+ [] pt_j1939PDU.receive
+ {log("Unexpected message received")}
+ //this should catch any incoming message type not matched on the first alternatives
+
+ [] any port.receive
+ {
+ setverdict(fail)
+ log("Message received on a different port")}
+ //this should catch any incoming message type not matched on the first alternatives on any other port
+
+ }//endalt
+ } // end while
+
+ setverdict(pass)
+}
+
+
+function f_ptc_J1939VTStatusCycleSend(in e_Phase p_phase) runs on PTC_Isobus_VT_VTSTATUSCycleSend_CT
+{
+ //periodic sending
+ timer VTStatusClock := 1.0
+ var boolean condition := true
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+ f_sendPhaseEndInd()
+
+ while (condition)
+ {
+ pt_VTStatusTick.send(true);
+
+ VTStatusClock.start
+ alt
+ {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []VTStatusClock.timeout;
+ }
+ }//endwhile
+
+ setverdict(pass)
+
+}//endfunction
+
+function f_ptc_J1939_VTStatusCycleReceive(in e_Phase p_phase) runs on PTC_Isobus_ECU_VTSTATUSCycleReceive_CT
+{
+
+ timer T_VTStatusReceive := 3.0
+ var boolean v_VTStatusReceive_running := false
+ var boolean condition := true
+ //periodic reception
+
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+ f_sendPhaseEndInd()
+
+ while (condition)
+ {
+ select (v_VTStatusReceive_running) // state
+ {
+ case (true) {
+ alt {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_VTStatusTick.receive(?) {
+ //log incoming message
+ T_VTStatusReceive.stop;
+ T_VTStatusReceive.start;
+ pt_WorkingSetMaintenaceOnOff.send( true );
+ }
+
+ []T_VTStatusReceive.timeout
+ {
+ pt_WorkingSetMaintenaceOnOff.send( false );
+ v_VTStatusReceive_running := false
+ }
+ }//endalt
+ }
+ case (false) {
+ alt {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_VTStatusTick.receive(?) {
+ //log incoming message
+ T_VTStatusReceive.start;
+ v_VTStatusReceive_running := true
+ pt_WorkingSetMaintenaceOnOff.send( true );
+ }
+ } //endalt
+ }
+ }
+
+ }
+ setverdict(pass)
+
+}//endfunction
+
+
+function J1939_ECU_WorkingSetMaintenanceIndCycleSend(in e_Phase p_phase) runs on PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT
+{
+ timer T_WorkingSetMaintenanceIndCycleSend := 1.0
+ var boolean v_WorkingSetMaintenaceOn := false
+ var boolean condition := true
+
+ //periodic reception
+
+ alt_awaitPhaseStartReq(p_phase)
+ f_sendPhaseEndInd()
+ alt_awaitPhaseStartReq(e_testbodyEnd)
+ f_sendPhaseEndInd()
+
+ while (condition)
+ {
+ select (v_WorkingSetMaintenaceOn) {
+ case (true) {
+ alt {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_WorkingSetMaintenaceOnOff.receive(true)
+ // timer already running
+ {
+ //do not do anything
+ //log incoming message
+ }
+ []pt_WorkingSetMaintenaceOnOff.receive(false) {
+ T_WorkingSetMaintenanceIndCycleSend.stop;
+ //log incoming message
+ // do not start timer
+ v_WorkingSetMaintenaceOn := false // timer is not running
+ // trigger ECU reset
+ }
+ []T_WorkingSetMaintenanceIndCycleSend.timeout
+ {
+ // restart timer
+ T_WorkingSetMaintenanceIndCycleSend.start
+ pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceTick(true))
+ }
+ } //endalt
+ }
+ case (false) {
+ alt {
+ [] pt_sync.receive (Command_MTC2PTC:{haltReq:=?}){
+ pt_sync.send(Command_PTC2MTC:{haltInd:=true})
+ log("PTC name: ", self)
+ log("Got HaltReq command")
+ condition := false
+ }
+
+ []pt_WorkingSetMaintenaceOnOff.receive(true) {
+ // timer not running
+ // start timer
+ T_WorkingSetMaintenanceIndCycleSend.start
+ //log incoming message
+ v_WorkingSetMaintenaceOn := true // timer is running
+ pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceTick(true) )
+ pt_WorkingSetMaintenance.send( t_WorkingSetMaintenanceInitialize(true) )
+ }
+ []pt_WorkingSetMaintenaceOnOff.receive(false) {
+ //timer is stopped
+ //log incoming message
+ // do not start timer
+ // trigger ECU reset
+ }
+ }
+ } //endalt
+ }
+ }
+ setverdict ( pass );
+}//endfunction
+
+
+}
diff --git a/demo/Isobus_test_encoder.ttcn b/demo/Isobus_test_encoder.ttcn
new file mode 100644
index 0000000..f69a236
--- /dev/null
+++ b/demo/Isobus_test_encoder.ttcn
@@ -0,0 +1,762 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB 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: Isobustest_plain_socketcan.ttcn
+// Description: Encoder / Decoder for Isobus message frames
+//
+// Revision R1A
+
+module Isobustest_test_encoder{
+
+import from Isobus all
+import from IsobusVT_Templates all
+import from J1939 all
+
+//component declarations
+type component MTC_CT
+{
+}
+
+testcase tc_encdec() runs on MTC_CT
+{
+ template J1939_messageWithPGN t_address_claimed := {pgn := '00EEFF'O,
+ pdu := {addressClaimedOrCannotClaimSourceAddress := { name := {
+ identityNumber := 514,
+ manufacturerCode := 368,
+ ecuInstance := 3,
+ functionInstance := 5,
+ function_ := 3,
+ reserved := 0,
+ vehicleSystem := 101,
+ vehicleSystemInstance := 1,
+ industryGroup := 3,
+ arbitraryAddresssBit := 0
+ }}}}
+
+ log(f_encode_J1939_message(valueof(t_address_claimed)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_address_claimed))))
+ log("--------------------------------------------")
+
+ template J1939_messageWithPGN t_requestForAddressClaimed := {pgn := '00EA00'O,
+ pdu := {requestForAddressClaimed := {pgn := 123}}}
+
+ log(f_encode_J1939_message(valueof(t_requestForAddressClaimed)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_requestForAddressClaimed))))
+ log("--------------------------------------------")
+
+ // template CAN_frame_j1939 t_CAN_frame_j1939_3 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { cannotClaimSourceAddress := { name := {
+ // arbitraryAddresssBitValue := 0,
+ // industryGroupValue := 3,
+ // vehicleSystemInstanceValue := 1,
+ // vehicleSystemValue := 101,
+ // reservedValue := 0,
+ // functionValue := 3,
+ // functionInstanceValue := 5,
+ // ecuInstanceValue := 3,
+ // manufacturerCodeValue := 368,
+ // identityNumberValue := 514 } }}}
+ // 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 J1939_messageWithPGN t_commandedAddress := {pgn := '00FED8'O,
+ pdu := { commandedAddress := {
+ name := {
+ identityNumber := 514,
+ manufacturerCode := 368,
+ ecuInstance := 3,
+ functionInstance := 5,
+ function_ := 3,
+ reserved := 0,
+ vehicleSystem := 101,
+ vehicleSystemInstance := 1,
+ industryGroup := 3,
+ arbitraryAddresssBit := 0 },
+ newSourceAddress:='AA'O
+ } } }
+
+ log(f_encode_J1939_message(valueof(t_commandedAddress)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+ log("--------------------------------------------")
+}
+
+testcase tc_encdec_vtStatusReq() runs on MTC_CT
+{
+ template J1939_messageWithPGN t_commandedAddress := {pgn := '00E600'O,
+ pdu := {vt2ecu := {vtStatusInd :=
+ { vtfunction := 254,
+ sourceAddressOfActiveWorkingSetMaster := '11'O,
+ objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := '2233'O,
+ objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet := '4455'O,
+ vtBusyCodes := vtIsBusyExecutingACommand,
+ vtFunctionCode := '66'O}}}}
+ log(f_encode_J1939_message(valueof(t_commandedAddress)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+ log("--------------------------------------------")
+}
+
+testcase tc_encdec_getMemoryReq() runs on MTC_CT
+{
+ template J1939_messageWithPGN t_commandedAddress := {pgn := '00E700'O,
+ pdu := {ecu2vt := {getMemoryReq :=
+ { vtfunction := 192,
+ reserved2 := 'FF'O,
+ memoryRequired := 1234567}}}}
+ log(f_encode_J1939_message(valueof(t_commandedAddress)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_commandedAddress))))
+ log("--------------------------------------------")
+}
+
+testcase tc_encdec_getMemoryReq_with_template() runs on MTC_CT // using a template
+{
+ template J1939_messageWithPGN t_getMemoryReq := t_GetMemoryReq(1234567)
+ log(f_encode_J1939_message(valueof(t_getMemoryReq)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_getMemoryReq))))
+ log("--------------------------------------------")
+}
+
+testcase tc_encdec_workingSetMaintenanceReq() runs on MTC_CT // using a template
+{
+ template J1939_messageWithPGN t_workingSetMaintenanceReq := t_WorkingSetMaintenanceInd(
+ true,
+ compliantWithVTVersion4)
+ log(f_encode_J1939_message(valueof(t_workingSetMaintenanceReq)))
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(f_encode_J1939_message(valueof(t_workingSetMaintenanceReq))))
+ log("--------------------------------------------")
+}
+
+
+//testcase tc_dec_largemessage() runs on MTC_CT
+//{
+//
+// var octetstring j1939_pdu
+// //j1939_pdu := '18EAFFFE00EE00'O
+// //j1939_pdu := '18EEFFF83102032E003D0080'O
+// //j1939_pdu := '18EEFFF73102032E008200A0'O
+// //j1939_pdu := '18EAF8F8EBFE00'O
+// j1939_pdu := '18ECF8F810160004FFEBFE00'O
+//
+// // j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
+// // j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
+// // j1939_pdu := '03FE00F82A66696C65207365727665722A3139373136392A2D2A'O
+// // j1939_pdu := '03FE00262A6661726D20646973706C61792A3139373136392A2D2A'O
+// // j1939_pdu := '03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A'O
+// // j1939_pdu := '03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A'O
+// // j1939_pdu := '01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+// // j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+// // j1939_pdu := '01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+// // j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+// // j1939_pdu := '01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
+// // j1939_pdu := '02FE00FD016661726D20646973706C617920312E33372E31362E3733352A'O
+// // j1939_pdu := '02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A'O
+// // j1939_pdu := '02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A'O
+// // j1939_pdu := '9CFE0DF8FE01FFFFFFFFFFFFFF'O
+//
+// log(j1939_pdu)
+// log("--------------------------------------------")
+// log(f_decode_CAN_frame_j1939(j1939_pdu))
+// log("--------------------------------------------")
+//}
+
+testcase tc_dec_message1() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'fefeffffffff00ff'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message2() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'ff0104ffffffffff'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message3() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'c7ffffffffffffff'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message4() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'c7ff02cde001e001'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message5() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'c2ffffffffffffff'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message6() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'c200ffff7d48400c'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message7() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'C3FFFFFFFFFFFFFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message8() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'C3FFFFFFFF7F7FFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message9() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'C0FF00000000FFFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message10() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'C00400FFFFFFFFFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message11() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'DFFFFFFFFFFFFFFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message12() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'E00130303034333030'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message13() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e700'O
+ j1939_pdu := 'D130303034333030'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message14() runs on MTC_CT
+{
+
+ var J1939_PGN j1939_pgn
+ var octetstring j1939_pdu
+
+
+ j1939_pgn := '00e600'O
+ j1939_pdu := 'D1FFFFFFFF00FFFF'O
+
+ log(j1939_pgn, j1939_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn & j1939_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message15() runs on MTC_CT
+{
+
+ var octetstring j1939_pgn_and_pdu
+
+
+ j1939_pgn_and_pdu := '00E600E00130303032303036'O
+
+ log(j1939_pgn_and_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn_and_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message16() runs on MTC_CT
+{
+
+ var octetstring j1939_pgn_and_pdu
+
+
+ j1939_pgn_and_pdu := '00E700D130303032303036'O
+
+ log(j1939_pgn_and_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn_and_pdu))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_message17() runs on MTC_CT
+{
+
+ var octetstring j1939_pgn_and_pdu
+
+
+ j1939_pgn_and_pdu := '00E60009D00701FFFF01FF'O
+ j1939_pgn_and_pdu := '00E70009D00701FFFF01FF'O
+ j1939_pgn_and_pdu := '00E600FEF8D007FFFF00FF'O
+ j1939_pgn_and_pdu := '00E600B3FFFFDA5900FFFF'O
+ j1939_pgn_and_pdu := '00E700A82BD3FFBC0B0000'O
+ j1939_pgn_and_pdu := '00E600A82BD300BC0B0000'O
+ j1939_pgn_and_pdu := '00E700A82CD3FFBB0B0000'O
+ j1939_pgn_and_pdu := '00E600A82CD300BB0B0000'O
+ j1939_pgn_and_pdu := '00E700A82DD3FFBB0B0000'O
+ j1939_pgn_and_pdu := '00E600A82DD300BB0B0000'O
+ j1939_pgn_and_pdu := '00E600D1FFFFFFFF00FFFF'O
+ j1939_pgn_and_pdu := '00E700B3DA590B0066696C6520736572766572'O
+ j1939_pgn_and_pdu := '00E60009D00701FFFF00FF'O
+ j1939_pgn_and_pdu := '00E70009D00701FFFF00FF'O
+ j1939_pgn_and_pdu := '00E700B302D72B00746F756368206F72207072657373206B657920746F206D6F766520686572652066726F6D20565420233100'O
+ j1939_pgn_and_pdu := '00E600B3FFFF02D700FFFF'O
+ j1939_pgn_and_pdu := '00E700B3B42D08006E696E6775706578'O
+ j1939_pgn_and_pdu := '00E600B3FFFFB42D00FFFF'O
+ j1939_pgn_and_pdu := '00E700A875D6FFC4DA0000'O
+ j1939_pgn_and_pdu := '00E600A875D600C4DA0000'O
+ //..
+ j1939_pgn_and_pdu := '00E700AD0000ED03FFFFFF'O
+ j1939_pgn_and_pdu := '00E600ADED0300FFFFFFFF'O
+
+ log(j1939_pgn_and_pdu)
+ log("--------------------------------------------")
+ log(f_decode_J1939_message(j1939_pgn_and_pdu))
+ log("--------------------------------------------")
+}
+
+
+
+
+function f_reverse_j1939_name_withoutencoding(in J1939_NAME p_j1939_name)
+//runs on PTC_isobus_CT
+return J1939_NAME{
+ var J1939_NAME v_j1939_name_reverse :=
+
+ p_j1939_name[7]& p_j1939_name[6]& p_j1939_name[5]&
+ p_j1939_name[4]& p_j1939_name[3]& p_j1939_name[2]&
+ p_j1939_name[1]& p_j1939_name[0];
+ return v_j1939_name_reverse
+}
+
+// f_reverse_j1939_name() has the same behaviour as f_reverse_j1939_name_withoutencoding()
+
+function f_reverse_j1939_name(in J1939_NAME p_j1939_name)
+//runs on PTC_isobus_CT
+return J1939_NAME{
+ var J1939_NAME v_j1939_name_reverse := f_encode_J1939_name(p_j1939_name)
+
+ return v_j1939_name_reverse
+}
+
+testcase tc_dec_name_1() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E003D0080'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_2() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E008200A0'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_3() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E001D0080'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_4() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E008100A0'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_5() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E00800AA1'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_6() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E193D0B93'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name(f_decode_J1939_name(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_1() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E003D0080'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_2() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E008200A0'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_3() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E001D0080'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_4() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E008100A0'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_5() runs on MTC_CT
+{
+
+ var J1939_NAME j1939_name_reverse, j1939_name
+
+ j1939_name_reverse := '3102032E00800AA1'O
+
+ j1939_name := f_reverse_j1939_name(j1939_name_reverse)
+
+ log("j1939 name reverse:-------------------------")
+ log(j1939_name_reverse)
+ log("j1939 name----------------------------------")
+ log(j1939_name)
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(j1939_name))
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(f_decode_J1939_name_record(j1939_name)))
+ log("--------------------------------------------")
+}
+
+testcase tc_dec_name_record_encode_1() runs on MTC_CT
+{
+
+ var J1939_NAME_RECORD j1939_name_record := {
+ arbitraryAddresssBit := 1,
+ industryGroup := 2,
+ vehicleSystemInstance := 0,
+ vehicleSystem := 0,
+ reserved := 0,
+ function_ := 129,
+ functionInstance := 0,
+ ecuInstance := 0,
+ manufacturerCode := 368,
+ identityNumber := 999
+ }
+
+ log("j1939 name_record --------------------------")
+ log(j1939_name_record)
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(j1939_name_record))
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(f_encode_J1939_name_record(j1939_name_record)))
+ log("--------------------------------------------")
+}
+// result NAME = A00081002E0003E7
+
+testcase tc_dec_name_record_encode_2() runs on MTC_CT
+{
+
+ var J1939_NAME_RECORD j1939_name_record := {
+ arbitraryAddresssBit := 1,
+ industryGroup := 2,
+ vehicleSystemInstance := 0,
+ vehicleSystem := 0,
+ reserved := 0,
+ function_ := 128,
+ functionInstance := 0,
+ ecuInstance := 0,
+ manufacturerCode := 368,
+ identityNumber := 998
+ }
+
+ log("j1939 name_record --------------------------")
+ log(j1939_name_record)
+ log("--------------------------------------------")
+ log(f_encode_J1939_name_record(j1939_name_record))
+ log("--------------------------------------------")
+ log(f_decode_J1939_name_record(f_encode_J1939_name_record(j1939_name_record)))
+ log("--------------------------------------------")
+}
+
+// result NAME = A00080002E0003E6
+
+} with { encode "RAW" }
+
diff --git a/demo/Isobustest.ttcn b/demo/Isobustest.ttcn
deleted file mode 100644
index 943a8ab..0000000
--- a/demo/Isobustest.ttcn
+++ /dev/null
@@ -1,837 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB 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: Isobustest.ttcn
-// Description: Encoder / Decoder for Isobus message frames
-//
-// Revision R1A
-
-module Isobustest {
-
-import from General_Types all
-import from CanError all
-import from SocketCANtest all
-import from SocketCAN_Types all
-import from SocketCAN_PortType all
-import from SocketCAN_Templates all
-import from Can all
-import from Isobus all
-import from IsobusMessageTypes all
-import from Isobus_Templates all
-import from J1939 all
-
- import from IsobusNMMessageTypes all
-
-type union CAN_ID {
- OCT4 can_eff, // 29-bit can address
- OCT2 can_sff, // 11-bit can address
- RTR can_rtr,
- BIT29 can_err // up to 29 can error bits
-}
-
-type bitstring BIT29 length(29)
-type enumerated RTR { RTRNULL }
-
-type union Can_IDs {
- BIT29 can_eff, // CAN extended format
- BIT11 can_sff, // CAN basic format
- RTR can_rtr, // Remote Transmission Request (RTR), seldom used
- BIT29 can_err // CAN Error
-}
-with { variant "" }
-
-type record Can_IDwithType {
- INT1 cantype, // can_id >> 29 bit
- Can_IDs can_ids // can_id and4b '1FFFFFFF'O
-}
-with {
- variant (can_ids) "CROSSTAG(
- can_eff, cantype = 4;
- can_rtr, cantype = 2;
- can_err, cantype = 1;
- can_sff, cantype = 0)"
-}
-
-//component declarations
-type component MTC_CT
-{
-}
-
-type component PTC_isobus_CT
-{
- port SocketCAN_PT pt_socketCAN
- port Isobus_PT pt_isobus
- //variables
- //timers
- 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
-}
-
-type port Isobus_PT message {
- out CAN_frame_j1939
- in CAN_frame_j1939
-} with { extension "internal" }
-
-type port SyncMasterPort message {
- out PhaseStartReq
- in PhaseEndInd
-} with { extension "internal" }
-
-type port SyncSlavePort message {
- in PhaseStartReq
- out PhaseEndInd
-} with { extension "internal" }
-
-type record of PTC PTCSet
-
-
-type component PTC {
- port SyncSlavePort pt_sync
- port SocketCAN_PT pt_socketCAN
- var e_Phase v_phase := c_firstPhase
-}
-
-
-function f_open_socket2(in SocketCAN_open_socket_type v_socket_type)
-runs on PTC_isobus_CT
-return SocketCAN_socket_result {
-
- var SocketCAN_socket_result v_result
- timer t_guard
- t_guard.start(c_guard)
-
- var SocketCAN_socket socket
-
- if(v_socket_type==OPEN_CAN_RAW) {
- socket := {domain:=PF_CAN, ptype := SOCK_RAW, protocol:= CAN_RAW};
- } else if (v_socket_type == OPEN_CAN_BCM) {
- socket := {domain:=PF_CAN, ptype := SOCK_DGRAM, protocol:= CAN_BCM};
- }
- pt_socketCAN.send(socket)
-
- // receive response
- alt {
- [] pt_socketCAN.receive(
- a_SocketCAN_socket_result(a_result(SocketCAN_SUCCESS))) -> value v_result
- {log("SocketCan:Socket opened: ", v_result.id)}
- [] pt_socketCAN.receive(a_SocketCAN_socket_result(a_result(SocketCAN_ERROR)))
- {log("Received Opening Socket failed"); setverdict(fail)}
- [] t_guard.timeout {
- log("timeout!")
- setverdict(fail)}
- [] t_guard.timeout {
- log("timeout!")
- setverdict(fail)}
- }
- t_guard.stop
- return v_result
-}
-
-function f_open_raw2()
-runs on PTC_isobus_CT
-return SocketCAN_open_raw_result {
- var SocketCAN_socketid v_socket_id
- v_socket_id := f_open_socket2(OPEN_CAN_RAW).id
- var SocketCAN_ifr v_ifr
- v_ifr := f_ioctl_get_if_index2(v_socket_id).ifr
- var SocketCAN_bind_result v_bind_result
- v_bind_result := f_bind2(v_socket_id, v_ifr.if_index)
-
- var SocketCAN_open_raw_result v_result
- v_result := {ifr := v_ifr, socket_id := v_socket_id}
-
- return v_result
-}
-
-function f_ioctl_get_if_index2(in SocketCAN_socketid p_socket_id)
-runs on PTC_isobus_CT
-return SocketCAN_ioctl_result {
- var SocketCAN_ioctl_result v_result
- timer t_guard
- t_guard.start(c_guard)
-
- pt_socketCAN.send(SocketCAN_ioctl:{id:= p_socket_id, ifu := omit});
- // receive response
- alt {
- [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_SUCCESS))) -> value v_result
- {log("Retrieved interface index", v_result.ifr.if_index)}
- [] pt_socketCAN.receive(a_SocketCAN_ioctl_result(a_result(SocketCAN_ERROR)))
- {log("Retrieving interface index failed", p_socket_id); setverdict(fail)}
- [] t_guard.timeout {
- log("timeout!")
- setverdict(fail)
- }
- }
- return v_result
-}
-
-function f_bind2(in SocketCAN_socketid p_socket_id,
- in SocketCAN_if_index p_if_index)
-runs on PTC_isobus_CT
-return SocketCAN_bind_result {
- var SocketCAN_bind_result v_result
- timer t_guard
- t_guard.start(c_guard)
-
- pt_socketCAN.send(SocketCAN_bind:{id:= p_socket_id, bindu := {raw := {if_index:= p_if_index}}});
- alt {
- [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_SUCCESS))) -> value v_result
- {log("Binding socket", p_socket_id)}
- [] pt_socketCAN.receive(a_SocketCAN_bind_result(a_result(SocketCAN_ERROR))) {}
- [] t_guard.timeout {
- log("timeout!")
- setverdict(fail)
- }
- }
- return v_result
-}
-
-function f_close_socket2 (in SocketCAN_socketid p_socket_id)
-runs on PTC_isobus_CT {
- pt_socketCAN.send(SocketCAN_close:{id:= p_socket_id});
-}
-
-function f_behaviour_isobus(in PTC1_CT v_ptc1) runs on PTC_isobus_CT
-{
-
- map(self:pt_socketCAN, system:pt_socketCAN)
- connect(v_ptc1:pt_isobus, self:pt_isobus)
-
- var SocketCAN_socketid v_socket_id
- var SocketCAN_ifr v_ifr
- var SocketCAN_send_data_ifu v_ifu
-
- var SocketCAN_open_raw_result res
- res := f_open_raw2();
- v_socket_id := res.socket_id
- v_ifr := res.ifr
- v_ifu.if_name := v_ifr.if_name
-
- log("socket open(): ", res)
-
- var boolean condition3 := true
- //periodic reception
-
- while (condition3)
- {
- //var SocketCAN_socket_result v_result_socketcan
- var SocketCAN_receive_CAN_or_CAN_FD_frame v_result_socketcan
- //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)
- // 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)
- pt_isobus.send(v_CAN_frame_j1939) to v_ptc1
- } else {
- setverdict(inconc, "reception of canfd frame not expected")
- }
- }
- }//endalt
- }
- f_close_socket2(v_socket_id)
- disconnect(self:pt_isobus, v_ptc1:pt_isobus)
- unmap(self:pt_socketCAN, system:pt_socketCAN)
- setverdict(pass)
-}//endfunction
-
-
-function f_behaviour1_sync() runs on PTC1_CT
-{
-
- var boolean condition1 := true
- var CAN_frame_j1939 v_can_frame_j1939
- //periodic reception
-
- while (condition1)
- {
- //T1.start;
-
- alt
- {
-
- /* []syncport.receive("halt") {
- condition1:=false } */
-
- []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_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);
- // changed by MJ
-
- //receivedData := receivedUnacknowledgedData
- log ("received multipart frame", 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 := 6, 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))))
- log("--------------------------------------------")
-
- template CAN_frame_j1939 t_CAN_frame_j1939_2 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := 'FD'O, sa := 'C0'O }, can_pdu := { requestForAddressClaimed := {pgn := 123}} }
- log(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_2)))
- log("--------------------------------------------")
- 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 := 0, 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 := 6, res := '0'B, dp := '1'B, pf := 'E6'O , ps := 'FD'O, sa := '00'O }, can_pdu := { commandedAddress := {
- 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)))
- log("--------------------------------------------")
- log(f_decode_CAN_frame_j1939(f_encode_CAN_frame_j1939(valueof(t_CAN_frame_j1939_6))))
- log("--------------------------------------------")
-}
-
-testcase tc_encdec_vt2ecu_vtStatusReq() runs on MTC_CT
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu :=
- {vt2ecu := {vtStatusReq :=
- { vtfunction := 254,
- sourceAddressOfActiveWorkingSetMaster := '11'O,
- objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet := '2233'O,
- objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet := '4455'O,
- vtBusyCodes := vtIsBusyExecutingACommand,
- vtFunctionCode := '66'O}}}}
- 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_encdec_ecu2vt_getMemoryReq() runs on MTC_CT
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu :=
- {ecu2vt := {getMemoryReq :=
- { vtfunction := 194,
- reserved2 := 'FF'O,
- memoryRequired := 1234567,
- reserved7 := 'FF'O,
- reserved8 := 'FF'O}}}}
- 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_encdec_ecu2vt_getMemoryReq_with_templateI() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu :=
- {ecu2vt := {getMemoryReq := t_GetMemoryReq(1234567)}}}
- 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_encdec_ecu2vt_getMemoryReq_with_template_II() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, res := '0'B, dp := '0'B, pf := '00'O, ps := '00'O, sa := '00'O }, can_pdu :=
- t_GetMemoryReq_pdu(1234567)}
- 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_encdec_networkMessage_N_SP_Response_pdu_with_template() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := t_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O ,
- t_N_SP_Response_pdu(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O}))
- 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_encdec_networkMessage_N_SP_Response_with_template() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := t_network_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O ,
- {n_SP_Response := t_N_SP_Response(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O})})
- 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_encdec_N_SP_Response_with_template() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := t_message ( 1, '1'B, '0'B, '0A'O, '0B'O, '0C'O ,
- {networkMessage := {n_SP_Response := t_N_SP_Response(port_3, port_4, {'01'O,'02'O,'03'O,'04'O,'05'O,'06'O,'07'O})}})
- 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_encdec_ecu2vt_workingSetMaintenanceReq() runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, 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_encdec_etp_dt () runs on MTC_CT // using a template
-{
- template CAN_frame_j1939 t_CAN_frame_j1939 := { can_j1939 := { prio := 0, res := '1'B, dp := '1'B, pf := 'FE'O, ps := '00'O, sa := 'F8'O },
- can_pdu := { etp_dt := { seq_no := 105, data := '6C652073657276'O } } }
- 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
-{
-
- var octetstring j1939_pdu
- j1939_pdu := '98EAFFFE00EE00'O
-
- log(j1939_pdu)
- log("--------------------------------------------")
- log(f_decode_CAN_frame_j1939(j1939_pdu))
- log("--------------------------------------------")
-}
-
-
-testcase tc_dec_largemessage() runs on MTC_CT
-{
-
- var octetstring j1939_pdu
-//j1939_pdu := '18EAFFFE00EE00'O
-//j1939_pdu := '18EEFFF83102032E003D0080'O
-//j1939_pdu := '18EEFFF73102032E008200A0'O
-//j1939_pdu := '18EAF8F8EBFE00'O
-j1939_pdu := '18ECF8F810160004FFEBFE00'O
-
-// j1939_pdu := '00E726F8B3DA590B0066696C6520736572766572'O
-// j1939_pdu := '03FE00F8FE2A66696C65207365727665722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00F82A66696C65207365727665722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00262A6661726D20646973706C61792A3139373136392A2D2A'O
-// j1939_pdu := '03FE00F72A7461736B20636F6E74726F6C6C65722A3139373136392A2D2A'O
-// j1939_pdu := '03FE00FD2A6661726D20646973706C61792A3139373136392A2D2A'O
-// j1939_pdu := '01FD00F82D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00F72D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00262D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '01FD00FD2D2A3139373136392A2D2A2D2A6E696E67757065782A2D2A'O
-// j1939_pdu := '02FE00FD016661726D20646973706C617920312E33372E31362E3733352A'O
-// j1939_pdu := '02FE0026026661726D20646973706C617920312E33372E31362E3733352A69736F627573206C69627261727920312E32362E332E3932382A'O
-// j1939_pdu := '02FE00F8096E696E67757065782066696C6520736572766572207573657220696E74657266616365204E5820322E322E342E3237302A746F6F6C206C69627261727920322E34322E382E3834302A6C6F67206C69627261727920322E302E31312E3136342A636F6E66696775726174696F6E206C69627261727920312E31322E322E3139332A43414E20627573206861726477617265206C69627261727920312E31392E352E3139382A7365637572697479206C69627261727920312E31312E302E3332312A69736F627573206C69627261727920312E32362E332E3932382A69736F62757320636F6D6D6F6E206C69627261727920322E31322E302E3139332A66696C652073657276657220312E342E352E3235382A'O
-// j1939_pdu := '9CFE0DF8FE01FFFFFFFFFFFFFF'O
-
- log(j1939_pdu)
- log("--------------------------------------------")
- log(f_decode_CAN_frame_j1939(j1939_pdu))
- log("--------------------------------------------")
-}
-
-
-import from IsobusVTMessageTypes all
-
-testcase tc_decode_VT2ECU() runs on MTC_CT
-{
-
- var octetstring j1939_vt_pdu
- j1939_vt_pdu := 'c7ff02cde001e001'O
- j1939_vt_pdu := 'c200ffff7d48400c'O
- j1939_vt_pdu := 'c3ffffffff7f7fff'O
- j1939_vt_pdu := 'c00400ffffffffff'O
- j1939_vt_pdu := 'e00130303034333030'O
- j1939_vt_pdu := 'd1ffffffff00ffff'O
- j1939_vt_pdu := '09d00701ffff01ff'O
- j1939_vt_pdu := 'b3ffffda5900ffff'O
- j1939_vt_pdu := 'a82bd300bc0b0000'O
- j1939_vt_pdu := 'a82cd300bb0b0000'O
- j1939_vt_pdu := 'a82dd300bb0b0000'O
- j1939_vt_pdu := 'b3ffff02d700ffff'O
- j1939_vt_pdu := 'a875d600c4da0000'O
- j1939_vt_pdu := 'a876d600c2da0000'O
- j1939_vt_pdu := 'a877d600ffff0000'O
- j1939_vt_pdu := 'a878d600ffff0000'O
- j1939_vt_pdu := 'a879d600ffff0000'O
- j1939_vt_pdu := 'a87ad600ffff0000'O
- j1939_vt_pdu := 'a87bd600ffff0000'O
- j1939_vt_pdu := 'a87cd600ffff0000'O
- j1939_vt_pdu := 'a87dd600ffff0000'O
- j1939_vt_pdu := 'a87ed600ffff0000'O
- //j1939_vt_pdu := 'ade90300ffffffff'O
- //j1939_vt_pdu := '09d00700ffff00ff'O
-
- log(j1939_vt_pdu)
- log("--------------------------------------------")
- log(decode_VT2ECU(j1939_vt_pdu))
- log("--------------------------------------------")
-}
-
-//test case declarations
-testcase tc_Example001() 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_behaviour1_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
-
-
-//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
-{
-
-
- execute(tc_Example001())
-
-
-}//endcontrol
-
-} with { encode "RAW" }
-
diff --git a/demo/J1939.cfg b/demo/J1939.cfg
index 4825fd6..290e64d 100644
--- a/demo/J1939.cfg
+++ b/demo/J1939.cfg
@@ -28,5 +28,7 @@
[EXECUTE]
//CAN J1939 tests
-SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame
-SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame_parallel
+SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message
+SocketCAN_J1939_test.tc_can_j1939_send_and_receive_message_parallel
+J1939_Isobus_test.tc_can_j1939_IsobusVtEcuSimulation
+J1939_Isobus_test.tc_can_j1939_IsobusEcuSimulation
diff --git a/demo/J1939.ttcn b/demo/J1939.ttcn
deleted file mode 100644
index 404728b..0000000
--- a/demo/J1939.ttcn
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v2.0
-* which accompanies this distribution, and is available at
-* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-
-module J1939 {
-import from General_Types all;
-
-type record CAN_identifier {
-BIT3 priority,
-BIT1 reseved,
-BIT1 datapage,
-OCT1 pduformat,
-OCT1 destinationAddress,
-OCT1 sourceAddress
-}
-
-type OCT3 PGN
-
-}
diff --git a/demo/J1939_Isobus_test.ttcn b/demo/J1939_Isobus_test.ttcn
new file mode 100644
index 0000000..d1c4073
--- /dev/null
+++ b/demo/J1939_Isobus_test.ttcn
@@ -0,0 +1,230 @@
+/* Copyright (c) 2000-2019 Ericsson Telecom AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v2.0
+* which accompanies this distribution, and is available at
+* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+*
+* Contributors:
+* Michael Josenhans
+******************************************************************************/
+//
+// File: SocketCAN_J1939_test.ttcn
+// Description: SocketCAN J1939 testcases for J1939 messages
+//
+
+
+
+module J1939_Isobus_test
+{
+import from J1939 all
+import from Isobus_test all
+
+testcase tc_can_j1939_IsobusVtEcuSimulation() runs on MTC {
+
+ // before running this test cases start the j1939 address claim deamons via commandline
+ /*
+
+ j1939acd -r 100,80-120 -c /tmp/A00080002E0003E6.jacd A00080002E0003E6 vcan0
+ j1939acd -r 100,80-120 -c /tmp/A00081002E0003E7.jacd A00081002E0003E7 vcan0
+ */
+
+ var PTCAdapter v_ptc_J1939VTAdapter := PTCAdapter.create("PTC1_ptc_j1939VTAdapter") alive
+ var PTCAdapter v_ptc_J1939ECUAdapter := PTCAdapter.create("PTC2_ptc_j1939ECUAdapter") alive
+ var PTC_Isobus_VT_CT v_ptc_J1939VTApplication := PTC_Isobus_VT_CT.create("PTC1_ptc_j1939VTApplication") alive
+ var PTC_Isobus_VT_VTSTATUSCycleSend_CT v_ptc_J1939VT_VTStatusCycleSend := PTC_Isobus_VT_VTSTATUSCycleSend_CT.create("PTC_Isobus_VT_VTSTATUSCycleSend") alive
+ var PTC_Isobus_ECU_CT v_ptc_J1939ECUApplication := PTC_Isobus_ECU_CT.create("PTC2_ptc_j1939ECUApplication") alive
+ var PTC_Isobus_ECU_VTSTATUSCycleReceive_CT v_ptc_J1939_VTStatusCycleReceive := PTC_Isobus_ECU_VTSTATUSCycleReceive_CT.create("PTC_Isobus_VT_VTSTATUSCycleReceive") alive
+ var PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend := PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT. create( "PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend" ) alive;
+
+
+ f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939VTAdapter}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939ECUAdapter}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_VT_CT:=v_ptc_J1939VTApplication}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_VT_VTSTATUSCycleSend_CT:=v_ptc_J1939VT_VTStatusCycleSend}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_CT:=v_ptc_J1939ECUApplication}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_VTSTATUSCycleReceive_CT:=v_ptc_J1939_VTStatusCycleReceive}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT:=v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend}, v_PTCSet);
+
+ connect(mtc:pt_sync, v_ptc_J1939VTAdapter:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939ECUAdapter:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939VTApplication:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939VT_VTStatusCycleSend:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939ECUApplication:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939_VTStatusCycleReceive:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_sync)
+
+
+ connect(v_ptc_J1939VTAdapter:pt_j1939PDU, v_ptc_J1939VTApplication:pt_j1939PDU)
+ connect(v_ptc_J1939VT_VTStatusCycleSend:pt_VTStatusTick, v_ptc_J1939VTApplication:pt_VTStatusTick)
+ connect(v_ptc_J1939ECUAdapter:pt_j1939PDU, v_ptc_J1939ECUApplication:pt_j1939PDU)
+ connect(v_ptc_J1939ECUApplication:pt_VTStatusTick, v_ptc_J1939_VTStatusCycleReceive:pt_VTStatusTick)
+ connect(v_ptc_J1939_VTStatusCycleReceive:pt_WorkingSetMaintenaceOnOff, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenaceOnOff)
+ connect(v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenance, v_ptc_J1939ECUApplication:pt_WorkingSetMaintenance)
+
+
+
+ const integer c_send_prio := 2
+ const J1939_NAME c_name_VT := 'A00080002E0003E6'O
+ const J1939_NAME c_name_ECU := 'A00081002E0003E7'O
+
+ v_ptc_J1939VTAdapter.start(f_ptc_J1939Adapter(
+ e_testbody1,
+ c_send_prio,
+ c_name_VT)) /* name source */
+
+ v_ptc_J1939ECUAdapter.start(f_ptc_J1939Adapter(
+ e_testbody1,
+ c_send_prio,
+ c_name_ECU ))/* name source */
+
+ v_ptc_J1939VTApplication.start(f_ptc_J1939VTApplication(e_testbody1));
+ v_ptc_J1939ECUApplication.start(f_ptc_J1939ECUApplication(e_testbody1));
+
+ v_ptc_J1939VT_VTStatusCycleSend.start(f_ptc_J1939VTStatusCycleSend(e_testbody1));
+
+ v_ptc_J1939_VTStatusCycleReceive.start(f_ptc_J1939_VTStatusCycleReceive(e_testbody1));
+
+ v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend.start(J1939_ECU_WorkingSetMaintenanceIndCycleSend(e_testbody1))
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ f_haltAllComponents()
+ f_awaitAllComponentsHalt()
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(v_ptc_J1939VTAdapter:pt_j1939PDU, v_ptc_J1939VTApplication:pt_j1939PDU)
+ disconnect(v_ptc_J1939ECUAdapter:pt_j1939PDU, v_ptc_J1939ECUApplication:pt_j1939PDU)
+
+ all component.kill;
+}
+
+testcase tc_can_j1939_IsobusVtSimulation() runs on MTC {
+
+ // before running this test cases start the j1939 address claim deamons via commandline
+ /*
+ j1939acd -r 100,80-120 -c /tmp/A00080002E0003E6.jacd A00080002E0003E6 vcan0
+ */
+
+ var PTCAdapter v_ptc_J1939VTAdapter := PTCAdapter.create("PTC1_ptc_j1939VTAdapter") alive
+ var PTC_Isobus_VT_CT v_ptc_J1939VTApplication := PTC_Isobus_VT_CT.create("PTC1_ptc_j1939VTApplication") alive
+ var PTC_Isobus_VT_VTSTATUSCycleSend_CT v_ptc_J1939VT_VTStatusCycleSend := PTC_Isobus_VT_VTSTATUSCycleSend_CT.create("PTC_Isobus_VT_VTSTATUSCycleSend") alive
+
+ f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939VTAdapter}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_VT_CT:=v_ptc_J1939VTApplication}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_VT_VTSTATUSCycleSend_CT:=v_ptc_J1939VT_VTStatusCycleSend}, v_PTCSet);
+
+ connect(mtc:pt_sync, v_ptc_J1939VTAdapter:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939VTApplication:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939VT_VTStatusCycleSend:pt_sync)
+
+
+ connect(v_ptc_J1939VTAdapter:pt_j1939PDU, v_ptc_J1939VTApplication:pt_j1939PDU)
+ connect(v_ptc_J1939VT_VTStatusCycleSend:pt_VTStatusTick, v_ptc_J1939VTApplication:pt_VTStatusTick)
+
+ const integer c_send_prio := 2
+ const J1939_NAME c_name_VT := 'A00080002E0003E6'O
+
+ v_ptc_J1939VTAdapter.start(f_ptc_J1939Adapter(
+ e_testbody1,
+ c_send_prio,
+ c_name_VT)) /* name source */
+
+ v_ptc_J1939VTApplication.start(f_ptc_J1939VTApplication(e_testbody1));
+
+ v_ptc_J1939VT_VTStatusCycleSend.start(f_ptc_J1939VTStatusCycleSend(e_testbody1));
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ f_haltAllComponents()
+ f_awaitAllComponentsHalt()
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(v_ptc_J1939VTAdapter:pt_j1939PDU, v_ptc_J1939VTApplication:pt_j1939PDU)
+
+ all component.kill;
+}
+
+testcase tc_can_j1939_IsobusEcuSimulation() runs on MTC {
+
+ // before running this test cases start the j1939 address claim deamons via commandline
+ /*
+ j1939acd -r 100,80-120 -c /tmp/A00081002E0003E7.jacd A00081002E0003E7 vcan0
+ */
+
+ var PTCAdapter v_ptc_J1939ECUAdapter := PTCAdapter.create("PTC2_ptc_j1939ECUAdapter") alive
+ var PTC_Isobus_ECU_CT v_ptc_J1939ECUApplication := PTC_Isobus_ECU_CT.create("PTC2_ptc_j1939ECUApplication") alive
+ var PTC_Isobus_ECU_VTSTATUSCycleReceive_CT v_ptc_J1939_VTStatusCycleReceive := PTC_Isobus_ECU_VTSTATUSCycleReceive_CT.create("PTC_Isobus_VT_VTSTATUSCycleReceive") alive
+ var PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend := PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT. create( "PTC_Isobus_ECU_WorkingSetMaintenanceIndCycleSend" ) alive;
+
+ f_addSyncSlaveSet({ptc_Adapter:=v_ptc_J1939ECUAdapter}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_CT:=v_ptc_J1939ECUApplication}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_VTSTATUSCycleReceive_CT:=v_ptc_J1939_VTStatusCycleReceive}, v_PTCSet);
+ f_addSyncSlaveSet({ptc_Isobus_ECU_WorkingSetMaintenanceIndCycleSend_CT:=v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend}, v_PTCSet);
+
+ connect(mtc:pt_sync, v_ptc_J1939ECUAdapter:pt_sync)
+
+ connect(mtc:pt_sync, v_ptc_J1939ECUApplication:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939_VTStatusCycleReceive:pt_sync)
+ connect(mtc:pt_sync, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_sync)
+
+
+ connect(v_ptc_J1939ECUAdapter:pt_j1939PDU, v_ptc_J1939ECUApplication:pt_j1939PDU)
+ connect(v_ptc_J1939ECUApplication:pt_VTStatusTick, v_ptc_J1939_VTStatusCycleReceive:pt_VTStatusTick)
+ connect(v_ptc_J1939_VTStatusCycleReceive:pt_WorkingSetMaintenaceOnOff, v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenaceOnOff)
+ connect(v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend:pt_WorkingSetMaintenance, v_ptc_J1939ECUApplication:pt_WorkingSetMaintenance)
+
+
+
+ const integer c_send_prio := 2
+ const J1939_NAME c_name_ECU := 'A00081002E0003E7'O
+
+ v_ptc_J1939ECUAdapter.start(f_ptc_J1939Adapter(
+ e_testbody1,
+ c_send_prio,
+ c_name_ECU ))/* name source */
+
+ v_ptc_J1939ECUApplication.start(f_ptc_J1939ECUApplication(e_testbody1));
+
+ v_ptc_J1939_VTStatusCycleReceive.start(f_ptc_J1939_VTStatusCycleReceive(e_testbody1));
+
+ v_ptc_J1939_ECU_WorkingSetMaintenanceIndCycleSend.start(J1939_ECU_WorkingSetMaintenanceIndCycleSend(e_testbody1))
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ f_haltAllComponents()
+ f_awaitAllComponentsHalt()
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(v_ptc_J1939ECUAdapter:pt_j1939PDU, v_ptc_J1939ECUApplication:pt_j1939PDU)
+
+ all component.kill;
+}
+
+//=========================================================================
+// Control
+//=========================================================================
+
+// Insert control part here if applicable!
+
+} // end of module
diff --git a/demo/J1939test.ttcn b/demo/J1939test.ttcn
index a0e4d19..7db1488 100644
--- a/demo/J1939test.ttcn
+++ b/demo/J1939test.ttcn
@@ -20,7 +20,7 @@
import from SocketCAN_Templates all;
import from J1939 all;
-const float c_guard := 10.0
+const float c_guard := 50.0
type enumerated SocketCAN_open_socket_type
{
@@ -83,7 +83,6 @@
type record of PTC PTCSet
-
type component PTC {
port SyncSlavePort pt_sync
port SocketCAN_PT pt_socketCAN
@@ -446,16 +445,65 @@
p_peer_addr,
p_peer_name,
p_j1939_pdu__expected)) -> value v_result
- {log("SocketCan:Expected frame received", v_result)}
+ {
+ log("SocketCan:Expected frame received", v_result)
+ setverdict(pass)
+ }
[] pt_socketCAN.receive(SocketCAN_receive_j1939_message:?) -> value v_result
- {log("SocketCan:Unexpected frame received!", v_result)
- setverdict(fail)}
+ {
+ log("SocketCan:Unexpected frame received!", v_result)
+ }
[] t_guard.timeout {
log("timeout!")
setverdict(fail)}
}
}
+function f_receive_messages_until_expected_message_got_j1939_data(
+ in SocketCAN_socketid p_socket_id,
+ template SocketCAN_ifr p_ifr,
+ template J1939_PGN p_peer_pgn,
+ template J1939_ADDR p_peer_addr,
+ template J1939_NAME p_peer_name,
+ template SocketCAN_J1939_PDU p_j1939_pdu__expected)
+runs on PTC {
+ var SocketCAN_receive_j1939_message v_result
+
+ timer t_guard
+ t_guard.start(c_guard)
+ var boolean exitloop := true
+
+ while (exitloop == true)
+ {
+ // receive frame or timeout
+ log("SocketCan:Waiting for frame")
+ // receive frame or timeout
+ alt {
+ [] pt_socketCAN.receive(a_SocketCAN_receive_j1939_message(
+ p_socket_id,
+ p_ifr,
+ p_peer_pgn,
+ p_peer_addr,
+ p_peer_name,
+ p_j1939_pdu__expected)) -> value v_result
+ {
+ log("SocketCan:Expected frame received", v_result)
+ exitloop := false
+ setverdict(pass)
+ }
+// [] pt_socketCAN.receive(SocketCAN_receive_j1939_message:?) -> value v_result
+// {
+// log("SocketCan:Unexpected frame received!", v_result)
+// }
+ [] t_guard.timeout
+ {
+ log("timeout!")
+ exitloop := false
+ setverdict(fail)
+ }
+ }
+ }
+}
function f_setsockopt(in SocketCAN_socketid p_socket_id,
in SocketCAN_setsockopt_commandu p_command)
@@ -523,13 +571,12 @@
p_j1939_addr_source)
var SocketCAN_setsockopt_result v_setsockopt_result
v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
- v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
f_sendPhaseEndInd()
alt_awaitPhaseStartReq(p_phase)
var SocketCAN_j1939_send_data_to_result send_data_to_result
var J1939_hdr v_j1939_destination := {
- //name := p_j1939_name_source,
+ //name := p_j1939_name_destination,
pgn := p_j1939_pgn_destination,
addr:= p_j1939_addr_destination}
@@ -547,6 +594,105 @@
f_sendPhaseEndInd()
}
+function f_ptc_J1939SendToNameInitiator(
+ in e_Phase p_phase,
+ in J1939_Priority p_send_prio,
+ in J1939_NAME p_j1939_name_source,
+ in J1939_PGN p_j1939_pgn_destination,
+ in J1939_NAME p_j1939_name_destination,
+ in SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_source,
+ J1939_NO_PGN, /* p_j1939_pgn_source */
+ J1939_NO_ADDR /* p_j1939_addr_source */)
+ var SocketCAN_setsockopt_result v_setsockopt_result
+ v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(p_phase)
+ var SocketCAN_j1939_send_data_to_result send_data_to_result
+ var J1939_hdr v_j1939_destination := {
+ name := p_j1939_name_destination,
+ pgn := p_j1939_pgn_destination
+ //addr:= p_j1939_addr_destination
+ }
+
+ send_data_to_result := f_j1939_send_data_to(
+ v_socket_id,
+ v_ifr.if_index,
+ v_j1939_destination,
+ p_pdu_send)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(e_close_socket)
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+ f_sendPhaseEndInd()
+}
+
+function f_ptc_J1939SendToGlobalAddressInitiator(
+ in e_Phase p_phase,
+ in J1939_Priority p_send_prio,
+ in J1939_NAME p_j1939_name_source,
+ in J1939_PGN p_j1939_pgn_destination,
+ in SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_source,
+ J1939_NO_PGN, /* p_j1939_pgn_source */
+ J1939_NO_ADDR /* p_j1939_addr_source */)
+ var SocketCAN_setsockopt_result v_setsockopt_result
+ v_setsockopt_result := f_setsockopt(v_socket_id, {j1939_prio:=p_send_prio})
+ f_sendPhaseEndInd()
+ const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable}
+
+ // configure broadcast:
+ v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+
+
+ alt_awaitPhaseStartReq(p_phase)
+ var SocketCAN_j1939_send_data_to_result send_data_to_result
+ var J1939_hdr v_j1939_destination := {
+ //name := p_j1939_name_destination,
+ pgn := p_j1939_pgn_destination,
+ addr:= J1939_NO_ADDR /*addr_destination */
+ }
+
+ send_data_to_result := f_j1939_send_data_to(
+ v_socket_id,
+ v_ifr.if_index,
+ v_j1939_destination,
+ p_pdu_send)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(e_close_socket)
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+ f_sendPhaseEndInd()
+}
function f_ptc_J1939SendInitiatorWithConnect(
in e_Phase p_phase,
@@ -634,6 +780,136 @@
f_sendPhaseEndInd()
}
+function f_ptc_J1939FrameReceiverByName(
+ in e_Phase p_phase,
+ in J1939_NAME p_j1939_name_local,
+ template J1939_PGN p_pgn_local,
+ template J1939_ADDR p_peer_addr,
+ template J1939_NAME p_peer_name,
+ template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_local,
+ J1939_NO_PGN,
+ J1939_NO_ADDR)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(p_phase)
+ f_receive_j1939_data(
+ v_socket_id,
+ v_ifr,
+ p_pgn_local,
+ p_peer_addr,
+ p_peer_name,
+ p_j1939_pdu_expected)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(e_close_socket)
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+ f_sendPhaseEndInd()
+}
+
+
+function f_ptc_J1939FrameBroadcastReceiver(
+ in e_Phase p_phase,
+ in J1939_NAME p_j1939_name_local,
+ template J1939_PGN p_pgn_local,
+ template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_local,
+ J1939_NO_PGN,
+ J1939_NO_ADDR)
+ var SocketCAN_setsockopt_result v_setsockopt_result
+ const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable}
+
+ // configure broadcast:
+ v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
+
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(p_phase)
+ f_receive_j1939_data(
+ v_socket_id,
+ v_ifr,
+ p_pgn_local,
+ ?, /* p_peer_addr */
+ ?, /* p_peer_name */
+ p_j1939_pdu_expected)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(e_close_socket)
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+ f_sendPhaseEndInd()
+}
+
+function f_ptc_J1939FrameReceiverUntilExpectedMessage(
+ in e_Phase p_phase,
+ in J1939_NAME p_j1939_name_source,
+ in J1939_PGN p_j1939_pgn_source,
+ in J1939_ADDR p_j1939_addr_source,
+ template J1939_PGN p_peer_pgn,
+ template J1939_ADDR p_peer_addr,
+ template J1939_NAME p_peer_name,
+ template SocketCAN_J1939_PDU p_j1939_pdu_expected) runs on PTC {
+ map(self:pt_socketCAN, system:pt_socketCAN)
+ var SocketCAN_socketid v_socket_id
+ var SocketCAN_ifr v_ifr
+
+ alt_awaitPhaseStartReq(e_open_socket)
+ var SocketCAN_open_j1939_result res
+ res := f_open_j1939()
+ v_socket_id := res.socket_id
+ v_ifr := res.ifr
+ var SocketCAN_bind_result v_bind_result
+ v_bind_result := f_bind(v_socket_id,
+ v_ifr.if_index,
+ p_j1939_name_source,
+ p_j1939_pgn_source,
+ p_j1939_addr_source)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(p_phase)
+ f_receive_messages_until_expected_message_got_j1939_data(
+ v_socket_id,
+ v_ifr,
+ p_peer_pgn,
+ p_peer_addr,
+ p_peer_name,
+ p_j1939_pdu_expected)
+ f_sendPhaseEndInd()
+
+ alt_awaitPhaseStartReq(e_close_socket)
+ f_close_socket (v_socket_id)
+ unmap(self:pt_socketCAN, system:pt_socketCAN)
+ setverdict(pass)
+ f_sendPhaseEndInd()
+}
+
function f_ptc_J1939SendInitiatorDynamic(in e_Phase p_phase,
in J1939_NAME p_j1939_name_source,
in J1939_NAME p_j1939_name_destination,
@@ -664,7 +940,7 @@
var SocketCAN_setsockopt_result v_setsockopt_result
const SocketCAN_setsockopt_commandu c_commandu_activate_broadcast := {j1939_broadcast := Enable}
- // configure filters:
+ // configure broadcast:
v_setsockopt_result := f_setsockopt(v_socket_id, c_commandu_activate_broadcast)
// configure filters:
const J1939_filter c_j1939_filter0 := {
@@ -870,16 +1146,17 @@
pgn := J1939_PGN_ADDRESS_CLAIMED,
addr:= J1939_NO_ADDR}
- var J1939_NAME v_j1939_name_source_reverse :=
- p_j1939_name_source[7]& p_j1939_name_source[6]& p_j1939_name_source[5]&
- p_j1939_name_source[4]& p_j1939_name_source[3]& p_j1939_name_source[2]&
- p_j1939_name_source[1]& p_j1939_name_source[0]
+ var J1939_NAME v_j1939_name_encoded := f_encode_J1939_name(p_j1939_name_source)
+// p_j1939_name_source[7]& p_j1939_name_source[6]& p_j1939_name_source[5]&
+// p_j1939_name_source[4]& p_j1939_name_source[3]& p_j1939_name_source[2]&
+// p_j1939_name_source[1]& p_j1939_name_source[0]
+
send_data_to_result := f_j1939_send_data_to(
v_socket_id,
v_ifr.if_index,
v_j1939_destination,
- v_j1939_name_source_reverse /*p_pdu_send*/)
+ v_j1939_name_encoded /*p_pdu_send*/)
f_sendPhaseEndInd()
@@ -890,7 +1167,7 @@
f_sendPhaseEndInd()
}
-function f_j1939_address_claim2(in e_Phase p_phase,
+function f_j1939_request_for_address_claimed(in e_Phase p_phase,
in J1939_NAME p_j1939_name_source,
in SocketCAN_J1939_PDU p_pdu_send) runs on PTC {
map(self:pt_socketCAN, system:pt_socketCAN)
@@ -948,7 +1225,7 @@
name := omit,
pgn := J1939_PGN_REQUEST,
addr:= J1939_NO_ADDR}
-
+
send_data_to_result := f_j1939_send_data_to(
v_socket_id,
v_ifr.if_index,
diff --git a/demo/Makefile b/demo/Makefile
index b47299d..aea14be 100644
--- a/demo/Makefile
+++ b/demo/Makefile
@@ -86,13 +86,14 @@
TTCN3_MODULES = ../src/Bcm.ttcn ../src/Can.ttcn ../src/CanError.ttcn ../src/General_Types.ttcn ../src/Raw.ttcn \
SocketCAN_BCM_test.ttcn ../src/SocketCAN_PortType.ttcn SocketCAN_RAW_test.ttcn ../src/SocketCAN_Templates.ttcn \
../src/SocketCAN_Types.ttcn ../src/J1939.ttcn \
-SocketCANtest.ttcn Isobus.ttcn Isobustest.ttcn IsobusMessageTypes.ttcn \
-Isobus_Templates.ttcn IsobusNMMessageTypes.ttcn IsobusCMMessageTypes.ttcn IsobusVTMessageTypes.ttcn \
+SocketCANtest.ttcn Isobus.ttcn IsobusMessageTypes.ttcn \
+IsobusVT_Templates.ttcn IsobusNMMessageTypes.ttcn IsobusCMMessageTypes.ttcn IsobusVTMessageTypes.ttcn \
Isotp.ttcn Isotptest.ttcn \
CAN_matrix_general_types.ttcn CAN_matrix_test.ttcn CAN_matrix.ttcn CAN_matrix_messages.ttcn CANFD_matrix_messages.ttcn \
CAN_matrix_signals.ttcn CAN_matrix_templates.ttcn \
UnifiedDiagnosticServices.ttcn UnifiedDiagnosticServicestest.ttcn UnifiedDiagnosticServices_Template.ttcn \
-J1939test.ttcn SocketCAN_J1939_test.ttcn
+J1939test.ttcn SocketCAN_J1939_test.ttcn Isobus_test.ttcn J1939_Isobus_test.ttcn \
+Isobus_test_encoder.ttcn
# ASN.1 modules of this project:
ASN1_MODULES =
@@ -102,13 +103,14 @@
GENERATED_SOURCES = Bcm.cc Can.cc CanError.cc General_Types.cc Raw.cc \
SocketCAN_BCM_test.cc SocketCAN_PortType.cc SocketCAN_RAW_test.cc SocketCAN_Templates.cc \
SocketCAN_Types.cc J1939.cc \
-SocketCANtest.cc Isobus.cc Isobustest.cc IsobusMessageTypes.cc \
-Isobus_Templates.cc IsobusNMMessageTypes.cc IsobusCMMessageTypes.cc IsobusVTMessageTypes.cc \
+SocketCANtest.cc Isobus.cc IsobusMessageTypes.cc \
+IsobusVT_Templates.cc IsobusNMMessageTypes.cc IsobusCMMessageTypes.cc IsobusVTMessageTypes.cc \
Isotp.cc Isotptest.cc \
CAN_matrix_general_types.cc CAN_matrix_test.cc CAN_matrix.cc CAN_matrix_messages.cc CANFD_matrix_messages.cc \
CAN_matrix_signals.cc CAN_matrix_templates.cc \
UnifiedDiagnosticServices.cc UnifiedDiagnosticServicestest.cc UnifiedDiagnosticServices_Template.cc \
-J1939test.cc SocketCAN_J1939_test.cc
+J1939test.cc SocketCAN_J1939_test.cc Isobus_test.cc J1939_Isobus_test.cc \
+Isobustest_test_encoder.cc
GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
diff --git a/demo/SocketCAN_J1939_test.ttcn b/demo/SocketCAN_J1939_test.ttcn
index 64b8da4..6dd2bee 100644
--- a/demo/SocketCAN_J1939_test.ttcn
+++ b/demo/SocketCAN_J1939_test.ttcn
@@ -62,7 +62,7 @@
return v_pdu
}
-testcase tc_can_j1939_send_and_receive_can_frame() runs on MTC {
+testcase tc_can_j1939_send_and_receive_message() runs on MTC {
var PTC v_ptc_j1939SendInitiator := PTC.create("PTC1_ptc_j1939SendInitiator") alive
var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
@@ -80,8 +80,18 @@
var octetstring v_pdu_send := ''O
+
+ // According to ETP specification messages of 117440505 Bytes are possible,
+ // however the maximum possible message size for the current Linux kernels
+ // ETP implemantion messages depends upon the available RAM.
+ // Tests on my Laptop have shown that 4193975 bytes work
+ // When using very large messages, disable logging by commenting out
+ // the following lines in J1939.cfg and set the test cases guard timer
+ // c_guard appropriate (e.g. 100s):
+ // FileMask := LOG_ALL | DEBUG | MATCHING
+ // ConsoleMask := LOG_ALL | DEBUG | MATCHING
//v_pdu_send := create_octetstring_of_size(117440505)
-
+
v_pdu_send := create_octetstring_of_size (4193975) //4193976
log("length of v_pdu_send: ", lengthof(v_pdu_send))
@@ -99,8 +109,8 @@
c_addr_destination1, /* p_j1939_addr_source */
c_pgn_destination1, /* p_peer_pgn */
c_addr_source1, /* p_peer_addr */
- J1939_NO_NAME, /* p_peer_name */
- v_pdu_send /* p_j1939_pdu_expected */))
+ J1939_NO_NAME, /* p_peer_name */
+ v_pdu_send /* p_j1939_pdu_expected */))
var e_Phase v_phase
@@ -119,7 +129,7 @@
all component.kill;
}
-testcase tc_can_j1939_send_and_receive_can_frame_parallel() runs on MTC {
+testcase tc_can_j1939_send_and_receive_message_parallel() runs on MTC {
var PTC v_ptc_j1939SendInitiator1 := PTC.create("PTC1_ptc_j1939SendInitiator1") alive
var PTC v_ptc_j1939FrameReceiver1 := PTC.create("PTC2_ptc_j1939FrameReceiver1") alive
var PTC v_ptc_j1939SendInitiator2 := PTC.create("PTC1_ptc_j1939SendInitiator2") alive
@@ -145,8 +155,10 @@
var octetstring v_pdu_send2 := ''O
//v_pdu_send := create_octetstring_of_size(117440505)
v_pdu_send1 := create_octetstring_of_size(4193976)
+ //v_pdu_send1 := create_octetstring_of_size(2093976)
log("length of v_pdu_send1: ", lengthof(v_pdu_send1))
v_pdu_send2 := create_octetstring_of_size(4193976)
+ //v_pdu_send2 := create_octetstring_of_size(2093976)
log("length of v_pdu_send2: ", lengthof(v_pdu_send2))
v_ptc_j1939SendInitiator1.start(f_ptc_J1939SendInitiator(
@@ -198,14 +210,14 @@
all component.kill;
}
-testcase tc_can_f_j1939_address_claim() runs on MTC {
+testcase tc_can_j1939_address_claim() runs on MTC {
var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive
f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)
connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
- const J1939_NAME c_j1939_name_source := '1122334455667788'O
+ const J1939_NAME c_j1939_name_source := '1122334455667789'O
v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim(
e_testbody1,
@@ -228,17 +240,128 @@
all component.kill;
}
-testcase tc_can_f_j1939_address_claim2() runs on MTC {
- var PTC v_ptc_j1939AddressClaimInitiator := PTC.create("PTC1_ptc_j1939AddressClaimInitiator") alive
+testcase tc_can_j1939_send_to_name_and_receive_message() runs on MTC {
+// before running this test cases start the j1939 address claim deamons via commandline
+//j1939acd -r 100,80-120 -c /tmp/1122334455667789.jacd 1122334455667789
+//j1939acd -r 100,80-120 -c /tmp/1122334455667788.jacd 1122334455667788
- f_addSyncSlaveSet(v_ptc_j1939AddressClaimInitiator, v_PTCSet)
+ var PTC v_ptc_j1939SendInitiatorECU := PTC.create("PTC1_ptc_j1939SendInitiatorECU") alive
+ var PTC v_ptc_j1939FrameReceiverVT := PTC.create("PTC2_ptc_j1939FrameReceiverVT") alive
- connect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
+ f_addSyncSlaveSet(v_ptc_j1939SendInitiatorECU, v_PTCSet)
+ f_addSyncSlaveSet(v_ptc_j1939FrameReceiverVT, v_PTCSet)
- const J1939_NAME c_j1939_name_source := '1122334455667788'O
+ connect(mtc:pt_sync, v_ptc_j1939SendInitiatorECU:pt_sync)
+ connect(mtc:pt_sync, v_ptc_j1939FrameReceiverVT:pt_sync)
+
+
+ const J1939_NAME c_name_VT := '1122334455667788'O
+ const J1939_NAME c_name_ECU := '1122334455667789'O
+ const integer c_send_prio := 2
+ const octetstring c_pgn_ECU2VT := '00E700'O // ECU to VT
+
+
+
+ var octetstring v_pdu_send := 'FEFEFFFFFFFF00FF'O
+
+ v_ptc_j1939SendInitiatorECU.start(f_ptc_J1939SendToNameInitiator(
+ e_testbody3,
+ c_send_prio,
+ c_name_ECU, /* name source */
+ c_pgn_ECU2VT, /* pgn destination */
+ c_name_VT, /* name destination */
+ v_pdu_send))
+
+ v_ptc_j1939FrameReceiverVT.start(f_ptc_J1939FrameReceiverByName(
+ e_testbody4,
+ c_name_VT, /* p_j1939_name_local */
+ c_pgn_ECU2VT, /* p_pgn_local */
+ J1939_NO_ADDR, /* p_peer_addr */
+ c_name_ECU, /* p_peer_name */
+ v_pdu_send /* p_j1939_pdu_expected */))
+
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(mtc:pt_sync, v_ptc_j1939SendInitiatorECU:pt_sync)
+ disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiverVT:pt_sync)
+ all component.kill;
+}
+
+testcase tc_can_j1939_send_to_global_address_and_receive_message() runs on MTC {
+// before running this test cases start the j1939 address claim deamons via commandline
+//j1939acd -r 100,80-120 -c /tmp/1122334455667789.jacd 1122334455667789
+//j1939acd -r 100,80-120 -c /tmp/1122334455667788.jacd 1122334455667788
+
+ var PTC v_ptc_j1939SendInitiatorVT := PTC.create("PTC1_ptc_j1939SendInitiatorVT") alive
+ var PTC v_ptc_j1939FrameReceiverECU := PTC.create("PTC2_ptc_j1939FrameReceiverECU") alive
+
+ f_addSyncSlaveSet(v_ptc_j1939SendInitiatorVT, v_PTCSet)
+ f_addSyncSlaveSet(v_ptc_j1939FrameReceiverECU, v_PTCSet)
+
+ connect(mtc:pt_sync, v_ptc_j1939SendInitiatorVT:pt_sync)
+ connect(mtc:pt_sync, v_ptc_j1939FrameReceiverECU:pt_sync)
+
+
+ const J1939_NAME c_name_VT := '1122334455667788'O
+ const J1939_NAME c_name_ECU := '1122334455667789'O
+ const integer c_send_prio := 2
+ const octetstring c_pgn_VT2ECU := '00E600'O // VT to ECU
+
+
+
+ var octetstring v_pdu_send := 'FF0104FFFFFFFFFF'O
+
+ v_ptc_j1939SendInitiatorVT.start(f_ptc_J1939SendToGlobalAddressInitiator(
+ e_testbody3,
+ c_send_prio,
+ c_name_VT, /* name source */
+ c_pgn_VT2ECU, /* pgn destination */
+ v_pdu_send))
+
+ v_ptc_j1939FrameReceiverECU.start(f_ptc_J1939FrameBroadcastReceiver(
+ e_testbody4,
+ c_name_ECU, /* p_j1939_name_local */
+ c_pgn_VT2ECU, /* p_pgn_local */
+ v_pdu_send /* p_j1939_pdu_expected */))
+
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(mtc:pt_sync, v_ptc_j1939SendInitiatorVT:pt_sync)
+ disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiverECU:pt_sync)
+ all component.kill;
+}
+
+
+testcase tc_can_j1939_request_for_address_claimed() runs on MTC {
+ var PTC v_ptc_j1939RequestForAddressClaimedInitiator := PTC.create("PTC1_ptc_j1939v_ptc_j1939RequestForAddressClaimedInitiator") alive
+
+ f_addSyncSlaveSet(v_ptc_j1939RequestForAddressClaimedInitiator, v_PTCSet)
+
+ connect(mtc:pt_sync, v_ptc_j1939RequestForAddressClaimedInitiator:pt_sync)
+
+ //const J1939_NAME c_j1939_name_source := '1122334455667788'O
+ const J1939_NAME c_j1939_name_source := J1939_NO_NAME
const octetstring c_j1939_pdu_send := '00EE00'O
- v_ptc_j1939AddressClaimInitiator.start(f_j1939_address_claim2(
+ v_ptc_j1939RequestForAddressClaimedInitiator.start(f_j1939_request_for_address_claimed(
e_testbody1,
c_j1939_name_source,
c_j1939_pdu_send))
@@ -254,12 +377,141 @@
all component.done;
log("MTC done")
- disconnect(mtc:pt_sync, v_ptc_j1939AddressClaimInitiator:pt_sync)
+ disconnect(mtc:pt_sync, v_ptc_j1939RequestForAddressClaimedInitiator:pt_sync)
all component.kill;
}
+testcase tc_can_j1939_receive_message() runs on MTC {
+ var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+ f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+ connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+
+ const octetstring c_addr_source1 := J1939_NO_ADDR
+ const octetstring c_pgn_destination1 := '00E600'O // ECU to VT
+ const octetstring c_addr_destination1 := 'F8'O // '90'O
+
+
+
+ template octetstring v_pdu_receive := ?//''O
+
+ v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiver(
+ e_testbody2,
+ c_addr_destination1, /* p_j1939_addr_source */
+ c_pgn_destination1, /* p_peer_pgn */
+ c_addr_source1, /* p_peer_addr */
+ J1939_NO_NAME, /* p_peer_name */
+ v_pdu_receive /* p_j1939_pdu_expected */))
+
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+ all component.kill;
+}
+
+testcase tc_can_j1939_receive_message_VT2ECU() runs on MTC {
+ var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+ f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+ connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+ template J1939_NAME t_name_source := '80001d002e030231'O //J1939_NO_NAME
+ template octetstring t_pgn_source := '00E600'O // VT to ECU
+ template octetstring t_addr_source := ? //'F7'O //J1939_IDLE_ADDR
+ const octetstring c_pgn_local := '00E600'O //J1939_NO_PGN
+ const octetstring c_addr_local := 'F8'O // J1939_NO_ADDR
+ const J1939_NAME c_name_local := J1939_NO_NAME // '80003d002e030231'O //'80001d002e030231'O
+
+
+ var template octetstring v_pdu_receive := 'c7ff02cde001e001'O
+
+ //log("length of v_pdu_receive: ", lengthof(v_pdu_receive))
+
+ v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiverUntilExpectedMessage(
+ e_testbody2,
+ c_name_local,
+ c_pgn_local,
+ c_addr_local, /* p_j1939_addr_source */
+ t_pgn_source, /* p_peer_pgn */
+ t_addr_source, /* p_peer_addr */
+ t_name_source, /* p_peer_name */
+ v_pdu_receive /* p_j1939_pdu_expected */))
+
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+ all component.done;
+ log("MTC done")
+
+ disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+ all component.kill;
+}
+testcase tc_can_j1939_receive_message_ECU2VT() runs on MTC {
+ var PTC v_ptc_j1939FrameReceiver := PTC.create("PTC2_ptc_j1939FrameReceiver") alive
+
+ f_addSyncSlaveSet(v_ptc_j1939FrameReceiver, v_PTCSet)
+
+ connect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+ const J1939_NAME c_name_source := '80001d002e030231'O //J1939_NO_NAME
+ const octetstring c_pgn_source := '00E700'O // ECU to VT
+ const octetstring c_addr_source := 'F8'O //J1939_NO_ADDR
+ template octetstring c_pgn_destination := '00E700'O //J1939_NO_PGN
+ template octetstring c_addr_destination := ? //J1939_NO_ADDR
+ template J1939_NAME c_name_destination := ? //J1939_NO_NAME //'000000002e030231'O //'80001d002e030231'O
+
+
+ var template octetstring v_pdu_receive := ? // 'ff0104ffffffffff'O
+
+
+ //log("length of v_pdu_receive: ", lengthof(v_pdu_receive))
+
+ v_ptc_j1939FrameReceiver.start(f_ptc_J1939FrameReceiverUntilExpectedMessage(
+ e_testbody2,
+ c_name_source,
+ c_pgn_source,
+ c_addr_source, /* p_j1939_addr_source */
+ c_pgn_destination, /* p_peer_pgn */
+ c_addr_destination, /* p_peer_addr */
+ c_name_destination, /* p_peer_name */
+ v_pdu_receive /* p_j1939_pdu_expected */))
+
+ var e_Phase v_phase
+
+ for(v_phase := c_firstPhase; v_phase < e_testcase_complete;v_phase := f_incMTCPhase(v_phase)) {
+ f_startPhase(v_phase)
+ log("MTC: ", v_phase)
+ f_awaitEndPhase(v_phase)
+ }
+
+ all component.done;
+ log("MTC done")
+
+ disconnect(mtc:pt_sync, v_ptc_j1939FrameReceiver:pt_sync)
+
+ all component.kill;
+}
+
//=========================================================================
// Control
//=========================================================================
diff --git a/demo/SocketCAN_Templates.ttcn b/demo/SocketCAN_Templates.ttcn
deleted file mode 100644
index 5ec6cfe..0000000
--- a/demo/SocketCAN_Templates.ttcn
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Copyright (c) 2000-2019 Ericsson Telecom AB
-* All rights reserved. This program and the accompanying materials
-* are made available under the terms of the Eclipse Public License v2.0
-* which accompanies this distribution, and is available at
-* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
-*
-* Contributors:
-* Michael Josenhans
-******************************************************************************/
-//
-// File: SocketCANtest.ttcn
-// Description: SocketCAN port type test
-//
-
-
-module SocketCAN_Templates {
-
-import from SocketCAN_Types all;
-import from Bcm all
-import from Can all
-
-template SocketCAN_Result a_result(in SocketCAN_Result_code v_result_code) := {
- result_code := v_result_code,
- err := *,
- err_text := *
-}
-
-template SocketCAN_socket_result
-a_SocketCAN_socket_result(template SocketCAN_Result p_result) := {
- id := ?,
- result := p_result
-}
-
-template SocketCAN_ioctl_result
-a_SocketCAN_ioctl_result(template SocketCAN_Result p_result) := {
- ifr := ?,
- result := p_result
-}
-
-template SocketCAN_connect_result
-a_SocketCAN_connect_result(template SocketCAN_Result p_result) := {
- result := p_result
-}
-
-template SocketCAN_bind_result
-a_SocketCAN_bind_result(template SocketCAN_Result p_result) := {
- result := p_result
-}
-
-template SocketCAN_send_data_result
-a_SocketCAN_send_data_result(template SocketCAN_Result p_result) := {
- result := p_result
-}
-
-template SocketCAN_write_data_result
-a_SocketCAN_write_data_result(template SocketCAN_Result p_result) := {
- result := p_result
-}
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_frame(
- template SocketCAN_socketid p_id,
- template CAN_id p_can_id,
- template CAN_PDU p_can_pdu) := {
- // recieved CAN frame
- id := p_id,
- ifr := ?,
- frame := {can_frame := {can_id := p_can_id, can_pdu := p_can_pdu}},
- timestamp := ?
-}
-
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_FD_frame(
- template SocketCAN_socketid p_id,
- template CAN_id p_can_id,
- template CAN_PDU p_can_pdu) := {
- // recieved CAN or CAN FD frame
- id := p_id,
- ifr := ?,
- frame := {canfd_frame := {can_id := p_can_id, can_pdu := p_can_pdu}},
- timestamp := ?
-}
-
-template SocketCAN_receive_CAN_or_CAN_FD_frame a_SocketCAN_receive_CAN_or_CAN_FD_frame(
- template SocketCAN_socketid p_id,
- template SocketCAN_CAN_or_CAN_FD_frame p_frame) := {
- // recieved CAN or CAN FD frame
- id := p_id,
- ifr := ?,
- frame := p_frame,
- timestamp := ?
-}
-
-template SocketCAN_receive_BCM_message a_SocketCAN_receive_BCM_message(
- template SocketCAN_socketid p_id,
- template SocketCAN_bcm_frame p_frame) := {
- // recieved CAN or CAN FD frame
- id := p_id,
- ifr := ?,
- frame := p_frame
-}
-
-template SocketCAN_setsockopt_result
-a_SocketCAN_setsockopt_result(template SocketCAN_Result p_result) := {
- result := p_result
-}
-
-}
\ No newline at end of file
diff --git a/demo/initscript.sh b/demo/initscript.sh
old mode 100755
new mode 100644
diff --git a/doc/README.md b/doc/README.md
deleted file mode 100644
index de9ee7f..0000000
--- a/doc/README.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# titan.TestPorts.SocketCANasp
-
-Main project page:
-
-https://projects.eclipse.org/projects/tools.titan
-
-The source code of the TTCN-3 compiler and executor:
-
-https://github.com/eclipse/titan.core
-
-
-References:
-https://www.kernel.org/doc/Documentation/networking/can.txt
-
-Other useful documentation:
-https://docs.python.org/3/library/socket.html (search for: "AF_CAN")
-https://media.readthedocs.org/pdf/python-can/latest/python-can.pdf
-http%3A%2F%2Fwww.can-cia.de%2Ffileadmin%2Fresources%2Fdocuments%2Fproceedings%2F2012_hartkopp.pdf
-http://www.can-cia.de/fileadmin/resources/documents/proceedings/2012_hartkopp.pdf
-http://v2.can-newsletter.org/uploads/media/raw/46c15d02e1fdd3b04e671693ec548ff7.pdf
-
-# See file: demo/initscript.sh:
-
-#--------------------------------------
-#!/bin/bash
-
-
-# create a virtual can interface:
-
-sudo modprobe vcan
-sudo ip link add dev vcan0 type vcan
-sudo ip link set vcan0 up
-
-#!/bin/bash
-
-# Add vcan module to kernel
-sudo modprobe vcan
-
-# Setup of virtual can vcan0
-sudo ip link add dev vcan0 type vcan
-# set it up at as a canfd capable can interface
-sudo ip link set vcan0 mtu 72
-sudo ip link set vcan0 up
-
-# or create a physical can interface
-# sudo ip link set can0 up type can bitrate 1000000
-
-ip a
-
-#--------------------------------------
-
-cd src
-./demo/initscript.sh
-
-or alternatively
-source demo/initscript.sh
-
-make clean; make
-
-ttcn3_start SocketCAN SocketCAN.cfg
-or
-ttcn3_start SocketCAN CAN_matrix_test.cfg
-
-or to run a certain testcase:
-
-ttcn3_start SocketCAN SocketCAN.cfg SocketCAN_RAW_test.tc_can_raw_send_and_receive_can_frame SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FILTER
-
-Review the newly created log files in the src directory
-and use e.g. Wireshark to trace the CAN interfacce.
-
-#--------------------------------------
-Notes:
--Using multiple Test interfacces:
- Currently the init script sets up multiple virtual can interfaces ("vcan0",
- "vcan1" in oder to allow using multiple CAN interfaces.
- The CAN interfaces have to be defined in the TTCN configuration files or may
- alternatively be defined in the optional parameters of port messages commands
- ioctl and send_data.
-
- Handling of multiple CAN interfaces is work in progress and no test cases are
- provided. In order to configure usage with multiple test interfaces,
- test interfaces for each interface have to be defined in the MTC.
-
--CAN RAW:
- CAN FD has been implemented, however not been tested.
- Depending on the availability of the C-code #define "CAN_FD_FRAME"
- in /usr/include/linux/can/bcm.h, CAN-FD support is enabled at compile time.
- The RAW setsockopt has path coverage. However no test coverage that insures
- the setsockopt functionality provided by the kernel is working correctly.
- For this purpose in the future might be added additional test cases.
-
--CAN BCM:
- TX_SETUP, TX_DELETE have been tested, TX_READ is known to fail test cases.
- Some tests have indicated, that that SocketCAN BCM does not support concurrently
- active BCM channels.
- The BCM has test coverage for TX_SETUP and TX_DELETE. However no test coverage
- that insures the BCM functionality provided by the kernel is working correctly.
- For this purpose in the future might be added additional test cases.
- Return values other than the error code by the BCM are not yet supported.
- BCM wth CAN FD frames has not been tested yet.
-
--ISOTP:
- Iso TP functionality has been added, however currently no options like padding
- are supported. Feel free to request needed options.
-
- First install the isotp kernel module as descibed here:
- https://github.com/hartkopp/can-isotp-modules
-
- ./make_isotp.sh
- sudo insmod ./can-isotp.ko
-
-
- There is an endlessly running test case:
- ttcn3_start SocketCAN SocketCAN.cfg Isotptest.tc_Isotp_Example001
-
--CAN J1939:
-Configure CAN J1939 as following (requires Kernel 5.4 and compiled with can-j1939 kernel module):
-sudo modprobe vcan
-sudo ip link add vcan0 type vcan
-sudo ip link set vcan0 up
-sudo modprobe can-j1939
-
-For the following test cases, the messages are so huge that screen output of the log file takes too long.
-Thus comment out as following the following lines in J1939.cfg:
-//FileMask := LOG_ALL | DEBUG | MATCHING
-//ConsoleMask := LOG_ALL | DEBUG | MATCHING
-
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_j1939_send_and_receive_can_frame_parallel
-
-Here above lines can be commented in:
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim
-ttcn3_start SocketCAN J1939.cfg SocketCAN_J1939_test.tc_can_f_j1939_address_claim2
-
-
--Merging of logfiles:
- To merge the logfies from multiple Parallel Test Componets (PTCs) from a
- single run in timely order into sigle file, run:
- $TTCN3_DIR/bin/ttcn3_logmerge -o log_merged.txt *.log
- The merged log-file is found at log_merged.txt
-
--Dumping CAN Frames using SocketCAN:
- To dump all received can frames of e.g. "vcan0" run a seperate terminal:
- $ candump "vcan0"
diff --git a/src/J1939.ttcn b/src/J1939.ttcn
index be62538..6021cd8 100644
--- a/src/J1939.ttcn
+++ b/src/J1939.ttcn
@@ -11,9 +11,24 @@
module J1939 {
import from General_Types all;
+external function f_encode_J1939_name(in J1939_NAME pdu) return octetstring
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name(in octetstring data) return J1939_NAME
+with { extension "prototype(convert) decode(RAW)" }
+
+external function f_encode_J1939_name_record(in J1939_NAME_RECORD pdu) return octetstring
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name_record(in octetstring data) return J1939_NAME_RECORD
+with { extension "prototype(convert) decode(RAW)" }
+
+external function f_encode_J1939_name_record_reverse_byte_order(in J1939_NAME_RECORD_REVERSE_BYTE_ENCODING pdu) return octetstring
+with { extension "prototype(convert) encode(RAW)" }
+external function f_decode_J1939_name_record_reverse_byte_order(in octetstring data) return J1939_NAME_RECORD_REVERSE_BYTE_ENCODING
+with { extension "prototype(convert) decode(RAW)" }
+
const octetstring J1939_MAX_UNICAST_ADDR := 'FD'O
const octetstring J1939_IDLE_ADDR := 'FE'O
-const octetstring J1939_NO_ADDR := 'FF'O
+const octetstring J1939_NO_ADDR := 'FF'O /* == broadcast or no addr */
const J1939_NAME J1939_NO_NAME := '0000000000000000'O
const octetstring J1939_PGN_REQUEST := '00ea00'O /* Request PG */
const octetstring J1939_PGN_ADDRESS_CLAIMED := '00ee00'O /* Address Claimed */
@@ -22,10 +37,78 @@
const octetstring J1939_PGN_MAX := '03ffff'O
const octetstring J1939_NO_PGN := '040000'O
+const octetstring c_pgn_VT2ECU := '00E600'O // VT to ECU
+const octetstring c_pgn_ECU2VT := '00E700'O // ECU to VT
+
+
+
+
type OCT3 J1939_PGN // max 0x3ffff
-type OCT8 J1939_NAME
+type OCT8 J1939_NAME with {variant "BYTEORDER(last)"}
type OCT1 J1939_ADDR
+type record J1939_NAME_RECORD{
+ J1939_ARBITRARY_ADDRESS_BIT arbitraryAddresssBit, // selfConfigurableAddressValue
+ J1939_INDUSTRY_GROUP industryGroup, // deviceClassInstanceValue
+ J1939_VEHICLE_SYSTEM_INSTANCE vehicleSystemInstance, // deviceClassInstanceValue
+ J1939_VEHICLE_SYSTEM vehicleSystem,
+ J1939_RESERVED reserved,
+ J1939_FUNCTION function_,
+ J1939_FUNCTION_INSTANCE functionInstance,
+ J1939_ECU_INSTANCE ecuInstance,
+ J1939_MANUFACTURER_CODE manufacturerCode,
+ J1939_IDENTITY_NUMBER identityNumber
+} with { variant "FIELDORDER(msb)"
+ variant (identityNumber) "BYTEORDER(last)"
+ variant (manufacturerCode) "BYTEORDER(last)"
+}
+
+type record J1939_NAME_RECORD_REVERSE_BYTE_ENCODING{
+ J1939_IDENTITY_NUMBER identityNumber,
+ J1939_MANUFACTURER_CODE manufacturerCode,
+ J1939_ECU_INSTANCE ecuInstance,
+ J1939_FUNCTION_INSTANCE functionInstance,
+ J1939_FUNCTION function_,
+ J1939_RESERVED reserved,
+ J1939_VEHICLE_SYSTEM vehicleSystem,
+ J1939_VEHICLE_SYSTEM_INSTANCE vehicleSystemInstance, // deviceClassInstanceValue
+ J1939_INDUSTRY_GROUP industryGroup, // deviceClassInstanceValue
+ J1939_ARBITRARY_ADDRESS_BIT arbitraryAddresssBit // selfConfigurableAddressValue
+} with { variant "FIELDORDER(lsb)" /* it has no effect here, added for visibility only */
+
+ variant (identityNumber) "BYTEORDER(first)"
+ variant (manufacturerCode) "BYTEORDER(first)"
+ /* the following variants are not needed:
+ variant (ecuInstance) "BYTEORDER(first)"
+ variant (functionInstance) "BYTEORDER(first)"
+ variant (function_) "BYTEORDER(first)"
+ variant (reserved) "BYTEORDER(first)"
+ variant (vehicleSystem) "BYTEORDER(first)"
+ variant (vehicleSystemInstance) "BYTEORDER(first)"
+ variant (industryGroup) "BYTEORDER(first)"
+ variant (arbitraryAddresssBit) "BYTEORDER(first)"
+ */
+}
+
+type INT1BIT J1939_ARBITRARY_ADDRESS_BIT
+type INT3BIT J1939_INDUSTRY_GROUP
+type INT4BIT J1939_VEHICLE_SYSTEM_INSTANCE
+type INT7BIT J1939_VEHICLE_SYSTEM
+type INT1BIT J1939_RESERVED
+type INT8BIT J1939_FUNCTION
+type INT5BIT J1939_FUNCTION_INSTANCE
+type INT3BIT J1939_ECU_INSTANCE
+type INT11BIT J1939_MANUFACTURER_CODE
+type INT21BIT J1939_IDENTITY_NUMBER
+
+type integer INT1BIT (0..1) with { variant "FIELDLENGTH(1)"} // 2^1-1
+type integer INT3BIT (0..7) with { variant "FIELDLENGTH(3)"} // 2^3-1
+type integer INT4BIT (0..15) with { variant "FIELDLENGTH(4)"} // 2^4-1
+type integer INT5BIT (0..31) with { variant "FIELDLENGTH(5)"} // 2^5-1
+type integer INT7BIT (0..127) with { variant "FIELDLENGTH(7)"} // 2^7-1
+type integer INT8BIT (0..255) with { variant "FIELDLENGTH(8)"} // 2^8-1
+type integer INT11BIT (0..2047) with { variant "FIELDLENGTH(11),BYTEORDER(last)"} // 2^11-1
+type integer INT21BIT (0..2097151) with { variant "FIELDLENGTH(21),BYTEORDER(last)"} // 2^21-1
type integer J1939_Priority (0..7)
@@ -39,6 +122,6 @@
J1939_PGN pgn optional,
// * 1 byte address *
J1939_ADDR addr optional
-}
+} with { variant "" }
-}
+} with { encode "RAW" }
diff --git a/src/SocketCAN_PT.cc b/src/SocketCAN_PT.cc
index 69f6c42..5208cb6 100644
--- a/src/SocketCAN_PT.cc
+++ b/src/SocketCAN_PT.cc
@@ -49,6 +49,7 @@
#include <cstddef>
#include <cstring>
#include <iostream>
+#include <openssl/bn.h>
struct bcm_msg_head;
struct can_frame;
@@ -180,8 +181,20 @@
nbytes = recvfrom(sock, msg, J1939_RECIEVE_BUFSIZE, 0,
(struct sockaddr*) &addr, &addr_len);
+ BIGNUM* bn = BN_new();
+ BN_add_word(bn, (BN_ULONG)(addr.can_addr.j1939.name / ULONG_MAX));
+ BN_add_word(bn, (BN_ULONG)(addr.can_addr.j1939.name % ULONG_MAX));
+ int_val_t ival(bn);
+ INTEGER tmp;
+ tmp.set_val(ival);
+
+
//nbytes = read(sock, msg, J1939_RECIEVE_BUFSIZE);
if (nbytes > 0 && nbytes < J1939_RECIEVE_BUFSIZE) {
+ log("SocketCAN: Received j1939 message addr %x, name %llx, pgn %x",
+ addr.can_addr.j1939.addr,
+ addr.can_addr.j1939.name,
+ addr.can_addr.j1939.pgn);
struct ifreq ifr;
ifr.ifr_ifindex = addr.can_ifindex;
parameters.ifr().if__index() = ifr.ifr_ifindex;
@@ -189,9 +202,10 @@
parameters.id() = a;
parameters.pdu() = OCTETSTRING(nbytes, msg);
parameters.pgn() = int2oct(addr.can_addr.j1939.pgn, 3);
- parameters.name() = int2oct(addr.can_addr.j1939.name, 8);
+ parameters.name() = int2oct(tmp, 8);
parameters.destAddr() = int2oct(addr.can_addr.j1939.addr,
1);
+
incoming_message(parameters);
}
delete[] msg;
@@ -856,7 +870,13 @@
log("entering SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__bind)");
int sock;
- struct sockaddr_can addr = { };
+ struct sockaddr_can addr = {};
+
+ addr.can_family = AF_CAN;
+ addr.can_addr.j1939.addr = J1939_NO_ADDR;
+ addr.can_addr.j1939.name = J1939_NO_NAME;
+ addr.can_addr.j1939.pgn = J1939_NO_PGN;
+
int cn = send_par.id();
int res;
SocketCAN__Types::SocketCAN__bind__result result;
@@ -1327,9 +1347,11 @@
nrOfBytestoSend = send_par.pdu().lengthof();
nrOfBytesRemaining = nrOfBytestoSend;
do {
+ log("SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to):Sending of remaining of bytes %ld", nrOfBytesRemaining);
nrOfBytesSent = sendto(sock, (const void*)((const unsigned char*)send_par.pdu()+nrOfBytestoSend-nrOfBytesRemaining),
nrOfBytesRemaining, 0, (struct sockaddr*) &destaddr, sizeof(destaddr));
nrOfBytesRemaining = nrOfBytesRemaining - nrOfBytesSent;
+ log("SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to):Sent bytes %d, remaining of bytes %ld", nrOfBytesSent, nrOfBytesRemaining);
} while ((nrOfBytesSent >= 0) and (nrOfBytesRemaining != 0));
log(
@@ -1361,15 +1383,15 @@
log("SocketCAN: Nr of bytes sent = %ld", nrOfBytesSent);
} else {
- TTCN_error("SocketCAN: Unknown socket reference: %d \n", cn);
result.result().result__code() =
SocketCAN__Types::SocketCAN__Result__code::SocketCAN__ERROR;
result.result().err() = OMIT_VALUE;
result.result().err__text() = "Unknown socket reference";
+ TTCN_error("SocketCAN: Unknown socket reference: %d \n", cn);
}
+ log("Creating incoming message for SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
incoming_message(result);
- log(
- "leaving SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
+ log("leaving SocketCAN__PT_PROVIDER::outgoing_send(SocketCAN__j1939__send__data__to)");
#else // CANJ1939_SUPPORT
TTCN_error("SocketCAN: CAN J1939 is not supported by your current kernel error");
#endif // CANJ1939_SUPPORT
diff --git a/src/SocketCAN_Templates.ttcn b/src/SocketCAN_Templates.ttcn
index 57616a7..a5901e6 100644
--- a/src/SocketCAN_Templates.ttcn
+++ b/src/SocketCAN_Templates.ttcn
@@ -20,7 +20,7 @@
import from Can all
import from J1939 all
-template SocketCAN_Result a_result(in SocketCAN_Result_code v_result_code) := {
+template SocketCAN_Result a_result(template SocketCAN_Result_code v_result_code) := {
result_code := v_result_code,
err := *,
err_text := *