Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Eclipse Projects
Eclipse Titan
titan.TestPorts.SocketCANasp
Commits
6d762be0
Commit
6d762be0
authored
Sep 27, 2016
by
Elemer Lelik
Browse files
First version published
parent
d679f1cb
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
demo/Makefile
0 → 100644
View file @
6d762be0
# This Makefile was generated by the TITAN Designer eclipse plug-in
# of the TTCN-3 Test executor version CRL 113 200/5 R5A
# for (michael@michael-desktop) on Sun Sep 18 22:14:13 CEST 2016
# Copyright (c) 2000-2016 Ericsson Telecom AB
# The following make commands are available:
# - make, make all Builds the executable test suite.
# - make archive Archives all source files.
# - make check Checks the semantics of TTCN-3 and ASN.1 modules.
# - make clean Removes all generated files.
# - make port Generates port skeletons.
# - make compile Translates TTCN-3 and ASN.1 modules to C++.
# - make dep Creates/updates dependency list.
# - make executable Builds the executable test suite.
# - make library Builds the library archive: 'SocketCAN.a'.
# - make objects Builds the object files without linking the executable.
# WARNING! This Makefile can be used with GNU make only.
# Other versions of make may report syntax errors in it.
#
# Do NOT touch this line...
#
.PHONY
:
all executable library objects check port clean dep archive
.SUFFIXES
:
.d
#
# Set these variables...
#
# The path of your TTCN-3 Test Executor installation:
# Uncomment this line to override the environment variable.
# TTCN3_DIR =
# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32)
PLATFORM
=
LINUX
# Your C++ compiler:
# (if you change the platform, you may need to change the compiler)
CXX
=
g++
# Flags for dependency generation
CXXDEPFLAGS
:=
-MM
# Flags for the C++ preprocessor (and makedepend as well):
CPPFLAGS
=
-D
$(PLATFORM)
-I
.
-I
$(TTCN3_DIR)
/include
-I
.
-I
../src
# Flags for the C++ compiler:
CXXFLAGS
=
-Wall
-O2
# Flags for the linker:
LDFLAGS
=
ifeq
($(PLATFORM), WIN32)
# Silence linker warnings.
LDFLAGS
+=
-Wl
,--enable-auto-import,--enable-runtime-pseudo-reloc
endif
# Utility to create library files
AR
=
ar
ARFLAGS
=
# Flags for the TTCN-3 and ASN.1 compiler:
COMPILER_FLAGS
=
-lL
# Execution mode: (either ttcn3 or ttcn3-parallel)
TTCN3_LIB
=
ttcn3-parallel
# The path of your OpenSSL installation:
# If you do not have your own one, leave it unchanged.
OPENSSL_DIR
=
$(TTCN3_DIR)
# The path of your libxml2 installation:
# If you do not have your own one, leave it unchanged.
XMLDIR
=
$(TTCN3_DIR)
# Directory to store the archived source files:
ARCHIVE_DIR
=
backup
#
# You may change these variables. Add your files if necessary...
#
# TTCN-3 modules of this project:
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_Types.ttcn SocketCANtest.ttcn
# ASN.1 modules of this project:
ASN1_MODULES
=
# C++ source & header files generated from the TTCN-3 & ASN.1 modules of
# this project:
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_Types.cc SocketCANtest.cc
GENERATED_HEADERS
=
$(GENERATED_SOURCES:.cc=.hh)
# C/C++ Source & header files of Test Ports, external functions and
# other modules:
USER_SOURCES
=
../src/SocketCAN_PT.cc
USER_HEADERS
=
../src/SocketCAN_PT.hh
# Object files of this project that are needed for the executable test suite:
OBJECTS
=
$(GENERATED_OBJECTS)
$(USER_OBJECTS)
GENERATED_OBJECTS
=
$(GENERATED_SOURCES:.cc=.o)
USER_OBJECTS
=
SocketCAN_PT.o
# Dependency files of this project that are needed for the executable test suite:
DEPFILES
=
$(USER_OBJECTS:.o=.d)
$(GENERATED_OBJECTS:.o=.d)
# Other files of the project (Makefile, configuration files, etc.)
# that will be added to the archived source files:
OTHER_FILES
=
../src/Makefile Makefile ../demo/README.md SocketCAN.cfg SocketCAN_broken_tests.cfg initscript.sh merge.sh
# The name of the executable test suite:
EXECUTABLE
=
SocketCAN
LIBRARY
=
SocketCAN.a
TARGET
=
$(EXECUTABLE)
#
# Do not modify these unless you know what you are doing...
# Platform specific additional libraries:
#
SOLARIS_LIBS
=
-lsocket
-lnsl
-lxml2
-lresolv
SOLARIS8_LIBS
=
-lsocket
-lnsl
-lxml2
-lresolv
LINUX_LIBS
=
-lxml2
-lpthread
-lrt
FREEBSD_LIBS
=
-lxml2
WIN32_LIBS
=
-lxml2
#
# Rules for building the executable...
#
all
:
$(TARGET) ;
executable
:
$(EXECUTABLE) ;
library
:
$(LIBRARY) ;
objects
:
$(OBJECTS) compile;
$(EXECUTABLE)
:
$(OBJECTS)
$(CXX)
$(LDFLAGS)
-o
$@
$^
\
-L
$(TTCN3_DIR)
/lib
-L
$(OPENSSL_DIR)
/lib
-L
$(XMLDIR)
/lib
\
-l
$(TTCN3_LIB)
-lcrypto
\
$
(
$(PLATFORM)
_LIBS
)
\
||
if
[
-f
$(TTCN3_DIR)
/bin/titanver
]
;
then
$(TTCN3_DIR)
/bin/titanver
$^
;
else
:
;
fi
$(LIBRARY)
:
$(OBJECTS)
$(AR)
-r
$(ARFLAGS)
$(LIBRARY)
$(OBJECTS)
SocketCAN_PT.o
:
../src/SocketCAN_PT.cc
$(CXX)
-c
$(CPPFLAGS)
$(CXXFLAGS)
-o
$@
$<
.cc.o .c.o
:
$(CXX)
-c
$(CPPFLAGS)
$(CXXFLAGS)
-o
$@
$<
SocketCAN_PT.d
:
../src/SocketCAN_PT.cc
@
echo
Creating dependency file
for
'$<'
;
set
-e
;
\
$(CXX)
$(CXXDEPFLAGS)
$(CPPFLAGS)
$(CXXFLAGS)
$<
\
|
sed
's/\($*\)\.o[ :]*/\1.o $@ : /g'
>
$@
;
\
[
-s
$@
]
||
rm
-f
$@
.cc.d .c.d
:
@
echo
Creating dependency file
for
'$<'
;
set
-e
;
\
$(CXX)
$(CXXDEPFLAGS)
$(CPPFLAGS)
$(CXXFLAGS)
$<
\
|
sed
's/\($*\)\.o[ :]*/\1.o $@ : /g'
>
$@
;
\
[
-s
$@
]
||
rm
-f
$@
$(GENERATED_SOURCES) $(GENERATED_HEADERS)
:
compile
@
if
[
!
-f
$@
]
;
then
$(RM)
compile
;
$(MAKE)
compile
;
fi
check
:
$(TTCN3_MODULES) $(ASN1_MODULES)
$(TTCN3_DIR)
/bin/compiler
-s
$(COMPILER_FLAGS)
$^
port
:
$(TTCN3_MODULES)
$(TTCN3_DIR)
/bin/compiler
-t
$(COMPILER_FLAGS)
$^
compile
:
$(TTCN3_MODULES) $(ASN1_MODULES)
$(TTCN3_DIR)
/bin/compiler
$(COMPILER_FLAGS)
$^
-
$?
touch
$@
browserdata.dat
:
$(TTCN3_MODULES) $(ASN1_MODULES)
$(TTCN3_DIR)
/bin/compiler
-B
-s
$(COMPILER_FLAGS)
$^
clean
:
-
$(RM)
$(EXECUTABLE)
$(OBJECTS)
$(LIBRARY)
$(GENERATED_HEADERS)
$(DEPFILES)
\
$(GENERATED_SOURCES)
compile
\
browserdata.dat tags
*
.log
$(DEPFILES)
dep
:
$(GENERATED_SOURCES) $(USER_SOURCES) $(DEPFILES) ;
ifeq
($(filter clean check port compile archive,$(MAKECMDGOALS)),)
-include
$(DEPFILES)
endif
archive
:
mkdir
-p
$(ARCHIVE_DIR)
tar
-cvhf
-
$(TTCN3_MODULES)
$(ASN1_MODULES)
\
$(USER_HEADERS)
$(USER_SOURCES)
$(OTHER_FILES)
\
|
gzip
>
$(ARCHIVE_DIR)
/
`
basename
$(TARGET)
.exe
`
-
`
date
'+%y%m%d-%H%M'
`
.tgz
diag
:
$(TTCN3_DIR)
/bin/compiler
-v
2>&1
$(TTCN3_DIR)
/bin/mctr_cli
-v
2>&1
$(CXX)
-v
2>&1
$(AR)
-V
2>&1
@
echo
TTCN3_DIR
=
$(TTCN3_DIR)
@
echo
OPENSSL_DIR
=
$(OPENSSL_DIR)
@
echo
XMLDIR
=
$(XMLDIR)
@
echo
PLATFORM
=
$(PLATFORM)
#
# Add your rules here if necessary...
#
demo/SocketCAN.cfg
0 → 100644
View file @
6d762be0
##############################################################################
# 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
##############################################################################
[LOGGING]
FileMask := LOG_ALL
ConsoleMask := LOG_ALL
LogSourceInfo := Yes
SourceInfoFormat:= Single // Single or Stack
LogEntityName:= Yes
LogEventTypes:= Yes
[TESTPORT_PARAMETERS]
// Syntax:
// <component_name>.<port_name>.<parameter_name> := <parameter_value>
system.pt_socketCAN.SocketCAN_can_interface_name := "vcan0"
system.pt_socketCAN.SocketCAN_debugging := "YES"
system.pt_socketCAN_VCAN_IFA.SocketCAN_can_interface_name := "vcan0"
system.pt_socketCAN_VCAN_IFA.SocketCAN_debugging := "YES"
system.pt_socketCAN_VCAN_IFB.SocketCAN_can_interface_name := "vcan1"
system.pt_socketCAN_VCAN_IFB.SocketCAN_debugging := "YES"
[EXECUTE]
//CAN RAW tests
SocketCAN_RAW_test.tc_can_raw_send_and_receive_frame
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FILTER
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_ERR_FILTER
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_LOOPBACK
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_RECV_OWN_MSGS
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_FD_FRAMES
SocketCAN_RAW_test.tc_can_raw_setsockopt_CAN_RAW_JOIN_FILTERS
//CAN BCM tests
SocketCAN_BCM_test.tc_can_bcm_TX_SETUP_TX_DELETE
// broken CAN BCM tests:
//SocketCAN_BCM_test.tc_can_bcm_TX_SETUP_TX_DELETE_TX_READ__broken
demo/SocketCAN_BCM_test.ttcn
0 → 100644
View file @
6d762be0
/* 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
:=
1
,
can_pdu
:=
'1111111111111111'O
};
v_can_frame2
:=
{
can_id
:=
2
,
can_pdu
:=
'2222222222222222'O
};
v_can_frame3
:=
{
can_id
:=
3
,
can_pdu
:=
'3333333333333333'O
};
v_can_frame4
:=
{
can_id
:=
4
,
can_pdu
:=
'4444444444444444'O
};
v_can_frame5
:=
{
can_id
:=
5
,
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
:=
1
,
// TX_SETUP
flags
:=
'00000000000000000000000000000011'B
,
// refers to SETTIMER | STARTTIMER
count
:=
0
,
ival1
:=
{
0
,
0
},
ival2
:=
{
0
,
100000
},
can_id
:=
66
,
// 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
:=
2
,
// TX_DELETE
flags
:=
'00000000000000000000000000000000'B
,
count
:=
0
,
ival1
:=
{
0
,
0
},
ival2
:=
{
0
,
0
},
can_id
:=
66
,
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
:=
1
,
can_pdu
:=
'1111111111111111'O
};
v_can_frame2
:=
{
can_id
:=
2
,
can_pdu
:=
'2222222222222222'O
};
v_can_frame3
:=
{
can_id
:=
3
,
can_pdu
:=
'3333333333333333'O
};
v_can_frame4
:=
{
can_id
:=
4
,
can_pdu
:=
'4444444444444444'O
};
v_can_frame5
:=
{
can_id
:=
5
,
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
:=
1
,
// TX_SETUP
flags
:=
'00000000000000000000000000000011'B
,
// refers to SETTIMER | STARTTIMER
count
:=
0
,
ival1
:=
{
0
,
0
},
ival2
:=
{
0
,
100000
},
can_id
:=
66
,
// 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
:=
2
,
// TX_DELETE
flags
:=
'00000000000000000000000000000000'B
,
count
:=
0
,
ival1
:=
{
0
,
0
},
ival2
:=
{
0
,
0
},
can_id
:=
66
,
frames
:=
{
can_frame
:=
{}}
}
v_bcm_read_status_frame
:=
{
opcode
:=
3
,
// 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
:=
66
,
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
;
}
}
demo/SocketCAN_RAW_test.ttcn
0 → 100644
View file @
6d762be0
/* 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_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
:=
21
,
can_pdu
:=
'
0123456789
ABCDEF
'
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_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
:=
123
,
can_mask
:=
bit2int
(
oct2bit
(
CAN_EFF_FLAG
)
or4b
oct2bit
(
CAN_RTR_FLAG
)
or4b
oct2bit
(
CAN_SFF_MASK
))};
const
CAN_RAW_filter
c_rfilter1
:=
{
can_id
:=
oct2int
(
'0200'O
),
can_mask
:=
oct2int
(
'0700'O
)};
const
CAN_RAW_filter
c_rfilter2
:=
{
can_id
:=
bit2int
(
oct2bit
(
'
12345678
'
O
)
or4b
oct2bit
(
CAN_EFF_FLAG
)),
can_mask
:=
bit2int
(
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