Documentation
¶
Index ¶
- Constants
- Variables
- func AirportHasRunway(airport string, runway RunwayID) bool
- func CWTApproachSeparation(frontCWT, backCWT string, eligible25nm bool) float32
- func CWTDirectlyBehindSeparation(front, back string) float32
- func CallsignClashesWithExisting(currentCallsigns []ADSBCallsign, proposed string, uniqueSuffix bool) bool
- func CheckApproaches(e *util.ErrorLogger, wps []WaypointArray, requireFAF bool, ...)
- func DensityRatioAtAltitude(alt float32) float32
- func FormatAltitude(falt float32) string
- func GetACTypePronunciations(acType string) []string
- func GetAirportTelephonyVariants(icao string) []string
- func GetApproachTelephony(approach string) string
- func GetCallsignSpoken(callsign string, cwtCategory string) string
- func GetFixTelephony(fix string) string
- func GetSIDTelephony(sid string) string
- func GetSTARTelephony(star string) string
- func GetTrailing3Spoken(callsign string) string
- func IASToTAS(ias, altitude float32) float32
- func InAirspace(p math.Point2LL, alt float32, volumes []ControllerAirspaceVolume) (bool, [][2]int)
- func InitDB()
- func IntersectingRunways(airport string, rwy RunwayID, nmPerLongitude, maxDistNM float32) []string
- func MachToTAS(mach float32, temp Temperature) float32
- func OppositeRunwayId(rwy string) string
- func ParseDistanceDirection(s string) (int, math.CardinalOrdinalDirection, error)
- func ParseSyntheticCrossingFix(fix string) (string, int, math.CardinalOrdinalDirection, bool)
- func ParseSyntheticDMEFix(fix string) (string, int, bool)
- func PrintCIFPRoutes(airport string) error
- func PrintMapLibrary(path string, e *util.ErrorLogger)
- func RandomizeRoute(w []Waypoint, r *rand.Rand, randomizeAltitudeRange bool, ...)
- func RegisterIntentMerger(fn any)
- func SaveMapLibrary(w io.Writer, lib *MapLibrary) error
- func SplitCallsign(callsign string) (prefix, number string)
- func SquawkIsSPC(squawk Squawk) (ok bool, code string)
- func StartInitDB()
- func StringIsSPC(code string) bool
- func TASToIAS(tas, altitude float32) float32
- func TASToMach(tas float32, temp Temperature) float32
- func UnderBravoShelf(grid *AirspaceGrid, p math.Point2LL, alt int) bool
- type ADSBCallsign
- type ARINC424Result
- type ARTCC
- type ATCT
- type ATISIntent
- type ATPAVolume
- type AdaptationFix
- type AdaptationFixes
- type AircraftPerformance
- type AircraftTypeSnippetFormatter
- type Airline
- type AirlineSpecifier
- func (a AirlineSpecifier) Aircraft() []FleetAircraft
- func (a *AirlineSpecifier) Check(e *util.ErrorLogger)
- func (a AirlineSpecifier) SampleAcType(r *rand.Rand, departureAirport, arrivalAirport string, lg *log.Logger) string
- func (a AirlineSpecifier) SampleAcTypeAndCallsign(r *rand.Rand, currentCallsigns []ADSBCallsign, uniqueSuffix bool, ...) (actype, callsign string)
- type Airport
- type AirportSnippetFormatter
- type Airspace
- type AirspaceGrid
- type AirspaceVolume
- type AirspaceVolumeType
- type Airway
- type AirwayDirection
- type AirwayFix
- type AirwayLevel
- type AltRestrictionSnippetFormatter
- type AltSnippetFormatter
- type AltitudeDirection
- type AltitudeIntent
- type AltitudeRestriction
- func MakeAtAltitudeRestriction(alt float32) AltitudeRestriction
- func MakeAtOrAboveAltitudeRestriction(alt float32) AltitudeRestriction
- func MakeAtOrBelowAltitudeRestriction(alt float32) AltitudeRestriction
- func MakeRangeAltitudeRestriction(low, high float32) AltitudeRestriction
- func ParseAltitudeRestriction(s string) (*AltitudeRestriction, error)
- type AppControllerSnippetFormatter
- type Approach
- func (ap *Approach) ExtendedCenterline(nmPerLongitude, magneticVariation float32) [2]math.Point2LL
- func (ap *Approach) FAFSegment(nmPerLongitude, magneticVariation float32) ([]Waypoint, int)
- func (ap *Approach) InitializeWaypoints(icao string, loc Locator, nmPerLongitude float32, magneticVariation float32, ...)
- func (ap *Approach) RunwayHeading(nmPerLongitude float32) math.TrueHeading
- type ApproachIntent
- type ApproachIntentType
- type ApproachSnippetFormatter
- type ApproachType
- type Arrival
- type ArrivalAirline
- type BasicNumberSnippetFormatter
- type BeaconCodeSnippetFormatter
- type BeaconCodeTable
- type BeaconCodeTableSpecifier
- type CRDAPair
- type CRDARegion
- func (ar *CRDARegion) CourseLine(nmPerLongitude float32) []math.Point2LL
- func (ar *CRDARegion) Inside(p math.Point2LL, alt float32, nmPerLongitude float32) (lateral, vertical bool)
- func (ar *CRDARegion) QualificationPolygon(nmPerLongitude float32) []math.Point2LL
- func (ar *CRDARegion) TryMakeGhost(trk RadarTrack, heading float32, scratchpad string, forceGhost bool, ...) *GhostTrack
- type CRDARoutePoint
- type CallsignArg
- type CallsignSnippetFormatter
- type CautionWakeTurbulenceIntent
- type ClearedApproachIntent
- type CommandIntent
- type CompoundSpeedIntent
- type CompoundSpeedSegment
- type ContactIntent
- type ContactTowerIntent
- type ContactType
- type ControlPosition
- type Controller
- type ControllerAirspaceVolume
- type DMEArc
- type DMEArcDirection
- type DMELocator
- type DepControllerSnippetFormatter
- type Departure
- type DepartureAirline
- type ERAMAdaptation
- type ERAMMap
- type ERAMMapGroup
- type EnrouteSquawkCodePool
- func (p *EnrouteSquawkCodePool) Get(r *rand.Rand) (Squawk, error)
- func (p *EnrouteSquawkCodePool) InInitialPool(code Squawk) bool
- func (p *EnrouteSquawkCodePool) IsAssigned(code Squawk) bool
- func (p *EnrouteSquawkCodePool) NumAvailable() int
- func (p *EnrouteSquawkCodePool) Return(code Squawk) error
- func (p *EnrouteSquawkCodePool) Take(code Squawk) error
- type ExitID
- type ExitRoute
- type FAAAirport
- type Facility
- type Fix
- type FixSnippetFormatter
- type FleetAircraft
- type FlightPlan
- type FlightRules
- type Frequency
- type FrequencySnippetFormatter
- type GACallsignArg
- type GhostTrack
- type GroupFormSnippetFormatter
- type HeadingIntent
- type HeadingSnippetFormatter
- type HeadingTurn
- type HeadingType
- type Hold
- type HoldEntry
- type InboundFlow
- type LetterSnippetFormatter
- type LineStyle
- type LocalPool
- type LocalSquawkCodePool
- func (p *LocalSquawkCodePool) Get(spec string, rules FlightRules, r *rand.Rand) (Squawk, FlightRules, error)
- func (p *LocalSquawkCodePool) InInitialPool(code Squawk) bool
- func (p *LocalSquawkCodePool) IsAssigned(code Squawk) bool
- func (p *LocalSquawkCodePool) IsReservedVFRCode(sq Squawk) bool
- func (p *LocalSquawkCodePool) Return(sq Squawk) error
- type LocalSquawkCodePoolSpecifier
- type Locator
- type LookForFieldIntent
- type MVA
- type MVAExterior
- type MVAGrid
- type MVAHorizontalProjection
- type MVAInterior
- type MVALinearRing
- type MVAPatches
- type MVAPolygonPatch
- type MVASurface
- type MachSnippetFormatter
- type MagneticGrid
- type MapLabel
- type MapLibrary
- type MapLibrarySpec
- type MapLine
- type MapSymbol
- type MixUpIntent
- type Navaid
- type NavigationIntent
- type NavigationRestriction
- type NavigationType
- type Overflight
- type OverflightAirline
- type PTType
- type Path
- type PathArc
- type PathSegment
- type PhraseFormatString
- type PoolSpecifier
- type ProcedureIntent
- type ProcedureTurn
- type ProcedureType
- type RadarSite
- type RadarTrack
- type RadioTransmission
- type RadioTransmissionType
- type ReportAltitudeIntent
- type ReportHeadingIntent
- type ReportMachIntent
- type ReportSpeedIntent
- type ReportingPoint
- type RestrictionArea
- type RouteGenerator
- type RouteRayIntersection
- type Runway
- type RunwayID
- type RunwaySnippetFormatter
- type SIDSnippetFormatter
- type SPC
- type STAR
- type STARSMap
- type STARSnippetFormatter
- type SayAgainCommandType
- type SayAgainIntent
- type SnippetFormatter
- type SpeedIntent
- type SpeedRestriction
- func MakeAtOrAboveSpeedRestriction(speed float32) SpeedRestriction
- func MakeAtOrBelowSpeedRestriction(speed float32) SpeedRestriction
- func MakeAtSpeedRestriction(speed float32) SpeedRestriction
- func MakeMachRestriction(mach float32) SpeedRestriction
- func MakeRangeSpeedRestriction(low, high float32) SpeedRestriction
- func ParseSpeedRestriction(s string) (*SpeedRestriction, error)
- type SpeedSnippetFormatter
- type SpeedType
- type SpeedUntil
- type Squawk
- type StaticDatabase
- func (d StaticDatabase) ARTCCForFacility(fac string) string
- func (d StaticDatabase) IsARTCC(id string) bool
- func (d StaticDatabase) IsATCT(id string) bool
- func (d StaticDatabase) IsFacility(id string) bool
- func (d StaticDatabase) IsTRACON(id string) bool
- func (d StaticDatabase) LookupAirport(name string) (FAAAirport, bool)
- func (d StaticDatabase) LookupDME(f string) (math.Point2LL, int, bool)
- func (d StaticDatabase) LookupFacility(id string) (Facility, bool)
- func (d StaticDatabase) LookupWaypoint(f string) (math.Point2LL, bool)
- type SymbolStyle
- type TFR
- type TRACON
- type Temperature
- type TrafficAdvisoryIntent
- type TrafficAdvisoryResponse
- type TransponderIntent
- type TransponderMode
- type TransponderType
- type TurnDirection
- type TypeOfFlight
- type UnableIntent
- type VFRRandomsSpec
- type VFRReportingPoint
- type VFRRouteSpec
- type VisualSeparationIntent
- type Waypoint
- func (wp Waypoint) ActionEvent() *WaypointActionEvent
- func (wp Waypoint) ActionGroups() []WaypointActionGroup
- func (wp Waypoint) Airway() string
- func (wp Waypoint) AirworkMinutes() int
- func (wp Waypoint) AirworkRadius() int
- func (wp *Waypoint) AltitudeRestriction() *AltitudeRestriction
- func (wp Waypoint) Arc() *DMEArc
- func (wp *Waypoint) ClearAltitudeRestriction()
- func (wp Waypoint) ClearApproach() bool
- func (wp Waypoint) ClearPrimaryScratchpad() bool
- func (wp Waypoint) ClearSecondaryScratchpad() bool
- func (wp *Waypoint) ClearSpeedRestriction()
- func (wp Waypoint) ClimbAltitude() int
- func (wp Waypoint) Delete() bool
- func (wp Waypoint) DescendAltitude() int
- func (wp *Waypoint) ETA(p math.Point2LL, gs float32, nmPerLongitude float32) time.Duration
- func (wp Waypoint) FAF() bool
- func (wp Waypoint) FlyOver() bool
- func (wp Waypoint) GoAroundContactController() ControlPosition
- func (wp Waypoint) HandoffController() ControlPosition
- func (wp Waypoint) HasAltitudeRestriction() bool
- func (wp Waypoint) HasSpeedRestriction() bool
- func (wp Waypoint) HasTransferCommsAction() bool
- func (wp Waypoint) HeadingIsTrack() bool
- func (wp Waypoint) HumanHandoff() bool
- func (wp Waypoint) IAF() bool
- func (wp Waypoint) IF() bool
- func (wp *Waypoint) InitExtra() *WaypointExtra
- func (wp Waypoint) InterceptApproach() bool
- func (wp Waypoint) Land() bool
- func (wp Waypoint) LogValue() slog.Value
- func (wp Waypoint) MagneticHeading() math.MagneticHeading
- func (wp Waypoint) NoPT() bool
- func (wp Waypoint) OnApproach() bool
- func (wp Waypoint) OnSID() bool
- func (wp Waypoint) OnSTAR() bool
- func (wp Waypoint) PointOut() ControlPosition
- func (wp Waypoint) PresentHeading() bool
- func (wp Waypoint) PrimaryScratchpad() string
- func (wp Waypoint) ProcedureTurn() *ProcedureTurn
- func (wp Waypoint) Radius() float32
- func (wp Waypoint) SecondaryScratchpad() string
- func (wp Waypoint) SequenceVFRLanding() bool
- func (wp *Waypoint) SetAltitudeRestriction(ar AltitudeRestriction)
- func (wp *Waypoint) SetClearApproach(v bool)
- func (wp *Waypoint) SetClearPrimaryScratchpad(v bool)
- func (wp *Waypoint) SetClearSecondaryScratchpad(v bool)
- func (wp *Waypoint) SetDelete(v bool)
- func (wp *Waypoint) SetFAF(v bool)
- func (wp *Waypoint) SetFlyOver(v bool)
- func (wp *Waypoint) SetHumanHandoff(v bool)
- func (wp *Waypoint) SetIAF(v bool)
- func (wp *Waypoint) SetIF(v bool)
- func (wp *Waypoint) SetInterceptApproach(v bool)
- func (wp *Waypoint) SetLand(v bool)
- func (wp *Waypoint) SetNoPT(v bool)
- func (wp *Waypoint) SetOnApproach(v bool)
- func (wp *Waypoint) SetOnSID(v bool)
- func (wp *Waypoint) SetOnSTAR(v bool)
- func (wp *Waypoint) SetPresentHeading(v bool)
- func (wp *Waypoint) SetSequenceVFRLanding(v bool)
- func (wp *Waypoint) SetSpeedRestriction(sr SpeedRestriction)
- func (wp *Waypoint) SetSyntheticCrossing(v bool)
- func (wp *Waypoint) SetTransferComms(v bool)
- func (wp *Waypoint) SetTurn(t TurnDirection)
- func (wp Waypoint) Shift() float32
- func (wp *Waypoint) SpeedRestriction() *SpeedRestriction
- func (wp Waypoint) SyntheticCrossing() bool
- func (wp Waypoint) TransferComms() bool
- func (wp Waypoint) Turn() TurnDirection
- func (wp Waypoint) WaypointActions() WaypointActions
- type WaypointActionEvent
- type WaypointActionGroup
- type WaypointActionTermination
- type WaypointActionTerminationType
- type WaypointActions
- type WaypointArray
- func (wa WaypointArray) CheckArrival(e *util.ErrorLogger, ctrl map[ControlPosition]*Controller, ...)
- func (wa WaypointArray) CheckDeparture(e *util.ErrorLogger, controllers map[ControlPosition]*Controller, ...)
- func (wa WaypointArray) CheckOverflight(e *util.ErrorLogger, ctrl map[ControlPosition]*Controller, ...)
- func (wa WaypointArray) Encode() string
- func (wa WaypointArray) HasHumanHandoff() bool
- func (wa WaypointArray) InitializeLocations(loc Locator, nmPerLongitude float32, magneticVariation float32, allowSlop bool, ...) WaypointArray
- func (wa WaypointArray) RouteString() string
- func (wa *WaypointArray) UnmarshalJSON(b []byte) error
- type WaypointExtra
- type WaypointFlags
- type WaypointHeadingAction
- type XNOTAMUpdate
Constants ¶
const ( RadioTransmissionUnknown = iota RadioTransmissionContact // Messages initiated by the pilot RadioTransmissionReadback // Reading back an instruction RadioTransmissionUnexpected // Something urgent or unusual RadioTransmissionMixUp // Pilot confused about who was being addressed RadioTransmissionNoId // No callsign included (e.g. to say "blocked") )
const ( RouteBasedFix = "route" ZoneBasedFix = "zone" )
const ( VFRPhaseNone uint8 = 0 VFRPhaseRollout uint8 = 1 VFRPhaseUpwind uint8 = 2 VFRPhaseCrosswind uint8 = 3 VFRPhaseDownwind uint8 = 4 VFRPhaseBase uint8 = 5 VFRPhaseFinal uint8 = 6 VFRPhaseStraightIn uint8 = 7 VFRPhaseOrbit uint8 = 8 )
VFRPhase constants identify which leg of the VFR traffic pattern a waypoint belongs to.
const ( PTUndefined = iota PTRacetrack PTStandard45 )
const ( AirwayLevelAll = iota AirwayLevelLow AirwayLevelHigh )
const ( AirwayDirectionAny = iota AirwayDirectionForward AirwayDirectionBackward )
const ARINC424LineLength = 134 // 132 chars + \r + \n
const MaxAltitude float32 = 100000
MaxAltitude is used as the upper bound for "at or above" restrictions. This lets the invariant Range[0] <= Range[1] always hold, eliminating sentinel checks in clamping/bounding code.
const MaxRestrictionAreas = 100
This many adapted and then this many user-defined
const MaxRestrictionSpeed float32 = 1000
MaxRestrictionSpeed is the sentinel value used as the upper bound for "at or above" speed restrictions. It is not a real airspeed limit; compare against aircraft performance for actual maxima.
Variables ¶
var ( ErrBadPoolSpecifier = errors.New("Bad pool specifier") ErrInvalidAltitude = errors.New("Altitude above aircraft's ceiling") ErrInvalidController = errors.New("Invalid controller") ErrInvalidFacility = errors.New("Invalid facility") ErrInvalidHeading = errors.New("Invalid heading") ErrInvalidSquawkCode = errors.New("Invalid squawk code") ErrNoAircraftForCallsign = errors.New("No aircraft exists with specified callsign") ErrNoController = errors.New("No controller with that callsign") ErrNoCoordinationFix = errors.New("No coordination fix found") ErrNoERAMFacility = errors.New("No ERAM facility exists") ErrNoFlightPlan = errors.New("No flight plan has been filed for aircraft") ErrNoMatchingFix = errors.New("No matching fix") ErrNoMoreAvailableSquawkCodes = errors.New("No more available squawk codes") ErrNoSTARSFacility = errors.New("No STARS Facility in ERAM computer") ErrNoValidArrivalFound = errors.New("Unable to find a valid arrival") ErrNoValidDepartureFound = errors.New("Unable to find a valid departure") ErrNotBeingHandedOffToMe = errors.New("Aircraft not being handed off to current controller") ErrNotPointedOutByMe = errors.New("Aircraft not being pointed out by current controller") ErrNotPointedOutToMe = errors.New("Aircraft not being pointed out to current controller") ErrOtherControllerHasTrack = errors.New("Another controller is already tracking the aircraft") ErrSquawkCodeAlreadyAssigned = errors.New("Squawk code has already been assigned") ErrSquawkCodeNotManagedByPool = errors.New("Squawk code is not managed by this pool") ErrSquawkCodeUnassigned = errors.New("Squawk code has not been assigned") ErrUnknownAirport = errors.New("Unknown airport") ErrUnknownRunway = errors.New("Unknown runway") )
var NATOPhonetic = map[string]string{
"A": "alpha", "B": "bravo", "C": "charlie", "D": "delta",
"E": "echo", "F": "foxtrot", "G": "golf", "H": "hotel",
"I": "india", "J": "juliet", "K": "kilo", "L": "lima",
"M": "mike", "N": "november", "O": "oscar", "P": "papa",
"Q": "quebec", "R": "romeo", "S": "sierra", "T": "tango",
"U": "uniform", "V": "victor", "W": "whiskey", "X": "x-ray",
"Y": "yankee", "Z": "zulu",
}
NATOPhonetic maps uppercase letters to their standard NATO phonetic alphabet words.
Functions ¶
func AirportHasRunway ¶ added in v0.14.1
AirportHasRunway returns true if the given runway exists at the airport (from DB).
func CWTApproachSeparation ¶
CWTApproachSeparation returns the required approach separation between aircraft of the given CWT categories. When the CWT table specifies no extra wake turbulence separation (0), minimum radar separation applies: 2.5 NM on eligible runways, 3 NM otherwise.
func CWTDirectlyBehindSeparation ¶
CWTDirectlyBehindSeparation returns the required separation between aircraft of the two given CWT categories. If 0 is returned, minimum radar separation should be used.
func CallsignClashesWithExisting ¶ added in v0.14.1
func CallsignClashesWithExisting(currentCallsigns []ADSBCallsign, proposed string, uniqueSuffix bool) bool
func CheckApproaches ¶
func CheckApproaches(e *util.ErrorLogger, wps []WaypointArray, requireFAF bool, controllers map[ControlPosition]*Controller, checkScratchpad func(string) bool)
func DensityRatioAtAltitude ¶
returns the ratio of air density at the given altitude (in feet) to the air density at sea level, subject to assuming the standard atmosphere.
func FormatAltitude ¶
func GetACTypePronunciations ¶ added in v0.14.0
GetACTypePronunciations returns all pronunciation variants for an aircraft type. For example, "C172" might return ["skyhawk", "cessna one seventy-two"]. Returns nil if the type is not found in sayactype.json.
func GetAirportTelephonyVariants ¶ added in v0.14.0
GetAirportTelephonyVariants returns all spoken name variants for an airport. This is used by STT for matching spoken airport names to ICAO codes. Returns all variants from sayairport.json if available, otherwise returns a slice with just the database name (if available), or nil if not found.
func GetApproachTelephony ¶ added in v0.14.0
GetApproachTelephony returns the spoken form of an approach name. For example, "RNAV X Runway 22L" becomes "r-nav x-ray runway 2 2 left".
func GetCallsignSpoken ¶ added in v0.14.0
GetCallsignSpoken returns the spoken telephony string for a callsign, formatted as it would be pronounced (for Whisper prompts). Example: "JBU520" → "jetblue five 20", "BAW22J" → "speedbird 22 juliet"
func GetFixTelephony ¶ added in v0.14.0
GetFixTelephony returns the spoken name for a fix (navaid, airport, or waypoint). It uses pronunciations from sayfix.json when available, falls back to database lookups for navaids/airports, and uses StopShouting for other fixes.
func GetSIDTelephony ¶ added in v0.14.0
GetSIDTelephony returns the spoken form of a SID name. For example, "MERIT5" becomes "merit five".
func GetSTARTelephony ¶ added in v0.14.0
GetSTARTelephony returns the spoken form of a STAR name. For example, "CAMRN4" becomes "cameron four".
func GetTrailing3Spoken ¶ added in v0.14.0
GetTrailing3Spoken returns the trailing 3 characters of a callsign as spoken phonetics. For "N123AB", returns "3 alpha bravo". For callsigns shorter than 3 chars (excluding N prefix), returns the whole number.
func InAirspace ¶
func InitDB ¶
func InitDB()
InitDB ensures the aviation database is initialized and blocks until it is ready. Safe to call multiple times; only the first call does work. Prefer StartInitDB if you want to kick off loading without waiting.
func IntersectingRunways ¶ added in v0.14.0
IntersectingRunways returns all runways at airport that physically intersect the given runway. It checks if runway centerlines cross and the intersection point is within maxDistNM of both runway segments (threshold to threshold). Use maxDistNM=0 for strict threshold-to-threshold intersection, or a small value (e.g., 0.5) to account for pavement extending past thresholds. Returns both directions for each intersecting runway (e.g., both "13L" and "31R").
func MachToTAS ¶ added in v0.14.1
func MachToTAS(mach float32, temp Temperature) float32
func OppositeRunwayId ¶ added in v0.14.0
OppositeRunwayId returns the runway ID for the opposite end of the given runway. E.g., "13L" -> "31R", "22R" -> "4L", "9" -> "27".
func ParseDistanceDirection ¶ added in v0.14.3
func ParseDistanceDirection(s string) (int, math.CardinalOrdinalDirection, error)
ParseDistanceDirection parses strings like "5W" or "10NE" into a distance in miles and a cardinal/ordinal direction.
func ParseSyntheticCrossingFix ¶ added in v0.14.3
ParseSyntheticCrossingFix parses a synthetic cross-distance waypoint name like "_DETGY/5W" and returns the named fix, distance, and direction.
func ParseSyntheticDMEFix ¶ added in v0.14.3
ParseSyntheticDMEFix parses a synthetic cross-DME waypoint name like "_04L_10DME" and returns the runway and distance (in nm) from the threshold.
func PrintCIFPRoutes ¶
func PrintMapLibrary ¶ added in v0.14.4
func PrintMapLibrary(path string, e *util.ErrorLogger)
PrintMapLibrary prints a table of the maps in the given file.
func RandomizeRoute ¶
func RegisterIntentMerger ¶ added in v0.14.0
func RegisterIntentMerger(fn any)
RegisterIntentMerger registers a merge function. fn must have signature: func(IntentType1, IntentType2, ...) ([]CommandIntent, bool) where all parameter types implement CommandIntent. Panics if signature is invalid or duplicate type sequence exists.
func SaveMapLibrary ¶ added in v0.14.4
func SaveMapLibrary(w io.Writer, lib *MapLibrary) error
SaveMapLibrary encodes a library to the wire format and writes it to w. Iteration order over the input maps is deterministic (sorted by name) so files re-import bit-stable across runs.
func SplitCallsign ¶ added in v0.14.0
SplitCallsign splits a callsign into ICAO prefix and flight number. For "UAL123" returns ("UAL", "123"). For "N12345" returns ("N", "12345").
func SquawkIsSPC ¶
func StartInitDB ¶ added in v0.14.4
func StartInitDB()
StartInitDB kicks off aviation database loading on a background goroutine without blocking. Subsequent callers of InitDB() will wait until that load completes.
func StringIsSPC ¶
func TASToMach ¶ added in v0.14.1
func TASToMach(tas float32, temp Temperature) float32
func UnderBravoShelf ¶
func UnderBravoShelf(grid *AirspaceGrid, p math.Point2LL, alt int) bool
Types ¶
type ADSBCallsign ¶
type ADSBCallsign string
func (ADSBCallsign) String ¶
func (c ADSBCallsign) String() string
type ARINC424Result ¶ added in v0.13.0
type ARINC424Result struct {
Airports map[string]FAAAirport
Fixes map[string]Fix
Airways map[string][]Airway
EnrouteHolds map[string][]Hold
TerminalHolds map[string]map[string][]Hold
}
func ParseARINC424 ¶
func ParseARINC424(r io.Reader) ARINC424Result
type ARTCC ¶
type ARTCC = Facility
ARTCC is a type alias for Facility representing an Air Route Traffic Control Center.
type ATISIntent ¶ added in v0.14.1
type ATISIntent struct {
Letter string
}
ATISIntent represents the pilot's acknowledgment of the ATIS letter.
func (ATISIntent) Render ¶ added in v0.14.1
func (a ATISIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ATPAVolume ¶
type ATPAVolume struct {
Id string `json:"id"`
ThresholdString string `json:"runway_threshold"`
Threshold math.Point2LL
Heading math.MagneticHeading `json:"heading"`
MaxHeadingDeviation float32 `json:"max_heading_deviation"`
Floor float32 `json:"floor"`
Ceiling float32 `json:"ceiling"`
Length float32 `json:"length"`
LeftWidth float32 `json:"left_width"`
RightWidth float32 `json:"right_width"`
FilteredScratchpads []string `json:"filtered_scratchpads"`
ExcludedScratchpads []string `json:"excluded_scratchpads"`
Enable25nmApproach bool `json:"enable_2.5nm"`
Dist25nmApproach float32 `json:"2.5nm_distance"`
}
func (*ATPAVolume) GetRect ¶
func (a *ATPAVolume) GetRect(nmPerLongitude, magneticVariation float32) [4]math.Point2LL
func (*ATPAVolume) Inside ¶
func (a *ATPAVolume) Inside(p math.Point2LL, alt float32, hdg math.MagneticHeading, nmPerLongitude, magneticVariation float32) bool
type AdaptationFix ¶
type AdaptationFixes ¶
type AdaptationFixes []AdaptationFix
type AircraftPerformance ¶
type AircraftPerformance struct {
Name string `json:"name"`
ICAO string `json:"icao"`
// engines, weight class, category
WeightClass string `json:"weightClass"`
Ceiling float32 `json:"ceiling"`
Engine struct {
AircraftType string `json:"type"`
} `json:"engines"`
Rate struct {
Climb float32 `json:"climb"` // ft / minute; reduce by 500 after alt 5000 if this is >=2500
Descent float32 `json:"descent"`
Accelerate float32 `json:"accelerate"` // kts / 2 seconds
Decelerate float32 `json:"decelerate"`
} `json:"rate"`
Category struct {
SRS int `json:"srs"`
LAHSO int `json:"lahso"`
CWT string `json:"cwt"`
}
Runway struct {
Takeoff float32 `json:"takeoff"` // nm
Landing float32 `json:"landing"` // nm
} `json:"runway"`
Speed struct {
Min float32 `json:"min"`
V2 float32 `json:"v2"`
Landing float32 `json:"landing"`
CruiseTAS float32 `json:"cruise"`
CruiseMach float32 `json:"cruiseM"`
MaxTAS float32 `json:"max"`
MaxMach float32 `json:"maxM"`
} `json:"speed"`
Turn struct {
MaxBankAngle float32 `json:"maxBankAngle"`
MaxBankRate float32 `json:"maxBankRate"`
}
Capacity struct {
Passengers int `json:"passengers"`
FuelPounds int `json:"fuel_pounds"`
} `json:"capacity"`
}
func (AircraftPerformance) ApproachSpeed ¶
func (ap AircraftPerformance) ApproachSpeed(windDirection, windSpeed, windGust float32, runwayHeading float32) float32
ApproachSpeed returns the final approach speed including wind additives. The runway heading is used to compute the headwind component of the provided wind. Jets and turboprops add half the headwind plus the full gust factor (not to exceed 20 knots). Pistons add half the gust factor... I suppose we should also add a max additive but most pistons won't be landing in very windy conditions
type AircraftTypeSnippetFormatter ¶ added in v0.13.2
type AircraftTypeSnippetFormatter struct{}
func (AircraftTypeSnippetFormatter) Spoken ¶ added in v0.13.2
func (AircraftTypeSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (AircraftTypeSnippetFormatter) Validate ¶ added in v0.13.2
func (AircraftTypeSnippetFormatter) Validate(arg any) error
func (AircraftTypeSnippetFormatter) Written ¶ added in v0.13.2
func (AircraftTypeSnippetFormatter) Written(arg any) string
type AirlineSpecifier ¶
type AirlineSpecifier struct {
ICAO string `json:"icao"`
Callsign string `json:"callsign,omitempty"`
Fleet string `json:"fleet,omitempty"`
AircraftTypes []string `json:"types,omitempty"`
}
func (AirlineSpecifier) Aircraft ¶
func (a AirlineSpecifier) Aircraft() []FleetAircraft
func (*AirlineSpecifier) Check ¶
func (a *AirlineSpecifier) Check(e *util.ErrorLogger)
func (AirlineSpecifier) SampleAcType ¶ added in v0.14.1
func (AirlineSpecifier) SampleAcTypeAndCallsign ¶
func (a AirlineSpecifier) SampleAcTypeAndCallsign(r *rand.Rand, currentCallsigns []ADSBCallsign, uniqueSuffix bool, departureAirport, arrivalAirport string, lg *log.Logger) (actype, callsign string)
currentCallsigns will be empty if we don't care about unique suffixes.
type Airport ¶
type Airport struct {
Location math.Point2LL
TowerListIndex int `json:"tower_list"`
Approaches map[string]*Approach `json:"approaches,omitempty"`
Departures []Departure `json:"departures,omitempty"`
VFR struct {
Randoms VFRRandomsSpec `json:"random_routes"`
Routes []VFRRouteSpec `json:"routes"`
} `json:"vfr"`
// Optional: initial tracking controller, for cases where a virtual
// controller has the initial track.
DepartureController ControlPosition `json:"departure_controller"`
HoldForRelease bool `json:"hold_for_release"`
ExitCategories map[ExitID]string `json:"exit_categories"`
// runway -> (exit -> route)
DepartureRoutes map[RunwayID]map[ExitID]*ExitRoute `json:"departure_routes"`
CRDARegions map[string]*CRDARegion `json:"crda_regions"`
CRDAPairs []CRDAPair `json:"crda_pairs"`
ATPAVolumes map[string]*ATPAVolume `json:"atpa_volumes"`
OmitArrivalScratchpad bool `json:"omit_arrival_scratchpad"`
DepartureRunwaysAsOne []string `json:"departure_runways_as_one"`
}
func (*Airport) PostDeserialize ¶
func (ap *Airport) PostDeserialize(icao string, loc Locator, nmPerLongitude float32, magneticVariation float32, controlPositions map[ControlPosition]*Controller, scratchpads map[string]string, facilityAirports map[string]*Airport, checkScratchpad func(string) bool, e *util.ErrorLogger)
func (Airport) VFRRateSum ¶
type AirportSnippetFormatter ¶ added in v0.13.2
type AirportSnippetFormatter struct{}
func (AirportSnippetFormatter) Spoken ¶ added in v0.13.2
func (AirportSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (AirportSnippetFormatter) Validate ¶ added in v0.13.2
func (AirportSnippetFormatter) Validate(arg any) error
func (AirportSnippetFormatter) Written ¶ added in v0.13.2
func (AirportSnippetFormatter) Written(arg any) string
type Airspace ¶
type Airspace struct {
Boundaries map[string][]math.Point2LL `json:"boundaries"`
Volumes map[string][]ControllerAirspaceVolume `json:"volumes"`
}
type AirspaceGrid ¶
type AirspaceGrid struct {
// contains filtered or unexported fields
}
AirspaceGrid organizes AirspaceVolume definitions and provides efficient in volume tests via a grid in lat-long space that records which of a potentially large set of volumes overlap grid cells. Grid cells are initialized on demand rather than upfront, which saves storage
func MakeAirspaceGrid ¶
func MakeAirspaceGrid(v []*AirspaceVolume) *AirspaceGrid
type AirspaceVolume ¶
type AirspaceVolume struct {
Id string `json:"id"`
Description string `json:"description"`
Type AirspaceVolumeType `json:"type"`
Floor int `json:"floor"`
Ceiling int `json:"ceiling"`
// Polygon
PolygonBounds *math.Extent2D // not always set
VerticesStr util.OneOf[string, []string] `json:"vertices"`
Vertices []math.Point2LL
Holes [][]math.Point2LL `json:"holes"`
// Circle
Center math.Point2LL `json:"center"`
Radius float32 `json:"radius"`
}
func (*AirspaceVolume) PostDeserialize ¶
func (a *AirspaceVolume) PostDeserialize(loc Locator, e *util.ErrorLogger)
type AirspaceVolumeType ¶
type AirspaceVolumeType int
const ( AirspaceVolumeUnknown AirspaceVolumeType = iota AirspaceVolumePolygon AirspaceVolumeCircle )
func (*AirspaceVolumeType) MarshalJSON ¶
func (t *AirspaceVolumeType) MarshalJSON() ([]byte, error)
func (*AirspaceVolumeType) UnmarshalJSON ¶
func (t *AirspaceVolumeType) UnmarshalJSON(b []byte) error
type AirwayDirection ¶
type AirwayDirection int
type AirwayFix ¶
type AirwayFix struct {
Fix string
Level AirwayLevel
Direction AirwayDirection
}
type AirwayLevel ¶
type AirwayLevel int
type AltRestrictionSnippetFormatter ¶ added in v0.13.2
type AltRestrictionSnippetFormatter struct{}
func (AltRestrictionSnippetFormatter) Spoken ¶ added in v0.13.2
func (AltRestrictionSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (AltRestrictionSnippetFormatter) Validate ¶ added in v0.13.2
func (AltRestrictionSnippetFormatter) Validate(arg any) error
func (AltRestrictionSnippetFormatter) Written ¶ added in v0.13.2
func (AltRestrictionSnippetFormatter) Written(arg any) string
type AltSnippetFormatter ¶ added in v0.13.2
type AltSnippetFormatter struct{}
AltSnippetFormatter formats altitudes, which may be given as ints or float32s.
func (*AltSnippetFormatter) Spoken ¶ added in v0.13.2
func (a *AltSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (*AltSnippetFormatter) Validate ¶ added in v0.13.2
func (a *AltSnippetFormatter) Validate(arg any) error
func (*AltSnippetFormatter) Written ¶ added in v0.13.2
func (a *AltSnippetFormatter) Written(arg any) string
type AltitudeDirection ¶ added in v0.14.0
type AltitudeDirection int
const ( AltitudeClimb AltitudeDirection = iota AltitudeDescend AltitudeMaintain )
type AltitudeIntent ¶ added in v0.14.0
type AltitudeIntent struct {
Altitude float32
Direction AltitudeDirection
AfterFix string // altitude change conditional on passing this fix
AfterSpeed *float32 // changing altitude only after reaching a speed
Expedite bool
GoodRate bool
RateThrough *float32 // "through/to" altitude for expedite or good rate
AlreadyExpediting bool
ThenSpeed *float32 // speed once we reach the altitude
ThenSpeedType SpeedType
}
AltitudeIntent represents climb/descend/maintain altitude commands
func (AltitudeIntent) Render ¶ added in v0.14.0
func (a AltitudeIntent) Render(rt *RadioTransmission, r *rand.Rand)
type AltitudeRestriction ¶
type AltitudeRestriction struct {
}
func MakeAtAltitudeRestriction ¶ added in v0.14.2
func MakeAtAltitudeRestriction(alt float32) AltitudeRestriction
func MakeAtOrAboveAltitudeRestriction ¶ added in v0.14.2
func MakeAtOrAboveAltitudeRestriction(alt float32) AltitudeRestriction
func MakeAtOrBelowAltitudeRestriction ¶ added in v0.14.2
func MakeAtOrBelowAltitudeRestriction(alt float32) AltitudeRestriction
func MakeRangeAltitudeRestriction ¶ added in v0.14.2
func MakeRangeAltitudeRestriction(low, high float32) AltitudeRestriction
func ParseAltitudeRestriction ¶
func ParseAltitudeRestriction(s string) (*AltitudeRestriction, error)
ParseAltitudeRestriction parses an altitude restriction in the compact text format used in scenario definition files.
func (AltitudeRestriction) Encoded ¶
func (a AltitudeRestriction) Encoded() string
Encoded returns the restriction in the encoded form used in scenario configuration files, e.g. "5000+" for "at or above 5000".
func (AltitudeRestriction) TargetAltitude ¶
func (a AltitudeRestriction) TargetAltitude(alt float32) float32
TargetAltitude clamps alt into the restriction's range.
func (*AltitudeRestriction) UnmarshalJSON ¶
func (a *AltitudeRestriction) UnmarshalJSON(b []byte) error
type AppControllerSnippetFormatter ¶ added in v0.13.2
type AppControllerSnippetFormatter struct{}
func (AppControllerSnippetFormatter) Spoken ¶ added in v0.13.2
func (AppControllerSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (AppControllerSnippetFormatter) Validate ¶ added in v0.13.2
func (AppControllerSnippetFormatter) Validate(arg any) error
func (AppControllerSnippetFormatter) Written ¶ added in v0.13.2
func (AppControllerSnippetFormatter) Written(arg any) string
type Approach ¶
type Approach struct {
Id string `json:"cifp_id"`
FullName string `json:"full_name"`
Type ApproachType `json:"type"`
Runway string `json:"runway"`
Waypoints []WaypointArray `json:"waypoints"`
// Set in Airport PostDeserialize()
Threshold math.Point2LL
OppositeThreshold math.Point2LL
}
func (*Approach) ExtendedCenterline ¶
func (*Approach) FAFSegment ¶
Find the FAF: return the corresponding waypoint array and the index of the FAF within it.
func (*Approach) InitializeWaypoints ¶ added in v0.14.3
func (ap *Approach) InitializeWaypoints(icao string, loc Locator, nmPerLongitude float32, magneticVariation float32, e *util.ErrorLogger)
InitializeWaypoints resolves waypoint locations and adds the runway threshold waypoint to each route. It also sets the OnApproach flag, Threshold, and OppositeThreshold fields.
func (*Approach) RunwayHeading ¶
func (ap *Approach) RunwayHeading(nmPerLongitude float32) math.TrueHeading
type ApproachIntent ¶ added in v0.14.0
type ApproachIntent struct {
Type ApproachIntentType
ApproachName string // full name of the approach (e.g., "ILS Runway 22L")
Fix string // for AtFixCleared
LAHSORunway string // runway to hold short of (for LAHSO operations)
HasLocalizer bool
StraightIn bool
}
ApproachIntent represents approach-related commands
func (ApproachIntent) Render ¶ added in v0.14.0
func (a ApproachIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ApproachIntentType ¶ added in v0.14.0
type ApproachIntentType int
const ( ApproachExpect ApproachIntentType = iota ApproachIntercept ApproachJoin // for non-ILS approaches ApproachAtFixCleared ApproachAtFixIntercept ApproachCancel )
type ApproachSnippetFormatter ¶ added in v0.13.2
type ApproachSnippetFormatter struct{}
func (ApproachSnippetFormatter) Spoken ¶ added in v0.13.2
func (ApproachSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (ApproachSnippetFormatter) Validate ¶ added in v0.13.2
func (ApproachSnippetFormatter) Validate(arg any) error
func (ApproachSnippetFormatter) Written ¶ added in v0.13.2
func (ApproachSnippetFormatter) Written(arg any) string
type ApproachType ¶
type ApproachType int
const ( UnknownApproach ApproachType = iota ILSApproach RNAVApproach ChartedVisualApproach VisualApproach LocalizerApproach VORApproach )
func (ApproachType) MarshalJSON ¶
func (at ApproachType) MarshalJSON() ([]byte, error)
func (ApproachType) String ¶
func (at ApproachType) String() string
func (*ApproachType) UnmarshalJSON ¶
func (at *ApproachType) UnmarshalJSON(b []byte) error
type Arrival ¶
type Arrival struct {
Waypoints WaypointArray `json:"waypoints"`
RunwayWaypoints map[string]map[string]WaypointArray `json:"runway_waypoints"` // Airport -> runway -> waypoints
SpawnWaypoint string `json:"spawn"` // if "waypoints" aren't specified
CruiseAltitudes util.SingleOrArray[int] `json:"cruise_altitude"`
Route string `json:"route"`
STAR string `json:"star"`
InitialController ControlPosition `json:"initial_controller"`
InitialAltitudes util.SingleOrArray[int] `json:"initial_altitude"`
AssignedAltitude float32 `json:"assigned_altitude"`
ClearedAltitude float32 `json:"cleared_altitude"`
InitialSpeed float32 `json:"initial_speed"`
SpeedRestriction SpeedRestriction `json:"speed_restriction"`
Scratchpad string `json:"scratchpad"`
SecondaryScratchpad string `json:"secondary_scratchpad"`
Description string `json:"description"`
CoordinationFix string `json:"coordination_fix"`
IsRNAV bool `json:"is_rnav"`
ExpectApproach util.OneOf[string, map[string]string] `json:"expect_approach"`
// Airport -> arrival airlines
Airlines map[string][]ArrivalAirline `json:"airlines"`
}
func (Arrival) GetRunwayWaypoints ¶
func (ar Arrival) GetRunwayWaypoints(airport, rwy string) WaypointArray
func (*Arrival) PostDeserialize ¶
func (ar *Arrival) PostDeserialize(loc Locator, nmPerLongitude float32, magneticVariation float32, airports map[string]*Airport, controlPositions map[ControlPosition]*Controller, checkScratchpad func(string) bool, e *util.ErrorLogger)
type ArrivalAirline ¶
type ArrivalAirline struct {
AirlineSpecifier
Airport string `json:"airport"`
}
type BasicNumberSnippetFormatter ¶ added in v0.13.2
type BasicNumberSnippetFormatter struct{}
func (BasicNumberSnippetFormatter) Spoken ¶ added in v0.13.2
func (BasicNumberSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (BasicNumberSnippetFormatter) Validate ¶ added in v0.13.2
func (BasicNumberSnippetFormatter) Validate(arg any) error
func (BasicNumberSnippetFormatter) Written ¶ added in v0.13.2
func (BasicNumberSnippetFormatter) Written(arg any) string
type BeaconCodeSnippetFormatter ¶ added in v0.13.2
type BeaconCodeSnippetFormatter struct{}
func (BeaconCodeSnippetFormatter) Spoken ¶ added in v0.13.2
func (BeaconCodeSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (BeaconCodeSnippetFormatter) Validate ¶ added in v0.13.2
func (BeaconCodeSnippetFormatter) Validate(arg any) error
func (BeaconCodeSnippetFormatter) Written ¶ added in v0.13.2
func (BeaconCodeSnippetFormatter) Written(arg any) string
type BeaconCodeTable ¶
type BeaconCodeTable struct {
VFRCodes [][2]Squawk
}
type BeaconCodeTableSpecifier ¶
type BeaconCodeTableSpecifier struct {
VFRCodes []string `json:"vfr_codes"` // Array of squawk code ranges
}
type CRDAPair ¶ added in v0.14.1
type CRDAPair struct {
SourceRegion string `json:"source_region"`
GhostRegion string `json:"ghost_region"`
SourceLeaderDirectionStr string `json:"source_leader_direction"`
GhostLeaderDirectionStr string `json:"ghost_leader_direction"`
TieSymbol string `json:"tie_symbol"`
StaggerSymbol string `json:"stagger_symbol"`
TieOffset float32 `json:"tie_offset"`
// Set during deserialize.
SourceLeaderDirection math.CardinalOrdinalDirection
GhostLeaderDirection math.CardinalOrdinalDirection
ConvergencePoint math.Point2LL
}
CRDAPair describes a one-directional ghosting relationship between two CRDA regions. Aircraft flying through SourceRegion's qualification volume have ghost data blocks plotted on GhostRegion's centerline; to ghost in both directions, define two pairs with the roles swapped.
type CRDARegion ¶ added in v0.14.1
type CRDARegion struct {
Name string // set during deserialization from map key
HeadingTolerance float32 `json:"heading_tolerance"`
// Straight-line reference (mutually exclusive with ReferenceRoute)
ReferenceLineHeading math.MagneticHeading `json:"reference_heading"`
ReferenceLineLength float32 `json:"reference_length"`
ReferencePointAltitude float32 `json:"reference_altitude"`
ReferencePoint math.Point2LL `json:"reference_point"`
// Route-based reference (mutually exclusive with straight-line fields)
ReferenceRoute string `json:"reference_route"`
// lateral qualification region
NearDistance float32 `json:"near_distance"`
NearHalfWidth float32 `json:"near_half_width"`
FarHalfWidth float32 `json:"far_half_width"`
RegionLength float32 `json:"region_length"`
// vertical qualification region
DescentPointDistance float32 `json:"descent_distance"`
DescentPointAltitude float32 `json:"descent_altitude"`
AboveAltitudeTolerance float32 `json:"above_altitude_tolerance"`
BelowAltitudeTolerance float32 `json:"below_altitude_tolerance"`
ScratchpadPatterns []string `json:"scratchpad_patterns"`
// Computed during PostDeserialize
Path Path
DistToConvergence float32 // distance from path end to convergence point
}
func (*CRDARegion) CourseLine ¶ added in v0.14.1
func (ar *CRDARegion) CourseLine(nmPerLongitude float32) []math.Point2LL
CourseLine returns a polyline for drawing the course line of this CRDA region.
func (*CRDARegion) QualificationPolygon ¶ added in v0.14.1
func (ar *CRDARegion) QualificationPolygon(nmPerLongitude float32) []math.Point2LL
QualificationPolygon returns the polygon outline of the qualification region for drawing.
func (*CRDARegion) TryMakeGhost ¶ added in v0.14.1
func (ar *CRDARegion) TryMakeGhost(trk RadarTrack, heading float32, scratchpad string, forceGhost bool, offset float32, leaderDirection math.CardinalOrdinalDirection, nmPerLongitude float32, other *CRDARegion) *GhostTrack
type CRDARoutePoint ¶ added in v0.14.1
CRDARoutePoint represents a single point in a CRDA reference route. Only fix names and /arc qualifiers are supported.
type CallsignArg ¶ added in v0.13.3
type CallsignArg struct {
Callsign ADSBCallsign
IsEmergency bool
AlwaysFullCallsign bool
}
CallsignArg provides additional context for formatting callsigns.
type CallsignSnippetFormatter ¶ added in v0.13.2
type CallsignSnippetFormatter struct{}
func (CallsignSnippetFormatter) Spoken ¶ added in v0.13.2
func (CallsignSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (CallsignSnippetFormatter) Validate ¶ added in v0.13.2
func (CallsignSnippetFormatter) Validate(arg any) error
func (CallsignSnippetFormatter) Written ¶ added in v0.13.2
func (CallsignSnippetFormatter) Written(arg any) string
type CautionWakeTurbulenceIntent ¶ added in v0.14.3
type CautionWakeTurbulenceIntent struct{}
CautionWakeTurbulenceIntent represents a pilot's acknowledgment of a wake turbulence advisory.
func (CautionWakeTurbulenceIntent) Render ¶ added in v0.14.3
func (c CautionWakeTurbulenceIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ClearedApproachIntent ¶ added in v0.14.0
type ClearedApproachIntent struct {
Approach string
StraightIn bool
CancelHold bool
LAHSORunway string
}
ClearedApproachIntent represents approach clearance
func (ClearedApproachIntent) Render ¶ added in v0.14.0
func (c ClearedApproachIntent) Render(rt *RadioTransmission, r *rand.Rand)
type CommandIntent ¶ added in v0.14.0
type CommandIntent interface {
// Render adds the appropriate text for this intent to the transmission.
Render(rt *RadioTransmission, r *rand.Rand)
}
CommandIntent represents the semantic meaning of a pilot readback. Instead of generating RadioTransmission text directly, commands return intents that are later rendered together for coherent multi-command responses.
type CompoundSpeedIntent ¶ added in v0.14.3
type CompoundSpeedIntent struct {
Segments []CompoundSpeedSegment
}
CompoundSpeedIntent represents a compound speed assignment readback, e.g., "speed 250 until FIX1, then 210 until FIX2, then 180".
func (CompoundSpeedIntent) Render ¶ added in v0.14.3
func (c CompoundSpeedIntent) Render(rt *RadioTransmission, r *rand.Rand)
type CompoundSpeedSegment ¶ added in v0.14.3
type CompoundSpeedSegment struct {
Speed *SpeedRestriction
UntilFix string // empty for last (open-ended) segment
}
CompoundSpeedSegment represents one segment of a compound speed assignment.
type ContactIntent ¶ added in v0.14.0
type ContactIntent struct {
Type ContactType
ToController *Controller // the controller being contacted
Frequency Frequency
IsDeparture bool // affects rendering (departure vs approach controller)
}
ContactIntent represents contact/handoff commands
func (ContactIntent) Render ¶ added in v0.14.0
func (c ContactIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ContactTowerIntent ¶ added in v0.14.0
type ContactTowerIntent struct {
Frequency Frequency
}
ContactTowerIntent represents contact tower command. Frequency is optional (zero means "not given"); when set, the pilot readback sometimes includes the tower frequency.
func (ContactTowerIntent) Render ¶ added in v0.14.0
func (c ContactTowerIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ContactType ¶ added in v0.14.0
type ContactType int
const ( ContactController ContactType = iota ContactGoodbye ContactRadarTerminated )
type ControlPosition ¶ added in v0.13.3
type ControlPosition string
ControlPosition identifies a controller position in either STARS or ERAM. For STARS, this is the TCP (Terminal Control Position) like "2K" or "4P". For ERAM, this is the sector identifier like "N56" or "W05". This is the generic type used throughout the codebase for any controller position.
type Controller ¶
type Controller struct {
Position string // This is the key in the controllers map in JSON (now the sector ID, e.g. "1N", "4P")
Callsign string `json:"callsign,omitempty"` // Human-readable callsign (e.g. "PHL_NA_APP")
RadioName string `json:"radio_name"`
Frequency Frequency `json:"frequency"`
Scope string `json:"scope_char"` // Optional. If unset, facility id is used for external, last char of position for local.
FacilityIdentifier string `json:"-"` // Set programmatically by loadNeighborControllers (e.g. "N" in "N4P")
ERAMFacility bool `json:"-"` // Set at runtime from facility type; true for ARTCC controllers
Facility string `json:"facility"` // So we can get the STARS facility from a controller
Area string `json:"area,omitempty"` // For TRACON: auto-derived from first digit of Position. For ERAM: must be manually specified.
}
func (Controller) ERAMID ¶ added in v0.13.0
func (c Controller) ERAMID() string
func (Controller) IsExternal ¶
func (c Controller) IsExternal() bool
func (Controller) PositionId ¶ added in v0.13.3
func (c Controller) PositionId() ControlPosition
type ControllerAirspaceVolume ¶
type ControllerAirspaceVolume struct {
LowerLimit int `json:"lower"`
UpperLimit int `json:"upper"`
Boundaries [][]math.Point2LL `json:"boundary_polylines"` // not in JSON
BoundaryNames []string `json:"boundaries"`
Label string `json:"label"`
LabelPosition math.Point2LL `json:"label_position"`
}
func (*ControllerAirspaceVolume) ContainsPoint ¶ added in v0.14.4
func (v *ControllerAirspaceVolume) ContainsPoint(p math.Point2LL) bool
ContainsPoint reports whether p is laterally inside the volume, applying the odd-winding (xor) rule across boundary rings. Altitude is ignored.
type DMEArc ¶
type DMEArc struct {
Fix string
Center math.Point2LL
Radius float32
Length float32
InitialHeading math.MagneticHeading
Direction DMEArcDirection
}
Can either be specified with (Fix,Radius), or (Length,Direction); the remaining fields are then derived from those.
func (*DMEArc) Initialize ¶ added in v0.14.1
func (arc *DMEArc) Initialize(loc Locator, startLoc, endLoc math.Point2LL, nmPerLongitude, magneticVariation float32, e *util.ErrorLogger) bool
Initialize resolves the arc's center, radius, and initial heading from its specification. Direction must be set before calling. startLoc and endLoc are the waypoint positions at each end of the arc. Returns true on success; returns false if the arc should be dropped (either due to error or because it's approximately linear).
type DMEArcDirection ¶ added in v0.14.1
type DMEArcDirection int
const ( DMEArcDirectionUnset DMEArcDirection = iota DMEArcDirectionClockwise // right turn DMEArcDirectionCounterClockwise // left turn )
func (DMEArcDirection) IsClockwise ¶ added in v0.14.1
func (d DMEArcDirection) IsClockwise() bool
type DMELocator ¶ added in v0.14.3
type DepControllerSnippetFormatter ¶ added in v0.13.2
type DepControllerSnippetFormatter struct{}
func (DepControllerSnippetFormatter) Spoken ¶ added in v0.13.2
func (DepControllerSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (DepControllerSnippetFormatter) Validate ¶ added in v0.13.2
func (DepControllerSnippetFormatter) Validate(arg any) error
func (DepControllerSnippetFormatter) Written ¶ added in v0.13.2
func (DepControllerSnippetFormatter) Written(arg any) string
type Departure ¶
type Departure struct {
Exit ExitID `json:"exit"`
Destination string `json:"destination"`
Altitudes util.SingleOrArray[int] `json:"altitude,omitempty"`
Route string `json:"route"`
RouteWaypoints WaypointArray // not specified in user JSON
Airlines []DepartureAirline `json:"airlines"`
Scratchpad string `json:"scratchpad"` // optional
SecondaryScratchpad string `json:"secondary_scratchpad"` // optional
Description string `json:"description"`
}
type DepartureAirline ¶
type DepartureAirline struct {
AirlineSpecifier
}
type ERAMAdaptation ¶
type ERAMAdaptation struct {
ARTCC string // not in JSON
CoordinationFixes map[string]AdaptationFixes `json:"coordination_fixes"`
}
type ERAMMap ¶ added in v0.14.4
type ERAMMap struct {
LabelLine1 string
LabelLine2 string
Lines []MapLine
Symbols []MapSymbol
Labels []MapLabel
}
ERAMMap is the runtime representation of a single map within an ERAM filter-menu group. Per-map identity within a group is the pair (LabelLine1, LabelLine2); duplicates are allowed and share state by design.
type ERAMMapGroup ¶ added in v0.14.4
type EnrouteSquawkCodePool ¶
type EnrouteSquawkCodePool struct {
Available *util.IntRangeSet
// Initial is maintained as a read-only snapshot of the initial set of
// available codes; it allows us to catch cases where the caller tries
// to return code that is inside the range we cover but was removed
// from the pool when it was first initialized.
Initial *util.IntRangeSet
}
func MakeEnrouteSquawkCodePool ¶
func MakeEnrouteSquawkCodePool(loc *LocalSquawkCodePool) *EnrouteSquawkCodePool
func (*EnrouteSquawkCodePool) Get ¶
func (p *EnrouteSquawkCodePool) Get(r *rand.Rand) (Squawk, error)
func (*EnrouteSquawkCodePool) InInitialPool ¶
func (p *EnrouteSquawkCodePool) InInitialPool(code Squawk) bool
func (*EnrouteSquawkCodePool) IsAssigned ¶
func (p *EnrouteSquawkCodePool) IsAssigned(code Squawk) bool
func (*EnrouteSquawkCodePool) NumAvailable ¶
func (p *EnrouteSquawkCodePool) NumAvailable() int
func (*EnrouteSquawkCodePool) Return ¶
func (p *EnrouteSquawkCodePool) Return(code Squawk) error
func (*EnrouteSquawkCodePool) Take ¶
func (p *EnrouteSquawkCodePool) Take(code Squawk) error
type ExitID ¶ added in v0.14.1
type ExitID string
ExitID is an exit fix identifier that may include a dot-separated suffix (e.g., "COLIN.P"). Use Base() for navaid lookups and display.
type ExitRoute ¶
type ExitRoute struct {
SID string `json:"sid"`
AssignedAltitude int `json:"assigned_altitude"`
ClearedAltitude int `json:"cleared_altitude"`
Waypoints WaypointArray `json:"waypoints"`
Description string `json:"description"`
IsRNAV bool `json:"is_rnav"`
HoldForRelease bool `json:"hold_for_release"`
// optional, control position to handoff to at a /ho
HandoffController ControlPosition `json:"handoff_controller"`
// optional, the initial tracking controller for the departure.
DepartureController ControlPosition `json:"departure_controller"`
WaitToContactDeparture bool // whether the aircraft waits until a /TC point to contact departure
}
func (ExitRoute) FinalHeading ¶ added in v0.14.0
FinalHeading returns the final heading from the exit route's waypoints. Returns 0 if no heading waypoint is found.
type FAAAirport ¶
type FAAAirport struct {
Id string
Name string
Country string
Elevation int
Location math.Point2LL
Runways []Runway
Approaches map[string]Approach
STARs map[string]STAR
ARTCC string
}
func (FAAAirport) SelectBestRunway ¶
func (ap FAAAirport) SelectBestRunway(windDir math.TrueHeading, magneticVariation float32) (*Runway, *Runway)
func (FAAAirport) ValidRunways ¶
func (ap FAAAirport) ValidRunways() string
type Facility ¶ added in v0.14.0
Facility represents a geographic facility with a center point and radius. Both TRACONs and ARTCCs use this structure for weather data handling.
type FixSnippetFormatter ¶ added in v0.13.2
type FixSnippetFormatter struct{}
func (FixSnippetFormatter) Spoken ¶ added in v0.13.2
func (f FixSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (FixSnippetFormatter) Validate ¶ added in v0.13.2
func (FixSnippetFormatter) Validate(arg any) error
func (FixSnippetFormatter) Written ¶ added in v0.13.2
func (FixSnippetFormatter) Written(arg any) string
type FleetAircraft ¶
type FlightPlan ¶
type FlightPlan struct {
Rules FlightRules
AircraftType string
CruiseSpeed int
DepartureAirport string
DepartureRunway string
Altitude int
ArrivalAirport string
AlternateAirport string
Exit ExitID
Route string
Remarks string
}
FlightPlan represents the flight plan from the perspective of the Aircraft: who they are, what they're doing, how they're going to get there.
type FlightRules ¶
type FlightRules int
const ( FlightRulesUnknown FlightRules = iota FlightRulesIFR FlightRulesVFR FlightRulesDVFR FlightRulesSVFR )
func (FlightRules) String ¶
func (f FlightRules) String() string
type Frequency ¶
type Frequency int
Frequencies are scaled by 1000 and then stored in integers.
func NewFrequency ¶
type FrequencySnippetFormatter ¶ added in v0.13.2
type FrequencySnippetFormatter struct{}
func (FrequencySnippetFormatter) Spoken ¶ added in v0.13.2
func (FrequencySnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (FrequencySnippetFormatter) Validate ¶ added in v0.13.2
func (FrequencySnippetFormatter) Validate(arg any) error
func (FrequencySnippetFormatter) Written ¶ added in v0.13.2
func (FrequencySnippetFormatter) Written(arg any) string
type GACallsignArg ¶ added in v0.14.0
type GACallsignArg struct {
Callsign ADSBCallsign
AircraftType string // e.g., "C172"
UseTypeForm bool // If true, use type+trailing3 form
IsEmergency bool
}
GACallsignArg provides context for formatting GA callsigns with type-based addressing. When UseTypeForm is true, the callsign is spoken as "aircraft type + trailing 3" (e.g., "skyhawk 3 alpha bravo" instead of "november 1 2 3 alpha bravo").
type GhostTrack ¶
type GhostTrack struct {
ADSBCallsign ADSBCallsign
Position math.Point2LL
Groundspeed int
LeaderLineDirection math.CardinalOrdinalDirection
TrackId string
}
type GroupFormSnippetFormatter ¶ added in v0.13.2
type GroupFormSnippetFormatter struct{}
func (GroupFormSnippetFormatter) Spoken ¶ added in v0.13.2
func (GroupFormSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (GroupFormSnippetFormatter) Validate ¶ added in v0.13.2
func (GroupFormSnippetFormatter) Validate(arg any) error
func (GroupFormSnippetFormatter) Written ¶ added in v0.13.2
func (GroupFormSnippetFormatter) Written(arg any) string
type HeadingIntent ¶ added in v0.14.0
type HeadingIntent struct {
Heading math.MagneticHeading
Type HeadingType
Turn HeadingTurn // for HeadingAssign: which way to turn
Degrees int // for HeadingTurnLeft/Right: how many degrees
CancelHold bool // heading cancels an active hold
}
HeadingIntent represents heading assignment commands
func (HeadingIntent) Render ¶ added in v0.14.0
func (h HeadingIntent) Render(rt *RadioTransmission, r *rand.Rand)
type HeadingSnippetFormatter ¶ added in v0.13.2
type HeadingSnippetFormatter struct{}
func (HeadingSnippetFormatter) Spoken ¶ added in v0.13.2
func (HeadingSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (HeadingSnippetFormatter) Validate ¶ added in v0.13.2
func (HeadingSnippetFormatter) Validate(arg any) error
func (HeadingSnippetFormatter) Written ¶ added in v0.13.2
func (HeadingSnippetFormatter) Written(arg any) string
type HeadingTurn ¶ added in v0.14.0
type HeadingTurn int
const ( HeadingTurnClosest HeadingTurn = iota HeadingTurnToLeft HeadingTurnToRight )
type HeadingType ¶ added in v0.14.0
type HeadingType int
const ( HeadingAssign HeadingType = iota HeadingTurnLeft HeadingTurnRight HeadingPresent )
type Hold ¶ added in v0.13.0
type Hold struct {
Fix string // Fix identifier where hold is located
InboundCourse math.MagneticHeading // Inbound magnetic course to the fix
TurnDirection TurnDirection
LegLengthNM float32 // Distance-based leg length (nautical miles), 0 if time-based
LegMinutes float32 // Time-based leg duration (minutes), 0 if distance-based
MinimumAltitude int // Minimum altitude for hold (feet)
MaximumAltitude int // Maximum altitude for hold (feet), 0 if no maximum
HoldingSpeed int // Speed limit in hold (knots), 0 if not specified
Procedure string // Associated procedure (e.g., "ILS06 (IAP)", "CAMRN5", "ENROUTE HIGH")
}
Hold represents a charted holding pattern from CIFP or HPF
func (Hold) DisplayName ¶ added in v0.13.0
func (Hold) Entry ¶ added in v0.13.0
func (h Hold) Entry(headingToFix math.MagneticHeading) HoldEntry
type InboundFlow ¶
type InboundFlow struct {
Arrivals []Arrival `json:"arrivals"`
Overflights []Overflight `json:"overflights"`
}
func (InboundFlow) HasHumanHandoff ¶ added in v0.13.3
func (f InboundFlow) HasHumanHandoff() bool
HasHumanHandoff returns true if any arrival or overflight in the flow has a waypoint with HumanHandoff set.
func (InboundFlow) InitialControllers ¶ added in v0.13.3
func (f InboundFlow) InitialControllers() []ControlPosition
InitialControllers returns a list of all initial controllers specified for arrivals and overflights in this flow.
type LetterSnippetFormatter ¶ added in v0.13.2
type LetterSnippetFormatter struct{}
func (LetterSnippetFormatter) Spoken ¶ added in v0.13.2
func (LetterSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (LetterSnippetFormatter) Validate ¶ added in v0.13.2
func (LetterSnippetFormatter) Validate(arg any) error
func (LetterSnippetFormatter) Written ¶ added in v0.13.2
func (LetterSnippetFormatter) Written(arg any) string
type LocalPool ¶
type LocalPool struct {
Initial *util.IntRangeSet
Available *util.IntRangeSet
Ranges [][2]Squawk
Backups string
FlightRules FlightRules
}
type LocalSquawkCodePool ¶
type LocalSquawkCodePool struct {
Pools map[string]LocalPool
BeaconCodeTable BeaconCodeTable
}
func MakeLocalSquawkCodePool ¶
func MakeLocalSquawkCodePool(spec LocalSquawkCodePoolSpecifier) *LocalSquawkCodePool
func (*LocalSquawkCodePool) Get ¶
func (p *LocalSquawkCodePool) Get(spec string, rules FlightRules, r *rand.Rand) (Squawk, FlightRules, error)
inbound rules are only used to choose a VFR/IFR pool if spec == ""
func (*LocalSquawkCodePool) InInitialPool ¶
func (p *LocalSquawkCodePool) InInitialPool(code Squawk) bool
func (*LocalSquawkCodePool) IsAssigned ¶
func (p *LocalSquawkCodePool) IsAssigned(code Squawk) bool
func (*LocalSquawkCodePool) IsReservedVFRCode ¶
func (p *LocalSquawkCodePool) IsReservedVFRCode(sq Squawk) bool
func (*LocalSquawkCodePool) Return ¶
func (p *LocalSquawkCodePool) Return(sq Squawk) error
type LocalSquawkCodePoolSpecifier ¶
type LocalSquawkCodePoolSpecifier struct {
Pools map[string]PoolSpecifier `json:"auto_assignable_codes"`
BeaconCodeTable BeaconCodeTableSpecifier `json:"beacon_code_table"`
}
SSR Codes Windows
func (*LocalSquawkCodePoolSpecifier) PostDeserialize ¶
func (s *LocalSquawkCodePoolSpecifier) PostDeserialize(e *util.ErrorLogger)
type Locator ¶
type Locator interface {
// Locate returns the lat-long coordinates of the named point if they
// are available; the bool indicates whether the point was known.
Locate(fix string) (math.Point2LL, bool)
// If Locate fails, Similar can be called to get alternatives that are
// similarly-spelled to be offered in error messages.
Similar(fix string) []string
}
Locator is a simple interface to abstract looking up the location of a named thing (e.g. a fix). This is mostly present so that the route code can call back into the ScenarioGroup to resolve locations accounting for fixes defined in a scenario, without exposing Scenario-related types to the aviation package.
type LookForFieldIntent ¶ added in v0.14.3
type LookForFieldIntent int
LookForFieldIntent represents a pilot's response to an AP (airport advisory) command.
const ( LookForFieldLooking LookForFieldIntent = iota LookForFieldLookingIMC LookForFieldLookingObscured LookForFieldFound )
func (LookForFieldIntent) Render ¶ added in v0.14.3
func (f LookForFieldIntent) Render(rt *RadioTransmission, r *rand.Rand)
type MVA ¶
type MVAExterior ¶
type MVAExterior struct {
LinearRing MVALinearRing `xml:"LinearRing"`
}
type MVAGrid ¶ added in v0.14.0
type MVAGrid struct {
// contains filtered or unexported fields
}
MVAGrid organizes MVA definitions and provides efficient lookups via a grid in lat-long space that records which MVAs overlap grid cells. Grid cells are initialized on demand rather than upfront.
func MakeMVAGrid ¶ added in v0.14.0
type MVAHorizontalProjection ¶
type MVAHorizontalProjection struct {
Surface MVASurface `xml:"Surface"`
}
type MVAInterior ¶
type MVAInterior struct {
LinearRing MVALinearRing `xml:"LinearRing"`
}
type MVALinearRing ¶
type MVALinearRing struct {
PosList string `xml:"posList"`
}
func (MVALinearRing) Vertices ¶
func (r MVALinearRing) Vertices() [][2]float32
type MVAPatches ¶
type MVAPatches struct {
PolygonPatch MVAPolygonPatch `xml:"PolygonPatch"`
}
type MVAPolygonPatch ¶
type MVAPolygonPatch struct {
Exterior MVAExterior `xml:"exterior"`
Interiors []MVAInterior `xml:"interior"`
}
type MVASurface ¶
type MVASurface struct {
Patches MVAPatches `xml:"patches"`
}
type MachSnippetFormatter ¶ added in v0.14.1
type MachSnippetFormatter struct{}
func (MachSnippetFormatter) Spoken ¶ added in v0.14.1
func (MachSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (MachSnippetFormatter) Validate ¶ added in v0.14.1
func (MachSnippetFormatter) Validate(arg any) error
func (MachSnippetFormatter) Written ¶ added in v0.14.1
func (MachSnippetFormatter) Written(arg any) string
type MagneticGrid ¶
type MapLibrary ¶ added in v0.14.4
type MapLibrary struct {
Maps map[string]STARSMap
ERAMMapGroups map[string]ERAMMapGroup
}
MapLibrary is the full in-memory representation of a video map file. STARS maps are keyed by Name (which is unique within a file); ERAM groups are keyed by group name.
func HashCheckLoadMapLibrary ¶ added in v0.14.4
func HashCheckLoadMapLibrary(path string, wantHash []byte) (*MapLibrary, error)
HashCheckLoadMapLibrary loads the file only if its hash matches.
func LoadMapLibrary ¶ added in v0.14.4
func LoadMapLibrary(path string) (*MapLibrary, error)
type MapLibrarySpec ¶ added in v0.14.4
type MapLibrarySpec struct {
// contains filtered or unexported fields
}
MapLibrarySpec carries everything server startup needs to validate scenario references without touching the geometry region. It also remembers the underlying file so callers can compute Hash() lazily.
func LoadMapLibrarySpec ¶ added in v0.14.4
func LoadMapLibrarySpec(path string) (*MapLibrarySpec, error)
LoadMapLibrarySpec opens a video map file and decodes only the metadata header, leaving the flate-compressed geometry region untouched.
func (*MapLibrarySpec) HasMap ¶ added in v0.14.4
func (s *MapLibrarySpec) HasMap(name string) bool
HasMap returns true if name matches a STARS map's Name, or matches the combined label of any ERAM map within any group.
func (*MapLibrarySpec) HasMapGroup ¶ added in v0.14.4
func (s *MapLibrarySpec) HasMapGroup(name string) bool
HasMapGroup returns true if name matches an ERAM group's name.
func (*MapLibrarySpec) Hash ¶ added in v0.14.4
func (s *MapLibrarySpec) Hash() ([]byte, error)
Hash returns a hash of the underlying video map file.
func (*MapLibrarySpec) STARSMapId ¶ added in v0.14.4
func (s *MapLibrarySpec) STARSMapId(name string) int
STARSMapId returns the STARS DCB Id for the named map. Returns 0 if the name is unknown or the map has no DCB Id assigned (0 is the sentinel for "no Id" since STARS commands reject Id 0 anyway).
type MapSymbol ¶ added in v0.14.4
type MapSymbol struct {
P math.Point2LL
Style SymbolStyle
Size uint8
BCGIndex uint8 // 0 = use the map's group BCG
}
type MixUpIntent ¶ added in v0.14.0
type MixUpIntent struct {
Callsign ADSBCallsign
IsEmergency bool
}
MixUpIntent represents pilot confusion about who was addressed
func (MixUpIntent) Render ¶ added in v0.14.0
func (m MixUpIntent) Render(rt *RadioTransmission, r *rand.Rand)
type NavigationIntent ¶ added in v0.14.0
type NavigationIntent struct {
}
NavigationIntent represents navigation commands (direct, hold, depart fix, etc.)
func (NavigationIntent) Render ¶ added in v0.14.0
func (n NavigationIntent) Render(rt *RadioTransmission, r *rand.Rand)
type NavigationRestriction ¶ added in v0.14.3
type NavigationRestriction struct {
}
NavigationRestriction is the shared base for altitude and speed restrictions. Range[0] is the floor, Range[1] is the ceiling. 0 means "no floor" (at or below); the type-specific max constant means "no ceiling" (at or above). Invariant: Range[0] <= Range[1].
func (NavigationRestriction) ClampRange ¶ added in v0.14.3
func (r NavigationRestriction) ClampRange(rng [2]float32) (c [2]float32, ok bool)
ClampRange limits a range to satisfy the restriction; the returned Boolean indicates whether the ranges overlapped.
func (NavigationRestriction) ExactValue ¶ added in v0.14.3
func (r NavigationRestriction) ExactValue() (float32, bool)
ExactValue returns the value if this is an "at" restriction (lo == hi), or false if it's a range.
func (NavigationRestriction) Satisfied ¶ added in v0.14.3
func (r NavigationRestriction) Satisfied(val float32) bool
Satisfied returns true if val complies with the restriction.
func (NavigationRestriction) Target ¶ added in v0.14.3
func (r NavigationRestriction) Target(val float32) float32
Target clamps val into the restriction's range.
type Overflight ¶
type Overflight struct {
Waypoints WaypointArray `json:"waypoints"`
InitialAltitudes util.SingleOrArray[int] `json:"initial_altitude"`
CruiseAltitudes util.SingleOrArray[int] `json:"cruise_altitude"`
AssignedAltitude float32 `json:"assigned_altitude"`
InitialSpeed float32 `json:"initial_speed"`
AssignedSpeed float32 `json:"assigned_speed"`
SpeedRestriction SpeedRestriction `json:"speed_restriction"`
InitialController ControlPosition `json:"initial_controller"`
Scratchpad string `json:"scratchpad"`
SecondaryScratchpad string `json:"secondary_scratchpad"`
Description string `json:"description"`
IsRNAV bool `json:"is_rnav"`
Airlines []OverflightAirline `json:"airlines"`
TypeOfFlightString string `json:"flight_type"`
TypeOfFlight TypeOfFlight // set via TypeOfFlightString
}
func (*Overflight) PostDeserialize ¶
func (of *Overflight) PostDeserialize(loc Locator, nmPerLongitude float32, magneticVariation float32, airports map[string]*Airport, controlPositions map[ControlPosition]*Controller, checkScratchpad func(string) bool, e *util.ErrorLogger)
type OverflightAirline ¶
type OverflightAirline struct {
AirlineSpecifier
DepartureAirport string `json:"departure_airport"`
ArrivalAirport string `json:"arrival_airport"`
}
type Path ¶ added in v0.14.1
type Path struct {
Segments []PathSegment
Length float32
}
Path represents a piecewise curve (line segments and circular arcs) in NM coordinates. Path direction follows aircraft travel direction: the first point is the far end, the last point is the convergence end (threshold/fix).
func PathFromReferenceLine ¶ added in v0.14.1
func PathFromReferenceLine(refPoint math.Point2LL, heading math.MagneticHeading, length, nmPerLongitude, magneticVariation float32) Path
PathFromReferenceLine creates a Path from a straight reference line defined by a reference point, heading, and length. The path goes from far end toward the reference point (matching the aircraft travel direction convention).
func PathFromRoutePoints ¶ added in v0.14.1
func PathFromRoutePoints(pts []CRDARoutePoint, nmPerLongitude float32) Path
PathFromRoutePoints creates a Path from resolved CRDA route points. Consecutive point pairs become segments, using pt.Arc for arc segments.
func (*Path) PointAtDistance ¶ added in v0.14.1
PointAtDistance returns the point and heading at a given distance along the path. If dist exceeds the path length, the path is extended linearly along the last segment's final heading. If dist is negative, the path is extended linearly backwards from the first segment.
func (*Path) Polyline ¶ added in v0.14.1
Polyline returns a polyline approximation of the path for drawing. Arc segments are sampled at approximately 1-degree intervals.
type PathSegment ¶ added in v0.14.1
type PhraseFormatString ¶ added in v0.13.2
type PhraseFormatString string
PhraseFormatString is a string that potentially includes
func (PhraseFormatString) Spoken ¶ added in v0.13.2
func (s PhraseFormatString) Spoken(r *rand.Rand, args []any) string
type PoolSpecifier ¶
type ProcedureIntent ¶ added in v0.14.0
type ProcedureIntent struct {
Type ProcedureType
}
ProcedureIntent represents climb via SID / descend via STAR
func (ProcedureIntent) Render ¶ added in v0.14.0
func (p ProcedureIntent) Render(rt *RadioTransmission, r *rand.Rand)
type ProcedureTurn ¶
type ProcedureType ¶ added in v0.14.0
type ProcedureType int
const ( ProcedureClimbViaSID ProcedureType = iota ProcedureDescendViaSTAR )
type RadarSite ¶
type RadarSite struct {
Char string `json:"char"`
PositionString string `json:"position"`
Position math.Point2LL // not in JSON, set during deserialize
Elevation int32 `json:"elevation"`
PrimaryRange int32 `json:"primary_range"`
SecondaryRange int32 `json:"secondary_range"`
SlopeAngle float32 `json:"slope_angle"`
SilenceAngle float32 `json:"silence_angle"`
}
type RadarTrack ¶
type RadarTrack struct {
ADSBCallsign ADSBCallsign
Squawk Squawk
Mode TransponderMode
Ident bool
TrueAltitude float32
TransponderAltitude float32
Location math.Point2LL
Heading math.MagneticHeading
Groundspeed float32
TypeOfFlight TypeOfFlight
}
type RadioTransmission ¶ added in v0.13.2
type RadioTransmission struct {
Strings []PhraseFormatString
Args [][]any // each slice contains values passed to the corresponding PhraseFormatString
Type RadioTransmissionType
}
RadioTransmission holds components that together represent a single radio transmission by a pilot; they may be built up from multiple instructions provided in a single controller command.
func MakeContactTransmission ¶ added in v0.13.2
func MakeContactTransmission(s string, args ...any) *RadioTransmission
MakeContactRadioTransmission is a helper function to make a pilot transmission for initial contact from a single formatting string and set of arguments.
func MakeReadbackTransmission ¶ added in v0.13.2
func MakeReadbackTransmission(s string, args ...any) *RadioTransmission
MakeReadbackTransmission is a helper function to make a pilot transmission of a readback from a single formatting string and set of arguments.
func RenderIntents ¶ added in v0.14.0
func RenderIntents(intents []CommandIntent, r *rand.Rand) *RadioTransmission
RenderIntents converts a slice of CommandIntents into a single coherent RadioTransmission. It handles merging related intents (e.g., altitude + expedite), PTACs, etc., for more realistic readbacks.
func (*RadioTransmission) Add ¶ added in v0.13.2
func (rt *RadioTransmission) Add(s string, args ...any)
Add is a convenience function to add a transmission snippet to the RadioTransmission. It's more or less equivalent to calling Merge(MakeRadioTransmission(...)).
func (*RadioTransmission) Merge ¶ added in v0.13.2
func (rt *RadioTransmission) Merge(r *RadioTransmission)
Merge takes a separately-constructed RadioTransmission and merges its contents with the current one.
func (RadioTransmission) Spoken ¶ added in v0.13.2
func (rt RadioTransmission) Spoken(r *rand.Rand) string
Spoken returns a string corresponding to how the transmission should be spoken, which appropriate phonetic substitutions made (e.g. "9" -> "niner").
func (*RadioTransmission) Validate ¶ added in v0.13.2
func (rt *RadioTransmission) Validate(lg *log.Logger)
Validate ensures that the types of arguments match with the formatting directives in the PhraseFormatStrings; errors are logged to the provided logger.
type RadioTransmissionType ¶
type RadioTransmissionType int
func (RadioTransmissionType) String ¶
func (r RadioTransmissionType) String() string
type ReportAltitudeIntent ¶ added in v0.14.0
type ReportAltitudeIntent struct {
Current float32
Assigned *float32
Direction AltitudeDirection // if climbing/descending
}
ReportAltitudeIntent represents "say altitude" responses
func (ReportAltitudeIntent) Render ¶ added in v0.14.0
func (r ReportAltitudeIntent) Render(rt *RadioTransmission, rnd *rand.Rand)
type ReportHeadingIntent ¶ added in v0.14.0
type ReportHeadingIntent struct {
Current math.MagneticHeading
Assigned *math.MagneticHeading
}
ReportHeadingIntent represents "say heading" responses
func (ReportHeadingIntent) Render ¶ added in v0.14.0
func (r ReportHeadingIntent) Render(rt *RadioTransmission, rnd *rand.Rand)
type ReportMachIntent ¶ added in v0.14.1
type ReportMachIntent struct {
Current float32 // current mach (e.g., 0.78)
Assigned *float32 // assigned mach, if any
}
ReportMachIntent represents "say mach" or mach-regime "say speed" responses
func (ReportMachIntent) Render ¶ added in v0.14.1
func (r ReportMachIntent) Render(rt *RadioTransmission, rnd *rand.Rand)
type ReportSpeedIntent ¶ added in v0.14.0
ReportSpeedIntent represents "say speed" responses (IAS)
func (ReportSpeedIntent) Render ¶ added in v0.14.0
func (r ReportSpeedIntent) Render(rt *RadioTransmission, rnd *rand.Rand)
type ReportingPoint ¶
type RestrictionArea ¶
type RestrictionArea struct {
Title string `json:"title"`
Text [2]string `json:"text"`
BlinkingText bool `json:"blinking_text"`
HideId bool `json:"hide_id"`
TextPosition math.Point2LL `json:"text_position"`
CircleCenter math.Point2LL `json:"circle_center"`
CircleRadius float32 `json:"circle_radius"`
VerticesUser WaypointArray `json:"vertices"`
Vertices [][]math.Point2LL
Closed bool `json:"closed"`
Shaded bool `json:"shade_region"`
Color int `json:"color"`
Tris [][3]math.Point2LL
}
func RestrictionAreaFromTFR ¶
func RestrictionAreaFromTFR(tfr TFR) RestrictionArea
func (*RestrictionArea) AverageVertexPosition ¶
func (ra *RestrictionArea) AverageVertexPosition() math.Point2LL
func (*RestrictionArea) MoveTo ¶
func (ra *RestrictionArea) MoveTo(p math.Point2LL)
func (*RestrictionArea) UpdateTriangles ¶
func (ra *RestrictionArea) UpdateTriangles()
type RouteGenerator ¶
type RouteGenerator struct {
// contains filtered or unexported fields
}
RouteGenerator is a utility class for describing lateral routes with respect to a local coordinate system. The user provides two points (generally the endpoints of a runway) which are then at (-1,0) and (1,0) in the coordinate system. The y axis is perpendicular to the vector between the two points and points to the left of it. (Thus, note that lengths in the two dimensions are different.)
func MakeRouteGenerator ¶
func MakeRouteGenerator(p0ll, p1ll math.Point2LL, nmPerLongitude float32) RouteGenerator
type RouteRayIntersection ¶ added in v0.14.3
type RouteRayIntersection struct {
math.RayRouteIntersection
RouteIndex int
}
RouteRayIntersection extends math.RayRouteIntersection with the index of the WaypointArray the hit falls on.
func ClosestRayRouteIntersection ¶ added in v0.14.3
func ClosestRayRouteIntersection(origin math.Point2LL, heading math.TrueHeading, routes []WaypointArray) (RouteRayIntersection, bool)
ClosestRayRouteIntersection returns the hit with the smallest distance from origin across all supplied routes.
func IntersectRayWithRoutes ¶ added in v0.14.3
func IntersectRayWithRoutes(origin math.Point2LL, heading math.TrueHeading, routes []WaypointArray) []RouteRayIntersection
IntersectRayWithRoutes runs math.IntersectRayWithRoute on each entry in routes and returns all hits. Callers apply their own scoring (closest, earliest, turn-angle tiers, etc.).
type Runway ¶
type Runway struct {
Id string
Heading math.MagneticHeading
Threshold math.Point2LL
ThresholdCrossingHeight int // delta from elevation
Elevation int
DisplacedThresholdDistance float32 // in nm
}
func LookupOppositeRunway ¶
func LookupRunway ¶
type RunwayID ¶ added in v0.14.1
type RunwayID string
RunwayID is a runway identifier that may include a dot-separated suffix (e.g., "13R.All"). Use Base() for physical runway lookups/comparisons.
func (RunwayID) SameRunway ¶ added in v0.14.1
type RunwaySnippetFormatter ¶ added in v0.14.0
type RunwaySnippetFormatter struct{}
func (RunwaySnippetFormatter) Spoken ¶ added in v0.14.0
func (RunwaySnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (RunwaySnippetFormatter) Validate ¶ added in v0.14.0
func (RunwaySnippetFormatter) Validate(arg any) error
func (RunwaySnippetFormatter) Written ¶ added in v0.14.0
func (RunwaySnippetFormatter) Written(arg any) string
type SIDSnippetFormatter ¶ added in v0.13.2
type SIDSnippetFormatter struct{}
func (SIDSnippetFormatter) Spoken ¶ added in v0.13.2
func (SIDSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (SIDSnippetFormatter) Validate ¶ added in v0.13.2
func (SIDSnippetFormatter) Validate(arg any) error
func (SIDSnippetFormatter) Written ¶ added in v0.13.2
func (s SIDSnippetFormatter) Written(arg any) string
type SPC ¶
SPC (Special Purpose Code) is a unique beacon code, indicate an emergency or non-standard operation.
type STAR ¶
type STAR struct {
Transitions map[string]WaypointArray
RunwayWaypoints map[string]WaypointArray
}
func (STAR) Check ¶
func (s STAR) Check(e *util.ErrorLogger)
type STARSMap ¶ added in v0.14.4
type STARSMap struct {
Name string
Label string // DCB button label
Id int // user-visible STARS map number; 0 = no DCB id
Group int // 0 = A, 1 = B
Category int // -1..9
Color int // 0..8
Lines []MapLine
Symbols []MapSymbol
Labels []MapLabel
}
STARSMap is the runtime representation of a single STARS-side video map. Lines/Symbols/Labels are populated by the full library loader and left nil by the metadata-only spec loader.
type STARSnippetFormatter ¶ added in v0.13.2
type STARSnippetFormatter struct{}
func (STARSnippetFormatter) Spoken ¶ added in v0.13.2
func (STARSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (STARSnippetFormatter) Validate ¶ added in v0.13.2
func (STARSnippetFormatter) Validate(arg any) error
func (STARSnippetFormatter) Written ¶ added in v0.13.2
func (s STARSnippetFormatter) Written(arg any) string
type SayAgainCommandType ¶ added in v0.14.0
type SayAgainCommandType int
SayAgainCommandType identifies which type of command the pilot is asking to be repeated.
const ( SayAgainHeading SayAgainCommandType = iota SayAgainAltitude SayAgainSpeed SayAgainApproach SayAgainTurn SayAgainSquawk SayAgainFix )
type SayAgainIntent ¶ added in v0.14.0
type SayAgainIntent struct {
CommandType SayAgainCommandType
}
SayAgainIntent represents a pilot requesting the controller repeat part of a clearance. This is used when STT successfully identifies a command keyword but fails to parse the associated value (e.g., "fly heading blark bling five").
func (SayAgainIntent) Render ¶ added in v0.14.0
func (s SayAgainIntent) Render(rt *RadioTransmission, r *rand.Rand)
type SnippetFormatter ¶ added in v0.13.2
type SnippetFormatter interface {
// Written
Written(arg any) string
Spoken(r *rand.Rand, arg any) string
Validate(arg any) error
}
SnippetFormatter defines an interface for formatting short text snippets corresponding to various aviation-related concepts into both speech and text. Each is takes a single value specifying the value of the corresponding thing (altitude, speed, etc.)
type SpeedIntent ¶ added in v0.14.0
type SpeedIntent struct {
Speed float32
Type SpeedType
AfterAltitude *float32 // speed change conditional on reaching this altitude
AfterFix string // speed change conditional on passing this fix
Until *SpeedUntil // what the speed restriction is "until"
Mach bool
// UntilFinalDirection is consulted only when Type == SpeedUntilFinal and
// Until == nil, so the readback can pick reduce/increase/assign-flavored
// phrasing. Expected values: SpeedReduce, SpeedIncrease, SpeedAssign.
UntilFinalDirection SpeedType
}
SpeedIntent represents speed assignment commands
func (SpeedIntent) Render ¶ added in v0.14.0
func (s SpeedIntent) Render(rt *RadioTransmission, r *rand.Rand)
type SpeedRestriction ¶ added in v0.14.3
type SpeedRestriction struct {
IsMach bool
}
func MakeAtOrAboveSpeedRestriction ¶ added in v0.14.3
func MakeAtOrAboveSpeedRestriction(speed float32) SpeedRestriction
func MakeAtOrBelowSpeedRestriction ¶ added in v0.14.3
func MakeAtOrBelowSpeedRestriction(speed float32) SpeedRestriction
func MakeAtSpeedRestriction ¶ added in v0.14.3
func MakeAtSpeedRestriction(speed float32) SpeedRestriction
func MakeMachRestriction ¶ added in v0.14.3
func MakeMachRestriction(mach float32) SpeedRestriction
func MakeRangeSpeedRestriction ¶ added in v0.14.3
func MakeRangeSpeedRestriction(low, high float32) SpeedRestriction
func ParseSpeedRestriction ¶ added in v0.14.3
func ParseSpeedRestriction(s string) (*SpeedRestriction, error)
ParseSpeedRestriction parses a speed restriction from compact text form: "210", "210+", "210-", "180-210".
func (SpeedRestriction) CheckJSON ¶ added in v0.14.3
func (s SpeedRestriction) CheckJSON(json any) bool
CheckJSON implements util.JSONChecker so the JSON type checker accepts plain numbers and strings in addition to the struct form.
func (SpeedRestriction) Encoded ¶ added in v0.14.3
func (s SpeedRestriction) Encoded() string
Encoded returns the restriction in compact text form, e.g. "210+", "250-", "210".
func (SpeedRestriction) IsZero ¶ added in v0.14.3
func (s SpeedRestriction) IsZero() bool
IsZero returns true if the speed restriction is unset.
func (*SpeedRestriction) UnmarshalJSON ¶ added in v0.14.3
func (s *SpeedRestriction) UnmarshalJSON(b []byte) error
type SpeedSnippetFormatter ¶ added in v0.13.2
type SpeedSnippetFormatter struct{}
func (SpeedSnippetFormatter) Spoken ¶ added in v0.13.2
func (SpeedSnippetFormatter) Spoken(r *rand.Rand, arg any) string
func (SpeedSnippetFormatter) Validate ¶ added in v0.13.2
func (SpeedSnippetFormatter) Validate(arg any) error
func (SpeedSnippetFormatter) Written ¶ added in v0.13.2
func (SpeedSnippetFormatter) Written(arg any) string
type SpeedUntil ¶ added in v0.14.0
type SpeedUntil struct {
Fix string // fix name (e.g., "ROSLY")
DME int // DME distance (e.g., 5 for "5 DME")
MileFinal int // mile final (e.g., 6 for "6 mile final")
}
SpeedUntil specifies when a speed restriction ends. Only one field should be set at a time.
type Squawk ¶
type Squawk int
func ParseSquawk ¶
func ParseSquawkOrBlock ¶
type StaticDatabase ¶
type StaticDatabase struct {
Airports map[string]FAAAirport
Fixes map[string]Fix
Airways map[string][]Airway
EnrouteHolds map[string][]Hold // Fix -> Holds
TerminalHolds map[string]map[string][]Hold // Airport ICAO -> Fix -> Holds
Callsigns map[string]string // 3 letter -> callsign
AircraftTypeAliases map[string]string
AircraftPerformance map[string]AircraftPerformance
Airlines map[string]Airline
MagneticGrid MagneticGrid
ARTCCs map[string]ARTCC
TRACONs map[string]TRACON
ATCTs map[string]ATCT
MVAs map[string][]MVA // TRACON -> MVAs
ERAMAdaptations map[string]ERAMAdaptation
BravoAirspace map[string][]AirspaceVolume
CharlieAirspace map[string][]AirspaceVolume
DeltaAirspace map[string][]AirspaceVolume
}
var DB *StaticDatabase
func (StaticDatabase) ARTCCForFacility ¶ added in v0.14.4
func (d StaticDatabase) ARTCCForFacility(fac string) string
ARTCCForFacility returns the ARTCC identifier for the given facility: the id itself if it is an ARTCC, the parent ARTCC for a TRACON or ATCT, or "" if the id is unknown.
func (StaticDatabase) IsARTCC ¶ added in v0.14.1
func (d StaticDatabase) IsARTCC(id string) bool
func (StaticDatabase) IsATCT ¶ added in v0.14.1
func (d StaticDatabase) IsATCT(id string) bool
func (StaticDatabase) IsFacility ¶ added in v0.14.0
func (d StaticDatabase) IsFacility(id string) bool
IsFacility returns true if id is a known ARTCC, TRACON, or ATCT.
func (StaticDatabase) IsTRACON ¶ added in v0.14.1
func (d StaticDatabase) IsTRACON(id string) bool
func (StaticDatabase) LookupAirport ¶ added in v0.13.3
func (d StaticDatabase) LookupAirport(name string) (FAAAirport, bool)
func (StaticDatabase) LookupFacility ¶ added in v0.14.0
func (d StaticDatabase) LookupFacility(id string) (Facility, bool)
LookupFacility returns a Facility for the given id, checking TRACONs, ATCTs, and ARTCCs.
func (StaticDatabase) LookupWaypoint ¶
func (d StaticDatabase) LookupWaypoint(f string) (math.Point2LL, bool)
type SymbolStyle ¶ added in v0.14.4
type SymbolStyle uint8
const ( SymbolStyleVOR SymbolStyle = iota SymbolStyleNDB SymbolStyleTACAN SymbolStyleVOR_TACAN SymbolStyleDME SymbolStyleRNAV SymbolStyleRNAVOnlyWaypoint SymbolStyleAirport SymbolStyleSatelliteAirport SymbolStyleEmergencyAirport SymbolStyleHeliport SymbolStyleOtherWaypoints SymbolStyleAirwayIntersections SymbolStyleIAF SymbolStyleObstruction1 SymbolStyleObstruction2 SymbolStyleNuclear SymbolStyleRadar )
Symbol style values must be stable across releases — they're written to disk as raw bytes. Add new values at the end; do not renumber.
func (SymbolStyle) String ¶ added in v0.14.4
func (s SymbolStyle) String() string
type TFR ¶
type TFR struct {
ARTCC string
Type string // VIP, SECURITY, EVENT, etc.
LocalName string // Short string summarizing it.
Effective time.Time
Expire time.Time
Points [][]math.Point2LL // One or more line loops defining its extent.
Regulation string // Raw FAR code, e.g. "91.137(a)(2)"
City string
State string
AltDescr string // Pre-formatted altitude description, e.g. "SFC - 2500 ft AGL"
Purpose string // May be empty; not all TFR types include it.
}
TFR represents an FAA-issued temporary flight restriction.
func DecodeTFRXML ¶ added in v0.14.2
DecodeTFRXML takes an XML-formatted TFR and converts it to our struct.
type Temperature ¶ added in v0.14.2
type Temperature struct {
// contains filtered or unexported fields
}
Temperature represents a temperature value with explicit unit safety. Internally stored as Celsius; use Celsius() or Kelvin() to access. JSON and msgpack serialize as a plain float in Celsius for wire compatibility.
func MakeTemperatureFromCelsius ¶ added in v0.14.2
func MakeTemperatureFromCelsius(c float32) Temperature
func MakeTemperatureFromKelvin ¶ added in v0.14.2
func MakeTemperatureFromKelvin(k float32) Temperature
func (Temperature) Celsius ¶ added in v0.14.2
func (t Temperature) Celsius() float32
func (Temperature) Kelvin ¶ added in v0.14.2
func (t Temperature) Kelvin() float32
func (Temperature) MarshalJSON ¶ added in v0.14.2
func (t Temperature) MarshalJSON() ([]byte, error)
func (Temperature) MarshalMsgpack ¶ added in v0.14.2
func (t Temperature) MarshalMsgpack() ([]byte, error)
func (*Temperature) UnmarshalJSON ¶ added in v0.14.2
func (t *Temperature) UnmarshalJSON(data []byte) error
func (*Temperature) UnmarshalMsgpack ¶ added in v0.14.2
func (t *Temperature) UnmarshalMsgpack(data []byte) error
type TrafficAdvisoryIntent ¶ added in v0.14.0
type TrafficAdvisoryIntent struct {
Response TrafficAdvisoryResponse
WillMaintainSeparation bool // If true, add "will maintain visual separation"
}
TrafficAdvisoryIntent represents a pilot's response to a traffic advisory
func (TrafficAdvisoryIntent) Render ¶ added in v0.14.0
func (t TrafficAdvisoryIntent) Render(rt *RadioTransmission, r *rand.Rand)
func (TrafficAdvisoryIntent) String ¶ added in v0.14.3
func (t TrafficAdvisoryIntent) String() string
type TrafficAdvisoryResponse ¶ added in v0.14.0
type TrafficAdvisoryResponse int
TrafficAdvisoryResponse represents the pilot's response to a traffic advisory
const ( TrafficResponseIMC TrafficAdvisoryResponse = iota // In IMC, can't see traffic TrafficResponseLooking // No traffic visible, will look TrafficResponseTrafficSeen // Traffic is in sight TrafficResponseAcknowledged // Other traffic is maintaining visual separation TrafficResponseWhereWasIt // Pilot asks the controller to repeat the traffic call )
type TransponderIntent ¶ added in v0.14.0
type TransponderIntent struct {
Code *Squawk
Mode *TransponderMode
Ident bool
}
TransponderIntent represents squawk/ident/mode commands
func (TransponderIntent) Render ¶ added in v0.14.0
func (t TransponderIntent) Render(rt *RadioTransmission, r *rand.Rand)
type TransponderMode ¶
type TransponderMode int
const ( TransponderModeStandby TransponderMode = iota /* off */ TransponderModeAltitude /* mode C */ TransponderModeOn /* mode A */ )
func (TransponderMode) String ¶
func (t TransponderMode) String() string
type TransponderType ¶ added in v0.14.0
type TransponderType int
type TurnDirection ¶ added in v0.13.0
type TurnDirection math.TurnDirection
TurnDirection specifies the direction of a turn.
const ( TurnClosest TurnDirection = TurnDirection(math.TurnClosest) // default: turn the shortest direction TurnLeft TurnDirection = TurnDirection(math.TurnLeft) TurnRight TurnDirection = TurnDirection(math.TurnRight) )
func (TurnDirection) String ¶ added in v0.13.0
func (t TurnDirection) String() string
type TypeOfFlight ¶
type TypeOfFlight int
const ( FlightTypeUnknown TypeOfFlight = iota FlightTypeDeparture FlightTypeArrival FlightTypeOverflight )
type UnableIntent ¶ added in v0.14.0
UnableIntent represents a pilot's "unable" response to a command. It is rendered as RadioTransmissionUnexpected and does not merge with other intents.
func MakeUnableIntent ¶ added in v0.14.0
func MakeUnableIntent(message string, args ...any) UnableIntent
func (UnableIntent) Render ¶ added in v0.14.0
func (u UnableIntent) Render(rt *RadioTransmission, r *rand.Rand)
type VFRRandomsSpec ¶
type VFRReportingPoint ¶
type VFRReportingPoint struct {
Description string `json:"description"`
Location math.Point2LL `json:"location"`
}
func (*VFRReportingPoint) PostDeserialize ¶
func (rp *VFRReportingPoint) PostDeserialize(loc Locator, controllers map[ControlPosition]*Controller, e *util.ErrorLogger)
type VFRRouteSpec ¶
type VisualSeparationIntent ¶ added in v0.14.0
type VisualSeparationIntent struct{}
VisualSeparationIntent represents a pilot's acknowledgment of visual separation responsibility
func (VisualSeparationIntent) Render ¶ added in v0.14.0
func (v VisualSeparationIntent) Render(rt *RadioTransmission, r *rand.Rand)
type Waypoint ¶
type Waypoint struct {
Fix string `json:"fix"`
Location math.Point2LL `json:"location,omitempty"`
AltRestriction AltitudeRestriction // valid iff WaypointFlagHasAltRestriction set
SpdRestriction SpeedRestriction // valid iff WaypointFlagHasSpeedRestriction set
Extra *WaypointExtra
Flags WaypointFlags
Heading int16 // 0 = unset
VFRPhase uint8 // VFRPhaseNone for non-VFR-pattern waypoints
}
Waypoint is the core waypoint struct. Most waypoints only use Fix, Location, and a few flags; Extra fields are heap-allocated only when needed. AltRestriction, Heading, and SpdRestriction are inline because they are used by ~48% of waypoints, avoiding a heap allocation for those.
func (Waypoint) ActionEvent ¶ added in v0.14.3
func (wp Waypoint) ActionEvent() *WaypointActionEvent
func (Waypoint) ActionGroups ¶ added in v0.14.3
func (wp Waypoint) ActionGroups() []WaypointActionGroup
func (Waypoint) AirworkMinutes ¶
func (Waypoint) AirworkRadius ¶
func (*Waypoint) AltitudeRestriction ¶
func (wp *Waypoint) AltitudeRestriction() *AltitudeRestriction
AltitudeRestriction returns a pointer to the inline restriction if the flag is set, else nil.
func (*Waypoint) ClearAltitudeRestriction ¶ added in v0.14.3
func (wp *Waypoint) ClearAltitudeRestriction()
ClearAltitudeRestriction removes the inline restriction and clears the flag.
func (Waypoint) ClearApproach ¶
func (Waypoint) ClearPrimaryScratchpad ¶
func (Waypoint) ClearSecondaryScratchpad ¶
func (*Waypoint) ClearSpeedRestriction ¶ added in v0.14.3
func (wp *Waypoint) ClearSpeedRestriction()
ClearSpeedRestriction removes the inline restriction and clears the flag.
func (Waypoint) ClimbAltitude ¶ added in v0.13.0
func (Waypoint) DescendAltitude ¶ added in v0.13.0
func (Waypoint) GoAroundContactController ¶ added in v0.14.1
func (wp Waypoint) GoAroundContactController() ControlPosition
func (Waypoint) HandoffController ¶ added in v0.13.3
func (wp Waypoint) HandoffController() ControlPosition
func (Waypoint) HasAltitudeRestriction ¶ added in v0.14.3
func (Waypoint) HasSpeedRestriction ¶ added in v0.14.3
func (Waypoint) HasTransferCommsAction ¶ added in v0.14.3
func (Waypoint) HeadingIsTrack ¶ added in v0.14.2
func (Waypoint) HumanHandoff ¶
func (*Waypoint) InitExtra ¶ added in v0.14.1
func (wp *Waypoint) InitExtra() *WaypointExtra
InitExtra allocates Extra if nil and returns it.
func (Waypoint) InterceptApproach ¶ added in v0.14.4
func (Waypoint) MagneticHeading ¶ added in v0.14.2
func (wp Waypoint) MagneticHeading() math.MagneticHeading
MagneticHeading returns the waypoint's heading as MagneticHeading.
func (Waypoint) OnApproach ¶
func (Waypoint) PointOut ¶
func (wp Waypoint) PointOut() ControlPosition
func (Waypoint) PresentHeading ¶
Flag readers (value receiver)
func (Waypoint) PrimaryScratchpad ¶
func (Waypoint) ProcedureTurn ¶
func (wp Waypoint) ProcedureTurn() *ProcedureTurn
Extra field readers (value receiver, nil-safe)
func (Waypoint) SecondaryScratchpad ¶
func (Waypoint) SequenceVFRLanding ¶ added in v0.14.2
func (*Waypoint) SetAltitudeRestriction ¶ added in v0.14.1
func (wp *Waypoint) SetAltitudeRestriction(ar AltitudeRestriction)
SetAltitudeRestriction stores the restriction inline and sets the flag.
func (*Waypoint) SetClearApproach ¶ added in v0.14.1
func (*Waypoint) SetClearPrimaryScratchpad ¶ added in v0.14.1
func (*Waypoint) SetClearSecondaryScratchpad ¶ added in v0.14.1
func (*Waypoint) SetFlyOver ¶ added in v0.14.1
func (*Waypoint) SetHumanHandoff ¶ added in v0.14.1
func (*Waypoint) SetInterceptApproach ¶ added in v0.14.4
func (*Waypoint) SetOnApproach ¶ added in v0.14.1
func (*Waypoint) SetPresentHeading ¶ added in v0.14.1
func (*Waypoint) SetSequenceVFRLanding ¶ added in v0.14.2
func (*Waypoint) SetSpeedRestriction ¶ added in v0.14.3
func (wp *Waypoint) SetSpeedRestriction(sr SpeedRestriction)
SetSpeedRestriction stores the restriction inline and sets the flag.
func (*Waypoint) SetSyntheticCrossing ¶ added in v0.14.3
func (*Waypoint) SetTransferComms ¶ added in v0.14.1
func (*Waypoint) SetTurn ¶ added in v0.14.1
func (wp *Waypoint) SetTurn(t TurnDirection)
func (*Waypoint) SpeedRestriction ¶ added in v0.14.3
func (wp *Waypoint) SpeedRestriction() *SpeedRestriction
SpeedRestriction returns a pointer to the inline restriction if the flag is set, else nil.
func (Waypoint) SyntheticCrossing ¶ added in v0.14.3
func (Waypoint) TransferComms ¶
func (Waypoint) Turn ¶ added in v0.14.0
func (wp Waypoint) Turn() TurnDirection
func (Waypoint) WaypointActions ¶ added in v0.14.3
func (wp Waypoint) WaypointActions() WaypointActions
type WaypointActionEvent ¶ added in v0.14.3
type WaypointActionEvent struct {
Fix string
Actions WaypointActions
}
type WaypointActionGroup ¶ added in v0.14.3
type WaypointActionGroup struct {
Actions WaypointActions
Until WaypointActionTermination
}
func (WaypointActionGroup) Encoded ¶ added in v0.14.3
func (wag WaypointActionGroup) Encoded() string
type WaypointActionTermination ¶ added in v0.14.3
type WaypointActionTermination struct {
Type WaypointActionTerminationType
Altitude int
DMEFix string
DMEDistance float32
DMEFixLocation math.Point2LL
DMEFixElevation int
}
WaypointActionTermination describes a non-fix condition for advancing to the next waypoint action group.
type WaypointActionTerminationType ¶ added in v0.14.3
type WaypointActionTerminationType int
WaypointActionTerminationType indicates when a waypoint action group is complete.
const ( WaypointActionNoTermination WaypointActionTerminationType = iota WaypointActionAltitude WaypointActionDME )
type WaypointActions ¶ added in v0.14.3
type WaypointActions struct {
Heading *WaypointHeadingAction
HumanHandoff bool
HandoffController ControlPosition
PointOut ControlPosition
ClearApproach bool
GoAroundContactController ControlPosition
PrimaryScratchpad string
ClearPrimaryScratchpad bool
SecondaryScratchpad string
ClearSecondaryScratchpad bool
TransferComms bool
ClimbAltitude int16 // hundreds of feet; 0 = unset
DescendAltitude int16 // hundreds of feet; 0 = unset
}
WaypointActions describes actions that take effect together after passing a waypoint or after an ordered action group's termination condition is met.
func (WaypointActions) Encoded ¶ added in v0.14.3
func (wa WaypointActions) Encoded() string
func (WaypointActions) HasNavActions ¶ added in v0.14.3
func (wa WaypointActions) HasNavActions() bool
func (WaypointActions) HasSimActions ¶ added in v0.14.3
func (wa WaypointActions) HasSimActions() bool
type WaypointArray ¶
type WaypointArray []Waypoint
func (WaypointArray) CheckArrival ¶
func (wa WaypointArray) CheckArrival(e *util.ErrorLogger, ctrl map[ControlPosition]*Controller, approachAssigned bool, checkScratchpad func(string) bool)
func (WaypointArray) CheckDeparture ¶
func (wa WaypointArray) CheckDeparture(e *util.ErrorLogger, controllers map[ControlPosition]*Controller, checkScratchpads func(string) bool)
func (WaypointArray) CheckOverflight ¶
func (wa WaypointArray) CheckOverflight(e *util.ErrorLogger, ctrl map[ControlPosition]*Controller, checkScratchpads func(string) bool)
func (WaypointArray) Encode ¶
func (wa WaypointArray) Encode() string
func (WaypointArray) HasHumanHandoff ¶ added in v0.13.3
func (wa WaypointArray) HasHumanHandoff() bool
HasHumanHandoff returns true if any waypoint has HumanHandoff set.
func (WaypointArray) InitializeLocations ¶
func (wa WaypointArray) InitializeLocations(loc Locator, nmPerLongitude float32, magneticVariation float32, allowSlop bool, e *util.ErrorLogger) WaypointArray
func (WaypointArray) RouteString ¶
func (wa WaypointArray) RouteString() string
func (*WaypointArray) UnmarshalJSON ¶
func (wa *WaypointArray) UnmarshalJSON(b []byte) error
type WaypointExtra ¶ added in v0.14.1
type WaypointExtra struct {
ProcedureTurn *ProcedureTurn
Arc *DMEArc
ActionGroups []WaypointActionGroup
HandoffController ControlPosition
PointOut ControlPosition
GoAroundContactController ControlPosition
Airway string
PrimaryScratchpad string
SecondaryScratchpad string
Radius float32
Shift float32
ClimbAltitude int16 // hundreds of feet; 0 = unset
DescendAltitude int16 // hundreds of feet; 0 = unset
AirworkRadius int8
AirworkMinutes int8
}
WaypointExtra holds the rarely-used fields, heap-allocated only when needed.
type WaypointFlags ¶ added in v0.14.1
type WaypointFlags uint32
const ( WaypointFlagPresentHeading WaypointFlags = 1 << iota WaypointFlagNoPT WaypointFlagHumanHandoff WaypointFlagClearApproach WaypointFlagFlyOver WaypointFlagDelete WaypointFlagLand WaypointFlagIAF WaypointFlagIF WaypointFlagFAF WaypointFlagOnSID WaypointFlagOnSTAR WaypointFlagOnApproach WaypointFlagClearPrimaryScratchpad WaypointFlagClearSecondaryScratchpad WaypointFlagTransferComms WaypointFlagTurnLeft WaypointFlagTurnRight WaypointFlagSyntheticCrossing WaypointFlagHasAltRestriction WaypointFlagHasSpeedRestriction WaypointFlagSequenceVFRLanding WaypointFlagHeadingIsTrack WaypointFlagInterceptApproach )
type WaypointHeadingAction ¶ added in v0.14.3
type WaypointHeadingAction struct {
Heading int16
Turn TurnDirection
Track bool
PresentHeading bool
}
func (WaypointHeadingAction) Encoded ¶ added in v0.14.3
func (wha WaypointHeadingAction) Encoded() string
type XNOTAMUpdate ¶
type XNOTAMUpdate struct {
Group struct {
Add struct {
Not struct {
NotUid struct {
TxtLocalName string `xml:"txtLocalName"`
DateIssued string `xml:"dateIssued"`
} `xml:"NotUid"`
DateEffective string `xml:"dateEffective"`
DateExpire string `xml:"dateExpire"`
CodeTimeZone string `xml:"codeTimeZone"`
CodeExpirationTimeZone string `xml:"codeExpirationTimeZone"`
CodeFacility string `xml:"codeFacility"`
TxtDescrPurpose string `xml:"txtDescrPurpose"`
AffLocGroup struct {
TxtNameCity string `xml:"txtNameCity"`
TxtNameUSState string `xml:"txtNameUSState"`
} `xml:"AffLocGroup"`
TfrNot struct {
CodeType string `xml:"codeType"`
TFRAreaGroup []struct {
AbdMergedArea struct {
Avx []struct {
Text string `xml:",chardata"`
CodeDatum string `xml:"codeDatum"`
CodeType string `xml:"codeType"`
GeoLat string `xml:"geoLat"`
GeoLong string `xml:"geoLong"`
} `xml:"Avx"`
} `xml:"abdMergedArea"`
AseTFRArea struct {
CodeDistVerUpper string `xml:"codeDistVerUpper"`
ValDistVerUpper string `xml:"valDistVerUpper"`
UomDistVerUpper string `xml:"uomDistVerUpper"`
CodeDistVerLower string `xml:"codeDistVerLower"`
ValDistVerLower string `xml:"valDistVerLower"`
UomDistVerLower string `xml:"uomDistVerLower"`
} `xml:"aseTFRArea"`
} `xml:"TFRAreaGroup"`
} `xml:"TfrNot"`
} `xml:"Not"`
} `xml:"Add"`
} `xml:"Group"`
}
XNOTAMUpdate was generated 2024-09-23 07:39:34 by https://xml-to-go.github.io/, using https://github.com/miku/zek. Then manually chopped down to the parts we care about...