| /* 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_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 |