blob: 943a8abfa0190932334911bdae0c9090feaf81ea [file] [log] [blame]
/* 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" }