blob: 01e1349d2046dae1cd13970842d0cc5e09927130 [file] [log] [blame]
/* 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_RAW_test.ttcn
// Description: SocketCAN testcases for CAN_RAW frames
//
module SocketCAN_RAW_test
{
import from SocketCANtest all
import from SocketCAN_Types all;
import from Can all
import from Raw all
import from CanError all
testcase tc_can_raw_send_and_receive_can_frame() runs on MTC {
var PTC v_ptc_rawSendInitiator := PTC.create("PTC1_ptc_rawSendInitiator") alive
var PTC v_ptc_rawFrameReceiver := PTC.create("PTC2_ptc_rawFrameReceiver") alive
f_addSyncSlaveSet(v_ptc_rawSendInitiator, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawFrameReceiver, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawSendInitiator:pt_sync)
connect(mtc:pt_sync, v_ptc_rawFrameReceiver:pt_sync)
var SocketCAN_CAN_or_CAN_FD_frame v_frame_to_send
v_frame_to_send := {can_frame :=
{can_id := '00000015'O,
can_pdu := '0123456789ABCDEF'O}
}
v_ptc_rawSendInitiator.start(f_ptc_RawSendInitiator(e_testbody1, v_frame_to_send))
v_ptc_rawFrameReceiver.start(f_ptc_RawFrameReceiver(e_testbody3, v_frame_to_send))
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_rawSendInitiator:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver:pt_sync)
all component.kill;
}
testcase tc_can_raw_send_and_receive_canfd_frame() runs on MTC {
var PTC v_ptc_rawSendInitiator := PTC.create("PTC1_ptc_rawSendInitiator") alive
var PTC v_ptc_rawFrameReceiver := PTC.create("PTC2_ptc_rawFrameReceiver") alive
f_addSyncSlaveSet(v_ptc_rawSendInitiator, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawFrameReceiver, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawSendInitiator:pt_sync)
connect(mtc:pt_sync, v_ptc_rawFrameReceiver:pt_sync)
var SocketCAN_CAN_or_CAN_FD_frame v_canfd_frame_to_send
v_canfd_frame_to_send := {canfd_frame :=
{can_id := '00000015'O,
can_flags := '10101010'B,
can_pdu := '0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'O}
}
v_ptc_rawSendInitiator.start(f_ptc_RawSendInitiator(e_testbody2, v_canfd_frame_to_send))
v_ptc_rawFrameReceiver.start(f_ptc_RawFrameReceiver(e_testbody3, v_canfd_frame_to_send))
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_rawSendInitiator:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawFrameReceiver:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_FILTER() runs on MTC {
var PTC v_ptc_rawSetFilters := PTC.create("PTC1_ptc_rawSetFilters") alive
var PTC v_ptc_rawDeactivateFilters := PTC.create("PTC1_ptc_rawDeactivateFilters") alive
f_addSyncSlaveSet(v_ptc_rawSetFilters, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateFilters, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawSetFilters:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateFilters:pt_sync)
// activate filters
const CAN_RAW_filter c_rfilter0 := {
can_id := '00000123'O,
can_mask := bit2oct(oct2bit(CAN_EFF_FLAG) or4b oct2bit(CAN_RTR_FLAG) or4b oct2bit(CAN_SFF_MASK))};
const CAN_RAW_filter c_rfilter1 := {
can_id := '00000200'O,
can_mask := '00000700'O};
const CAN_RAW_filter c_rfilter2 := {
can_id := bit2oct(oct2bit('12345678'O) or4b oct2bit(CAN_EFF_FLAG)),
can_mask := bit2oct(oct2bit(CAN_EFF_FLAG) or4b oct2bit(CAN_RTR_FLAG) or4b oct2bit(CAN_EFF_MASK))};
const SocketCAN_setsockopt_commandu c_commandu_activate_filters := {rfilter:={c_rfilter0, c_rfilter1, c_rfilter2}}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_filters := {rfilter:={}}
// activate filters command
v_ptc_rawSetFilters.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_filters))
// deactivate filters command
v_ptc_rawDeactivateFilters.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_filters))
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_rawSetFilters:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateFilters:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_ERR_FILTER() runs on MTC {
var PTC v_ptc_rawActivateErrorMask := PTC.create("PTC1_ptc_rawActivateErrorMask") alive
var PTC v_ptc_rawDeactivateErrorMask := PTC.create("PTC1_ptc_rawDeactivateErrorMask") alive
f_addSyncSlaveSet(v_ptc_rawActivateErrorMask, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateErrorMask, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawActivateErrorMask:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateErrorMask:pt_sync)
const SocketCAN_setsockopt_commandu c_commandu_activate_err_mask := {err_mask := oct2bit(CAN_ERR_TX_TIMEOUT) or4b oct2bit(CAN_ERR_BUSOFF)}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_err_mask := {err_mask := oct2bit('00000000'O)}
// activate error mask command
v_ptc_rawActivateErrorMask.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_err_mask))
// deactivate error mask command
v_ptc_rawDeactivateErrorMask.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_err_mask))
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_rawActivateErrorMask:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateErrorMask:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_LOOPBACK() runs on MTC {
var PTC v_ptc_rawActivateLoopback := PTC.create("PTC1_ptc_rawActivateLoopback") alive
var PTC v_ptc_rawDeactivateLoopback := PTC.create("PTC1_ptc_rawDeactivateLoopback") alive
f_addSyncSlaveSet(v_ptc_rawActivateLoopback, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateLoopback, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawActivateLoopback:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateLoopback:pt_sync)
const SocketCAN_setsockopt_commandu c_commandu_activate_loopback := {loopback := Enable}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_loopback := {loopback := Disable}
// activate error mask command
v_ptc_rawActivateLoopback.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_loopback))
// deactivate error mask command
v_ptc_rawDeactivateLoopback.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_loopback))
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_rawActivateLoopback:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateLoopback:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_RECV_OWN_MSGS() runs on MTC {
var PTC v_ptc_rawActivateReceiveOwnMessages := PTC.create("PTC1_ptc_rawActivateReceiveOwnMessages") alive
var PTC v_ptc_rawDeactivateReceiveOwnMessages := PTC.create("PTC1_ptc_rawDeactivateReceiveOwnMessages") alive
f_addSyncSlaveSet(v_ptc_rawActivateReceiveOwnMessages, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateReceiveOwnMessages, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawActivateReceiveOwnMessages:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateReceiveOwnMessages:pt_sync)
const SocketCAN_setsockopt_commandu c_commandu_activate_ReceiveOwnMessages := {recv_own_msgs := Enable}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_ReceiveOwnMessages := {recv_own_msgs := Disable}
// activate error mask command
v_ptc_rawActivateReceiveOwnMessages.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_ReceiveOwnMessages))
// deactivate error mask command
v_ptc_rawDeactivateReceiveOwnMessages.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_ReceiveOwnMessages))
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_rawActivateReceiveOwnMessages:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateReceiveOwnMessages:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_FD_FRAMES() runs on MTC {
var PTC v_ptc_rawActivateFD_Frames := PTC.create("PTC1_ptc_rawActivateFD_Frames") alive
var PTC v_ptc_rawDeactivateFD_Frames := PTC.create("PTC1_ptc_rawDeactivateFD_Frames") alive
f_addSyncSlaveSet(v_ptc_rawActivateFD_Frames, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateFD_Frames, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawActivateFD_Frames:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateFD_Frames:pt_sync)
const SocketCAN_setsockopt_commandu c_commandu_activate_FD_Frames := {fd_frames := Enable}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_FD_Frames := {fd_frames := Disable}
// activate error mask command
v_ptc_rawActivateFD_Frames.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_FD_Frames))
// deactivate error mask command
v_ptc_rawDeactivateFD_Frames.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_FD_Frames))
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_rawActivateFD_Frames:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateFD_Frames:pt_sync)
all component.kill;
}
testcase tc_can_raw_setsockopt_CAN_RAW_JOIN_FILTERS() runs on MTC {
var PTC v_ptc_rawActivateJoinFilters := PTC.create("PTC1_ptc_rawActivateJoinFilters") alive
var PTC v_ptc_rawDeactivateJoinFilters := PTC.create("PTC1_ptc_rawDeactivateJoinFilters") alive
f_addSyncSlaveSet(v_ptc_rawActivateJoinFilters, v_PTCSet)
f_addSyncSlaveSet(v_ptc_rawDeactivateJoinFilters, v_PTCSet)
connect(mtc:pt_sync, v_ptc_rawActivateJoinFilters:pt_sync)
connect(mtc:pt_sync, v_ptc_rawDeactivateJoinFilters:pt_sync)
const SocketCAN_setsockopt_commandu c_commandu_activate_JoinFilters := {join_filters := Enable}
const SocketCAN_setsockopt_commandu c_commandu_deactivate_JoinFilters := {join_filters := Disable}
// activate error mask command
v_ptc_rawActivateJoinFilters.start(f_raw_setsockopt(e_testbody1, c_commandu_activate_JoinFilters))
// deactivate error mask command
v_ptc_rawDeactivateJoinFilters.start(f_raw_setsockopt(e_testbody3, c_commandu_deactivate_JoinFilters))
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_rawActivateJoinFilters:pt_sync)
disconnect(mtc:pt_sync, v_ptc_rawDeactivateJoinFilters:pt_sync)
all component.kill;
}
//=========================================================================
// Control
//=========================================================================
// Insert control part here if applicable!
} // end of module