ADSMessageSetVersion1 DEFINITIONS::= BEGIN EXPORTS AbortReason, ADSEmergencyReport, ADSReport, AircraftAddress, EventTypeReported; -- ------------------------------------------------------------------------------------------------------------------------ -- Aircraft-generated and Ground-generated Message Choice -- ------------------------------------------------------------------------------------------------------------------------ ADSAircraftPDUs ::= CHOICE { aDS-cancel-emergency-PDU [0] NULL, aDS-demand-report-PDU [1] ADSDemandReport, aDS-emergency-report-PDU [2] ADSEmergency, aDS-event-report-PDU [3] ADSEventReport, aDS-negative-acknowledgement-PDU [4] NegativeAcknowledgement, aDS-noncompliance-notification-PDU [5] NoncomplianceNotification, aDS-periodic-report-PDU [6] ADSPeriodicReport, aDS-positive-acknowledgement-PDU [7] PositiveAcknowledgement, aDS-provider-abort-PDU [8] AbortReason, ... } ADSGroundPDUs ::= CHOICE { aDS-cancel-all-contracts-PDU [0] NULL, aDS-cancel-contract-PDU [1] CancelContract, aDS-cancel-emergency-acknowledgement-PDU [2] NULL, aDS-demand-contract-PDU [3] DemandContract, aDS-event-contract-PDU [4] EventContract, aDS-modify-emergency-contract-PDU [5] ModifyEmergency, aDS-periodic-contract-PDU [6] PeriodicContract, aDS-provider-abort-PDU [7] AbortReason, ... } -- ------------------------------------------------------------------------------------------------------------------------ -- Ground-generated and Aircraft-generated message components - Protocol Data Units -- ------------------------------------------------------------------------------------------------------------------------ AbortReason ::= ENUMERATED { communications-service-failure (0), unrecoverable-system-error (1), invalid-PDU (2), sequence-error (3), timer-expiry (4), cannot-establish-contact (5), undefined-error (6), dialogue-end-not-accepted (7), unexpected-PDU (8), decoding-error (9), invalid-qos-parameter (10), ... } ADSDemandReport ::= SEQUENCE { report [0] ADSReport, positive-acknowledgement [1] NULL OPTIONAL, ... } ADSEmergency ::= SEQUENCE { emergency-report [0] ADSEmergencyReport, positive-acknowledgement [1] NULL OPTIONAL, ... } ADSEventReport ::= SEQUENCE { event-type [0] EventTypeReported, report [1] ADSReport, positive-acknowledgement [2] NULL OPTIONAL, ... } ADSPeriodicReport ::= SEQUENCE { report [0] ADSReport, positive-acknowledgement [1] NULL OPTIONAL, ... } CancelContract ::= ENUMERATED { event-contract (0), periodic-contract (1), ... } DemandContract ::= SEQUENCE { aircraft-address [0] NULL OPTIONAL, projected-profile [1] NULL OPTIONAL, ground-vector [2] NULL OPTIONAL, air-vector [3] NULL OPTIONAL, met-info [4] NULL OPTIONAL, short-term-intent [5] ProjectionTime OPTIONAL, extended-projected-profile [6] ExtendedProjectedProfileRequest OPTIONAL, ... } EventContract ::= SEQUENCE { lateral-deviation-change [0] LateralChange OPTIONAL, vertical-rate-change [1] VerticalRateChange OPTIONAL, level-range [2] LevelRange OPTIONAL, way-point-change [3] NULL OPTIONAL, air-speed-change [4] AirSpeedChange OPTIONAL, ground-speed-change [5] GroundSpeedChange OPTIONAL, heading-change [6] DegreesDirection OPTIONAL, extended-projected-profile-change [7] ExtendedProjectedProfileRequest OPTIONAL, fom-change [8] NULL OPTIONAL, track-angle-change [9] DegreesDirection OPTIONAL, level-change [10] LevelChange OPTIONAL, ... } ModifyEmergency ::= ReportingInterval NegativeAcknowledgement ::= SEQUENCE { request-type RequestType, reason Reason } NoncomplianceNotification ::= CHOICE { demand-ncn [0] SET OF ReportType, event-ncn [1] SET OF EventTypeContracted, periodic-ncn [2] SET OF ReportTypeAndPeriod, ... } PeriodicContract ::= SEQUENCE { reporting-interval [0] ReportingInterval DEFAULT minutes-scale: 5, aircraft-address-modulus [1] Modulus OPTIONAL, projected-profile-modulus [2] Modulus OPTIONAL, ground-vector-modulus [3] Modulus OPTIONAL, air-vector-modulus [4] Modulus OPTIONAL, met-info-modulus [5] Modulus OPTIONAL, short-term-intent-modulus [6] ShortTermIntentModulus OPTIONAL, extended-projected-profile-modulus [7] ExtendedProjectedProfileModulus OPTIONAL, ... } PositiveAcknowledgement ::= RequestType -- ------------------------------------------------------------------------------------------------------------------------ -- Reports and their components -- ------------------------------------------------------------------------------------------------------------------------ ADSEmergencyReport ::= SEQUENCE { position [0] Position, time-stamp [1] DateTimeGroup, fom [2] FigureOfMerit, aircraftAddress [3] AircraftAddress OPTIONAL, ground-vector [4] GroundVector OPTIONAL } ADSReport ::= SEQUENCE { position [0] Position, time-stamp [1] DateTimeGroup, fom [2] FigureOfMerit, aircraft-address [3] AircraftAddress OPTIONAL, projected-profile [4] ProjectedProfile OPTIONAL, ground-vector [5] GroundVector OPTIONAL, air-vector [6] AirVector OPTIONAL, met-info [7] MetInfo OPTIONAL, short-term-intent [8] ShortTermIntent OPTIONAL, extended-projected-profile [9] ExtendedProjectedProfile OPTIONAL, ... } AircraftAddress ::= BIT STRING (SIZE (24)) -- 24 bit ICAO airframe identifier AirVector ::= SEQUENCE { heading [0] DegreesDirection OPTIONAL, air-speed [1] AirSpeed OPTIONAL, vertical-rate [2] VerticalRateChange OPTIONAL } AirSpeed ::= CHOICE { mach [0] Mach, ias [1] Ias, mach-and-ias [2] SEQUENCE { mach Mach, ias Ias } } -- When AirSpeed is returned in an ADS report, the choice of which of the above units of -- air speed are used depends on how the aircraft is equipped and whether the aircraft is -- flying on Mach or IAS at the time. The choice is made by the avionics. ExtendedProjectedProfile ::= SEQUENCE SIZE (1..128) OF SEQUENCE { way-point Position, time Eta } FigureOfMerit ::= SEQUENCE { position-accuracy PositionAccuracy, multiple-navigational-units-operating BOOLEAN, acas-operational BOOLEAN } PositionAccuracy ::= ENUMERATED -- nm = nautical miles { complete-loss (0), under30nm (1), under15nm (2), under8nm (3), under4nm (4), under1nm (5), under-25nm (6), -- under 0.25 nm under-05nm (7) -- under 0.05 nm } GroundVector ::= SEQUENCE { track [0] DegreesDirection OPTIONAL, ground-speed [1] INTEGER (-50..2200) OPTIONAL, -- units =knots -- range =-50 to +2200 knots vertical-rate [2] VerticalRateChange OPTIONAL } ProjectedProfile ::= SEQUENCE { next-way-point Position, next-time Eta, following-way-point Position } ShortTermIntent ::= SEQUENCE { position Position, projected-time ProjectionTime, intermediate-intent IntermediateIntent } IntermediateIntent ::= SEQUENCE SIZE (0..7) OF SEQUENCE { distance INTEGER (1..8000), -- units = Nautical miles -- range = 1 to 8000 Nautical miles track DegreesDirection, level Level, projected-time ProjectionTime } -- IntermediateIntent indicates a set of way points between the current position and the -- time indicated in the ShortTerm intent element. -- distance is expressed as relative to position at the time of the ADS-report. -- track is expressed as absolute track. -- level is expressed as absolute level. -- projected-time is expressed as relative to the timestamp on the ADS-report. MetInfo ::= SEQUENCE { wind-speed [0] INTEGER (0..300) OPTIONAL, -- units = knots -- range = 0 to 300 knots wind-direction [1] INTEGER (1..360) OPTIONAL, -- units = degrees true North -- range= 1 to 360 degrees temperature [2] INTEGER (-400..400) OPTIONAL, -- units = 0.25 degrees Celsius -- range = -100 to 100 degrees C turbulence [3] INTEGER (0..15) OPTIONAL -- this is a place marker for a turbulence -- index which is to be defined } -- ------------------------------------------------------------------------------------------------------------------------ -- Components of Contracts -- ------------------------------------------------------------------------------------------------------------------------ AirSpeedChange ::= CHOICE { mach-number-change [0] INTEGER (1..255), -- units = 0.005 Mach -- range = 0.005 to 1.275 Mach ias-change [1] INTEGER (1..700) -- units = knots -- range = 1 to 700 knots } LevelChange ::= INTEGER (1..500) -- units =10 feet -- range =10 to 5 000 feet LevelRange ::= SEQUENCE { ceiling Level, floor Level } DegreesDirection ::= INTEGER (1..3600) -- units = 0.1 degrees true North, -- range = 0.1 to 360 degrees ExtendedProjectedProfileModulus ::= SEQUENCE { modulus Modulus, extended-projected-profile-request ExtendedProjectedProfileRequest } ExtendedProjectedProfileRequest ::= CHOICE { time-interval [0] INTEGER (1..80), -- relative to current time stamp -- units = 15 minutes -- range =15 minutes to 20 hours number-of-way-points [1] INTEGER (1..128) } GroundSpeedChange ::= INTEGER (0..300) -- units =Knots -- range = 0 to 300 knots Ias ::= INTEGER(0..1100) -- units =knots -- range =0 to 1100 knots LateralChange ::= INTEGER (0..2000) -- units = 0.1 Nautical miles -- range= 0 to 200 Nautical miles Mach ::= INTEGER (500..4000) -- units = Mach 0.001 -- range =0.5 Mach to 4 Mach ShortTermIntentModulus ::= SEQUENCE { intent-modulus Modulus, intent-projection-time ProjectionTime } ProjectionTime ::= INTEGER (1..240) -- units = minutes relative to current time stamp -- range = 1 minute to 4 hours ReportingInterval ::= CHOICE { seconds-scale [0] INTEGER (1..59), -- units = seconds -- range = 1 second to 59 seconds minutes-scale [1] INTEGER (1..120) -- units = minutes -- range = 1 minute to 2 hours } VerticalRateChange ::= INTEGER (-3000..3000) -- units = 10 feet per minute -- range =-30 000 to +30 000 feet per minute -- ------------------------------------------------------------------------------------------------------------------------ -- Miscellaneous components -- ------------------------------------------------------------------------------------------------------------------------ Reason ::= CHOICE { aDS-service-unavailable [0] NULL, undefined [1] NULL, -- the undefined value should not be used maximum-capacity-exceeded [2] GroundSystemsUsingService, undefined-reason [3] NULL, ... } GroundSystemsUsingService ::= SEQUENCE OF IA5String (SIZE(4..8)) -- contains a sequence of ICAO facility designations RequestType ::= ENUMERATED { event-contract (0), periodic-contract (1), demand-contract (2), cancel-event-contract (3), cancel-periodic-contract (4), modify-emergency-contract (5), cancel-all-contracts (6), ... } EventTypeContracted ::= ENUMERATED { lateral-deviation-change (0), vertical-rate-change (1), level-threshold (2), way-point-change (3), air-speed-change (4), ground-speed-change (5), heading-change (6), extended-projected-profile-change (7), fom-change (8), track-angle-change (9), level-change (10), ... } EventTypeReported ::= ENUMERATED { lateral-deviation-change (0), vertical-rate-change (1), level-threshold (2), way-point-change (3), air-speed-change (4), ground-speed-change (5), heading-change (6), extended-projected-profile-change (7), fom-change (8), track-angle-change (9), level-change (10), baseline (11), ability-to-detect-events-impaired (12), ... } Modulus ::= INTEGER (1..255) ReportType ::= ENUMERATED { aircraft-address (0), projected-profile (1), ground-vector (2), air-vector (3), met-info (4), short-term-intent (5), extended-projected-profile (6), ... } ReportTypeAndPeriod ::= ENUMERATED { aircraft-address (0), projected-profile (1), ground-vector (2), air-vector (3), met-info (4), short-term-intent (5), extended-projected-profile (6), reporting-rate (7), ... } -- ------------------------------------------------------------------------------------------------------------------------ -- Common components -- ------------------------------------------------------------------------------------------------------------------------ Eta ::=Time Position ::= SEQUENCE { latitude Latitude, longitude Longitude, level Level } Latitude ::= SEQUENCE { sign Sign, degrees INTEGER (0..90), -- units = degrees -- range = 0 degrees to 90 degrees minutes INTEGER (0..59), -- units = minutes -- range = 0 minutes to 59 minutes tenth-seconds INTEGER (0..599) -- units = 0.1 seconds -- range = 0 seconds to 59.9 seconds } Longitude ::= SEQUENCE { sign Sign, degrees INTEGER (0..180), -- units = degrees -- range = 0 degrees to 180 degrees minutes INTEGER (0..59), -- units = minutes -- range = 0 minutes to 59 minutes tenth-seconds INTEGER (0..599) -- units = 0.1 seconds -- range = 0 seconds to 59.9 seconds } Sign ::= ENUMERATED { plus (0), minus (1) } Level ::= INTEGER(-75..10000) -- units = 10 feet -- range = -750 to 100 000 feet DateTimeGroup ::= SEQUENCE { date Date, time Time } Date ::= SEQUENCE { year Year, month Month, day Day } Year ::= INTEGER (1996..2095) -- unit = year -- range = 1996 to 2095 Month ::= INTEGER (1..12) -- unit = month -- range = January to December Day ::= INTEGER (1..31) -- unit = day -- range = 1 to 31 Time ::= SEQUENCE { timeHours [0] TimeHours, timeMinutes [1] TimeMinutes, timeSeconds [2] TimeSeconds OPTIONAL } TimeHours ::= INTEGER (0..23) -- units = hours -- range = midnight to 23.00 (11 PM) TimeMinutes ::= INTEGER (0..59) -- units = minutes -- range = 0 minutes to 59 minutes TimeSeconds ::= INTEGER (0..59) -- units = seconds -- range = 0 seconds to 59 seconds END -- of ADSMessageSetVersion1