Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ITS - Intelligent Transport Systems
ITS
Commits
f1b6b105
Commit
f1b6b105
authored
Sep 29, 2016
by
garciay
Browse files
Add simulation for UC9 (RSU broadcast CAM with PCZ)
parent
d2bcd4af
Changes
5
Hide whitespace changes
Inline
Side-by-side
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Functions.ttcn
View file @
f1b6b105
...
...
@@ -241,15 +241,30 @@ module ItsRSUsSimulator_Functions {
// CAM
if
(
vc_cam
==
true
)
{
// Build the list of the CAM events
v_cam
:=
m_camParm
(
PICS_RSU_PARAMS
[
p_rsu_id
].
stationID
,
m_rsuPosition
(
vc_longPosVectorRsu
.
latitude
,
vc_longPosVectorRsu
.
longitude
),
PICS_RSU_PARAMS
[
p_rsu_id
].
pathHistory
);
if
(
PX_ETSI_USE_CASE_ID
==
9
)
{
v_cam
:=
m_camParm
(
PICS_RSU_PARAMS
[
p_rsu_id
].
stationID
,
m_rsuPosition
(
vc_longPosVectorRsu
.
latitude
,
vc_longPosVectorRsu
.
longitude
),
PICS_RSU_PARAMS
[
p_rsu_id
].
pathHistory
,
m_highFrequencyContainer_rsuContainerHighFrequency
(
m_rSUContainerHighFrequency
(
PICS_USECASE9_PCZ
)));
}
else
{
v_cam
:=
m_camParm
(
PICS_RSU_PARAMS
[
p_rsu_id
].
stationID
,
m_rsuPosition
(
vc_longPosVectorRsu
.
latitude
,
vc_longPosVectorRsu
.
longitude
),
PICS_RSU_PARAMS
[
p_rsu_id
].
pathHistory
);
}
}
if
(
vc_beacon
==
true
)
{
// Build the list of the BeACON events
...
...
@@ -558,18 +573,32 @@ module ItsRSUsSimulator_Functions {
)
runs
on
ItsRSUsSimulator
{
var
GeoNetworkingPdu
v_geoNetworkingPdu
;
v_geoNetworkingPdu
:=
valueof
(
m_geoNwPdu
(
// FIXME Use PIXIT parameter to get a fully configurable template
m_geoNwBroadcastPacket_payload
(
// TODO modifes 'template (value) GnNonSecuredPacket m_geoNwBroadcastPacket' to set the field
vc_longPosVectorRsu
,
f_incLocalSeqNumber
(),
f_geoArea2GeoBroadcastArea
(
vc_geoArea
),
-
,
-
,
valueof
(
p_payload
)
),
m_defaultLifetime
,
c_defaultHopLimit
));
if
(
p_its_aid
==
36
)
{
// CAM
v_geoNetworkingPdu
:=
valueof
(
m_geoNwPdu
(
// FIXME Use PIXIT parameter to get a fully configurable template
m_geoNwTsbPacket_payload
(
// TODO modifes 'template (value) GnNonSecuredPacket m_geoNwBroadcastPacket' to set the field
f_incLocalSeqNumber
(),
vc_longPosVectorRsu
,
-
,
-
,
valueof
(
p_payload
)
),
m_defaultLifetime
,
c_defaultHopLimit
));
}
else
{
v_geoNetworkingPdu
:=
valueof
(
m_geoNwPdu
(
// FIXME Use PIXIT parameter to get a fully configurable template
m_geoNwBroadcastPacket_payload
(
// TODO modifes 'template (value) GnNonSecuredPacket m_geoNwBroadcastPacket' to set the field
vc_longPosVectorRsu
,
f_incLocalSeqNumber
(),
f_geoArea2GeoBroadcastArea
(
vc_geoArea
),
-
,
-
,
valueof
(
p_payload
)
),
m_defaultLifetime
,
c_defaultHopLimit
));
}
f_sendGeoNetMessage
(
valueof
(
m_geoNwReq_linkLayerBroadcast
(
v_geoNetworkingPdu
,
p_its_aid
)));
}
// End of function f_send
...
...
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pics.ttcn
View file @
f1b6b105
...
...
@@ -200,7 +200,8 @@ module ItsRSUsSimulator_Pics {
}
// End of group rsu4
/**
* @desc RSU #5
* @desc RSU #5 - RSUs E
* @remark Zone #8
*/
group
rsu5
{
...
...
@@ -219,8 +220,8 @@ module ItsRSUsSimulator_Pics {
longPosVector
:=
{
gnAddr
:=
PICS_RSU_GN_ADDRESS_RSU5
,
timestamp_
:=
0
,
latitude
:=
435
5635
00
,
longitude
:=
103
04745
0
,
latitude
:=
435
8384
00
,
longitude
:=
103
24978
0
,
pai
:=
'0'
B
,
speed
:=
0
,
heading
:=
0
...
...
@@ -241,7 +242,8 @@ module ItsRSUsSimulator_Pics {
}
// End of group rsu5
/**
* @desc RSU #6
* @desc RSU #6 - RSUs F
* @remark Zone #8
*/
group
rsu6
{
...
...
@@ -260,8 +262,8 @@ module ItsRSUsSimulator_Pics {
longPosVector
:=
{
gnAddr
:=
PICS_RSU_GN_ADDRESS_RSU6
,
timestamp_
:=
0
,
latitude
:=
435
57066
0
,
longitude
:=
103
01917
0
,
latitude
:=
435
92348
0
,
longitude
:=
103
37554
0
,
pai
:=
'0'
B
,
speed
:=
0
,
heading
:=
0
...
...
@@ -590,17 +592,22 @@ module ItsRSUsSimulator_Pics {
mid
:=
'000000000000'O
},
timestamp_
:=
0
,
latitude
:=
1234
,
longitude
:=
1
234
,
latitude
:=
433310000
,
longitude
:=
1
01803000
,
pai
:=
'0'
B
,
speed
:=
0
,
heading
:=
0
}
}
// End of PICS_UC6_DETECTION_POINT
/**
* @desc Maximum synchronisation area to start sending CAM
*/
modulepar
float
PICS_UC6_DETECTION_EPSILLON
:=
19.0
;
// 2.0;
modulepar
float
PICS_UC6_DETECTION_DISTANCE
:=
11.0
;
/**
* @desc Maximum synchronisation area to start sending CAM
*/
modulepar
float
PICS_UC6_DETECTION_EPSILLON
:=
0.01
;
}
// End of group camUseCase6SyncLocation
...
...
@@ -619,7 +626,7 @@ module ItsRSUsSimulator_Pics {
pai
:=
'0'
B
,
speed
:=
30
,
heading
:=
0
}
}
// End of PICS_UC6_VEHICLE_POSITION
modulepar
GeoArea
PICS_UC6_VEHICLE_GEOAREA
:=
{
shape
:=
e_geoElip
,
...
...
@@ -630,7 +637,7 @@ module ItsRSUsSimulator_Pics {
distanceB
:=
3
,
angle
:=
0
}
}
}
// End of PICS_UC6_VEHICLE_GEOAREA
}
// End of group camUseCase6VehicleDescription
...
...
@@ -1194,10 +1201,27 @@ module ItsRSUsSimulator_Pics {
altitudeConfidence
:=
unavailable
}
}
}
}
// End of PICS_USECASE6_VEHICLE_POSITIONS
}
// End of group camUseCase6
group
camUseCase9
{
modulepar
ProtectedCommunicationZone
PICS_USECASE9_PCZ_1
:=
{
protectedZoneType
:=
cenDsrcTolling
,
expiryTime
:=
omit
,
protectedZoneLatitude
:=
435924080
,
protectedZoneLongitude
:=
103374530
,
protectedZoneRadius
:=
500
,
protectedZoneID
:=
1
}
// End of PICS_USECASE9_PCZ_1
modulepar
ProtectedCommunicationZonesRSU
PICS_USECASE9_PCZ
:=
{
PICS_USECASE9_PCZ_1
}
// End of PICS_USECASE9_PCZ
}
// End of group camUseCase9
}
// End of group camParams
/**
...
...
@@ -6148,11 +6172,11 @@ module ItsRSUsSimulator_Pics {
modulepar
boolean
PICS_GENERATE_BEACON
:=
false
;
modulepar
boolean
PICS_GENERATE_CAM
:=
fals
e
;
modulepar
boolean
PICS_GENERATE_CAM
:=
tru
e
;
modulepar
boolean
PICS_GENERATE_DENM
:=
false
;
modulepar
boolean
PICS_GENERATE_IVIM
:=
tru
e
;
modulepar
boolean
PICS_GENERATE_IVIM
:=
fals
e
;
modulepar
boolean
PICS_GENERATE_MAPEM
:=
false
;
...
...
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Pixits.ttcn
View file @
f1b6b105
...
...
@@ -22,7 +22,7 @@ module ItsRSUsSimulator_Pixits {
/**
* @desc Indicate which RSU to simulate
*/
modulepar
integer
PX_RSU_ID
:=
1
;
modulepar
integer
PX_RSU_ID
:=
6
;
/**
* @desc Indicate which Use Case to simulate
...
...
@@ -30,8 +30,9 @@ module ItsRSUsSimulator_Pixits {
* UC3 (TLM): PX_ETSI_USE_CASE_ID := 3
* UC5 (IVIM): PX_ETSI_USE_CASE_ID := 5
* UC6 (CAM): PX_ETSI_USE_CASE_ID := 6
* UC9 (CAM): PX_ETSI_USE_CASE_ID := 9
*/
modulepar
integer
PX_ETSI_USE_CASE_ID
:=
5
;
modulepar
integer
PX_ETSI_USE_CASE_ID
:=
9
;
/**
* @desc Indicate which zone to simulate
...
...
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_Templates.ttcn
View file @
f1b6b105
...
...
@@ -16,6 +16,7 @@ module ItsRSUsSimulator_Templates {
// LibItsCommon
import
from
LibItsCommon_Functions
all
;
import
from
LibCommon_DataStrings
all
;
// LibItsGeoNetworking
import
from
LibItsGeoNetworking_TestSystem
all
;
...
...
@@ -74,6 +75,22 @@ module ItsRSUsSimulator_Templates {
payload
:=
p_payload
}
// End of template m_geoNwBroadcastPacket_payload
/**
* @desc Send template for GeoNetworking TSB Packet
* @param p_seqNumber Sequence number of TSB packet
* @param p_sourceLongPosVec Long position vector of source
* @param p_hopLimit The maximum number of hops (Default: c_defaultHopLimit)
*/
template
(
value
)
GnNonSecuredPacket
m_geoNwTsbPacket_payload
(
in
template
(
value
)
UInt16
p_seqNumber
,
in
template
(
value
)
LongPosVector
p_sourceLongPosVec
,
in
template
(
value
)
UInt8
p_hopLimit
:=
c_defaultHopLimit
,
in
template
(
value
)
TrafficClass
p_trafficClass
:=
m_trafficClass
,
in
template
(
value
)
Payload
p_payload
)
modifies
m_geoNwTsbPacket
:=
{
payload
:=
p_payload
}
/**
* @desc Receive template for GeoNetworking Unicast Packet
* @param p_destinationShortPosVec Short position vector of destination
...
...
@@ -200,13 +217,13 @@ module ItsRSUsSimulator_Templates {
* @param p_longPosVector The base long position vector
*/
template
LongPosVector
mw_longPosVectorPosition_vendors
(
in
template
(
value
)
LongPosVector
p_longPosVector
)
modifies
mw_longPosVectorPosition
:=
{
in
template
(
value
)
Oct6
p_mid
)
:=
{
gnAddr
:=
{
typeOfAddress
:=
?
,
stationType
:=
?
,
stationCountryCode
:=
?
,
mid
:=
complement
(
p_longPosVector
.
gnAddr
.
mid
)
mid
:=
p_
mid
},
timestamp_
:=
?
,
latitude
:=
?
,
...
...
@@ -220,10 +237,23 @@ module ItsRSUsSimulator_Templates {
group
camTemplates
{
template
(
value
)
CAM
m_camParm
(
in
template
(
value
)
StationID
p_stationID
,
in
template
(
value
)
ReferencePosition
p_rsuPosition
,
in
template
(
value
)
PathHistory
p_pathHistory
template
(
value
)
HighFrequencyContainer
m_highFrequencyContainer_rsuContainerHighFrequency
(
in
template
(
value
)
RSUContainerHighFrequency
p_rsuContainerHighFrequency
)
:=
{
rsuContainerHighFrequency
:=
p_rsuContainerHighFrequency
}
template
(
value
)
RSUContainerHighFrequency
m_rSUContainerHighFrequency
(
in
template
(
value
)
ProtectedCommunicationZonesRSU
p_protectedCommunicationZonesRSU
)
:=
{
protectedCommunicationZonesRSU
:=
p_protectedCommunicationZonesRSU
}
template
(
omit
)
CAM
m_camParm
(
in
template
(
value
)
StationID
p_stationID
,
in
template
(
value
)
ReferencePosition
p_rsuPosition
,
in
template
(
value
)
PathHistory
p_pathHistory
,
in
template
(
omit
)
HighFrequencyContainer
p_highFrequencyContainer
:=
omit
)
:=
{
header
:=
{
protocolVersion
:=
ItsPduHeader_protocolVersion_currentVersion_
,
...
...
@@ -237,24 +267,21 @@ module ItsRSUsSimulator_Templates {
stationType
:=
StationType_roadSideUnit_
,
referencePosition
:=
p_rsuPosition
},
highFrequencyContainer
:=
{
rsuContainerHighFrequency
:=
{
protectedCommunicationZonesRSU
:=
omit
/*{
}*/
}
},
lowFrequencyContainer
:=
omit
,
/*{
highFrequencyContainer
:=
p_highFrequencyContainer
,
lowFrequencyContainer
:=
{
basicVehicleContainerLowFrequency
:=
{
vehicleRole
:=
roadOperator
,
exteriorLights :=
ExteriorLights_daytimeRunningLightsOn_
,
exteriorLights
:=
'00000000'B
,
pathHistory
:=
p_pathHistory
}
}
*/
}
,
specialVehicleContainer
:=
omit
}
}
}
// End of template m_camParm
// TODO Add ProtectedZone
}
// End of group camTemplates
group
mapemTemplates
{
...
...
ttcn/AtsRSUsSimulator/ItsRSUsSimulator_TestCases.ttcn
View file @
f1b6b105
...
...
@@ -40,7 +40,7 @@ module ItsRSUsSimulator_TestCases {
// Test control
// Test component configuration
f_cf01Up
();
ItsRSUsSimulator_Functions
.
f_cf01Up
();
// Test adapter configuration
...
...
@@ -153,7 +153,7 @@ module ItsRSUsSimulator_TestCases {
f_selfOrClientSyncAndVerdictTestBody
(
c_tbDone
,
e_success
);
// Postamble
f_cf01Down
();
ItsRSUsSimulator_Functions
.
f_cf01Down
();
}
// End of TC_RSUSIMU_BV_01
...
...
@@ -173,7 +173,7 @@ module ItsRSUsSimulator_TestCases {
// Test control
// Test component configuration
f_cf01Up
();
ItsRSUsSimulator_Functions
.
f_cf01Up
();
// Test adapter configuration
...
...
@@ -182,39 +182,62 @@ module ItsRSUsSimulator_TestCases {
// Test Body
tc_ac
.
start
;
geoNetworkingPort
.
clear
;
alt
{
[]
geoNetworkingPort
.
receive
(
mw_geoNwInd
(
mw_geoNwPdu
(
mw_geoNwShbPacketWithNextHeader_cam
(
mw_longPosVectorPosition_vendors
(
PICS_UC6_VEHICLE_POSITION
// Ignore RSUsimultor CAM messages
PICS_UC6_VEHICLE_POSITION
.
gnAddr
.
mid
// Ignore RSUsimultor CAM messages
),
?
,
-
,
e_btpB
))))
->
value
v_gnInd
{
// Receive a DENM message
))))
{
// Receive a owner CAM message
repeat
;
}
[]
geoNetworkingPort
.
receive
(
mw_geoNwInd
(
mw_geoNwPdu
(
mw_geoNwShbPacketWithNextHeader_cam
(
-
,
/*mw_longPosVectorPosition_vendors(
PICS_UC6_VEHICLE_POSITION.gnAddr.mid // Ignore RSUsimultor CAM messages
),*/
-
,
e_btpB
))))
->
value
v_gnInd
{
// Receive a CAM message
tc_ac
.
stop
;
// Check if already processed
v_stationID
:=
int2str
(
v_gnInd
.
msgIn
.
gnPacket
.
packet
.
payload
.
decodedPayload
.
btpPacket
.
payload
.
decodedPayload
.
camPacket
.
header
.
stationID
);
if
(
regexp
(
v_stationID
,
charstring
:
"(
[1-9]#(1,6)),"
,
0
)
==
""
)
{
// Non simulated vehicle
if
(
regexp
(
v_stationID
s
,
charstring
:
"(
"
&
v_stationID
&
",)"
,
0
)
==
""
)
{
// Vehicle already processed?
// Compute point intersection
if
(
LibItsGeoNetworking_Functions
.
f_distance
(
var
float
v_distance
:=
LibItsGeoNetworking_Functions
.
f_distance
(
v_gnInd
.
msgIn
.
gnPacket
.
packet
.
extendedHeader
.
shbHeader
.
srcPosVector
,
PICS_UC6_DETECTION_POINT
)
<=
PICS_UC6_DETECTION_EPSILLON
)
{
);
if
(
ff_abs
(
v_distance
-
PICS_UC6_DETECTION_DISTANCE
)
<
PICS_UC6_DETECTION_EPSILLON
)
{
log
(
"*** "
&
testcasename
()
&
": DEBUG: StationID: "
&
v_stationID
&
" in of area ("
,
ff_abs
(
v_distance
-
PICS_UC6_DETECTION_DISTANCE
),
") ***"
);
v_vehicles
[
v_vehiclesIdx
]
:=
ItsRSUsSimulator
.
create
(
"Node"
&
int2char
(
v_vehiclesIdx
+
65
))
alive
;
v_vehicles
[
v_vehiclesIdx
].
start
(
f_startVehicleSimulator
(
v_vehicles
[
v_vehiclesIdx
],
v_vehiclesIdx
));
v_vehiclesIdx
:=
v_vehiclesIdx
+
1
;
v_stationIDs
:=
v_stationIDs
&
v_stationID
&
","
;
//log("*** " & testcasename() & ": DEBUG: New v_stationIDs: " & v_stationIDs & " ***");
}
else
{
// Nothing to do
log
(
"*** "
&
testcasename
()
&
": DEBUG: StationID: "
&
v_stationID
&
" out of area ("
,
ff_abs
(
v_distance
-
PICS_UC6_DETECTION_DISTANCE
),
") ***"
);
}
}
else
{
// Nothing to do
//log("*** " & testcasename() & ": DEBUG: StationID: " & v_stationID & " already processed ***");
}
tc_ac
.
start
;
repeat
;
}
[]
geoNetworkingPort
.
receive
{
// Receive a message
[]
geoNetworkingPort
.
receive
(
mw_geoNwInd
(
mw_geoNwPdu
(
?
)))
{
// Receive a CAM message
log
(
"*** "
&
testcasename
()
&
": DEBUG: Recieving unsollicited message ***"
);
// Nothing to do, just for logging purposes
tc_ac
.
stop
;
...
...
@@ -239,7 +262,7 @@ module ItsRSUsSimulator_TestCases {
for
(
var
integer
v_idx
:=
0
;
v_idx
<
lengthof
(
v_vehicles
);
v_idx
:=
v_idx
+
1
)
{
v_vehicles
[
v_idx
].
done
;
}
// End of 'for' statement
f_cf01Down
();
ItsRSUsSimulator_Functions
.
f_cf01Down
();
}
// End of TC_RSUSIMU_BV_02
...
...
@@ -254,12 +277,17 @@ module ItsRSUsSimulator_TestCases {
var
integer
v_idx
:=
0
;
var
template
(
value
)
CAM
v_cam
;
//log("*** " & testcasename() & ": DEBUG: >>> f_startVehicleSimulator: " & int2str(p_idx) & " ***");
f_initialiseVehicleSimulatorComponent
(
p_component
,
v_cam
);
tc_ca_uc6
.
start
;
alt
{
[]
tc_cam
.
timeout
{
log
(
"*** "
&
testcasename
()
&
": DEBUG: Processing CAM ***"
);
/*[] cfPort.receive {
repeat;
}*/
[]
tc_ca_uc6
.
timeout
{
log
(
"*** "
&
testcasename
()
&
": DEBUG: Processing CAM #"
&
int2str
(
v_idx
)
&
" ***"
);
tc_ca_uc6
.
stop
;
f_send_vehicle_cam
(
v_cam
,
v_idx
);
v_idx
:=
v_idx
+
1
;
if
(
v_idx
<
lengthof
(
PICS_USECASE6_VEHICLE_POSITIONS
))
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment