FISMessageSetVersion1 DEFINITIONS::= BEGIN -- ========================================================================= -- FIS messages (Top level) -- ========================================================================= FISDownlinkAPDU ::= SEQUENCE { time DateTimeGroup, fisDownlinkAPDU DownlinkAPDU } FISUplinkAPDU ::= SEQUENCE { time DateTimeGroup, fisUplinkAPDU UplinkAPDU } DownlinkAPDU::= CHOICE { fISRequest [0] FISRequest, fISCancelUpdateContract [1] FISCancelUpdateContract, fISCancelUpdateAccept [2] FISCancelUpdateAccept, fISCancelContracts [3] FISCancelContracts, fISAbort [4] FISAbort, ... } UplinkAPDU::= CHOICE { fISAccept [0] FISAccept, fISReject [1] FISReject, fISReport [2] FISReport, fISCancelUpdateContract [3] FISCancelUpdateContract, fISCancelUpdateAccept [4] FISCancelUpdateAccept, fISCancelContractsAccept [5] FISCancelContractsAccept, fISAbort [6] FISAbort, ... } -- ========================================================================= -- FIS messages (2nd level) -- ========================================================================= FISAbort ::= CHOICE { -- Automatic Terminal Information Service (D-ATIS) errorDiagnostic [0] FISProtocolErrorDiag, ... } FISAccept ::= SEQUENCE { contractNumber ContractNumber, fISAcceptData FISAcceptData } FISAcceptData::= CHOICE { accept [0] FISReportData, positiveAcknowledgement [1] NULL, ... } FISCancelContracts ::= FISServiceType FISCancelContractsAccept ::= FISServiceType FISCancelAcceptData::= CHOICE { -- Automatic Terminal Information Service (D-ATIS) atis [0] NULL, ... } FISCancelUpdateAccept ::= SEQUENCE { fISUpdateContractNumber ContractNumber, fISCancelAcceptData FISCancelAcceptData } FISCancelUpdateContract ::= SEQUENCE { fISUpdateContractNumber ContractNumber, fISCancelUpdateData FISCancelUpdateData } FISCancelUpdateData ::= CHOICE { -- Automatic Terminal Information Service (D-ATIS) atis [0] NULL, ... } FISReject ::= SEQUENCE { contractNumber ContractNumber, fISRejectData FISRejectData } FISRejectData ::= CHOICE { updateFunctionNotSupported [0] NULL, updateFunctionNotSupportedWithReport [1] FISReportData, otherReasons [2] FISRejectReason, ... } FISRejectReason ::= ENUMERATED { canNotComply (0), fISServiceUnavailable (1), errorInRequest (2), undefined (3), ... } FISReport ::= SEQUENCE { contractNumber ContractNumber, fISReportData FISReportData } FISReportData ::= CHOICE { -- Automatic Terminal Information Service (D-ATIS) atis [0] ATISReport, ... } FISRequest ::= SEQUENCE { contractNumber ContractNumber, contractType ContractType DEFAULT demandContract, fISRequestData FISRequestData } FISRequestData ::= CHOICE { -- Automatic Terminal Information Service (D-ATIS) atis [0] ATISRequest, ... } FISProtocolErrorDiag ::= ENUMERATED { timerExpiration (0), protocolError (1), sequenceError (2), decodingError (3), unrecoverableInternalError (4), invalidContractNumber (5), dialogueEndNotSupported (6), undefined (7), invalidQosParameter (8), ... } FISServiceType ::= BIT STRING { -- Automatic Terminal Information Service (D-ATIS) atis (0) } (SIZE (1,...)) ContractNumber ::= INTEGER (1..256) ContractType ::= ENUMERATED { demandContract (0), updateContract (1), ... } Date ::= SEQUENCE { year Year, month Month, day Day } DateTimeGroup ::= SEQUENCE { date Date, time HHMMSS } HHMMSS ::= SEQUENCE { timeHours TimeHours, timeMinutes TimeMinutes, timeSeconds TimeSeconds } Time ::= SEQUENCE { timeHours TimeHours, timeMinutes TimeMinutes } TimeHours ::= INTEGER (0..23) -- units = hours, range (0..23), resolution = 1 TimeMinutes ::= INTEGER (0..59) -- units = minutes, range (0..59), resolution = 1 TimeSeconds ::= INTEGER (0..59) -- units = seconds, range (0..59), resolution = 1 Day ::= INTEGER (1..31) -- unit = day, range (1..31), resolution = 1 Month ::= INTEGER (1..12) -- unit = month, range (1..12), resolution = 1 Year ::= INTEGER (1996..2095) -- unit = year, range (1996..2095), resolution = 1 -- ========================================================================= -- D-ATIS Messages -- ========================================================================= ATISRequest ::= SEQUENCE { locationIndicator [0] LocationIndicator, arrivalDepartureIndicator [1] ArrivalDepartureIndicator OPTIONAL, ... } ATISReport ::= SEQUENCE { locationIndicator [0] LocationIndicator, arrivalDepartureIndicator [1] ArrivalDepartureIndicator OPTIONAL, aTISDesignator [2] ATISDesignator, timeOfObservation [3] Time, approachType [4] ApproachType OPTIONAL, runwaysInUse [5] ATISRunways OPTIONAL, arrestingSystem [6] ATISArrestingSystem OPTIONAL, surfaceConditionsBraking [7] SurfaceConditionsBrakingAction OPTIONAL, holdingDelay [8] IA5String (SIZE(1..200)) OPTIONAL, transitionLevel [9] TransitionLevel OPTIONAL, otherOperationInfo [10] IA5String (SIZE (1..250)) OPTIONAL, surfaceWind [11] ATISSurfaceWind, ceilingAndVisibility [12] CHOICE { cavnok [0] SEQUENCE { visibility [0] ATISVisibility, rvr [1] ATISRVR OPTIONAL, presentWeather [2] ATISPresentWeather OPTIONAL, cloud [3] ATISCloud, ... }, cavok [1] NULL }, airTemperature [13] Temperature, dewPointTemperature [14] Temperature, altimeterSetting [15] AltimeterSetting, supplementaryInformation [16] SupplementaryInformation OPTIONAL, trendForecast [17] TrendForecastInformation OPTIONAL, specificATISInstructions [18] IA5String (SIZE (1..64)) OPTIONAL, ... } LocationIndicator ::= IA5String (SIZE(4)) ArrivalDepartureIndicator ::= ENUMERATED { arrivalARR (0), departureDEP (1), ... } ATISDesignator ::= IA5String (SIZE(1)) ApproachType ::= SEQUENCE { keywordEXPECT [0] NULL OPTIONAL, approachType [1] CHOICE { instrumentApproachProcedure [0] SEQUENCE (SIZE (1..6,...)) OF InstrumentApproachProcedure, freeText [1] IA5String (SIZE (1..64)), ... } } InstrumentApproachProcedure ::= SEQUENCE { approachProcedure [0] SEQUENCE (SIZE (1..2,...)) OF SEQUENCE { procedure [0] ApproachProcedure, freeText [1] IA5String (SIZE (1..50)) OPTIONAL, ... }, circlingIndicator [1] NULL OPTIONAL, runwayId [2] RunwayId OPTIONAL, ... } ApproachProcedure ::= ENUMERATED { ils (0), ilsdme (1), localizer (2), vor (3), vordme (4), ndb (5), dmearc (6), rnav (7), mls (8), vsa (9), ... } RunwayId ::= SEQUENCE { designator [0] RunwayDesignator, letter [1] RunwayLetter OPTIONAL, ... } RunwayDesignator ::= INTEGER (1..36) RunwayLetter ::= ENUMERATED { left (0), center (1), right (2) , ... } ATISRunways ::= SEQUENCE (SIZE (1..6,...)) OF RunwayInUse RunwayInUse ::= SEQUENCE { takeoffLandingIndicator [0] TakeoffLandingIndicator OPTIONAL, ifrVfrIndicator [1] IfrVfrIndicator OPTIONAL, runwayId [2] RunwayId, ... } TakeoffLandingIndicator ::= ENUMERATED { takeoff (0), landing (1), ... } IfrVfrIndicator ::= ENUMERATED { ifr (0), vfr (1), ... } ATISArrestingSystem ::= SEQUENCE (SIZE(1..6,...)) OF ArrestingSystem ArrestingSystem ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, location [1] RunwaySectionId, condition [2] RASCondition, ... } RunwaySectionId ::= ENUMERATED { touchdown (0), midPoint (1), stopEnd (2), ... } RASCondition ::= ENUMERATED { up (0), down (1), ... } SurfaceConditionsBrakingAction ::= SEQUENCE { description [0] CHOICE { conditionsAndBActions [0] SEQUENCE (SIZE (1..6,...)) OF ConditionsAndActions, freeText [1] IA5String (SIZE (1..256)), ... }, otherInformation [1] IA5String (SIZE (1..500)) OPTIONAL, ... } ConditionsAndActions ::= SEQUENCE { timeOfObservation [0] Time OPTIONAL, runwayId [1] RunwayId OPTIONAL, length [2] RunwayLength OPTIONAL, width [3] RunwayWidth OPTIONAL, deposits [4] RunwayDeposits OPTIONAL, frictionMeasurements [5] FrictionMeasurements OPTIONAL, ... } RunwayLength ::= CHOICE { meters [0] INTEGER (30..650), -- units = meters, range (300..6500), resolution = 10 meters feet [1] INTEGER (10..200), -- alternative unit not specified in Annex 5 -- units = feet, range (1000..20000), resolution = 100 feet ... } RunwayWidth ::= CHOICE { meters [0] INTEGER (10..130), -- units = meters, range (10..130), resolution = 1 meters feet [1] INTEGER (2..40), -- alternative unit not specified in Annex 5 -- units = feet, range (30..400), resolution = 10 feet ... } RunwayDeposits ::= SEQUENCE { type [0] Deposits, attribute [1] DepositAttribute OPTIONAL, depth [2] DepositDepth OPTIONAL, ... } Deposits ::= ENUMERATED { clearAndDry (0), damp (1), wet (2), rimeOrFrosted (3), ice (4), slush (5), drySnow (6), wetSnow (7), water (8), flooded (9), frozenRutsOrRidges (10), compactedOrRolledSnow (11), de-iced (12), sanded (13), driftingSand (14), rubberDeposits (15), volcanicAsh (16), notReported (17), ... } DepositAttribute ::= ENUMERATED { patches (0), covered (1), ... } -- Deposition Attribute may be used only for deposit RIME OR FROSTED, -- ICE, SLUSH, DRY SNOW, WET SNOW and WATER DepositDepth ::= CHOICE { mm [0] INTEGER (1..400), -- units = millimeters, range (1..400), resolution = 1 mm inchesLowRange [1] INTEGER (10..90), -- units = inches, range (0.01..0.09), resolution = 0.01 inchesHighRange [2] INTEGER (2..40), -- units = inches, range (1..20), resolution = 0.5 ... } FrictionMeasurements ::= CHOICE { coefficientbyThird [0] SEQUENCE { firstSecondLastThird [0] SEQUENCE (SIZE(3)) OF BACoefficient, equipmentUsed [1] BAEquipmentUsed OPTIONAL, freeText [2] IA5String, ... }, estimatedByThird [1] SEQUENCE (SIZE(3)) OF BAEstimate, estimatedFullRunway [2] BAEstimate, ... } BAEquipmentUsed ::= SEQUENCE { equipmentId [0] ENUMERATED { brd (0), grt (1), mum (2), rft (3), sfh (4), sfl (5), skh (6), skl (7), tap (8), ... } OPTIONAL, freeText [1] IA5String (SIZE (1..50)) OPTIONAL, ... } BACoefficient ::= INTEGER (0..99) BAEstimate ::= ENUMERATED { brakingConditionsNotReported (0), poor (1), mediumToPoor (2), medium (3), mediumToGood (4), good (5), unreliable (9), ... } TransitionLevel ::= CHOICE { meters [0] INTEGER (30..610), -- units = 10's of meters, range (30..610), resolution = 1 feet [1] INTEGER (2..40), -- alternative unit not specified in A nnex 5 -- units = 100's of feet, range (10..200), resolution = 5 ... } ATISSurfaceWind ::= SEQUENCE { keywordWIND [0] NULL OPTIONAL, surfaceWind [1] SEQUENCE (SIZE (1..6,...)) OF SurfaceWind } SurfaceWind ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, winds [1] CHOICE { wholeRunway [0] SurfaceWD, perSection [1] SEQUENCE { touchdown [0] SurfaceWD OPTIONAL, middle [1] SurfaceWD OPTIONAL, end [2] SurfaceWD OPTIONAL } } } SurfaceWD ::= CHOICE { calmIndicator [0] NULL, speedDirection [1] WindSpeedDirection, ... } WindSpeedDirection ::= SEQUENCE { direction [0] CHOICE { direction [0] WindDirection, varBetween [1] DirectionVariations, variable [2] NULL, ... }, speed [1] WindSpeed, speedVariations [2] SpeedVariations OPTIONAL, directionVariations [3] DirectionVariations OPTIONAL, ... } DirectionVariations ::= SEQUENCE { direction1 [0] WindDirection, direction2 [1] WindDirection } SpeedVariations ::= SEQUENCE { max [0] WindSpeed, min [1] WindSpeed } WindDirection ::= INTEGER (0..36) -- units = degree, range (000..360), resolution = 10 -- wind direction is the direction from which the wind is coming -- value 0 is not applicable to D-ATIS WindSpeed ::= SEQUENCE { keywordABV [0] NULL OPTIONAL, value [1] CHOICE { kms [0] INTEGER (0..399), -- units = kilometerperhour, range (0..399), resolution = 1 -- value 0 KMH not applicable to D-ATIS knots [1] INTEGER (0..199), -- units = knots, range (0..199), resolution = 1 -- value 0 KT not applicable to D-ATIS ... } } ATISVisibility ::= SEQUENCE (SIZE (1..6,...)) OF Visibility Visibility ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, visibility [1] CHOICE { wholeRunway [0] VIS, perSection [1] SEQUENCE { touchdown [0] VIS OPTIONAL, end [1] VIS OPTIONAL } } } VIS ::= CHOICE { lowMeters [0] INTEGER (0..16), -- units = meters, range (0..800), resolution = 50 highMeters [1] INTEGER (9..49), -- units = meters, range (900..4900), resolution = 100 kms [2] INTEGER (5..10), -- units = kms, range (5..10), resolution = 1 statuteMiles [3] VisibilityStatuteMiles, -- alternative unit not specified in annex 5 ... } VisibilityStatuteMiles ::= CHOICE { oneSixteenth [0] INTEGER (0..6), -- units = Statute Mile, range (0..3/8), resolution = 1/16th oneEighth [1] INTEGER (3..16), -- units = Statute Mile, range (3/8..2), resolution = 1/8th oneFourth [2] INTEGER (8..12), -- units = Statute Mile, range (2..3), resolution = 1/4th one [3] INTEGER (3..15), -- units = Statute Mile, range (3..15), resolution = 1 five [4] INTEGER (3..10), -- units = Statute Mile, range (15..50), resolution = 5 moreThanFifty [5] NULL, ... } ATISRVR ::= SEQUENCE (SIZE (1..6,...)) OF RVR RVR ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, rvr [1] CHOICE { wholeRunway [0] RunwayVR, perSection [1] SEQUENCE { touchdown [0] RunwayVR OPTIONAL, middle [1] RunwayVR OPTIONAL, end [2] RunwayVR OPTIONAL } } } RunwayVR ::= CHOICE { rvrValue [0] RVRValue, notReported [1] NULL, notAvailable [2] NULL, ... } RVRValue ::= SEQUENCE { qualifier [0] RVRQualifier OPTIONAL, value [1] RunwayVisualRange, ... } RVRQualifier ::= ENUMERATED { belowOrM (0), aboveOrP (1), ... } RunwayVisualRange ::= CHOICE { lowMeters [0] INTEGER (0..16), -- units = meters, range (0..400), resolution = 25 midMeters [1] INTEGER (9..16), -- units = meters, range (450..800), resolution = 50 highMeters [2] INTEGER (9..15), -- units = meters, range (900..1500), resolution = 100 lowFeet [3] INTEGER (0..10), -- alternative unit not specified in Annex 5 -- units = feet, range (0..1000), resolution = 100 midFeet [4] INTEGER (6..15), -- alternative unit not specified in Annex 5 -- units = feet, range (1200..3000), resolution = 200 highFeet [5] INTEGER (7..12), -- alternative unit not specified in Annex 5 -- units = feet, range (3500..6000), resolution = 500 ... } ATISPresentWeather ::= SEQUENCE (SIZE (1..3,...)) OF PresentWeather PresentWeather ::= SEQUENCE { intensityOrProximity [0] CHOICE { intensity [0] IntensityQualifier, proximity [1] NULL } OPTIONAL, qualifier [1] WeatherQualifier OPTIONAL, type [2] SEQUENCE (SIZE (1..6,...)) OF WeatherType OPTIONAL, ... } IntensityQualifier ::= ENUMERATED { lightOrMinus (0), moderate (1), heavyOrPlus (2), ... } WeatherQualifier ::= ENUMERATED { thunderstormTS (0), showerSH (1), freezingFZ (2), blowingBL (3), lowDriftingDR (4), shallowMI (5), patchesBC (6), partialPR (7), ... } WeatherType ::= ENUMERATED { drizzleDZ (0), rainRA (1), snowSN (2), snowGrainsSG (3), icePelletsPL (4), iceCrystalsIC (5), hailGR (6), smallHailGS (7), fogFG (8), mistBR (9), sandSA (10), dustDU (11), hazeHZ (12), smokeFU (13), volcanicAshesVA (14), dustSandPO (15), squallSQ (16), funnelCloudFC (17), duststormDS (18), sandstormSS (19), ... } ATISCloud ::= SEQUENCE { keywordCLD [0] NULL OPTIONAL, runwayATISCloud [1] SEQUENCE (SIZE (1..6,...)) OF RunwayATISCloud } RunwayATISCloud ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, cloud [1] Cloud } Cloud ::= CHOICE { layer [0] SEQUENCE (SIZE (1..4,...)) OF CloudLayer, obsc [1] SkyObscured, skyClear [2] NULL, nsc [3] NULL, ... } CloudLayer ::= SEQUENCE { amount [0] CloudAmount OPTIONAL, type [1] CloudType OPTIONAL, heightOfBase [2] CloudHeightOfBase OPTIONAL, ... } SkyObscured ::= SEQUENCE { verticalVisibility [0] VerticalVisibility OPTIONAL, ... } CloudAmount ::= ENUMERATED { fewFEW (0), scatteredSCT (1), brokenBKN (2), overcastOVC (3), ... } CloudType ::= ENUMERATED { cumulonimbusCB (0), toweringCumulusTCU (1), ... } CloudHeightOfBase ::= SEQUENCE { height [0] CloudHeight, qualifer [1] CloudQualifier OPTIONAL, ... } -- cloudQualifier is not applicable in D-ATIS when CloudHeigthOfBase is used -- in TrendForecast. CloudQualifier ::= ENUMERATED { diffuseDIF (0), raggedRAG (1), fluctuatingRapidlyFLUC (2), ... } CloudHeight ::= CHOICE { lowMeters [0] INTEGER (0..100), -- units = meters, range (0..3000), resolution = 30 highMeters [1] INTEGER (11..66), -- units = meters, range (3300..19800), resolution = 300 lowFeet [2] INTEGER (0..100), -- units = feet, range (0..10000), resolution = 100 highFeet [3] INTEGER (11..60), -- units = feet, range (11000..60000), resolution = 1000 ... } VerticalVisibility ::= CHOICE { meters [0] INTEGER (0..20), -- units = meters, range (0..600), resolution = 30 feet [1] INTEGER (0..20), -- units = feet, range (0..2000), resolution = 100 ... } Temperature ::= INTEGER (-80..60) -- units = degree Celsius, range (-80..60), resolution = 1 AltimeterSetting ::= SEQUENCE { qNH [0] PressureMeasure, qFE [1] SEQUENCE (SIZE(1..6,...)) OF RunwayQFE OPTIONAL, ... } RunwayQFE ::= SEQUENCE { runwayId [0] RunwayId OPTIONAL, qFE [1] PressureHPA, ... } PressureMeasure ::= CHOICE { hPa [0] PressureHPA, inches [1] INTEGER (2200..3200), -- alternative unit not specified in Annex 5 -- D-ATIS: units = inches of Mercury, range (22.00..32.00), resolution= 0.01 ... } PressureHPA ::= INTEGER (500..1100) -- units = hPa, range (0500..1100), resolution = 1 SupplementaryInformation ::= SEQUENCE (SIZE (1..3,...)) OF CHOICE { freeText [0] IA5String (SIZE (1..256)), suppInfo [1] SEQUENCE { mETPhenomena [0] SEQUENCE { type [0] SignificantMetPhenomena, location [1] PhenomenonLocation OPTIONAL, ... } OPTIONAL, recentWeather [1] RecentWeather OPTIONAL, ... }, ... } SignificantMetPhenomena ::= ENUMERATED { cumulonimbusCB (0), thunderstormTS (1), moderateTurbulenceMODTURB (2), severeTurbulenceSEVTURB (3), windShearWS (4), hailGR (5), severeSquallSEVSQL (6), moderateIceMODICE (7), severeIceSEVICE (8), freezingDrizzleFZDZ (9), freezingRainFZRA (10), severeMountainWavesSEVMTW (11), sandstormSS (12), duststormDS (13), blowingSnowBLSN (14), funnelCloudFC (15), ... } PhenomenonLocation ::= CHOICE { inAPCH [0] NULL, inCLIMBOUT [1] NULL, runwayId [2] RunwayId, ... } RecentWeather ::= SEQUENCE { qualifier [0] WeatherQualifier OPTIONAL, type [1] SEQUENCE (SIZE (1..6,...)) OF WeatherType OPTIONAL, ... } -- The phenomena will be preceded by "RE" TrendForecastInformation ::= CHOICE { nosig [0] NULL, info [1] SEQUENCE (SIZE (1..3,...)) OF SEQUENCE { changeIndicator [0] ChangeIndicator, periodOfChange [1] PeriodOfChange OPTIONAL, wind [2] Wind OPTIONAL, cav [3] CeilingAndVisibility, ... }, ... } CeilingAndVisibility ::= CHOICE { cavok [0] NULL, cavnok [1] SEQUENCE { visibility [0] VIS OPTIONAL, weatherPhenomenon [1] WeatherPhenomenon OPTIONAL, cloud [2] Cloud OPTIONAL, ... } } ChangeIndicator ::= ENUMERATED { becmg (0), tempo (1), ... } PeriodOfChange ::= CHOICE { fromTo [0] SEQUENCE { from [0] Time OPTIONAL, to [1] Time OPTIONAL }, at [1] Time, ... } WeatherPhenomenon ::= CHOICE { nsw [0] NULL, phenomenon [1] SEQUENCE { intensityQualifier [0] IntensityQualifier OPTIONAL, weatherQualifier [1] WeatherQualifier OPTIONAL, weatherType [2] SEQUENCE (SIZE (1..6,...)) OF WeatherType OPTIONAL, ... }, ... } Wind ::= SEQUENCE { direction [0] WindDirection, speed [1] WindSpeed, maxSpeed [2] WindSpeed OPTIONAL, ... } END