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.
133 lines
3.9 KiB
Plaintext
133 lines
3.9 KiB
Plaintext
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
|