Vendor the ASN.1 modules the codecs are verified against; untrack IDE churn
asn1/ Three tests assert exact bytes - CamEncodeGoldenTest, DenmAirReceiveTest and SpatemUperCodecTest - and their expected values came from asn1tools compiled against ETSI modules that existed only as an untracked working copy on one machine. A golden-byte fixture nobody else can regenerate is a fixture nobody can safely touch, so the modules are now in the repo. Only the seven .asn files those tests need are copied, 576 KB of a 4.2 MB checkout; the upstream Rust parser is not used by this project at all. Verified sufficient in isolation: copied into an empty directory, all three specs compile and reproduce the committed golden CAM bytes byte-identically. Source is consider it GmbH's C-ITS-Parser (github.com/consider-it/C-ITS-Parser) at f457426, MIT licensed - LICENSE is retained alongside as that requires. The schemas themselves are ETSI's standard definitions; upstream's contribution is assembling them into a compilable set. asn1/README.md records the provenance, which module pairs with which message, and the rule that matters: never regenerate a golden fixture from this project's own encoder, because sharing a mistake between encoder and decoder is exactly the failure these files exist to catch. Doc references in the codecs and tests now point at asn1/ instead of the untracked checkout, and C-ITS-Parser/ is gitignored so the working copy beside the project is never picked up. Untracked local state - .idea/deploymentTargetSelector.xml rewrites itself on every deploy, so it has been showing as modified in essentially every commit. Along with deviceManager.xml, appInsightsSettings.xml and studiobot.xml it is per-machine state, not project configuration. - obu-firmware/sdkconfig.old is ESP-IDF build output - it is the previous sdkconfig, rewritten on every build. sdkconfig.defaults remains tracked, since that is the configuration actually chosen. All five stay on disk; only the tracking is removed. Also ignores .claude/settings.local.json, which is per-machine, while leaving the skills beside it committable as project knowledge.
This commit is contained in:
+21
@@ -17,3 +17,24 @@ local.properties
|
||||
*.jks
|
||||
*.keystore
|
||||
secrets.properties
|
||||
|
||||
# --- local IDE state, not project configuration -------------------------------
|
||||
# Which device you last deployed to, your emulator list, and Studio's assistant
|
||||
# settings are per-machine. deploymentTargetSelector.xml in particular rewrites
|
||||
# itself on every run, so tracking it means a dirty tree after every deploy.
|
||||
/.idea/deploymentTargetSelector.xml
|
||||
/.idea/deviceManager.xml
|
||||
/.idea/appInsightsSettings.xml
|
||||
/.idea/studiobot.xml
|
||||
|
||||
# ESP-IDF rewrites sdkconfig on every build and keeps the previous one here.
|
||||
# sdkconfig.defaults is the real, intentional configuration; these two are output.
|
||||
sdkconfig.old
|
||||
|
||||
# Claude Code local settings (permissions, per-machine). The skills alongside it
|
||||
# are project knowledge and may be committed deliberately.
|
||||
.claude/settings.local.json
|
||||
|
||||
# Third-party working copies kept beside the project, not part of it. The ASN.1
|
||||
# modules this project actually needs are vendored under asn1/ instead.
|
||||
/C-ITS-Parser/
|
||||
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AppInsightsSettings">
|
||||
<option name="selectedTabId" value="Android vitals" />
|
||||
</component>
|
||||
</project>
|
||||
Generated
-31
@@ -1,31 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetSelector">
|
||||
<selectionStates>
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
<DropdownSelection timestamp="2026-08-05T15:07:39.343414600Z">
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="PhysicalDevice" identifier="serial=56211FDAP0015L" />
|
||||
</handle>
|
||||
</Target>
|
||||
</DropdownSelection>
|
||||
<DialogSelection>
|
||||
<targets>
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="PhysicalDevice" identifier="serial=56211FDAP0015L" />
|
||||
</handle>
|
||||
</Target>
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="LocalEmulator" identifier="path=C:\Users\Ashin\.android\avd\Pixel_7_Pro.avd" />
|
||||
</handle>
|
||||
</Target>
|
||||
</targets>
|
||||
</DialogSelection>
|
||||
</SelectionState>
|
||||
</selectionStates>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-13
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DeviceTable">
|
||||
<option name="columnSorters">
|
||||
<list>
|
||||
<ColumnSorterState>
|
||||
<option name="column" value="Name" />
|
||||
<option name="order" value="ASCENDING" />
|
||||
</ColumnSorterState>
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
Generated
-6
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="StudioBotProjectSettings">
|
||||
<option name="shareContext" value="OptedOut" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -262,7 +262,7 @@ object CamUperCodec {
|
||||
// Optional-presence bitmap for BasicVehicleContainerHighFrequency's 7 trailing OPTIONAL
|
||||
// fields: accelerationControl, lanePosition, steeringWheelAngle, lateralAcceleration,
|
||||
// verticalAcceleration, performanceClass, cenDsrcTollingZone (see
|
||||
// C-ITS-Parser/autogen/asn.1/cam_1_4_1.asn).
|
||||
// asn1/cam_1_4_1.asn).
|
||||
//
|
||||
// Consumed but not acted on, and that is correct: UPER writes a SEQUENCE's presence
|
||||
// bitmap up front but each field's VALUE in declaration order, and all seven of these are
|
||||
@@ -315,7 +315,7 @@ object CamUperCodec {
|
||||
// IMPORTANT: if a future change needs any of those - path history is the likely one - the
|
||||
// 7 optionals must be parsed and consumed first, in declaration order, or every read after
|
||||
// them lands at the wrong bit offset. At that point this hand-written decoder stops being
|
||||
// the right tool; use the generated codec (see C-ITS-Parser) instead.
|
||||
// the right tool; use a generated codec (see asn1/README.md) instead.
|
||||
return Cam(
|
||||
stationId = stationId,
|
||||
stationType = stationType,
|
||||
|
||||
@@ -18,8 +18,7 @@ import com.hawhamburg.micr0bu.domain.denm.DenmEvent
|
||||
* large, deeply nested, and nothing consumes them yet.
|
||||
*
|
||||
* ## Field widths
|
||||
* Every width below is taken from the ETSI ASN.1 modules in the `C-ITS-Parser` checkout
|
||||
* (`autogen/asn.1/denm_1_3_1.asn`, `cdd_1_3_1_1.asn`), and every extension marker was
|
||||
* Every width below is taken from the ETSI ASN.1 modules in `asn1/` (`denm_1_3_1.asn`, `cdd_1_3_1_1.asn`), and every extension marker was
|
||||
* cross-checked against how `rasn` renders the same type (`#[non_exhaustive]` marks an extensible
|
||||
* SEQUENCE). That cross-check matters: hand-derived widths are exactly how this project shipped a
|
||||
* one-bit `CurvatureCalculationMode` bug in CAM that was invisible until measured against real
|
||||
|
||||
@@ -13,8 +13,7 @@ import com.hawhamburg.micr0bu.domain.spat.SpatEvent
|
||||
* Decode-only: this project never transmits SPATEM, that is an RSU's job.
|
||||
*
|
||||
* ## Field widths
|
||||
* Every width is taken from the ETSI ASN.1 modules in the `C-ITS-Parser` checkout
|
||||
* (`dsrc_2_2_1.asn`, `cdd_2_2_1.asn`):
|
||||
* Every width is taken from the ETSI ASN.1 modules in `asn1/` (`dsrc_2_2_1.asn`, `cdd_2_2_1.asn`):
|
||||
*
|
||||
* - `MinuteOfTheYear` (0..527040) = 20 bits
|
||||
* - `DSecond` (0..65535) = 16 bits
|
||||
|
||||
@@ -18,7 +18,7 @@ import org.junit.Test
|
||||
*
|
||||
* A round-trip test through this codebase's own decoder cannot catch that - it shares the
|
||||
* mistake. Only an independent implementation can. So the expected bytes below were produced by
|
||||
* `asn1tools` compiled from the real ETSI modules in the `C-ITS-Parser` checkout: it decoded this
|
||||
* `asn1tools` compiled from the real ETSI modules in `asn1/`: it decoded this
|
||||
* encoder's output and re-encoded it, and the result was byte-identical to what is asserted here.
|
||||
* That is stronger than "it parses" - it means this encoder emits exactly what the reference
|
||||
* encoder emits.
|
||||
|
||||
@@ -24,7 +24,7 @@ import org.junit.Test
|
||||
*
|
||||
* ## Why the expected values can be trusted
|
||||
* Every asserted field was cross-checked against `asn1tools` decoding the same bytes with the real
|
||||
* ETSI modules from the `C-ITS-Parser` checkout (`denm_1_3_1.asn` + `cdd_1_3_1_1.asn`) — an
|
||||
* ETSI modules in `asn1/` (`denm_1_3_1.asn` + `cdd_1_3_1_1.asn`) — an
|
||||
* independent implementation, not this codebase's own arithmetic. Across the full capture set that
|
||||
* cross-check agreed on all 1885 decodable DENMs, on every field below including `detectionTime`.
|
||||
*
|
||||
|
||||
@@ -17,7 +17,7 @@ import org.junit.Test
|
||||
*
|
||||
* The fixture is a real 26-byte RSU CAM taken live from the OBU's `v2x/rx/cam` topic; the
|
||||
* expected values are asn1tools' decoding of those same bytes using the ETSI modules in the
|
||||
* `C-ITS-Parser` checkout.
|
||||
* `asn1/`.
|
||||
*/
|
||||
class RsuCamDecodeTest {
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.junit.Test
|
||||
* ## Why the expected values can be trusted
|
||||
* The bit layout was validated by replaying **79,042 real SPATEMs** - the whole drive across 7+
|
||||
* RSUs plus the live trigger - through a port of this decoder and comparing every field against
|
||||
* `asn1tools` decoding the same bytes with the ETSI modules from the `C-ITS-Parser` checkout.
|
||||
* `asn1tools` decoding the same bytes with the ETSI modules in `asn1/`.
|
||||
* All 79,042 matched exactly, and none hit an unsupported branch. The values asserted below are
|
||||
* that independent decoder's output, not this codebase's own arithmetic.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
MIT License (MIT)
|
||||
|
||||
Copyright (c) 2026 consider it GmbH
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -0,0 +1,70 @@
|
||||
# ETSI ASN.1 modules
|
||||
|
||||
The ASN.1 schemas this project's UPER codecs are validated against. **Schemas only** — no parser
|
||||
code. Nothing in the app or the firmware reads these files at build or run time; they exist so the
|
||||
hand-written codecs in `app/src/main/java/.../domain/asn1/` can be checked against an independent
|
||||
implementation.
|
||||
|
||||
## Why this is here rather than just documented
|
||||
|
||||
Three of this project's tests assert exact bytes:
|
||||
|
||||
- `CamEncodeGoldenTest` — the CAM this app transmits, byte for byte
|
||||
- `DenmAirReceiveTest`, `SpatemUperCodecTest` — real captured frames with field values
|
||||
|
||||
Those expected values were produced by decoding with `asn1tools` compiled from these modules. Without
|
||||
them the fixtures cannot be regenerated or re-verified, and a golden-byte test you cannot regenerate
|
||||
is a test nobody can safely touch.
|
||||
|
||||
This matters because the project has shipped the same class of bug three times: a field encoded with
|
||||
the wrong number of bits, which this codebase then read back with the *same* wrong number. Phone and
|
||||
ESP32 agree perfectly with each other and with nothing else, so every internal round-trip test passes
|
||||
while the frames on air are malformed (`CurvatureCalculationMode`, the GeoNetworking reserved bytes,
|
||||
`yawRateConfidence`). Only a second, independent implementation catches that — which is what these
|
||||
modules provide.
|
||||
|
||||
## Provenance
|
||||
|
||||
Taken from consider it GmbH's C-ITS-Parser:
|
||||
|
||||
- <https://github.com/consider-it/C-ITS-Parser>
|
||||
- commit `f457426efc2486fac49a02fc9a1c8c7762d160e9`
|
||||
- MIT licensed — see `LICENSE`, retained here as the licence requires
|
||||
|
||||
Only the seven `.asn` files below are copied, out of a 4.2 MB checkout. The upstream Rust parser is
|
||||
not used by this project in any way. The schemas themselves are ETSI's standard definitions; the
|
||||
upstream repo's contribution is assembling them into a compilable set.
|
||||
|
||||
| file | used for |
|
||||
|---|---|
|
||||
| `cam_1_4_1.asn` + `cdd_1_3_1_1.asn` | CAM encode/decode |
|
||||
| `denm_1_3_1.asn` + `cdd_1_3_1_1.asn` | DENM decode |
|
||||
| `spatem_2_2_1.asn`, `mapem_2_2_1.asn`, `dsrc_2_2_1.asn`, `cdd_2_2_1.asn` | SPATEM/MAPEM decode |
|
||||
|
||||
Note CAM/DENM use the release-1 common dictionary (`cdd_1_3_1_1`) while SPATEM/MAPEM use release 2
|
||||
(`cdd_2_2_1`). Both are needed; they are not interchangeable.
|
||||
|
||||
These seven were verified sufficient on their own: copied into an empty directory, all three specs
|
||||
compile and reproduce the committed golden bytes.
|
||||
|
||||
## Regenerating a fixture
|
||||
|
||||
Requires Python with `asn1tools` (verified with 0.167.0):
|
||||
|
||||
```python
|
||||
import asn1tools
|
||||
spec = asn1tools.compile_files(["asn1/cam_1_4_1.asn", "asn1/cdd_1_3_1_1.asn"], "uper")
|
||||
spec.decode("CAM", raw_uper_bytes)
|
||||
```
|
||||
|
||||
For SPATEM, compile `spatem_2_2_1.asn`, `mapem_2_2_1.asn`, `dsrc_2_2_1.asn`, `cdd_2_2_1.asn`
|
||||
together and decode `"SPATEM"`.
|
||||
|
||||
**Never regenerate a golden fixture from this project's own encoder output** — that is precisely the
|
||||
mistake these files exist to catch. Regenerate through `asn1tools`, or the test is worthless.
|
||||
|
||||
## Updating
|
||||
|
||||
Re-pin deliberately, not casually. If a newer ETSI release is adopted, copy the new modules, then
|
||||
re-run the golden-byte tests and confirm any change in expected bytes is explained by the spec
|
||||
change rather than by a decoder regression.
|
||||
@@ -0,0 +1,132 @@
|
||||
CAM-PDU-Descriptions {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) cam (2) version (2)
|
||||
}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
IMPORTS
|
||||
ItsPduHeader, CauseCode, ReferencePosition, AccelerationControl, Curvature, CurvatureCalculationMode, Heading, LanePosition, EmergencyPriority, EmbarkationStatus, Speed, DriveDirection, LongitudinalAcceleration, LateralAcceleration, VerticalAcceleration, StationType, ExteriorLights, DangerousGoodsBasic, SpecialTransportType, LightBarSirenInUse, VehicleRole, VehicleLength, VehicleWidth, PathHistory, RoadworksSubCauseCode, ClosedLanes, TrafficRule, SpeedLimit, SteeringWheelAngle, PerformanceClass, YawRate, ProtectedCommunicationZone, PtActivation, Latitude, Longitude, ProtectedCommunicationZonesRSU, CenDsrcTollingZone FROM ITS-Container {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)
|
||||
};
|
||||
|
||||
|
||||
-- The root data frame for cooperative awareness messages
|
||||
|
||||
CAM ::= SEQUENCE {
|
||||
header ItsPduHeader,
|
||||
cam CoopAwareness
|
||||
}
|
||||
|
||||
CoopAwareness ::= SEQUENCE {
|
||||
generationDeltaTime GenerationDeltaTime,
|
||||
camParameters CamParameters
|
||||
}
|
||||
|
||||
CamParameters ::= SEQUENCE {
|
||||
basicContainer BasicContainer,
|
||||
highFrequencyContainer HighFrequencyContainer,
|
||||
lowFrequencyContainer LowFrequencyContainer OPTIONAL,
|
||||
specialVehicleContainer SpecialVehicleContainer OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
HighFrequencyContainer ::= CHOICE {
|
||||
basicVehicleContainerHighFrequency BasicVehicleContainerHighFrequency,
|
||||
rsuContainerHighFrequency RSUContainerHighFrequency,
|
||||
...
|
||||
}
|
||||
|
||||
LowFrequencyContainer ::= CHOICE {
|
||||
basicVehicleContainerLowFrequency BasicVehicleContainerLowFrequency,
|
||||
...
|
||||
}
|
||||
|
||||
SpecialVehicleContainer ::= CHOICE {
|
||||
publicTransportContainer PublicTransportContainer,
|
||||
specialTransportContainer SpecialTransportContainer,
|
||||
dangerousGoodsContainer DangerousGoodsContainer,
|
||||
roadWorksContainerBasic RoadWorksContainerBasic,
|
||||
rescueContainer RescueContainer,
|
||||
emergencyContainer EmergencyContainer,
|
||||
safetyCarContainer SafetyCarContainer,
|
||||
...
|
||||
}
|
||||
|
||||
BasicContainer ::= SEQUENCE {
|
||||
stationType StationType,
|
||||
referencePosition ReferencePosition,
|
||||
...
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
BasicVehicleContainerLowFrequency ::= SEQUENCE {
|
||||
vehicleRole VehicleRole,
|
||||
exteriorLights ExteriorLights,
|
||||
pathHistory PathHistory
|
||||
}
|
||||
|
||||
PublicTransportContainer ::= SEQUENCE {
|
||||
embarkationStatus EmbarkationStatus,
|
||||
ptActivation PtActivation OPTIONAL
|
||||
}
|
||||
|
||||
SpecialTransportContainer ::= SEQUENCE {
|
||||
specialTransportType SpecialTransportType,
|
||||
lightBarSirenInUse LightBarSirenInUse
|
||||
}
|
||||
|
||||
DangerousGoodsContainer ::= SEQUENCE {
|
||||
dangerousGoodsBasic DangerousGoodsBasic
|
||||
}
|
||||
|
||||
RoadWorksContainerBasic ::= SEQUENCE {
|
||||
roadworksSubCauseCode RoadworksSubCauseCode OPTIONAL,
|
||||
lightBarSirenInUse LightBarSirenInUse,
|
||||
closedLanes ClosedLanes OPTIONAL
|
||||
}
|
||||
|
||||
RescueContainer ::= SEQUENCE {
|
||||
lightBarSirenInUse LightBarSirenInUse
|
||||
}
|
||||
|
||||
EmergencyContainer ::= SEQUENCE {
|
||||
lightBarSirenInUse LightBarSirenInUse,
|
||||
incidentIndication CauseCode OPTIONAL,
|
||||
emergencyPriority EmergencyPriority OPTIONAL
|
||||
}
|
||||
|
||||
SafetyCarContainer ::= SEQUENCE {
|
||||
lightBarSirenInUse LightBarSirenInUse,
|
||||
incidentIndication CauseCode OPTIONAL,
|
||||
trafficRule TrafficRule OPTIONAL,
|
||||
speedLimit SpeedLimit OPTIONAL
|
||||
}
|
||||
|
||||
RSUContainerHighFrequency ::= SEQUENCE {
|
||||
protectedCommunicationZonesRSU ProtectedCommunicationZonesRSU OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
GenerationDeltaTime ::= INTEGER { oneMilliSec(1) } (0..65535)
|
||||
|
||||
END
|
||||
@@ -0,0 +1,511 @@
|
||||
ITS-Container {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)
|
||||
}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
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) } (0..255), -- Mantis #7209, #7005
|
||||
stationID StationID
|
||||
}
|
||||
|
||||
StationID ::= INTEGER(0..4294967295)
|
||||
|
||||
ReferencePosition ::= SEQUENCE {
|
||||
latitude Latitude,
|
||||
longitude Longitude,
|
||||
positionConfidenceEllipse PosConfidenceEllipse ,
|
||||
altitude Altitude
|
||||
}
|
||||
|
||||
DeltaReferencePosition ::= SEQUENCE {
|
||||
deltaLatitude DeltaLatitude,
|
||||
deltaLongitude DeltaLongitude,
|
||||
deltaAltitude DeltaAltitude
|
||||
}
|
||||
|
||||
Longitude ::= INTEGER {oneMicrodegreeEast (10), oneMicrodegreeWest (-10), unavailable(1800000001)} (-1800000000..1800000001)
|
||||
|
||||
Latitude ::= INTEGER {oneMicrodegreeNorth (10), oneMicrodegreeSouth (-10), unavailable(900000001)} (-900000000..900000001)
|
||||
|
||||
Altitude ::= SEQUENCE {
|
||||
altitudeValue AltitudeValue,
|
||||
altitudeConfidence AltitudeConfidence
|
||||
}
|
||||
|
||||
AltitudeValue ::= INTEGER {referenceEllipsoidSurface(0), oneCentimeter(1), unavailable(800001)} (-100000..800001)
|
||||
|
||||
AltitudeConfidence ::= ENUMERATED {
|
||||
alt-000-01 (0),
|
||||
alt-000-02 (1),
|
||||
alt-000-05 (2),
|
||||
alt-000-10 (3),
|
||||
alt-000-20 (4),
|
||||
alt-000-50 (5),
|
||||
alt-001-00 (6),
|
||||
alt-002-00 (7),
|
||||
alt-005-00 (8),
|
||||
alt-010-00 (9),
|
||||
alt-020-00 (10),
|
||||
alt-050-00 (11),
|
||||
alt-100-00 (12),
|
||||
alt-200-00 (13),
|
||||
outOfRange (14),
|
||||
unavailable (15)
|
||||
}
|
||||
|
||||
DeltaLongitude ::= INTEGER {oneMicrodegreeEast (10), oneMicrodegreeWest (-10), unavailable(131072)} (-131071..131072)
|
||||
|
||||
DeltaLatitude ::= INTEGER {oneMicrodegreeNorth (10), oneMicrodegreeSouth (-10) , unavailable(131072)} (-131071..131072)
|
||||
|
||||
DeltaAltitude ::= INTEGER {oneCentimeterUp (1), oneCentimeterDown (-1), unavailable(12800)} (-12700..12800)
|
||||
|
||||
PosConfidenceEllipse ::= SEQUENCE {
|
||||
semiMajorConfidence SemiAxisLength,
|
||||
semiMinorConfidence SemiAxisLength,
|
||||
semiMajorOrientation HeadingValue
|
||||
}
|
||||
|
||||
PathPoint ::= SEQUENCE {
|
||||
pathPosition DeltaReferencePosition,
|
||||
pathDeltaTime PathDeltaTime OPTIONAL
|
||||
}
|
||||
|
||||
PathDeltaTime ::= INTEGER {tenMilliSecondsInPast(1)} (1..65535, ...)
|
||||
|
||||
PtActivation ::= SEQUENCE {
|
||||
ptActivationType PtActivationType,
|
||||
ptActivationData PtActivationData
|
||||
}
|
||||
|
||||
PtActivationType ::= INTEGER {undefinedCodingType(0), r09-16CodingType(1), vdv-50149CodingType(2)} (0..255)
|
||||
|
||||
PtActivationData ::= OCTET STRING (SIZE(1..20))
|
||||
|
||||
AccelerationControl ::= BIT STRING {
|
||||
brakePedalEngaged (0),
|
||||
gasPedalEngaged (1),
|
||||
emergencyBrakeEngaged (2),
|
||||
collisionWarningEngaged (3),
|
||||
accEngaged (4),
|
||||
cruiseControlEngaged (5),
|
||||
speedLimiterEngaged (6)
|
||||
} (SIZE(7))
|
||||
|
||||
|
||||
SemiAxisLength ::= INTEGER{oneCentimeter(1), outOfRange(4094), unavailable(4095)} (0..4095)
|
||||
|
||||
CauseCode ::= SEQUENCE {
|
||||
causeCode CauseCodeType,
|
||||
subCauseCode SubCauseCodeType,
|
||||
...
|
||||
}
|
||||
|
||||
CauseCodeType ::= INTEGER {
|
||||
reserved (0),
|
||||
trafficCondition (1),
|
||||
accident (2),
|
||||
roadworks (3),
|
||||
impassability (5),
|
||||
adverseWeatherCondition-Adhesion (6),
|
||||
aquaplannning (7),
|
||||
hazardousLocation-SurfaceCondition (9),
|
||||
hazardousLocation-ObstacleOnTheRoad (10),
|
||||
hazardousLocation-AnimalOnTheRoad (11),
|
||||
humanPresenceOnTheRoad (12),
|
||||
wrongWayDriving (14),
|
||||
rescueAndRecoveryWorkInProgress (15),
|
||||
adverseWeatherCondition-ExtremeWeatherCondition (17),
|
||||
adverseWeatherCondition-Visibility (18),
|
||||
adverseWeatherCondition-Precipitation (19),
|
||||
slowVehicle (26),
|
||||
dangerousEndOfQueue (27),
|
||||
vehicleBreakdown (91),
|
||||
postCrash (92),
|
||||
humanProblem (93),
|
||||
stationaryVehicle (94),
|
||||
emergencyVehicleApproaching (95),
|
||||
hazardousLocation-DangerousCurve (96),
|
||||
collisionRisk (97),
|
||||
signalViolation (98),
|
||||
dangerousSituation (99)
|
||||
} (0..255)
|
||||
|
||||
SubCauseCodeType ::= INTEGER (0..255)
|
||||
|
||||
TrafficConditionSubCauseCode ::= INTEGER {unavailable(0), increasedVolumeOfTraffic(1), trafficJamSlowlyIncreasing(2), trafficJamIncreasing(3), trafficJamStronglyIncreasing(4), trafficStationary(5), trafficJamSlightlyDecreasing(6), trafficJamDecreasing(7), trafficJamStronglyDecreasing(8)} (0..255)
|
||||
|
||||
AccidentSubCauseCode ::= INTEGER {unavailable(0), multiVehicleAccident(1), heavyAccident(2), accidentInvolvingLorry(3), accidentInvolvingBus(4), accidentInvolvingHazardousMaterials(5), accidentOnOppositeLane(6), unsecuredAccident(7), assistanceRequested(8)} (0..255)
|
||||
|
||||
RoadworksSubCauseCode ::= INTEGER {unavailable(0), majorRoadworks(1), roadMarkingWork(2), slowMovingRoadMaintenance(3), shortTermStationaryRoadworks(4), streetCleaning(5), winterService(6)} (0..255)
|
||||
|
||||
HumanPresenceOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), childrenOnRoadway(1), cyclistOnRoadway(2), motorcyclistOnRoadway(3)} (0..255)
|
||||
|
||||
WrongWayDrivingSubCauseCode ::= INTEGER {unavailable(0), wrongLane(1), wrongDirection(2)} (0..255)
|
||||
|
||||
AdverseWeatherCondition-ExtremeWeatherConditionSubCauseCode ::= INTEGER {unavailable(0), strongWinds(1), damagingHail(2), hurricane(3), thunderstorm(4), tornado(5), blizzard(6)} (0..255)
|
||||
|
||||
AdverseWeatherCondition-AdhesionSubCauseCode ::= INTEGER {unavailable(0), heavyFrostOnRoad(1), fuelOnRoad(2), mudOnRoad(3), snowOnRoad(4), iceOnRoad(5), blackIceOnRoad(6), oilOnRoad(7), looseChippings(8), instantBlackIce(9), roadsSalted(10)} (0..255)
|
||||
|
||||
AdverseWeatherCondition-VisibilitySubCauseCode ::= INTEGER {unavailable(0), fog(1), smoke(2), heavySnowfall(3), heavyRain(4), heavyHail(5), lowSunGlare(6), sandstorms(7), swarmsOfInsects(8)} (0..255)
|
||||
|
||||
AdverseWeatherCondition-PrecipitationSubCauseCode ::= INTEGER {unavailable(0), heavyRain(1), heavySnowfall(2), softHail(3)} (0..255)
|
||||
|
||||
SlowVehicleSubCauseCode ::= INTEGER {unavailable(0), maintenanceVehicle(1), vehiclesSlowingToLookAtAccident(2), abnormalLoad(3), abnormalWideLoad(4), convoy(5), snowplough(6), deicing(7), saltingVehicles(8)} (0..255)
|
||||
|
||||
StationaryVehicleSubCauseCode ::= INTEGER {unavailable(0), humanProblem(1), vehicleBreakdown(2), postCrash(3), publicTransportStop(4), carryingDangerousGoods(5)} (0..255)
|
||||
|
||||
HumanProblemSubCauseCode ::= INTEGER {unavailable(0), glycemiaProblem(1), heartProblem(2)} (0..255)
|
||||
|
||||
EmergencyVehicleApproachingSubCauseCode ::= INTEGER {unavailable(0), emergencyVehicleApproaching(1), prioritizedVehicleApproaching(2)} (0..255)
|
||||
|
||||
HazardousLocation-DangerousCurveSubCauseCode ::= INTEGER {unavailable(0), dangerousLeftTurnCurve(1), dangerousRightTurnCurve(2), multipleCurvesStartingWithUnknownTurningDirection(3), multipleCurvesStartingWithLeftTurn(4), multipleCurvesStartingWithRightTurn(5)} (0..255)
|
||||
|
||||
HazardousLocation-SurfaceConditionSubCauseCode ::= INTEGER {unavailable(0), rockfalls(1), earthquakeDamage(2), sewerCollapse(3), subsidence(4), snowDrifts(5), stormDamage(6), burstPipe(7), volcanoEruption(8), fallingIce(9)} (0..255)
|
||||
|
||||
HazardousLocation-ObstacleOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), shedLoad(1), partsOfVehicles(2), partsOfTyres(3), bigObjects(4), fallenTrees(5), hubCaps(6), waitingVehicles(7)} (0..255)
|
||||
|
||||
HazardousLocation-AnimalOnTheRoadSubCauseCode ::= INTEGER {unavailable(0), wildAnimals(1), herdOfAnimals(2), smallAnimals(3), largeAnimals(4)} (0..255)
|
||||
|
||||
CollisionRiskSubCauseCode ::= INTEGER {unavailable(0), longitudinalCollisionRisk(1), crossingCollisionRisk(2), lateralCollisionRisk(3), vulnerableRoadUser(4)} (0..255)
|
||||
|
||||
SignalViolationSubCauseCode ::= INTEGER {unavailable(0), stopSignViolation(1), trafficLightViolation(2), turningRegulationViolation(3)} (0..255)
|
||||
|
||||
RescueAndRecoveryWorkInProgressSubCauseCode ::= INTEGER {unavailable(0), emergencyVehicles(1), rescueHelicopterLanding(2), policeActivityOngoing(3), medicalEmergencyOngoing(4), childAbductionInProgress(5)} (0..255)
|
||||
|
||||
DangerousEndOfQueueSubCauseCode ::= INTEGER {unavailable(0), suddenEndOfQueue(1), queueOverHill(2), queueAroundBend(3), queueInTunnel(4)} (0..255)
|
||||
|
||||
DangerousSituationSubCauseCode ::= INTEGER {unavailable(0), emergencyElectronicBrakeEngaged(1), preCrashSystemEngaged(2), espEngaged(3), absEngaged(4), aebEngaged(5), brakeWarningEngaged(6), collisionRiskWarningEngaged(7)} (0..255)
|
||||
|
||||
VehicleBreakdownSubCauseCode ::= INTEGER {unavailable(0), lackOfFuel (1), lackOfBatteryPower (2), engineProblem(3), transmissionProblem(4), engineCoolingProblem(5), brakingSystemProblem(6), steeringProblem(7), tyrePuncture(8), tyrePressureProblem(9)} (0..255)
|
||||
|
||||
PostCrashSubCauseCode ::= INTEGER {unavailable(0), accidentWithoutECallTriggered (1), accidentWithECallManuallyTriggered (2), accidentWithECallAutomaticallyTriggered (3), accidentWithECallTriggeredWithoutAccessToCellularNetwork(4)} (0..255)
|
||||
|
||||
Curvature ::= SEQUENCE {
|
||||
curvatureValue CurvatureValue,
|
||||
curvatureConfidence CurvatureConfidence
|
||||
}
|
||||
|
||||
CurvatureValue ::= INTEGER {straight(0), unavailable(1023)} (-1023..1023)
|
||||
|
||||
CurvatureConfidence ::= ENUMERATED {
|
||||
onePerMeter-0-00002 (0),
|
||||
onePerMeter-0-0001 (1),
|
||||
onePerMeter-0-0005 (2),
|
||||
onePerMeter-0-002 (3),
|
||||
onePerMeter-0-01 (4),
|
||||
onePerMeter-0-1 (5),
|
||||
outOfRange (6),
|
||||
unavailable (7)
|
||||
}
|
||||
|
||||
CurvatureCalculationMode ::= ENUMERATED {yawRateUsed(0), yawRateNotUsed(1), unavailable(2), ...}
|
||||
|
||||
Heading ::= SEQUENCE {
|
||||
headingValue HeadingValue,
|
||||
headingConfidence HeadingConfidence
|
||||
}
|
||||
|
||||
HeadingValue ::= INTEGER {wgs84North(0), wgs84East(900), wgs84South(1800), wgs84West(2700), unavailable(3601)} (0..3601)
|
||||
|
||||
HeadingConfidence ::= INTEGER {equalOrWithinZeroPointOneDegree (1), equalOrWithinOneDegree (10), outOfRange(126), unavailable(127)} (1..127)
|
||||
|
||||
LanePosition ::= INTEGER {offTheRoad(-1), innerHardShoulder(0),
|
||||
innermostDrivingLane(1), secondLaneFromInside(2), outerHardShoulder(14) } (-1..14)
|
||||
|
||||
ClosedLanes ::= SEQUENCE {
|
||||
innerhardShoulderStatus HardShoulderStatus OPTIONAL,
|
||||
outerhardShoulderStatus HardShoulderStatus OPTIONAL,
|
||||
drivingLaneStatus DrivingLaneStatus OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
HardShoulderStatus ::= ENUMERATED {availableForStopping(0), closed(1), availableForDriving(2)}
|
||||
|
||||
DrivingLaneStatus ::= BIT STRING (SIZE (1..13))
|
||||
|
||||
|
||||
PerformanceClass ::= INTEGER {unavailable(0), performanceClassA(1), performanceClassB(2)} (0..7)
|
||||
|
||||
SpeedValue ::= INTEGER {standstill(0), oneCentimeterPerSec(1), unavailable(16383)} (0..16383)
|
||||
|
||||
SpeedConfidence ::= INTEGER {equalOrWithinOneCentimeterPerSec(1), equalOrWithinOneMeterPerSec(100), outOfRange(126), unavailable(127)} (1..127)
|
||||
|
||||
VehicleMass ::= INTEGER {hundredKg(1), unavailable(1024)} (1..1024)
|
||||
|
||||
Speed ::= SEQUENCE {
|
||||
speedValue SpeedValue,
|
||||
speedConfidence SpeedConfidence
|
||||
}
|
||||
|
||||
DriveDirection ::= ENUMERATED {forward (0), backward (1), unavailable (2)}
|
||||
|
||||
EmbarkationStatus ::= BOOLEAN
|
||||
|
||||
LongitudinalAcceleration ::= SEQUENCE {
|
||||
longitudinalAccelerationValue LongitudinalAccelerationValue,
|
||||
longitudinalAccelerationConfidence AccelerationConfidence
|
||||
}
|
||||
|
||||
LongitudinalAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredForward(1), pointOneMeterPerSecSquaredBackward(-1), unavailable(161)} (-160 .. 161)
|
||||
|
||||
AccelerationConfidence ::= INTEGER {pointOneMeterPerSecSquared(1), outOfRange(101), unavailable(102)} (0 .. 102)
|
||||
|
||||
LateralAcceleration ::= SEQUENCE {
|
||||
lateralAccelerationValue LateralAccelerationValue,
|
||||
lateralAccelerationConfidence AccelerationConfidence
|
||||
}
|
||||
|
||||
LateralAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredToRight(-1), pointOneMeterPerSecSquaredToLeft(1), unavailable(161)} (-160 .. 161)
|
||||
|
||||
VerticalAcceleration ::= SEQUENCE {
|
||||
verticalAccelerationValue VerticalAccelerationValue,
|
||||
verticalAccelerationConfidence AccelerationConfidence
|
||||
}
|
||||
|
||||
VerticalAccelerationValue ::= INTEGER {pointOneMeterPerSecSquaredUp(1), pointOneMeterPerSecSquaredDown(-1), unavailable(161)} (-160 .. 161)
|
||||
|
||||
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), roadSideUnit(15)} (0..255)
|
||||
|
||||
ExteriorLights ::= BIT STRING {
|
||||
lowBeamHeadlightsOn (0),
|
||||
highBeamHeadlightsOn (1),
|
||||
leftTurnSignalOn (2),
|
||||
rightTurnSignalOn (3),
|
||||
daytimeRunningLightsOn (4),
|
||||
reverseLightOn (5),
|
||||
fogLightOn (6),
|
||||
parkingLightsOn (7)
|
||||
} (SIZE(8))
|
||||
|
||||
DangerousGoodsBasic::= ENUMERATED {
|
||||
explosives1(0),
|
||||
explosives2(1),
|
||||
explosives3(2),
|
||||
explosives4(3),
|
||||
explosives5(4),
|
||||
explosives6(5),
|
||||
flammableGases(6),
|
||||
nonFlammableGases(7),
|
||||
toxicGases(8),
|
||||
flammableLiquids(9),
|
||||
flammableSolids(10),
|
||||
substancesLiableToSpontaneousCombustion(11),
|
||||
substancesEmittingFlammableGasesUponContactWithWater(12),
|
||||
oxidizingSubstances(13),
|
||||
organicPeroxides(14),
|
||||
toxicSubstances(15),
|
||||
infectiousSubstances(16),
|
||||
radioactiveMaterial(17),
|
||||
corrosiveSubstances(18),
|
||||
miscellaneousDangerousSubstances(19)
|
||||
}
|
||||
|
||||
DangerousGoodsExtended ::= SEQUENCE {
|
||||
dangerousGoodsType DangerousGoodsBasic,
|
||||
unNumber INTEGER (0..9999),
|
||||
elevatedTemperature BOOLEAN,
|
||||
tunnelsRestricted BOOLEAN,
|
||||
limitedQuantity BOOLEAN,
|
||||
emergencyActionCode IA5String (SIZE (1..24)) OPTIONAL,
|
||||
phoneNumber PhoneNumber OPTIONAL,
|
||||
companyName UTF8String (SIZE (1..24)) OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
SpecialTransportType ::= BIT STRING {heavyLoad(0), excessWidth(1), excessLength(2), excessHeight(3)} (SIZE(4))
|
||||
|
||||
LightBarSirenInUse ::= BIT STRING {
|
||||
lightBarActivated (0),
|
||||
sirenActivated (1)
|
||||
} (SIZE(2))
|
||||
|
||||
HeightLonCarr ::= INTEGER {oneCentimeter(1), unavailable(100)} (1..100)
|
||||
|
||||
PosLonCarr ::= INTEGER {oneCentimeter(1), unavailable(127)} (1..127)
|
||||
|
||||
PosPillar ::= INTEGER {tenCentimeters(1), unavailable(30)} (1..30)
|
||||
|
||||
PosCentMass ::= INTEGER {tenCentimeters(1), unavailable(63)} (1..63)
|
||||
|
||||
RequestResponseIndication ::= ENUMERATED {request(0), response(1)}
|
||||
|
||||
SpeedLimit ::= INTEGER {oneKmPerHour(1)} (1..255)
|
||||
|
||||
StationarySince ::= ENUMERATED {lessThan1Minute(0), lessThan2Minutes(1), lessThan15Minutes(2), equalOrGreater15Minutes(3)}
|
||||
|
||||
Temperature ::= INTEGER {equalOrSmallerThanMinus60Deg (-60), oneDegreeCelsius(1), equalOrGreaterThan67Deg(67)} (-60..67)
|
||||
|
||||
TrafficRule ::= ENUMERATED {noPassing(0), noPassingForTrucks(1), passToRight(2), passToLeft(3), ...
|
||||
}
|
||||
|
||||
WheelBaseVehicle ::= INTEGER {tenCentimeters(1), unavailable(127)} (1..127)
|
||||
|
||||
TurningRadius ::= INTEGER {point4Meters(1), unavailable(255)} (1..255)
|
||||
|
||||
PosFrontAx ::= INTEGER {tenCentimeters(1), unavailable(20)} (1..20)
|
||||
|
||||
PositionOfOccupants ::= BIT STRING {
|
||||
row1LeftOccupied (0),
|
||||
row1RightOccupied (1),
|
||||
row1MidOccupied (2),
|
||||
row1NotDetectable (3),
|
||||
row1NotPresent (4),
|
||||
row2LeftOccupied (5),
|
||||
row2RightOccupied (6),
|
||||
row2MidOccupied (7),
|
||||
row2NotDetectable (8),
|
||||
row2NotPresent (9),
|
||||
row3LeftOccupied (10),
|
||||
row3RightOccupied (11),
|
||||
row3MidOccupied (12),
|
||||
row3NotDetectable (13),
|
||||
row3NotPresent (14),
|
||||
row4LeftOccupied (15),
|
||||
row4RightOccupied (16),
|
||||
row4MidOccupied (17),
|
||||
row4NotDetectable (18),
|
||||
row4NotPresent (19)} (SIZE(20))
|
||||
|
||||
PositioningSolutionType ::= ENUMERATED {noPositioningSolution(0), sGNSS(1), dGNSS(2), sGNSSplusDR(3), dGNSSplusDR(4), dR(5), ...}
|
||||
|
||||
VehicleIdentification ::= SEQUENCE {
|
||||
wMInumber WMInumber OPTIONAL,
|
||||
vDS VDS OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
WMInumber ::= IA5String (SIZE(1..3))
|
||||
|
||||
VDS ::= IA5String (SIZE(6))
|
||||
|
||||
EnergyStorageType ::= BIT STRING {hydrogenStorage(0), electricEnergyStorage(1), liquidPropaneGas(2), compressedNaturalGas(3), diesel(4), gasoline(5), ammonia(6)} (SIZE(7))
|
||||
|
||||
VehicleLength ::= SEQUENCE {
|
||||
vehicleLengthValue VehicleLengthValue,
|
||||
vehicleLengthConfidenceIndication VehicleLengthConfidenceIndication
|
||||
}
|
||||
|
||||
VehicleLengthValue ::= INTEGER {tenCentimeters(1), outOfRange(1022), unavailable(1023)} (1..1023)
|
||||
|
||||
VehicleLengthConfidenceIndication ::= ENUMERATED {noTrailerPresent(0), trailerPresentWithKnownLength(1), trailerPresentWithUnknownLength(2), trailerPresenceIsUnknown(3), unavailable(4)}
|
||||
|
||||
VehicleWidth ::= INTEGER {tenCentimeters(1), outOfRange(61), unavailable(62)} (1..62)
|
||||
|
||||
PathHistory::= SEQUENCE (SIZE(0..40)) OF PathPoint
|
||||
|
||||
EmergencyPriority ::= BIT STRING {requestForRightOfWay(0), requestForFreeCrossingAtATrafficLight(1)} (SIZE(2))
|
||||
|
||||
InformationQuality ::= INTEGER {unavailable(0), lowest(1), highest(7)} (0..7)
|
||||
|
||||
RoadType ::= ENUMERATED {
|
||||
urban-NoStructuralSeparationToOppositeLanes(0),
|
||||
urban-WithStructuralSeparationToOppositeLanes(1),
|
||||
nonUrban-NoStructuralSeparationToOppositeLanes(2),
|
||||
nonUrban-WithStructuralSeparationToOppositeLanes(3)}
|
||||
|
||||
SteeringWheelAngle ::= SEQUENCE {
|
||||
steeringWheelAngleValue SteeringWheelAngleValue,
|
||||
steeringWheelAngleConfidence SteeringWheelAngleConfidence
|
||||
}
|
||||
|
||||
SteeringWheelAngleValue ::= INTEGER {straight(0), onePointFiveDegreesToRight(-1), onePointFiveDegreesToLeft(1), unavailable(512)} (-511..512)
|
||||
|
||||
SteeringWheelAngleConfidence ::= INTEGER {equalOrWithinOnePointFiveDegree (1), outOfRange(126), unavailable(127)} (1..127)
|
||||
|
||||
TimestampIts ::= INTEGER {utcStartOf2004(0), oneMillisecAfterUTCStartOf2004(1)} (0..4398046511103)
|
||||
|
||||
VehicleRole ::= ENUMERATED {default(0), publicTransport(1), specialTransport(2), dangerousGoods(3), roadWork(4), rescue(5), emergency(6), safetyCar(7), agriculture(8), commercial(9), military(10), roadOperator(11), taxi(12), reserved1(13), reserved2(14), reserved3(15)}
|
||||
|
||||
YawRate::= SEQUENCE {
|
||||
yawRateValue YawRateValue,
|
||||
yawRateConfidence YawRateConfidence
|
||||
}
|
||||
|
||||
YawRateValue ::= INTEGER {straight(0), degSec-000-01ToRight(-1), degSec-000-01ToLeft(1), unavailable(32767)} (-32766..32767)
|
||||
|
||||
YawRateConfidence ::= ENUMERATED {
|
||||
degSec-000-01 (0),
|
||||
degSec-000-05 (1),
|
||||
degSec-000-10 (2),
|
||||
degSec-001-00 (3),
|
||||
degSec-005-00 (4),
|
||||
degSec-010-00 (5),
|
||||
degSec-100-00 (6),
|
||||
outOfRange (7),
|
||||
unavailable (8)
|
||||
}
|
||||
|
||||
ProtectedZoneType::= ENUMERATED { permanentCenDsrcTolling (0), ..., temporaryCenDsrcTolling (1) }
|
||||
|
||||
RelevanceDistance ::= ENUMERATED {lessThan50m(0), lessThan100m(1), lessThan200m(2), lessThan500m(3), lessThan1000m(4), lessThan5km(5), lessThan10km(6), over10km(7)}
|
||||
|
||||
RelevanceTrafficDirection ::= ENUMERATED {allTrafficDirections(0), upstreamTraffic(1), downstreamTraffic(2), oppositeTraffic(3)}
|
||||
|
||||
TransmissionInterval ::= INTEGER {oneMilliSecond(1), tenSeconds(10000)} (1..10000)
|
||||
|
||||
ValidityDuration ::= INTEGER {timeOfDetection(0), oneSecondAfterDetection(1)} (0..86400)
|
||||
|
||||
ActionID ::= SEQUENCE {
|
||||
originatingStationID StationID,
|
||||
sequenceNumber SequenceNumber
|
||||
}
|
||||
|
||||
ItineraryPath ::= SEQUENCE SIZE(1..40) OF ReferencePosition
|
||||
|
||||
ProtectedCommunicationZone ::= SEQUENCE {
|
||||
protectedZoneType ProtectedZoneType,
|
||||
expiryTime TimestampIts OPTIONAL,
|
||||
protectedZoneLatitude Latitude,
|
||||
protectedZoneLongitude Longitude,
|
||||
protectedZoneRadius ProtectedZoneRadius OPTIONAL,
|
||||
protectedZoneID ProtectedZoneID OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
Traces ::= SEQUENCE SIZE(1..7) OF PathHistory
|
||||
|
||||
NumberOfOccupants ::= INTEGER {oneOccupant (1), unavailable(127)} (0 .. 127)
|
||||
|
||||
SequenceNumber ::= INTEGER (0..65535)
|
||||
|
||||
PositionOfPillars ::= SEQUENCE (SIZE(1..3, ...)) OF PosPillar
|
||||
|
||||
RestrictedTypes ::= SEQUENCE (SIZE(1..3, ...)) OF StationType
|
||||
|
||||
EventHistory::= SEQUENCE (SIZE(1..23)) OF EventPoint
|
||||
|
||||
EventPoint ::= SEQUENCE {
|
||||
eventPosition DeltaReferencePosition,
|
||||
eventDeltaTime PathDeltaTime OPTIONAL,
|
||||
informationQuality InformationQuality
|
||||
}
|
||||
|
||||
ProtectedCommunicationZonesRSU ::= SEQUENCE (SIZE(1..16)) OF ProtectedCommunicationZone
|
||||
|
||||
|
||||
|
||||
CenDsrcTollingZone ::= SEQUENCE {
|
||||
protectedZoneLatitude Latitude,
|
||||
protectedZoneLongitude Longitude,
|
||||
cenDsrcTollingZoneID CenDsrcTollingZoneID OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
ProtectedZoneRadius ::= INTEGER {oneMeter(1)} (1..255,...)
|
||||
|
||||
ProtectedZoneID ::= INTEGER (0.. 134217727)
|
||||
|
||||
CenDsrcTollingZoneID ::= ProtectedZoneID
|
||||
|
||||
DigitalMap ::= SEQUENCE (SIZE(1..256)) OF ReferencePosition
|
||||
|
||||
OpeningDaysHours ::= UTF8String
|
||||
|
||||
PhoneNumber ::= NumericString (SIZE(1..16))
|
||||
|
||||
END
|
||||
+7260
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,108 @@
|
||||
DENM-PDU-Descriptions {itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) en (302637) denm (1) version (2)
|
||||
}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
IMPORTS
|
||||
ItsPduHeader, CauseCode, Speed, InformationQuality, ReferencePosition, ClosedLanes, DangerousGoodsExtended, Heading, LanePosition, LightBarSirenInUse, RoadType, HeightLonCarr, PosLonCarr, PosCentMass, PositioningSolutionType, RequestResponseIndication, StationType, SpeedLimit, StationarySince, TimestampIts, WheelBaseVehicle, TurningRadius, PosFrontAx, PositionOfOccupants, Temperature, VehicleMass, VehicleIdentification, EnergyStorageType, ActionID, ItineraryPath, NumberOfOccupants, PositionOfPillars, RelevanceTrafficDirection, RestrictedTypes, Traces, TransmissionInterval, ValidityDuration, RelevanceDistance, EventHistory, TrafficRule, DeltaReferencePosition FROM ITS-Container {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts (102894) cdd (2) version (2)
|
||||
};
|
||||
|
||||
|
||||
DENM ::= SEQUENCE {
|
||||
header ItsPduHeader,
|
||||
denm DecentralizedEnvironmentalNotificationMessage
|
||||
}
|
||||
|
||||
DecentralizedEnvironmentalNotificationMessage ::= SEQUENCE {
|
||||
management ManagementContainer,
|
||||
situation SituationContainer OPTIONAL,
|
||||
location LocationContainer OPTIONAL,
|
||||
alacarte AlacarteContainer OPTIONAL
|
||||
}
|
||||
|
||||
ManagementContainer ::= SEQUENCE {
|
||||
actionID ActionID,
|
||||
detectionTime TimestampIts,
|
||||
referenceTime TimestampIts,
|
||||
termination Termination OPTIONAL,
|
||||
eventPosition ReferencePosition,
|
||||
relevanceDistance RelevanceDistance OPTIONAL,
|
||||
relevanceTrafficDirection RelevanceTrafficDirection OPTIONAL,
|
||||
validityDuration ValidityDuration DEFAULT defaultValidity,
|
||||
transmissionInterval TransmissionInterval OPTIONAL,
|
||||
stationType StationType,
|
||||
...
|
||||
}
|
||||
|
||||
SituationContainer ::= SEQUENCE {
|
||||
informationQuality InformationQuality,
|
||||
eventType CauseCode,
|
||||
linkedCause CauseCode OPTIONAL,
|
||||
eventHistory EventHistory OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
LocationContainer ::= SEQUENCE {
|
||||
eventSpeed Speed OPTIONAL,
|
||||
eventPositionHeading Heading OPTIONAL,
|
||||
traces Traces,
|
||||
roadType RoadType OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
ImpactReductionContainer ::= SEQUENCE {
|
||||
heightLonCarrLeft HeightLonCarr,
|
||||
heightLonCarrRight HeightLonCarr,
|
||||
posLonCarrLeft PosLonCarr,
|
||||
posLonCarrRight PosLonCarr,
|
||||
positionOfPillars PositionOfPillars,
|
||||
posCentMass PosCentMass,
|
||||
wheelBaseVehicle WheelBaseVehicle,
|
||||
turningRadius TurningRadius,
|
||||
posFrontAx PosFrontAx,
|
||||
positionOfOccupants PositionOfOccupants,
|
||||
vehicleMass VehicleMass,
|
||||
requestResponseIndication RequestResponseIndication
|
||||
}
|
||||
|
||||
RoadWorksContainerExtended ::= SEQUENCE {
|
||||
lightBarSirenInUse LightBarSirenInUse OPTIONAL,
|
||||
closedLanes ClosedLanes OPTIONAL,
|
||||
restriction RestrictedTypes OPTIONAL,
|
||||
speedLimit SpeedLimit OPTIONAL,
|
||||
incidentIndication CauseCode OPTIONAL,
|
||||
recommendedPath ItineraryPath OPTIONAL,
|
||||
startingPointSpeedLimit DeltaReferencePosition OPTIONAL,
|
||||
trafficFlowRule TrafficRule OPTIONAL,
|
||||
referenceDenms ReferenceDenms OPTIONAL
|
||||
}
|
||||
|
||||
StationaryVehicleContainer ::= SEQUENCE {
|
||||
stationarySince StationarySince OPTIONAL,
|
||||
stationaryCause CauseCode OPTIONAL,
|
||||
carryingDangerousGoods DangerousGoodsExtended OPTIONAL,
|
||||
numberOfOccupants NumberOfOccupants OPTIONAL,
|
||||
vehicleIdentification VehicleIdentification OPTIONAL,
|
||||
energyStorageType EnergyStorageType OPTIONAL
|
||||
}
|
||||
|
||||
AlacarteContainer ::= SEQUENCE {
|
||||
lanePosition LanePosition OPTIONAL,
|
||||
impactReduction ImpactReductionContainer OPTIONAL,
|
||||
externalTemperature Temperature OPTIONAL,
|
||||
roadWorks RoadWorksContainerExtended OPTIONAL,
|
||||
positioningSolution PositioningSolutionType OPTIONAL,
|
||||
stationaryVehicle StationaryVehicleContainer OPTIONAL,
|
||||
...
|
||||
}
|
||||
|
||||
defaultValidity INTEGER ::= 600
|
||||
|
||||
Termination ::= ENUMERATED {isCancellation(0), isNegation (1)}
|
||||
|
||||
ReferenceDenms ::= SEQUENCE (SIZE(1..8, ...)) OF ActionID
|
||||
|
||||
END
|
||||
+4468
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
||||
/** draft 001 of the MAPEM-PDU-Descriptions module for TS 103 831 V2.2.1 integrating:
|
||||
* initial revision based on ASN.1 files of [ISO TS 19091] and [SAE J2735]
|
||||
*/
|
||||
-- Note: the above information will be deleted before publication
|
||||
|
||||
--! @options: no-fields-header
|
||||
|
||||
MAPEM-PDU-Descriptions {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) mapem (1) version2 (2)
|
||||
}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
IMPORTS
|
||||
|
||||
/**
|
||||
* Includes from ETSI-ITS-DSRC
|
||||
*/
|
||||
MapData
|
||||
FROM ETSI-ITS-DSRC {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) dsrc (6) major-version-2 (2) minor-version-1 (1)
|
||||
}
|
||||
WITH SUCCESSORS
|
||||
|
||||
/**
|
||||
* Include ETSI TS 102 894-2 (ETSI-ITS-CDD)
|
||||
*/
|
||||
ItsPduHeader
|
||||
FROM ETSI-ITS-CDD {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) 102894 cdd (2) major-version-4 (4) minor-version-1 (1)
|
||||
}
|
||||
WITH SUCCESSORS;
|
||||
|
||||
/**
|
||||
* Map (lane topology) extended Message
|
||||
* This DF includes DEs for the MAPEM: protocolVersion, the MAPEM message type identifier `messageID`,
|
||||
* the station identifier `stationID` of the originating ITS-S and the Map data from ETSI-ITS-DSRC.
|
||||
*
|
||||
* @field header: The DE `protocolVersion` is used to select the appropriate protocol decoder at the receiving ITS-S.
|
||||
* It shall be set to 2.
|
||||
* The DE `messageID` shall be mapem(5).
|
||||
* @field map: contains the MAP data as defined in ETSI-ITS-DSRC.
|
||||
*
|
||||
* @category: Basic Information
|
||||
* @revision: V1.3.1
|
||||
*/
|
||||
MAPEM ::= SEQUENCE {
|
||||
header ItsPduHeader,
|
||||
map MapData
|
||||
}
|
||||
|
||||
END
|
||||
@@ -0,0 +1,56 @@
|
||||
/** draft 001 of the SPATEM-PDU-Descriptions module for TS 103 301 V2.2.1 integrating:
|
||||
* initial revision based on ASN.1 files of [ISO TS 19091] and [SAE J2735]
|
||||
*/
|
||||
-- Note: the above information will be deleted before publication
|
||||
|
||||
--! @options: no-fields-header
|
||||
|
||||
SPATEM-PDU-Descriptions {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) spatem (0) major-version-2 (2) minor-version-1 (1)
|
||||
}
|
||||
|
||||
DEFINITIONS AUTOMATIC TAGS ::=
|
||||
|
||||
BEGIN
|
||||
|
||||
IMPORTS
|
||||
|
||||
/**
|
||||
* Includes from ETSI-ITS-DSRC
|
||||
*/
|
||||
SPAT
|
||||
FROM ETSI-ITS-DSRC {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) ts103301 (103301) dsrc (6) major-version-2 (2) minor-version-1 (1)
|
||||
}
|
||||
WITH SUCCESSORS
|
||||
|
||||
/**
|
||||
* Include ETSI TS 102 894-2 (ETSI-ITS-CDD)
|
||||
*/
|
||||
ItsPduHeader
|
||||
FROM ETSI-ITS-CDD {
|
||||
itu-t (0) identified-organization (4) etsi (0) itsDomain (5) wg1 (1) 102894 cdd (2) major-version-4 (4) minor-version-1 (1)
|
||||
}
|
||||
WITH SUCCESSORS;
|
||||
|
||||
/**
|
||||
* Signal phase and timing extended Message
|
||||
*
|
||||
* Signal phase and timing extended Message Root
|
||||
* This DF includes DEs for the SPATEM: protocolVersion, the SPATEM message type identifier `messageID`,
|
||||
* the station identifier `stationID` of the originating ITS-S and the SPaT data from ETSI-ITS-DSRC module.
|
||||
*
|
||||
* @field header: The DE `protocolVersion` used to select the appropriate protocol decoder at the receiving ITS-S.
|
||||
* It shall be set to 2.
|
||||
* The DE `messageID` shall be spatem(4).
|
||||
* @field spat: contains the SPaT data as defined in ETSI-ITS-DSRC.
|
||||
*
|
||||
* @category: Basic Information
|
||||
* @revision: V1.3.1
|
||||
*/
|
||||
SPATEM ::= SEQUENCE {
|
||||
header ItsPduHeader,
|
||||
spat SPAT
|
||||
}
|
||||
|
||||
END
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user