/* Copyright (c) 2010, 2016 Ericsson AB | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* which accompanies this distribution, and is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* Contributors: | |
* Michael Josenhans | |
******************************************************************************/ | |
// | |
// File: SocketCAN_BCM_test.ttcn | |
// Description: SocketCAN testcases for CAN_BCM frames | |
// | |
module SocketCAN_BCM_test { | |
import from SocketCANtest all | |
import from SocketCAN_Types all; | |
import from Bcm all | |
import from Can all | |
template SocketCAN_CAN_or_CAN_FD_frame a_CAN_frame (template CAN_frame p_can_frame) := {can_frame := p_can_frame} | |
testcase tc_can_bcm_TX_SETUP_TX_DELETE() runs on MTC { | |
// here are 5 CAN frames cyclicly started with TX_SETUP (can_id = 66), but after receiving | |
// a sequnce of 10 frames the cyclic sending of the frames is stopped with TX_DELETE (can id = 66). | |
var PTC v_ptc_bcmConfigurator := PTC.create("PTC1_ptc_bcmConfigurator") alive | |
var PTC v_ptc_rawFrameReceiver1 := PTC.create("PTC2_ptc_rawFrameReceiver1") alive | |
var PTC v_ptc_rawFrameReceiver2 := PTC.create("PTC2_ptc_rawFrameReceiver2") alive | |
f_addSyncSlaveSet(v_ptc_bcmConfigurator, v_PTCSet) | |
f_addSyncSlaveSet(v_ptc_rawFrameReceiver1, v_PTCSet) | |
f_addSyncSlaveSet(v_ptc_rawFrameReceiver2, v_PTCSet) | |
connect(mtc:pt_sync, v_ptc_bcmConfigurator:pt_sync) | |
connect(mtc:pt_sync, v_ptc_rawFrameReceiver1:pt_sync) | |
connect(mtc:pt_sync, v_ptc_rawFrameReceiver2:pt_sync) | |
var CAN_frame v_can_frame1, v_can_frame2, v_can_frame3, v_can_frame4, v_can_frame5; | |
var SocketCAN_bcm_frame v_bcm_activation_frame, v_bcm_deactivation_frame | |
v_can_frame1 := {can_id := '00000001'O, can_pdu := '1111111111111111'O}; | |
v_can_frame2 := {can_id := '00000002'O, can_pdu := '2222222222222222'O}; | |
v_can_frame3 := {can_id := '00000003'O, can_pdu := '3333333333333333'O}; | |
v_can_frame4 := {can_id := '00000004'O, can_pdu := '4444444444444444'O}; | |
v_can_frame5 := {can_id := '00000005'O, can_pdu := '5555555555555555'O}; | |
template SocketCAN_CAN_or_CAN_FD_frames a_expected_can_frames := { | |
{can_frame := v_can_frame1}, | |
{can_frame := v_can_frame2}, | |
{can_frame := v_can_frame3}, | |
{can_frame := v_can_frame4}, | |
{can_frame := v_can_frame5}, | |
{can_frame := v_can_frame1}, | |
{can_frame := v_can_frame2}, | |
{can_frame := v_can_frame3}, | |
{can_frame := v_can_frame4}, | |
{can_frame := v_can_frame5} | |
} | |
v_bcm_activation_frame := { | |
opcode := '00000001'O, // TX_SETUP | |
flags := '00000000000000000000000000000011'B, // refers to SETTIMER | STARTTIMER | |
count := 0, | |
ival1 := {0, 0}, | |
ival2 := {0, 100000}, | |
can_id := '00000042'O, // should become octetstring in the future | |
frames := {can_frame := { | |
v_can_frame1, | |
v_can_frame2, | |
v_can_frame3, | |
v_can_frame4, | |
v_can_frame5}} | |
} | |
v_bcm_deactivation_frame := { | |
opcode := '00000002'O, // TX_DELETE | |
flags := '00000000000000000000000000000000'B, | |
count := 0, | |
ival1 := {0, 0}, | |
ival2 := {0, 0}, | |
can_id := '00000042'O, | |
frames := {can_frame := {}} | |
} | |
var BCM_cmds v_cmds := | |
{ | |
{phase := e_testbody2, bcm_frame := v_bcm_activation_frame}, | |
{phase := e_testbody5, bcm_frame := v_bcm_deactivation_frame} | |
} | |
v_ptc_bcmConfigurator.start(f_ptc_bcmComandSendInitiator(v_cmds)) | |
var SocketCAN_CAN_or_CAN_FD_frame v_frame_to_receive1, v_frame_to_receive5 | |
v_frame_to_receive1 := {can_frame := v_can_frame1} | |
v_frame_to_receive5 := {can_frame := v_can_frame5} | |
// stop when receiving v_frame_to_receive | |
v_ptc_rawFrameReceiver1.start(f_ptc_RawFrameReceiver(e_testbody3, v_frame_to_receive1)) | |
// stop when receiving v_frame_to_receive | |
v_ptc_rawFrameReceiver2.start(f_ptc_RawFrameSequenceReceiver(e_testbody4, a_expected_can_frames, e_testbody5, 2.0)) | |
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_bcmConfigurator:pt_sync) | |
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver1:pt_sync) | |
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver2:pt_sync) | |
all component.kill; | |
} | |
testcase tc_can_bcm_TX_SETUP_TX_DELETE_TX_READ__broken() runs on MTC { | |
// here are 5 CAN frames cyclicly started with TX_SETUP (can_id = 66), but after receiving | |
// a sequnce of 10 frames the cyclic sending of the frames is stopped with TX_DELETE (can id = 66). | |
var PTC v_ptc_bcmConfigurator := PTC.create("PTC1_ptc_bcmConfigurator") alive | |
var PTC v_ptc_rawFrameReceiver1 := PTC.create("PTC2_ptc_rawFrameReceiver1") alive | |
var PTC v_ptc_rawFrameReceiver2 := PTC.create("PTC2_ptc_rawFrameReceiver2") alive | |
f_addSyncSlaveSet(v_ptc_bcmConfigurator, v_PTCSet) | |
f_addSyncSlaveSet(v_ptc_rawFrameReceiver1, v_PTCSet) | |
f_addSyncSlaveSet(v_ptc_rawFrameReceiver2, v_PTCSet) | |
connect(mtc:pt_sync, v_ptc_bcmConfigurator:pt_sync) | |
connect(mtc:pt_sync, v_ptc_rawFrameReceiver1:pt_sync) | |
connect(mtc:pt_sync, v_ptc_rawFrameReceiver2:pt_sync) | |
var CAN_frame v_can_frame1, v_can_frame2, v_can_frame3, v_can_frame4, v_can_frame5; | |
var SocketCAN_bcm_frame v_bcm_activation_frame, v_bcm_deactivation_frame, v_bcm_read_status_frame | |
v_can_frame1 := {can_id := '00000001'O, can_pdu := '1111111111111111'O}; | |
v_can_frame2 := {can_id := '00000002'O, can_pdu := '2222222222222222'O}; | |
v_can_frame3 := {can_id := '00000003'O, can_pdu := '3333333333333333'O}; | |
v_can_frame4 := {can_id := '00000004'O, can_pdu := '4444444444444444'O}; | |
v_can_frame5 := {can_id := '00000005'O, can_pdu := '5555555555555555'O}; | |
template SocketCAN_CAN_or_CAN_FD_frames a_expected_can_frames := { | |
{can_frame := v_can_frame1}, | |
{can_frame := v_can_frame2}, | |
{can_frame := v_can_frame3}, | |
{can_frame := v_can_frame4}, | |
{can_frame := v_can_frame5}, | |
{can_frame := v_can_frame1}, | |
{can_frame := v_can_frame2}, | |
{can_frame := v_can_frame3}, | |
{can_frame := v_can_frame4}, | |
{can_frame := v_can_frame5} | |
} | |
v_bcm_activation_frame := { | |
opcode := '00000001'O, // TX_SETUP | |
flags := '00000000000000000000000000000011'B, // refers to SETTIMER | STARTTIMER | |
count := 0, | |
ival1 := {0, 0}, | |
ival2 := {0, 100000}, | |
can_id := '00000042'O, // should become octetstring in the future | |
frames := {can_frame := { | |
v_can_frame1, | |
v_can_frame2, | |
v_can_frame3, | |
v_can_frame4, | |
v_can_frame5}} | |
} | |
v_bcm_deactivation_frame := { | |
opcode := '00000002'O, // TX_DELETE | |
flags := '00000000000000000000000000000000'B, | |
count := 0, | |
ival1 := {0, 0}, | |
ival2 := {0, 0}, | |
can_id := '00000042'O, | |
frames := {can_frame := {}} | |
} | |
v_bcm_read_status_frame := { | |
opcode := '00000003'O, // TX_READ | |
flags := | |
// workaround for titan constants instead of enums: | |
('00000000000000000000000000000001'B << 0) or4b // enum2int(e_CAN_BCM_SETTIMER_BITINDEX)) instead of 0 | |
('00000000000000000000000000000001'B << 1) or4b // enum2int(e_CAN_BCM_TX_COUNTEVT_BITINDEX)) instead of 1 | |
('00000000000000000000000000000001'B << 4), // enum2int(e_CAN_BCM_TX_CP_CAN_ID_BITINDEX) instead of 4 | |
count := 0, | |
ival1 := {0, 0}, | |
ival2 := {0, 0}, | |
can_id := '00000042'O, | |
frames := {can_frame := {}} | |
} | |
var BCM_cmds v_cmds := | |
{ | |
//{phase := e_testbody2, bcm_frame := v_bcm_activation_frame}, | |
{phase := e_testbody3, bcm_frame := v_bcm_read_status_frame}, | |
{phase := e_testbody4, bcm_frame := v_bcm_deactivation_frame}, | |
{phase := e_testbody6, bcm_frame := v_bcm_read_status_frame} | |
} | |
v_ptc_bcmConfigurator.start(f_ptc_bcmComandSendReceiveInitiator(v_cmds)) | |
var SocketCAN_CAN_or_CAN_FD_frame v_frame_to_receive1, v_frame_to_receive5 | |
v_frame_to_receive1 := {can_frame := v_can_frame1} | |
v_frame_to_receive5 := {can_frame := v_can_frame5} | |
// stop when receiving v_frame_to_receive | |
v_ptc_rawFrameReceiver1.start(f_ptc_RawFrameReceiver(e_testbody3, v_frame_to_receive1)) | |
// stop when receiving v_frame_to_receive | |
v_ptc_rawFrameReceiver2.start(f_ptc_RawFrameSequenceReceiver(e_testbody5, a_expected_can_frames, e_testbody6, 2.0)) | |
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_bcmConfigurator:pt_sync) | |
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver1:pt_sync) | |
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver2:pt_sync) | |
all component.kill; | |
} | |
} |