Commits (83)
ASN1_SRC := IMZM-PDU-Descriptions.asn \
cam/CAM-PDU-Descriptions.asn \
vam/VAM-Temp-Imports.asn \
cdd/ITS-Container.asn
ASN1_SRC_VALIDATE := \
iso/iso19091_2018.asn \
iso/iso24534-3_1_2015.asn \
iso/iso24534-3_2_2015.asn \
iso/ISO14816_AVIAEINumberingAndDataStructures.asn
ASN1_PDU := IMZM
ASN1_KNOWN := DATE
#ASN1CDIR ?= $(USERPROFILE)/Work/asn1c-fillabs
ifneq (,$(ASN1CDIR))
ASN1C := $(ASN1CDIR)/asn1c/.libs/asn1c -S $(ASN1CDIR)/skeletons
else
ASN1C := asn1c
endif
.PHONY: validate doc build
validate: iso build
doc: docs
python3 asn2md.py -o docs --brief-as-title $(ASN1_SRC)
iso docs:
mkdir -p $@
build: $(ASN1_SRC) $(ASN1_SRC_VALIDATE)
$(ASN1C) -E -F -fcompound-names $(addprefix -fknown-extern-type=,$(ASN1_KNOWN)) $(addprefix -pdu=,$(ASN1_PDU)) $^ >/dev/null
iso/iso19091_2018.asn:
curl -o $@ 'https://standards.iso.org/iso/ts/19091/ed-2/en/ISO-TS-19091-addgrp-C-2018.asn'
iso/iso24534-3_1_2015.asn:
curl -o $@ 'https://standards.iso.org/iso/24534/-3/ISO%2024534-3%20ASN.1%20repository/ISO24534-3_ElectronicRegistrationIdentificationVehicleDataModule_ForBallot.asn'
iso/iso24534-3_2_2015.asn:
curl -o $@ 'https://standards.iso.org/iso/24534/-3/ISO%2024534-3%20ASN.1%20repository/ISO24534-3_ElectronicRegistrationIdentificationEfcVehicleDataModule_ForBallot.asn'
iso/ISO14816_AVIAEINumberingAndDataStructures.asn:
curl -o $@ 'https://standards.iso.org/iso/14816/ISO14816%20ASN.1%20repository/ISO14816_AVIAEINumberingAndDataStructures.asn'
variables:
GIT_SUBMODULE_STRATEGY: normal
image: danya25/asn1c:0.0.5
validate:
stage: test
script: make -f .gitlab-ci.mk validate
only:
changes:
- "*.asn"
documentation:
stage: deploy
script:
- >
if ! [ -f asn2md.py ]; then
curl -o asn2md.py --header "PRIVATE-TOKEN:$CI_JOB_TOKEN" "https://forge.etsi.org/rep/api/v4/projects/592/repository/files/asn2md.py/raw?ref=master"
fi
- make -f .gitlab-ci.mk doc
- git add docs/*.md
- >
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
echo "No changes found";
else
git commit -m "Documentation update" &&
git remote rm origin && git remote add origin "https://oauth2:${CI_DOC_TOKEN}@forge.etsi.org/rep/$CI_PROJECT_PATH.git" &&
git push origin "HEAD:$CI_COMMIT_REF_NAME";
fi
only:
changes:
- "*.asn"
--! @brief Specification of the Interference Management Zone Message ETSI TS 103 724
--! @brief Specification of the Interference Management Zone Message ETSI TS 103 724
--! Latest version available at @url https://forge.etsi.org/rep/ITS/asn1/imzm_ts103724
IMZM-PDU-Descriptions {
......@@ -25,34 +25,30 @@ en (302637) cam (2) version (2)
}
--! @brief Include ETSI TS 103 300-3
--! This is temporary
--! Import from VAM-Temp-Imports will be changed to CDD ETSI TS 102 894-2 Release 2 when available
--! Include references from @url https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/blob/master/VAM-Temp-Imports.asn
--! All data types, imported from `VAM-Temp-Imports` will be imported from the CDD ETSI TS 102 894-2 Release 2 when available
--! Include references from @url https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/blob/master/VAM-Temp-Imports.asn
AreaCircular, AreaRectangle, AreaPolygon, OffsetPoint, SemiRangeLength, WGS84AngleValue FROM VAM-Temp-Imports {
itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1)
ts(103300) temp-imports(255) version1(1)
}
;
--! @defgroup IMZM Interference Management Zone Message
--! @{
--! @brief DF: Interference Management Zone Message Root
--! This DF includes DEs for the IMZM protocolVersion, the IMZ message type identifier _messageID_
--! and the station identifier _stationID_ of the originating ITS-S.
--! This DF includes DEs for the IMZM `protocolVersion`, the IMZ message type identifier `messageID`
--! and the station identifier `stationID` of the originating ITS-S.
IMZM ::= SEQUENCE {
--! @details header
--! The DE _protocolVersion_ is used to select the appropriate protocol decoder at the receiving
--! ITS-S. For TS 103 724 V2.1.1, the value of the DE _protocolVersion_ shall be set to 1.
--! The DE _messageID_ shall be harmonized with other V2X message identifier definitions.
--! For IMZM, the DE messageID shall be set to imzm(15).
--! - The DE `protocolVersion` is used to select the appropriate protocol decoder at the receiving
--! ITS-S. For TS 103 724 V2.1.1, the value of the DE `protocolVersion` shall be set to 1.
--! - The DE `messageID` shall be harmonized with other V2X message identifier definitions.
--! For IMZM, the DE messageID shall be set to `imzm(15)`.
header ItsPduHeader,
imzm InterferenceManagementZoneMessage
}
--! @brief DF: Interference Management Zone Message
--! This is the actual IMZM Payload. It shall include the time stamp of the IMZM and the applicable
--! containers of type _BasicContainer_ and _ImzmContainer_.
--! containers of type `BasicContainer` and `ImzmContainer`.
InterferenceManagementZoneMessage ::= SEQUENCE {
generationDeltaTime GenerationDeltaTime, -- from CAM-PDU-Descriptions
imzmParameters ImzmParameters
......@@ -82,14 +78,15 @@ ImzmContainer ::= SEQUENCE {
}
--! @brief DF: List of Interference Management Zones
--! A list of up to 16 interference management zones.
--! EXAMPLE: An interference management communication zone may be defined around a
--! CEN DSRC road side equipment or an urban rail operational area.
--! A list of up to 16 interference management zones.
--!
--! **EXAMPLE**: An interference management communication zone may be defined around a
--! CEN DSRC road side equipment or an urban rail operational area.
--! @category: Infrastructure information, Communication information
InterferenceManagementZones ::= SEQUENCE (SIZE(1..16), ...) OF InterferenceManagementZone
--! @brief DF: Interference Management Zone
--! describes a zone of interferenceManagement inside which the ITS communication should
--! Describes a zone of interferenceManagement inside which the ITS communication should
--! be restricted.
--! @category: Infrastructure information, Communication information
InterferenceManagementZone ::= SEQUENCE {
......@@ -98,23 +95,23 @@ InterferenceManagementZone ::= SEQUENCE {
}
--! @brief DF: Zone Definition
--! describes the zone where band sharing occurs. When reusing CDD Rel.1 types, names are unchanged.
--! Describes the zone where band sharing occurs. When reusing CDD Rel.1 types, names are unchanged.
--! @category: Infrastructure information, Communication information
ZoneDefinition::= SEQUENCE{
--! @details interferenceManagementZoneLatitude
--! Latitude of the centre point of the interference management zone.
interferenceManagementZoneLatitude Latitude, --! from ITS-Container
interferenceManagementZoneLatitude Latitude, -- from ITS-Container
--! @details interferenceManagementZoneLongitude
--! Longitude of the centre point of the interference management zone.
interferenceManagementZoneLongitude Longitude, --! from ITS-Container
interferenceManagementZoneLongitude Longitude, -- from ITS-Container
--! @details interferenceManagementZoneRadius
--! Radius of the interference management zone in metres.
--! This DE is present if the data is available
interferenceManagementZoneRadius ProtectedZoneRadius OPTIONAL, --! from ITS-Container
interferenceManagementZoneRadius ProtectedZoneRadius OPTIONAL, -- from ITS-Container
--! @details interferenceManagementZoneID
--! Identification of the interference management zone.
--! This DE is present if the data is available.
interferenceManagementZoneID ProtectedZoneID OPTIONAL, --! from ITS-Container
interferenceManagementZoneID ProtectedZoneID OPTIONAL, -- from ITS-Container
--! @details interferenceManagementZoneShape
--! Shape of the interference management zone.
--! This DF is present if the data is available.
......@@ -125,7 +122,8 @@ ZoneDefinition::= SEQUENCE{
--! @brief DF: Interference Management Information
--! A list of up to 16 definitions containing which interference management may be applied in the zone,
--! per affected frequency channels.
--! Note: in the case where no mitigation should be applied by the ITS-S, this is indicated
--!
--! **Note**: in the case where no mitigation should be applied by the ITS-S, this is indicated
--! by the value of interferenceManagementMitigationType set to unavailable.
--! @category: Infrastructure information, Communication information
InterferenceManagementInfo::= SEQUENCE (SIZE(1..16,...)) OF InterferenceManagementInfoPerChannel
......@@ -147,12 +145,12 @@ InterferenceManagementInfoPerChannel ::= SEQUENCE {
--! @details expiryTime
--! Time at which the validity of the interference management communication zone will expire.
--! This DE is present when the interference management is temporarily valid
expiryTime TimestampIts OPTIONAL, --! from ITS-Container
expiryTime TimestampIts OPTIONAL, -- from ITS-Container
...
}
--! @brief DF: InterferenceManagementChannel
--! indicates which shared frequency channel should be applied interference management in the zone.
--! Indicates which shared frequency channel should be applied interference management in the zone.
--! @category: Communication information
InterferenceManagementChannel ::= SEQUENCE {
--! @details centre frequency of the channel
......@@ -173,12 +171,12 @@ InterferenceManagementChannel ::= SEQUENCE {
--! @unit: N/A
--! @category: Communication information
InterferenceManagementZoneType ::= ENUMERATED {
permanentCenDsrcTolling(0), --! as specified in ETSI TS 102 792
temporaryCenDsrcTolling(1), --! as specified in ETSI TS 102 792
unavailable(2), --! default value. Set to 2 for backwards compatibility with DSRC tolling
urbanRail(3), --! as specified in ETSI TS 103 724, clause 7
satelliteStation(4), --! as specified in ETSI TS 103 724, clause 7
fixedLinks(5), --! as specified in ETSI TS 103 724, clause 7
permanentCenDsrcTolling(0), --!< as specified in ETSI TS 102 792
temporaryCenDsrcTolling(1), --!< as specified in ETSI TS 102 792
unavailable(2), --!< default value. Set to 2 for backwards compatibility with DSRC tolling
urbanRail(3), --!< as specified in ETSI TS 103 724, clause 7
satelliteStation(4), --!< as specified in ETSI TS 103 724, clause 7
fixedLinks(5), --!< as specified in ETSI TS 103 724, clause 7
...
}
......@@ -228,10 +226,10 @@ MitigationPerTechnologyClass ::= SEQUENCE {
--! Access technology to which the mitigation type applies.
--! @category: Communication information
AccessTechnologyClass ::= ENUMERATED {
any(0), --! any access technology class (see clause 7 of TS 103 724).
itsg5Class(1), --! ITS-G5 access technology class.
ltev2xClass(2), --! LTE-V2X access technology class.
nrv2xClass(3), --! NR-V2X access technology class.
any(0), --!< any access technology class (see clause 7 of TS 103 724).
itsg5Class(1), --!< ITS-G5 access technology class.
ltev2xClass(2), --!< LTE-V2X access technology class.
nrv2xClass(3), --!< NR-V2X access technology class.
...
}
......@@ -239,10 +237,10 @@ AccessTechnologyClass ::= ENUMERATED {
--! Bounding box of an interference management zone
--! @category: GeoReference information
InterferenceManagementZoneShape::= CHOICE {
rectangle AreaRectangle, --! imported from VAM-Temp-Imports
circle AreaCircular, --! imported from VAM-Temp-Imports
polygon AreaPolygon, --! imported from VAM-Temp-Imports
ellipse AreaEllipse, --! could not be imported from another specification yet
rectangle AreaRectangle, -- imported from VAM-Temp-Imports
circle AreaCircular, -- imported from VAM-Temp-Imports
polygon AreaPolygon, -- imported from VAM-Temp-Imports
ellipse AreaEllipse, -- could not be imported from another specification yet
...
}
......@@ -266,5 +264,5 @@ AreaEllipse ::= SEQUENCE {
--! Orientation of the semiMajorRangeLength of the ellipse in the WGS84 coordinate system.
semiMajorRangeOrientation WGS84AngleValue
}
--! @}
END
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse # parse arguments
import os.path # getting extension from file
import sys # output and stuff
import re # for regular expressions
if (sys.version_info > (3, 0)):
import urllib.parse #
else:
import urllib #
## extract doxygen-tag namespace
RE_MODULE = re.compile( r'^\s*([A-Z][\w-]*)\s*({.*?})?\s*DEFINITIONS.*?::=\s*?BEGIN(.*)END', re.VERBOSE | re.MULTILINE | re.DOTALL)
RE_SPACES = re.compile(r'\s+')
RE_COMMENTS = re.compile(r'^\s*--.*?\n|--.*?(?:--|$)|/\*.*?\*/[\t ]*\n?', re.MULTILINE|re.DOTALL)
RE_BASIC_TYPES = re.compile(r'^OCTET\s+STRING|BIT\s+STRING|BOOLEAN|INTEGER|FLOAT|SEQUENCE|SET|NULL')
RE_TYPE_BODY = re.compile(r'.*?{(.*)}\s*(?:\(.*?\)|\s*$)', re.MULTILINE|re.DOTALL)
#RE_FIELDS = re.compile(r'^\s*(?:/\*\*.*?\*/)|^\s*([\w-]+?)\s+(OCTET\s+STRING|BIT\s+STRING|[A-Z][.\w-]+)?(.*?)(?:,((?:\s*--!?<.*?\n)*)|((?:--!?<.*?\n)*)$)', re.MULTILINE | re.DOTALL| re.VERBOSE)
RE_FIELDS = re.compile(r'^\s*/\*.*?\*/|^\s*--\!.*?\n|^\s*([\w-]+)\s+(OCTET\s+STRING|BIT\s+STRING|[A-Z][\w-]+)?((?:{[^}]*}|\([^)]*\)|.)*?)(?:,|(--)|$)', re.MULTILINE | re.DOTALL)
RE_EXPORTS = re.compile(r'^\s*EXPORTS.*?;', re.DOTALL | re.MULTILINE)
RE_IMPORTS = re.compile(r'^\s*IMPORTS\s*(.*?);', re.DOTALL | re.MULTILINE)
RE_IMPORT_ELEMENTS = re.compile(r'^([,\s\w-]*?)FROM\s*([\w-]+)\s*({[^}]*}(?:\s+WITH\s+SUCCESSORS)?)?', re.MULTILINE)
RE_IMPORT_ELEMENT_TYPE = re.compile(r'[^,\s]+')
RE_DOXY_COMMENTS = re.compile(r'^\s*--[-!#](:?$|\s(.*))', re.MULTILINE)
RE_DOXY_C_COMMENTS = re.compile(r'^\s*/\*\*\s(.*?)\*/', re.MULTILINE | re.DOTALL)
RE_DOXY_C_COMMENTS_I = re.compile(r'\s*\*+')
RE_DOXY_REF = re.compile(r'@ref\s+([\w-]+)')
RE_DOXY_CLASS = re.compile(r'@class\s+([\w-]+)')
RE_DOXY_STRIP_SINGLE_TAG = re.compile(r'@(?:brief|url)\s+')
RE_DOXY_DETAILS = re.compile(r'@details\s+[\w-]+')
RE_DOXY_STRIP_TAG = re.compile(r'@(?:details|class|struct)\s+[\w-]+')
RE_DOXY_UNIT = re.compile(r'@unit\s+(.+)', re.MULTILINE)
RE_DOXY_BRIEF = re.compile(r'@brief\s+(.+)\n', re.MULTILINE)
RE_DOXY_CATEGORY = re.compile(r'@category:\s+(.+)', re.MULTILINE)
RE_DOXY_PARAM = re.compile(r'^\s*@(?:param|field)\s+([\w-]+)\s*(.*?)\n\s*$', re.MULTILINE | re.DOTALL)
# RE_TYPE = re.compile(r'(([A-Z][\w-]*)\s*::=[\w \t]+(?:{+(.*?)}+)?.*?)\n\s*\n', re.MULTILINE | re.DOTALL)
RE_TYPE = re.compile(r'^\s*([A-Z][\w-]*)?\s*([{} \t:\w-]*?)?::=([\w \t]+.*?)\n\s*\n', re.MULTILINE | re.DOTALL)
extTypes = {}
cpos = 0
o_args = []
def urlquote(s):
if (sys.version_info > (3, 0)):
return urllib.parse.quote_plus(s)
else:
return urllib.quote_plus(s)
def parseText(content, indent=None):
s_unit=''
def repl_ref(m):
return '[**{0}**]({1}#{0})'.format(m.group(1), extTypes.get(m.group(1),''))
c = RE_DOXY_REF.sub(repl_ref, content)
if c is not None:
content = c
c = RE_DOXY_STRIP_TAG.sub('', content)
if c is not None:
content = c
c = RE_DOXY_STRIP_SINGLE_TAG.sub('', content)
if c is not None:
content = c
def repl_category(m):
ret = '\n&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: '
for l in m.group(1).split(','):
ret += '[{0}](#{1}) '.format(l.strip(), urlquote(l.strip()))
return ret + '\n\n'
c = RE_DOXY_CATEGORY.sub(repl_category, content)
if c is not None:
content = c
def repl_unit(m):
nonlocal s_unit
s_unit = '\n&nbsp;&nbsp;&nbsp;&nbsp;**Unit**: _' + m.group(1).strip() + '_'
return ''
c = RE_DOXY_UNIT.sub(repl_unit, content)
if c is not None:
content = c
return content + s_unit
def parseInlineComments(content:str, indent=None):
# keep into account only '--<' comments
lines = content.splitlines()
content = ''
for l in lines:
l = l.lstrip()
if l.startswith('--< '):
content += l[4:] + '\n'
elif l.startswith('--!< '):
content += l[5:] + '\n'
else:
continue
return parseText(content, indent)
def parseDoxyComments(content:str, indent=None):
# keep only '--! ' and /** */ comments
# convert '--! ' comments to C-style
c = RE_DOXY_COMMENTS.sub(r'/** \g<1>*/', content)
if c is not None:
content = c
ret = ''
for m in RE_DOXY_C_COMMENTS.finditer(content):
lines = m.group(1).splitlines()
for l in lines:
l = l.strip().lstrip('*')
ret += ''.ljust(indent or 0) + l + '\n'
return parseText(ret, indent)
def parseModule(mname, content):
global cpos
cpos = 0
ret = ''
m = RE_IMPORTS.search(content)
if m is not None:
pos = 0
if m.group(1) is not None:
ret += '## Imports:\n'
s = m.group(1)
for fm in RE_IMPORT_ELEMENTS.finditer(s):
imName = fm.group(2)
for im in RE_IMPORT_ELEMENT_TYPE.finditer(fm.group(1)):
extTypes[im.group(0)] = imName+'.md'
ret += ' * **[{0}]({0}.md)** *{1}*<br/>\n'.format(imName, RE_SPACES.sub(' ', fm.group(3) or ''))
ret += parseDoxyComments(s[pos:fm.start()], 3)+'\n'
pos = fm.end()
ret += parseDoxyComments(s[pos:])
cpos = m.end()
m = RE_EXPORTS.search(content)
if m is not None:
if cpos < m.end():
cpos = m.end()
# parse types
def repl_type (m, doc):
title = t = m.group(1)
if doc : # non None and not empty
def repl_brief (m):
nonlocal title
title = m.group(1)
return '\n'
if o_args.brief_as_title:
doc = RE_DOXY_BRIEF.sub(repl_brief, doc, 1)
doc = parseDoxyComments(doc) + '\n\n'
else:
doc = ''
ret = ''
if t is not None:
# parse out @params
f_params = {}
def repl_param (m):
nonlocal f_params
if m.group(1) is not None and m.group(2) is not None:
l = m.group(2).lstrip(":, \t\n")
if len(l):
f_params[m.group(1)] = l
return ''
doc = RE_DOXY_PARAM.sub(repl_param, doc)
ret = '### <a name="{0}"></a>{1}\n\n'.format(t, title) + doc
# parse fields and get out fields descriptions
if m.group(3) is not None:
# check if contain fields
fm = RE_TYPE_BODY.search(m.group(3))
if fm is not None and fm.group(1) is not None:
typeBody = fm.group(1).strip()
if typeBody is not None:
fTitle = ''
fields = ''
pos = 0
for fm in RE_FIELDS.finditer(typeBody):
if fm.group(1) is not None:
# add description to the previous type
fields += parseInlineComments(fm.string[pos:fm.start()], 3)
f = fm.group(1).strip()
ext = fm.group(3) or ''
if fm.group(2) is not None:
fTitle = 'Fields:\n'
t = fm.group(2).strip()
if RE_BASIC_TYPES.match(t) is not None:
fields += '* {0} **{1}** {2}<br>\n'.format(f, t, ext)
else:
fields += '* {0} [**{1}**]({2}#{1}) {3}<br>\n'.format(f, t, extTypes.get(t,''), ext)
else:
fTitle = 'Values:\n'
fields += '* **{0}** {1}<br>\n'.format(f, ext)
if f in f_params:
fields += f_params[f] + '\n\n'
fields += parseDoxyComments(fm.string[pos:fm.start()], 3)
pos = fm.end()
if fm.group(4) is not None:
# keep '--' for the next round
pos -= 2
fields += parseInlineComments(typeBody[pos:], 3)
if len(fields):
ret = ret.strip() + '\n\n' + fTitle + fields
else:
if title:
ret = '### {}\n\n'.format(title)
ret += parseDoxyComments(doc) + '\n\n'
return ret + '```asn1\n' + RE_COMMENTS.sub('', m.group(0).strip()) +'\n```\n\n'
pos = 0
ret += '## Data Elements:\n'
for m in RE_TYPE.finditer(content[cpos:]):
ret += repl_type (m, m.string[pos:m.start()])
pos = m.end()
return ret
def parseAsn(outDir, content) :
# iterate modules in the file
pos= 0
cnt = 0
for m in RE_MODULE.finditer(content):
ret = '# ASN.1 module {}\n OID: _{}_\n'.format(m.group(1), RE_SPACES.sub(' ', m.group(2)))
ret += parseDoxyComments(content[pos:m.start()]) + '\n'
if m.group(3) is not None:
ret += parseModule(m.group(1), m.group(3))
ret += '\n\n'
open(outDir + '/' + m.group(1) + '.md', "w").write(ret)
pos = m.end()
cnt += 1
return cnt
def main():
global o_args
ap = argparse.ArgumentParser(description='ASN.1 to markdown converter')
ap.add_argument('--out', '-o', type=str, default='.', help='output directory')
ap.add_argument('--brief-as-title', '-B', default=False, action='store_true', help='Do not treat @brief line as type header')
ap.add_argument('modules', action='store', nargs='+', help='ASN.1 files')
o_args = ap.parse_args()
if not o_args.modules:
ap.print_help()
exit(1)
cnt = 0
for a in o_args.modules:
try:
content = open(a).read()
cnt += parseAsn(o_args.out, content)
except IOError as e:
sys.stderr.write(e[1]+"\n")
print("{} modules porcessed\n".format(cnt))
if __name__ == '__main__':
main()
# ASN.1 module CAM-PDU-Descriptions
OID: _{ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) cam (2) version (2) }_
## Imports:
* **[ITS-Container](ITS-Container.md)** *{ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2) }*<br/>
## Data Elements:
### <a name="CAM"></a>CAM
Fields:
* header [**ItsPduHeader**](ITS-Container.md#ItsPduHeader) <br>
* cam [**CoopAwareness**](#CoopAwareness) <br>
```asn1
CAM ::= SEQUENCE {
header ItsPduHeader,
cam CoopAwareness
}
```
### <a name="CoopAwareness"></a>CoopAwareness
Fields:
* generationDeltaTime [**GenerationDeltaTime**](CAM-PDU-Descriptions.md#GenerationDeltaTime) <br>
* camParameters [**CamParameters**](#CamParameters) <br>
```asn1
CoopAwareness ::= SEQUENCE {
generationDeltaTime GenerationDeltaTime,
camParameters CamParameters
}
```
### <a name="CamParameters"></a>CamParameters
Fields:
* basicContainer [**BasicContainer**](CAM-PDU-Descriptions.md#BasicContainer) <br>
* highFrequencyContainer [**HighFrequencyContainer**](#HighFrequencyContainer) <br>
* lowFrequencyContainer [**LowFrequencyContainer**](#LowFrequencyContainer) OPTIONAL<br>
* specialVehicleContainer [**SpecialVehicleContainer**](#SpecialVehicleContainer) OPTIONAL<br>
```asn1
CamParameters ::= SEQUENCE {
basicContainer BasicContainer,
highFrequencyContainer HighFrequencyContainer,
lowFrequencyContainer LowFrequencyContainer OPTIONAL,
specialVehicleContainer SpecialVehicleContainer OPTIONAL,
...
}
```
### <a name="HighFrequencyContainer"></a>HighFrequencyContainer
Fields:
* basicVehicleContainerHighFrequency [**BasicVehicleContainerHighFrequency**](#BasicVehicleContainerHighFrequency) <br>
* rsuContainerHighFrequency [**RSUContainerHighFrequency**](#RSUContainerHighFrequency) <br>
```asn1
HighFrequencyContainer ::= CHOICE {
basicVehicleContainerHighFrequency BasicVehicleContainerHighFrequency,
rsuContainerHighFrequency RSUContainerHighFrequency,
...
}
```
### <a name="LowFrequencyContainer"></a>LowFrequencyContainer
Fields:
* basicVehicleContainerLowFrequency [**BasicVehicleContainerLowFrequency**](#BasicVehicleContainerLowFrequency) <br>
```asn1
LowFrequencyContainer ::= CHOICE {
basicVehicleContainerLowFrequency BasicVehicleContainerLowFrequency,
...
}
```
### <a name="SpecialVehicleContainer"></a>SpecialVehicleContainer
Fields:
* publicTransportContainer [**PublicTransportContainer**](#PublicTransportContainer) <br>
* specialTransportContainer [**SpecialTransportContainer**](#SpecialTransportContainer) <br>
* dangerousGoodsContainer [**DangerousGoodsContainer**](#DangerousGoodsContainer) <br>
* roadWorksContainerBasic [**RoadWorksContainerBasic**](#RoadWorksContainerBasic) <br>
* rescueContainer [**RescueContainer**](#RescueContainer) <br>
* emergencyContainer [**EmergencyContainer**](#EmergencyContainer) <br>
* safetyCarContainer [**SafetyCarContainer**](#SafetyCarContainer) <br>
```asn1
SpecialVehicleContainer ::= CHOICE {
publicTransportContainer PublicTransportContainer,
specialTransportContainer SpecialTransportContainer,
dangerousGoodsContainer DangerousGoodsContainer,
roadWorksContainerBasic RoadWorksContainerBasic,
rescueContainer RescueContainer,
emergencyContainer EmergencyContainer,
safetyCarContainer SafetyCarContainer,
...
}
```
### <a name="BasicContainer"></a>BasicContainer
Fields:
* stationType [**StationType**](ITS-Container.md#StationType) <br>
* referencePosition [**ReferencePosition**](ITS-Container.md#ReferencePosition) <br>
```asn1
BasicContainer ::= SEQUENCE {
stationType StationType,
referencePosition ReferencePosition,
...
}
```
### <a name="BasicVehicleContainerHighFrequency"></a>BasicVehicleContainerHighFrequency
Fields:
* heading [**Heading**](ITS-Container.md#Heading) <br>
* speed [**Speed**](ITS-Container.md#Speed) <br>
* driveDirection [**DriveDirection**](ITS-Container.md#DriveDirection) <br>
* vehicleLength [**VehicleLength**](ITS-Container.md#VehicleLength) <br>
* vehicleWidth [**VehicleWidth**](ITS-Container.md#VehicleWidth) <br>
* longitudinalAcceleration [**LongitudinalAcceleration**](ITS-Container.md#LongitudinalAcceleration) <br>
* curvature [**Curvature**](ITS-Container.md#Curvature) <br>
* curvatureCalculationMode [**CurvatureCalculationMode**](ITS-Container.md#CurvatureCalculationMode) <br>
* yawRate [**YawRate**](ITS-Container.md#YawRate) <br>
* accelerationControl [**AccelerationControl**](ITS-Container.md#AccelerationControl) OPTIONAL<br>
* lanePosition [**LanePosition**](ITS-Container.md#LanePosition) OPTIONAL<br>
* steeringWheelAngle [**SteeringWheelAngle**](ITS-Container.md#SteeringWheelAngle) OPTIONAL<br>
* lateralAcceleration [**LateralAcceleration**](ITS-Container.md#LateralAcceleration) OPTIONAL<br>
* verticalAcceleration [**VerticalAcceleration**](ITS-Container.md#VerticalAcceleration) OPTIONAL<br>
* performanceClass [**PerformanceClass**](ITS-Container.md#PerformanceClass) OPTIONAL<br>
* cenDsrcTollingZone [**CenDsrcTollingZone**](ITS-Container.md#CenDsrcTollingZone) OPTIONAL<br>
```asn1
BasicVehicleContainerHighFrequency ::= SEQUENCE {
heading Heading,
speed Speed,
driveDirection DriveDirection,
vehicleLength VehicleLength,
vehicleWidth VehicleWidth,
longitudinalAcceleration LongitudinalAcceleration,
curvature Curvature,
curvatureCalculationMode CurvatureCalculationMode,
yawRate YawRate,
accelerationControl AccelerationControl OPTIONAL,
lanePosition LanePosition OPTIONAL,
steeringWheelAngle SteeringWheelAngle OPTIONAL,
lateralAcceleration LateralAcceleration OPTIONAL,
verticalAcceleration VerticalAcceleration OPTIONAL,
performanceClass PerformanceClass OPTIONAL,
cenDsrcTollingZone CenDsrcTollingZone OPTIONAL
}
```
### <a name="BasicVehicleContainerLowFrequency"></a>BasicVehicleContainerLowFrequency
Fields:
* vehicleRole [**VehicleRole**](ITS-Container.md#VehicleRole) <br>
* exteriorLights [**ExteriorLights**](ITS-Container.md#ExteriorLights) <br>
* pathHistory [**PathHistory**](ITS-Container.md#PathHistory) <br>
```asn1
BasicVehicleContainerLowFrequency ::= SEQUENCE {
vehicleRole VehicleRole,
exteriorLights ExteriorLights,
pathHistory PathHistory
}
```
### <a name="PublicTransportContainer"></a>PublicTransportContainer
Fields:
* embarkationStatus [**EmbarkationStatus**](ITS-Container.md#EmbarkationStatus) <br>
* ptActivation [**PtActivation**](ITS-Container.md#PtActivation) OPTIONAL<br>
```asn1
PublicTransportContainer ::= SEQUENCE {
embarkationStatus EmbarkationStatus,
ptActivation PtActivation OPTIONAL
}
```
### <a name="SpecialTransportContainer"></a>SpecialTransportContainer
Fields:
* specialTransportType [**SpecialTransportType**](ITS-Container.md#SpecialTransportType) <br>
* lightBarSirenInUse [**LightBarSirenInUse**](ITS-Container.md#LightBarSirenInUse) <br>
```asn1
SpecialTransportContainer ::= SEQUENCE {
specialTransportType SpecialTransportType,
lightBarSirenInUse LightBarSirenInUse
}
```
### <a name="DangerousGoodsContainer"></a>DangerousGoodsContainer
Fields:
* dangerousGoodsBasic [**DangerousGoodsBasic**](ITS-Container.md#DangerousGoodsBasic) <br>
```asn1
DangerousGoodsContainer ::= SEQUENCE {
dangerousGoodsBasic DangerousGoodsBasic
}
```
### <a name="RoadWorksContainerBasic"></a>RoadWorksContainerBasic
Fields:
* roadworksSubCauseCode [**RoadworksSubCauseCode**](ITS-Container.md#RoadworksSubCauseCode) OPTIONAL<br>
* lightBarSirenInUse [**LightBarSirenInUse**](ITS-Container.md#LightBarSirenInUse) <br>
* closedLanes [**ClosedLanes**](ITS-Container.md#ClosedLanes) OPTIONAL<br>
```asn1
RoadWorksContainerBasic ::= SEQUENCE {
roadworksSubCauseCode RoadworksSubCauseCode OPTIONAL,
lightBarSirenInUse LightBarSirenInUse,
closedLanes ClosedLanes OPTIONAL
}
```
### <a name="RescueContainer"></a>RescueContainer
Fields:
* lightBarSirenInUse [**LightBarSirenInUse**](ITS-Container.md#LightBarSirenInUse) <br>
```asn1
RescueContainer ::= SEQUENCE {
lightBarSirenInUse LightBarSirenInUse
}
```
### <a name="EmergencyContainer"></a>EmergencyContainer
Fields:
* lightBarSirenInUse [**LightBarSirenInUse**](ITS-Container.md#LightBarSirenInUse) <br>
* incidentIndication [**CauseCode**](ITS-Container.md#CauseCode) OPTIONAL<br>
* emergencyPriority [**EmergencyPriority**](ITS-Container.md#EmergencyPriority) OPTIONAL<br>
```asn1
EmergencyContainer ::= SEQUENCE {
lightBarSirenInUse LightBarSirenInUse,
incidentIndication CauseCode OPTIONAL,
emergencyPriority EmergencyPriority OPTIONAL
}
```
### <a name="SafetyCarContainer"></a>SafetyCarContainer
Fields:
* lightBarSirenInUse [**LightBarSirenInUse**](ITS-Container.md#LightBarSirenInUse) <br>
* incidentIndication [**CauseCode**](ITS-Container.md#CauseCode) OPTIONAL<br>
* trafficRule [**TrafficRule**](ITS-Container.md#TrafficRule) OPTIONAL<br>
* speedLimit [**SpeedLimit**](ITS-Container.md#SpeedLimit) OPTIONAL<br>
```asn1
SafetyCarContainer ::= SEQUENCE {
lightBarSirenInUse LightBarSirenInUse,
incidentIndication CauseCode OPTIONAL,
trafficRule TrafficRule OPTIONAL,
speedLimit SpeedLimit OPTIONAL
}
```
### <a name="RSUContainerHighFrequency"></a>RSUContainerHighFrequency
Fields:
* protectedCommunicationZonesRSU [**ProtectedCommunicationZonesRSU**](ITS-Container.md#ProtectedCommunicationZonesRSU) OPTIONAL<br>
```asn1
RSUContainerHighFrequency ::= SEQUENCE {
protectedCommunicationZonesRSU ProtectedCommunicationZonesRSU OPTIONAL,
...
}
```
### <a name="GenerationDeltaTime"></a>GenerationDeltaTime
```asn1
GenerationDeltaTime ::= INTEGER { oneMilliSec(1) } (0..65535)
```
# ASN.1 module IMZM-PDU-Descriptions
OID: _{ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (103724) imzm (1) version (1) }_
Specification of the Interference Management Zone Message ETSI TS 103 724
Latest version available at https://forge.etsi.org/rep/ITS/asn1/imzm_ts103724
## Imports:
* **[ITS-Container](ITS-Container.md)** *{ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2) }*<br/>
Include ETSI TS 102 894-2
Include references from https://forge.etsi.org/rep/ITS/asn1/cdd_ts102894_2/blob/master/ITS-Container.asn
* **[CAM-PDU-Descriptions](CAM-PDU-Descriptions.md)** *{ itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) cam (2) version (2) }*<br/>
Include ETSI EN 302 637-2
Include references from https://forge.etsi.org/rep/ITS/asn1/cam_en302637_2/blob/master/CAM-PDU-Descriptions.asn
* **[VAM-Temp-Imports](VAM-Temp-Imports.md)** *{ itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) temp-imports(255) version1(1) }*<br/>
Include ETSI TS 103 300-3
All data types, imported from `VAM-Temp-Imports` will be imported from the CDD ETSI TS 102 894-2 Release 2 when available
Include references from https://forge.etsi.org/rep/ITS/asn1/vam-ts103300_3/blob/master/VAM-Temp-Imports.asn
## Data Elements:
### <a name="IMZM"></a>DF: Interference Management Zone Message Root
This DF includes DEs for the IMZM `protocolVersion`, the IMZ message type identifier `messageID`
and the station identifier `stationID` of the originating ITS-S.
Fields:
* header [**ItsPduHeader**](ITS-Container.md#ItsPduHeader) <br>
- The DE `protocolVersion` is used to select the appropriate protocol decoder at the receiving
ITS-S. For TS 103 724 V2.1.1, the value of the DE `protocolVersion` shall be set to 1.
- The DE `messageID` shall be harmonized with other V2X message identifier definitions.
For IMZM, the DE messageID shall be set to `imzm(15)`.
* imzm [**InterferenceManagementZoneMessage**](#InterferenceManagementZoneMessage) <br>
```asn1
IMZM ::= SEQUENCE {
header ItsPduHeader,
imzm InterferenceManagementZoneMessage
}
```
### <a name="InterferenceManagementZoneMessage"></a>DF: Interference Management Zone Message
This is the actual IMZM Payload. It shall include the time stamp of the IMZM and the applicable
containers of type `BasicContainer` and `ImzmContainer`.
Fields:
* generationDeltaTime [**GenerationDeltaTime**](CAM-PDU-Descriptions.md#GenerationDeltaTime) <br>
* imzmParameters [**ImzmParameters**](#ImzmParameters) <br>
```asn1
InterferenceManagementZoneMessage ::= SEQUENCE {
generationDeltaTime GenerationDeltaTime,
imzmParameters ImzmParameters
}
```
### <a name="ImzmParameters"></a>DF: IMZM Parameters
The sequence of containers in the IMZM. Other containers may be added in the future.
Fields:
* basicContainer [**BasicContainer**](CAM-PDU-Descriptions.md#BasicContainer) <br>
imported from CAM-PDU-Descriptions
* imzmContainer [**ImzmContainer**](#ImzmContainer) <br>
container specific to the IMZM
```asn1
ImzmParameters ::= SEQUENCE {
basicContainer BasicContainer,
imzmContainer ImzmContainer,
...
}
```
### <a name="ImzmContainer"></a>DF: IMZM Container
The IMZM container includes a sequence of up to 16 interference management zones.
For each interference management zones, it contains a sequence of interference
management zones per channel together with their characteristics.
Fields:
* interferenceManagementZones [**InterferenceManagementZones**](#InterferenceManagementZones) <br>
mapped to the DF_ProtectedCommunicationZone in ETSI TS 102 894-2
```asn1
ImzmContainer ::= SEQUENCE {
interferenceManagementZones InterferenceManagementZones,
...
}
```
### <a name="InterferenceManagementZones"></a>DF: List of Interference Management Zones
A list of up to 16 interference management zones.
EXAMPLE**: An interference management communication zone may be defined around a
CEN DSRC road side equipment or an urban rail operational area.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Infrastructure information](#Infrastructure+information) [Communication information](#Communication+information)
```asn1
InterferenceManagementZones ::= SEQUENCE (SIZE(1..16), ...) OF InterferenceManagementZone
```
### <a name="InterferenceManagementZone"></a>DF: Interference Management Zone
Describes a zone of interferenceManagement inside which the ITS communication should
be restricted.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Infrastructure information](#Infrastructure+information) [Communication information](#Communication+information)
Fields:
* zoneDefinition [**ZoneDefinition**](#ZoneDefinition) <br>
* interferenceManagementInfo [**InterferenceManagementInfo**](#InterferenceManagementInfo) <br>
```asn1
InterferenceManagementZone ::= SEQUENCE {
zoneDefinition ZoneDefinition,
interferenceManagementInfo InterferenceManagementInfo
}
```
### <a name="ZoneDefinition"></a>DF: Zone Definition
Describes the zone where band sharing occurs. When reusing CDD Rel.1 types, names are unchanged.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Infrastructure information](#Infrastructure+information) [Communication information](#Communication+information)
Fields:
* interferenceManagementZoneLatitude [**Latitude**](ITS-Container.md#Latitude) <br>
Latitude of the centre point of the interference management zone.
* interferenceManagementZoneLongitude [**Longitude**](ITS-Container.md#Longitude) <br>
Longitude of the centre point of the interference management zone.
* interferenceManagementZoneRadius [**ProtectedZoneRadius**](ITS-Container.md#ProtectedZoneRadius) OPTIONAL<br>
Radius of the interference management zone in metres.
This DE is present if the data is available
* interferenceManagementZoneID [**ProtectedZoneID**](ITS-Container.md#ProtectedZoneID) OPTIONAL<br>
Identification of the interference management zone.
This DE is present if the data is available.
* interferenceManagementZoneShape [**InterferenceManagementZoneShape**](#InterferenceManagementZoneShape) OPTIONAL<br>
Shape of the interference management zone.
This DF is present if the data is available.
```asn1
ZoneDefinition::= SEQUENCE{
interferenceManagementZoneLatitude Latitude,
interferenceManagementZoneLongitude Longitude,
interferenceManagementZoneRadius ProtectedZoneRadius OPTIONAL,
interferenceManagementZoneID ProtectedZoneID OPTIONAL,
interferenceManagementZoneShape InterferenceManagementZoneShape OPTIONAL,
...
}
```
### <a name="InterferenceManagementInfo"></a>DF: Interference Management Information
A list of up to 16 definitions containing which interference management may be applied in the zone,
per affected frequency channels.
Note**: in the case where no mitigation should be applied by the ITS-S, this is indicated
by the value of interferenceManagementMitigationType set to unavailable.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Infrastructure information](#Infrastructure+information) [Communication information](#Communication+information)
```asn1
InterferenceManagementInfo::= SEQUENCE (SIZE(1..16,...)) OF InterferenceManagementInfoPerChannel
```
### <a name="InterferenceManagementInfoPerChannel"></a>DF: Interference Management Information Per Channel
A break up of the interference management information per affected frequency channels.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Infrastructure information](#Infrastructure+information) [Communication information](#Communication+information)
Fields:
* interferenceManagementChannel [**InterferenceManagementChannel**](#InterferenceManagementChannel) <br>
Characteritics of the frequency channel for which the zone
should be applied interference management
* interferenceManagementZoneType [**InterferenceManagementZoneType**](#InterferenceManagementZoneType) <br>
Type of the interference management zone.
* interferenceManagementMitigationType [**InterferenceManagementMitigationType**](#InterferenceManagementMitigationType) OPTIONAL<br>
Type of the mitigation to be used in the interference management zone.
* expiryTime [**TimestampIts**](ITS-Container.md#TimestampIts) OPTIONAL<br>
Time at which the validity of the interference management communication zone will expire.
This DE is present when the interference management is temporarily valid
```asn1
InterferenceManagementInfoPerChannel ::= SEQUENCE {
interferenceManagementChannel InterferenceManagementChannel,
interferenceManagementZoneType InterferenceManagementZoneType,
interferenceManagementMitigationType InterferenceManagementMitigationType OPTIONAL,
expiryTime TimestampIts OPTIONAL,
...
}
```
### <a name="InterferenceManagementChannel"></a>DF: InterferenceManagementChannel
Indicates which shared frequency channel should be applied interference management in the zone.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
Fields:
* centreFrequency **INTEGER** (1 .. 99999)<br>
frequency of the channel
@unit: 10exp+2 Hz (where exp is exponent)
* channelWidth **INTEGER** (0 .. 9999)<br>
of the channel
@unit: 10exp Hz (where exp is exponent)
* exponent **INTEGER** (0 .. 15)<br>
of the power of 10
@unit: N/A
```asn1
InterferenceManagementChannel ::= SEQUENCE {
centreFrequency INTEGER (1 .. 99999),
channelWidth INTEGER (0 .. 9999),
exponent INTEGER (0 .. 15)
}
```
### <a name="InterferenceManagementZoneType"></a>DE: InterferenceManagementZoneType
defines the type of an interference management zone, so that an ITS-S can
assert the actions to do while passing by such zone (e.g. reduce the transmit
power in case of a DSRC tolling station).
@unit: N/A
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
```asn1
InterferenceManagementZoneType ::= ENUMERATED {
permanentCenDsrcTolling(0),
temporaryCenDsrcTolling(1),
unavailable(2),
urbanRail(3),
satelliteStation(4),
fixedLinks(5),
...
}
```
### <a name="InterferenceManagementMitigationType"></a>DF: Mitigation type in the interference management zone
Information and commands defining the required mitigation type the
receiving ITS-S has to use in the defined interference management zone.
It indicates the type of mitigation and the parameters to be used to protect the
potential victim in the interference management zone per channel access technology class.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
Fields:
* unavailable **NULL** <br>
is the default value to be used when data is not available.
* mitigationForTechnologies [**MitigationForTechnologies**](#MitigationForTechnologies) <br>
```asn1
InterferenceManagementMitigationType ::= CHOICE {
unavailable NULL,
mitigationForTechnologies MitigationForTechnologies
}
```
### <a name="MitigationForTechnologies"></a>DF: Mitigation type container for the different channel access technology classes
Class of parameters for the relevant channel access technology classes,
as specified in ETSI TS 103 724, clause 7.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
```asn1
MitigationForTechnologies ::= SEQUENCE (SIZE(1..8)) OF MitigationPerTechnologyClass
```
### <a name="MitigationPerTechnologyClass"></a>DF: Mitigation type container per channel access technology class
Class of parameters for the specific technology indicated in the container.
All parameters are optional, as they may not apply to some of the technologies or
interference management zone types. Specification details are in ETSI TS 103 724, clause 7.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
Fields:
* accessTechnologyClass [**AccessTechnologyClass**](#AccessTechnologyClass) <br>
access technology in which this mitigation is applied.
@unit: N/A
* lowDutyCycle **INTEGER** (0 .. 10000) OPTIONAL<br>
cycle limit.
@unit: 0.01% steps
* powerReduction **INTEGER** (0 .. 30) OPTIONAL<br>
reduction.
@unit: dB
* dmcToffLimit **INTEGER** (0 .. 1200) OPTIONAL<br>
time limit as defined in ETSI TS 103 175.
@unit: ms
* dmcTonLimit **INTEGER** (0 .. 20) OPTIONAL<br>
duration limit, as defined in ETSI EN 302 571.
@unit: ms
```asn1
MitigationPerTechnologyClass ::= SEQUENCE {
accessTechnologyClass AccessTechnologyClass,
lowDutyCycle INTEGER (0 .. 10000) OPTIONAL,
powerReduction INTEGER (0 .. 30) OPTIONAL,
dmcToffLimit INTEGER (0 .. 1200) OPTIONAL,
dmcTonLimit INTEGER (0 .. 20) OPTIONAL,
...
}
```
### <a name="AccessTechnologyClass"></a>DE: channel access technology class
Access technology to which the mitigation type applies.
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [Communication information](#Communication+information)
```asn1
AccessTechnologyClass ::= ENUMERATED {
any(0),
itsg5Class(1),
ltev2xClass(2),
nrv2xClass(3),
...
}
```
### <a name="InterferenceManagementZoneShape"></a>DF: Shape of the interference management zone
Bounding box of an interference management zone
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [GeoReference information](#GeoReference+information)
Fields:
* rectangle [**AreaRectangle**](VAM-Temp-Imports.md#AreaRectangle) <br>
* circle [**AreaCircular**](VAM-Temp-Imports.md#AreaCircular) <br>
* polygon [**AreaPolygon**](VAM-Temp-Imports.md#AreaPolygon) <br>
* ellipse [**AreaEllipse**](#AreaEllipse) <br>
```asn1
InterferenceManagementZoneShape::= CHOICE {
rectangle AreaRectangle,
circle AreaCircular,
polygon AreaPolygon,
ellipse AreaEllipse,
...
}
```
### <a name="AreaEllipse"></a>DF: Area Ellipse
Area Ellipse copied from CPM TR 103 562. Will be removed when CDD Release 2 is available.
Describes an elliptical area. The ellipse is centred about the reference point
of the ITS-S or about the nodeCenterPoint (if provided).
&nbsp;&nbsp;&nbsp;&nbsp;**Categories**: [GeoReference information](#GeoReference+information)
Fields:
* nodeCenterPoint [**OffsetPoint**](VAM-Temp-Imports.md#OffsetPoint) OPTIONAL<br>
Optional offset point about which the ellipse is centred with respect to the reference
position of the ITS-S.
* semiMajorRangeLength [**SemiRangeLength**](VAM-Temp-Imports.md#SemiRangeLength) <br>
Minor radius of the ellipse.
* semiMinorRangeLength [**SemiRangeLength**](VAM-Temp-Imports.md#SemiRangeLength) <br>
Major radius of the ellipse.
* semiMajorRangeOrientation [**WGS84AngleValue**](VAM-Temp-Imports.md#WGS84AngleValue) <br>
Orientation of the semiMajorRangeLength of the ellipse in the WGS84 coordinate system.
```asn1
AreaEllipse ::= SEQUENCE {
nodeCenterPoint OffsetPoint OPTIONAL,
semiMajorRangeLength SemiRangeLength,
semiMinorRangeLength SemiRangeLength,
semiMajorRangeOrientation WGS84AngleValue
}
```
This diff is collapsed.
# ASN.1 module VAM-Temp-Imports
OID: _{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg1(1) ts(103300) temp-imports(255) version1(1)}_
## Imports:
* **[ITS-Container](ITS-Container.md)** *{itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)}*<br/>
* **[DSRC](DSRC.md)** *{iso (1) standard (0) signalizedIntersection (19091) profilec(2) dsrc (2) version (2)}*<br/>
## Data Elements:
### <a name="BasicContainer"></a>BasicContainer
Fields:
* stationType [**StationType**](ITS-Container.md#StationType) <br>
* referencePosition [**ReferencePosition**](ITS-Container.md#ReferencePosition) <br>
```asn1
BasicContainer ::= SEQUENCE {
stationType StationType,
referencePosition ReferencePosition,
...
}
```
### <a name="ItsPduHeader"></a>ItsPduHeader
Fields:
* protocolVersion **INTEGER** (0..255)<br>
* messageID **INTEGER** { denm(1), cam(2), poi(3), spatem(4), mapem(5), ivim(6), ev-rsr(7), tistpgtransaction(8), srem(9), ssem(10), evcsn(11), saem(12), rtcmem(13), vam(14) } (0..255)<br>
* stationID [**StationID**](ITS-Container.md#StationID) <br>
```asn1
ItsPduHeader ::= SEQUENCE {
protocolVersion INTEGER (0..255),
messageID INTEGER{ denm(1), cam(2), poi(3), spatem(4), mapem(5), ivim(6), ev-rsr(7), tistpgtransaction(8), srem(9), ssem(10), evcsn(11), saem(12), rtcmem(13), vam(14) } (0..255),
stationID StationID
}
```
### <a name="AreaCircular"></a>AreaCircular
Fields:
* nodeCenterPoint [**OffsetPoint**](VAM-Temp-Imports.md#OffsetPoint) OPTIONAL<br>
* radius [**Radius**](#Radius) <br>
```asn1
AreaCircular ::= SEQUENCE {
nodeCenterPoint OffsetPoint OPTIONAL,
radius Radius
}
```
### <a name="AreaPolygon"></a>AreaPolygon
Fields:
* polyPointList [**PolyPointList**](#PolyPointList) <br>
```asn1
AreaPolygon ::= SEQUENCE {
polyPointList PolyPointList
}
```
### <a name="AreaRectangle"></a>AreaRectangle
Fields:
* nodeCenterPoint [**OffsetPoint**](VAM-Temp-Imports.md#OffsetPoint) OPTIONAL<br>
* semiMajorRangeLength [**SemiRangeLength**](VAM-Temp-Imports.md#SemiRangeLength) <br>
* semiMinorRangeLength [**SemiRangeLength**](VAM-Temp-Imports.md#SemiRangeLength) <br>
* semiMajorRangeOrientation [**WGS84AngleValue**](VAM-Temp-Imports.md#WGS84AngleValue) <br>
* semiHeight [**SemiRangeLength**](VAM-Temp-Imports.md#SemiRangeLength) OPTIONAL<br>
```asn1
AreaRectangle ::= SEQUENCE {
nodeCenterPoint OffsetPoint OPTIONAL,
semiMajorRangeLength SemiRangeLength,
semiMinorRangeLength SemiRangeLength,
semiMajorRangeOrientation WGS84AngleValue,
semiHeight SemiRangeLength OPTIONAL
}
```
### <a name="OffsetPoint"></a>OffsetPoint
Fields:
* nodeOffsetPointXY [**NodeOffsetPointXY**](DSRC.md#NodeOffsetPointXY) (WITH COMPONENTS {..., node-LatLon ABSENT, regional ABSENT})<br>
* nodeOffsetPointZ [**NodeOffsetPointZ**](#NodeOffsetPointZ) OPTIONAL<br>
```asn1
OffsetPoint ::= SEQUENCE{
nodeOffsetPointXY NodeOffsetPointXY (WITH COMPONENTS {..., node-LatLon ABSENT, regional ABSENT}),
nodeOffsetPointZ NodeOffsetPointZ OPTIONAL
}
```
### <a name="NodeOffsetPointZ"></a>NodeOffsetPointZ
Fields:
* node-Z1 [**Offset-B10**](DSRC.md#Offset-B10) <br>
* node-Z2 [**Offset-B11**](DSRC.md#Offset-B11) <br>
* node-Z3 [**Offset-B12**](DSRC.md#Offset-B12) <br>
* node-Z4 [**Offset-B13**](DSRC.md#Offset-B13) <br>
* node-Z5 [**Offset-B14**](DSRC.md#Offset-B14) <br>
* node-Z6 [**Offset-B16**](DSRC.md#Offset-B16) <br>
```asn1
NodeOffsetPointZ ::= CHOICE {
node-Z1 Offset-B10,
node-Z2 Offset-B11,
node-Z3 Offset-B12,
node-Z4 Offset-B13,
node-Z5 Offset-B14,
node-Z6 Offset-B16
}
```
### <a name="Radius"></a>Radius
Values:
* **zeroPointOneMeter** (1)<br>
* **oneMeter** (10)<br>
```asn1
Radius ::= INTEGER {
zeroPointOneMeter (1),
oneMeter (10)
} (0..10000)
```
### <a name="PolyPointList"></a>PolyPointList
```asn1
PolyPointList ::= SEQUENCE (SIZE(3..16, ...)) OF OffsetPoint
```
### <a name="SemiRangeLength"></a>SemiRangeLength
Values:
* **zeroPointOneMeter** (1)<br>
* **oneMeter** (10)<br>
```asn1
SemiRangeLength ::= INTEGER {
zeroPointOneMeter (1),
oneMeter (10)
} (0..10000)
```
### <a name="WGS84AngleValue"></a>WGS84AngleValue
Values:
* **wgs84North** (0)<br>
* **wgs84East** (900)<br>
* **wgs84South** (1800)<br>
* **wgs84West** (2700)<br>
* **unavailable** (3601)<br>
```asn1
WGS84AngleValue ::= INTEGER {
wgs84North (0),
wgs84East (900),
wgs84South (1800),
wgs84West (2700),
unavailable (3601)
} (0..3601)
```
### <a name="StationType"></a>StationType
```asn1
StationType ::= INTEGER {
unknown(0), pedestrian(1), cyclist(2), moped(3), motorcycle(4),
passengerCar(5), bus(6), lightTruck(7), heavyTruck(8), trailer(9),
specialVehicles(10), tram(11), lightVruVehicle(12), animal(13),
roadSideUnit(15)
}
(0..255)
```