Documentation
¶
Index ¶
- Constants
- Variables
- func CWTApproachSeparation(front, back string) float32
- func CWTDirectlyBehindSeparation(front, back string) float32
- func CheckApproaches(e *util.ErrorLogger, wps []WaypointArray, requireFAF bool, ...)
- func DensityRatioAtAltitude(alt float32) float32
- func FormatAltitude(falt float32) string
- func IASToTAS(ias, altitude float32) float32
- func InAirspace(p math.Point2LL, alt float32, volumes []ControllerAirspaceVolume) (bool, [][2]int)
- func InBravoAirspace(p math.Point2LL, alt int) bool
- func InCharlieAirspace(p math.Point2LL, alt int) bool
- func InDeltaAirspace(p math.Point2LL, alt int) bool
- func ParseARINC424(r io.Reader) (map[string]FAAAirport, map[string]Navaid, map[string]Fix, map[string][]Airway)
- func PrintCIFPRoutes(airport string) error
- func RandomizeRoute(w []Waypoint, r *rand.Rand, randomizeAltitudeRange bool, ...)
- func SquawkIsSPC(squawk Squawk) (ok bool, code string)
- func StringIsSPC(code string) bool
- func TASToIAS(tas, altitude float32) float32
- func TidyRunway(r string) string
- func UnderBravoShelf(grid *AirspaceGrid, p math.Point2LL, alt int) bool
- type ADSBCallsign
- type ARTCC
- type ATIS
- type ATPAVolume
- type AdaptationFix
- type AdaptationFixes
- type AircraftPerformance
- type Airline
- type AirlineSpecifier
- type Airport
- type Airspace
- type AirspaceGrid
- type AirspaceVolume
- type AirspaceVolumeType
- type Airway
- type AirwayDirection
- type AirwayFix
- type AirwayLevel
- type AltitudeRestriction
- type Approach
- type ApproachRegion
- func (ar *ApproachRegion) FarPoint(nmPerLongitude, magneticVariation float32) [2]float32
- func (ar *ApproachRegion) GetLateralGeometry(nmPerLongitude, magneticVariation float32) (line [2]math.Point2LL, quad [4]math.Point2LL)
- func (ar *ApproachRegion) Inside(p math.Point2LL, alt float32, nmPerLongitude, magneticVariation float32) (lateral, vertical bool)
- func (ar *ApproachRegion) NearPoint(nmPerLongitude, magneticVariation float32) [2]float32
- func (ar *ApproachRegion) TryMakeGhost(trk RadarTrack, heading float32, scratchpad string, forceGhost bool, ...) *GhostTrack
- type ApproachType
- type Arrival
- type ArrivalAirline
- type BeaconCodeTable
- type BeaconCodeTableSpecifier
- type Controller
- type ControllerAirspaceVolume
- type ConvergingRunways
- type DMEArc
- type Departure
- type DepartureAirline
- type ERAMAdaptation
- 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 ExitRoute
- type FAAAirport
- type Fix
- type FleetAircraft
- type FlightPlan
- type FlightRules
- type FlightStrip
- type Frequency
- type GhostTrack
- type InboundFlow
- 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 METAR
- type MVA
- type MVAExterior
- type MVAHorizontalProjection
- type MVAInterior
- type MVALinearRing
- type MVAPatches
- type MVAPolygonPatch
- type MVASurface
- type MagneticGrid
- type MultiUserController
- type Navaid
- type Overflight
- type OverflightAirline
- type PTType
- type PoolSpecifier
- type ProcedureTurn
- type RacetrackPTEntry
- type RadarSite
- type RadarTrack
- type ReportingPoint
- type RestrictionArea
- type RouteGenerator
- type Runway
- type SPC
- type STAR
- type SplitConfiguration
- type SplitConfigurationSet
- type Squawk
- type StaticDatabase
- type TFR
- type TFRCache
- type TFRListJSON
- type TRACON
- type TransponderMode
- type TypeOfFlight
- type VFRRandomsSpec
- type VFRReportingPoint
- type VFRRouteSpec
- type Waypoint
- type WaypointArray
- func (wa WaypointArray) CheckArrival(e *util.ErrorLogger, ctrl map[string]*Controller, approachAssigned bool, ...)
- func (wa WaypointArray) CheckDeparture(e *util.ErrorLogger, controllers map[string]*Controller, ...)
- func (wa WaypointArray) CheckOverflight(e *util.ErrorLogger, ctrl map[string]*Controller, ...)
- func (wa WaypointArray) Encode() string
- 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 Wind
- type WindModel
- type XNOTAMUpdate
Constants ¶
const ( RouteBasedFix = "route" ZoneBasedFix = "zone" )
const ( PTUndefined = iota PTRacetrack PTStandard45 )
const ( DirectEntryShortTurn = iota DirectEntryLongTurn ParallelEntry TeardropEntry )
const ( AirwayLevelAll = iota AirwayLevelLow AirwayLevelHigh )
const ( AirwayDirectionAny = iota AirwayDirectionForward AirwayDirectionBackward )
const ARINC424LineLength = 134 // 132 chars + \r + \n
const MaxRestrictionAreas = 100
This many adapted and then this many user-defined
Variables ¶
var ( 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") )
Functions ¶
func CWTApproachSeparation ¶ added in v0.11.5
CWTApproachSeparation returns the required separation between aircraft of the two given CWT categories. If 0 is returned, minimum radar separation should be used.
func CWTDirectlyBehindSeparation ¶ added in v0.11.5
CWTDirectlyBehindSeparation returns the required separation between aircraft of the two given CWT categories. If 0 is returned, minimum radar separation should be used.
func CheckApproaches ¶ added in v0.11.8
func CheckApproaches(e *util.ErrorLogger, wps []WaypointArray, requireFAF bool, controllers map[string]*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 InAirspace ¶ added in v0.11.9
func ParseARINC424 ¶
func PrintCIFPRoutes ¶
func RandomizeRoute ¶ added in v0.11.9
func SquawkIsSPC ¶
func StringIsSPC ¶
func TidyRunway ¶ added in v0.11.9
func UnderBravoShelf ¶ added in v0.12.1
func UnderBravoShelf(grid *AirspaceGrid, p math.Point2LL, alt int) bool
Types ¶
type ADSBCallsign ¶ added in v0.12.0
type ADSBCallsign string
func (ADSBCallsign) String ¶ added in v0.12.0
func (c ADSBCallsign) String() string
type ATPAVolume ¶
type ATPAVolume struct {
Id string `json:"id"`
ThresholdString string `json:"runway_threshold"`
Threshold math.Point2LL
Heading float32 `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"`
}
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"`
}
}
type AirlineSpecifier ¶ added in v0.11.5
type AirlineSpecifier struct {
ICAO string `json:"icao"`
Fleet string `json:"fleet,omitempty"`
AircraftTypes []string `json:"types,omitempty"`
}
func (AirlineSpecifier) Aircraft ¶ added in v0.11.5
func (a AirlineSpecifier) Aircraft() []FleetAircraft
func (*AirlineSpecifier) Check ¶ added in v0.11.5
func (a *AirlineSpecifier) Check(e *util.ErrorLogger)
func (AirlineSpecifier) SampleAcTypeAndCallsign ¶ added in v0.12.0
func (a AirlineSpecifier) SampleAcTypeAndCallsign(r *rand.Rand, enforceUniqueSuffix bool, currentCallsigns []ADSBCallsign, lg *log.Logger) (actype, callsign string)
type Airport ¶
type Airport struct {
Location math.Point2LL
TowerListIndex int `json:"tower_list"`
Name string `json:"name"`
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 string `json:"departure_controller"`
HoldForRelease bool `json:"hold_for_release"`
ExitCategories map[string]string `json:"exit_categories"`
// runway -> (exit -> route)
DepartureRoutes map[string]map[string]*ExitRoute `json:"departure_routes"`
ApproachRegions map[string]*ApproachRegion `json:"approach_regions"`
ConvergingRunways []ConvergingRunways `json:"converging_runways"`
ATPAVolumes map[string]*ATPAVolume `json:"atpa_volumes"`
OmitArrivalScratchpad bool `json:"omit_arrival_scratchpad"`
DepartureRunwaysAsOne []string `json:"departure_runways_as_one"`
}
func (*Airport) PostDeserialize ¶
func (Airport) VFRRateSum ¶ added in v0.11.9
type Airspace ¶ added in v0.11.9
type Airspace struct {
Boundaries map[string][]math.Point2LL `json:"boundaries"`
Volumes map[string][]ControllerAirspaceVolume `json:"volumes"`
}
type AirspaceGrid ¶ added in v0.11.9
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 ¶ added in v0.11.9
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) Below ¶ added in v0.12.1
func (a *AirspaceVolume) Below(p math.Point2LL, alt int) bool
func (*AirspaceVolume) GenerateDrawCommands ¶
func (a *AirspaceVolume) GenerateDrawCommands(cb *renderer.CommandBuffer, nmPerLongitude float32)
func (*AirspaceVolume) PostDeserialize ¶ added in v0.12.0
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 ¶ added in v0.11.1
type AirwayDirection int
type AirwayFix ¶ added in v0.11.1
type AirwayFix struct {
Fix string
Level AirwayLevel
Direction AirwayDirection
}
type AirwayLevel ¶ added in v0.11.1
type AirwayLevel int
type AltitudeRestriction ¶
type AltitudeRestriction struct {
// We treat 0 as "unset", which works naturally for the bottom but
// requires occasional care at the top.
Range [2]float32
}
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) ClampRange ¶
func (a AltitudeRestriction) ClampRange(r [2]float32) (c [2]float32, ok bool)
ClampRange limits a range of altitudes to satisfy the altitude restriction; the returned Boolean indicates whether the ranges overlapped.
func (AltitudeRestriction) Encoded ¶
func (a AltitudeRestriction) Encoded() string
Encoded returns the restriction in the encoded form in which it is specified in scenario configuration files, e.g. "5000+" for "at or above 5000".
func (AltitudeRestriction) TargetAltitude ¶
func (a AltitudeRestriction) TargetAltitude(alt float32) float32
func (*AltitudeRestriction) UnmarshalJSON ¶
func (a *AltitudeRestriction) UnmarshalJSON(b []byte) error
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 ¶ added in v0.12.1
func (*Approach) FAFSegment ¶ added in v0.11.8
Find the FAF: return the corresponding waypoint array and the index of the FAF within it.
func (*Approach) RunwayHeading ¶ added in v0.12.1
type ApproachRegion ¶
type ApproachRegion struct {
Runway string // set during deserialization
HeadingTolerance float32 `json:"heading_tolerance"`
ReferenceLineHeading float32 `json:"reference_heading"`
ReferenceLineLength float32 `json:"reference_length"`
ReferencePointAltitude float32 `json:"reference_altitude"`
ReferencePoint math.Point2LL `json:"reference_point"`
// 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"`
}
func (*ApproachRegion) FarPoint ¶
func (ar *ApproachRegion) FarPoint(nmPerLongitude, magneticVariation float32) [2]float32
func (*ApproachRegion) GetLateralGeometry ¶
func (*ApproachRegion) NearPoint ¶
func (ar *ApproachRegion) NearPoint(nmPerLongitude, magneticVariation float32) [2]float32
func (*ApproachRegion) TryMakeGhost ¶
func (ar *ApproachRegion) TryMakeGhost(trk RadarTrack, heading float32, scratchpad string, forceGhost bool, offset float32, leaderDirection math.CardinalOrdinalDirection, runwayIntersection [2]float32, nmPerLongitude float32, magneticVariation float32, other *ApproachRegion) *GhostTrack
type ApproachType ¶
type ApproachType int
const ( UnknownApproach ApproachType = iota ILSApproach RNAVApproach ChartedVisualApproach 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
CruiseAltitude float32 `json:"cruise_altitude"`
Route string `json:"route"`
STAR string `json:"star"`
InitialController string `json:"initial_controller"`
InitialAltitude float32 `json:"initial_altitude"`
AssignedAltitude float32 `json:"assigned_altitude"`
InitialSpeed float32 `json:"initial_speed"`
SpeedRestriction float32 `json:"speed_restriction"`
Scratchpad string `json:"scratchpad"`
SecondaryScratchpad string `json:"secondary_scratchpad"`
Description string `json:"description"`
CoordinationFix string `json:"coordination_fix"`
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 ¶
type ArrivalAirline ¶
type ArrivalAirline struct {
AirlineSpecifier
Airport string `json:"airport"`
}
type BeaconCodeTable ¶ added in v0.12.0
type BeaconCodeTable struct {
VFRCodes [][2]Squawk
}
type BeaconCodeTableSpecifier ¶ added in v0.12.0
type BeaconCodeTableSpecifier struct {
VFRCodes []string `json:"vfr_codes"` // Array of squawk code ranges
}
type Controller ¶
type Controller struct {
Position string // This is the key in the controllers map in JSON
RadioName string `json:"radio_name"`
Frequency Frequency `json:"frequency"`
TCP string `json:"sector_id"` // e.g. N56, 2J, ...
Scope string `json:"scope_char"` // Optional. If unset, facility id is used for external, last char of sector id for local.
FacilityIdentifier string `json:"facility_id"` // For example the "N" in "N4P" showing the N90 TRACON
ERAMFacility bool `json:"eram_facility"` // To weed out N56 and N4P being the same fac
Facility string `json:"facility"` // So we can get the STARS facility from a controller
DefaultAirport string `json:"default_airport"` // only required if CRDA is a thing
Instructor bool
RPO bool
}
func (Controller) Id ¶ added in v0.11.7
func (c Controller) Id() string
func (Controller) IsExternal ¶ added in v0.12.0
func (c Controller) IsExternal() bool
type ControllerAirspaceVolume ¶ added in v0.11.9
type ConvergingRunways ¶
type ConvergingRunways struct {
Runways [2]string `json:"runways"`
TieSymbol string `json:"tie_symbol"`
StaggerSymbol string `json:"stagger_symbol"`
TieOffset float32 `json:"tie_offset"`
LeaderDirectionStrings [2]string `json:"leader_directions"`
LeaderDirections [2]math.CardinalOrdinalDirection // not in JSON, set during deserialize
RunwayIntersection math.Point2LL // not in JSON, set during deserialize
}
type DMEArc ¶
type DMEArc struct {
Fix string
Center math.Point2LL
Radius float32
Length float32
InitialHeading float32
Clockwise bool
}
Can either be specified with (Fix,Radius), or (Length,Clockwise); the remaining fields are then derived from those.
type Departure ¶
type Departure struct {
Exit string `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 EnrouteSquawkCodePool ¶ added in v0.12.0
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 ¶ added in v0.12.0
func MakeEnrouteSquawkCodePool(loc *LocalSquawkCodePool) *EnrouteSquawkCodePool
func (*EnrouteSquawkCodePool) Get ¶ added in v0.12.0
func (p *EnrouteSquawkCodePool) Get(r *rand.Rand) (Squawk, error)
func (*EnrouteSquawkCodePool) InInitialPool ¶ added in v0.12.1
func (p *EnrouteSquawkCodePool) InInitialPool(code Squawk) bool
func (*EnrouteSquawkCodePool) IsAssigned ¶ added in v0.12.0
func (p *EnrouteSquawkCodePool) IsAssigned(code Squawk) bool
func (*EnrouteSquawkCodePool) NumAvailable ¶ added in v0.12.0
func (p *EnrouteSquawkCodePool) NumAvailable() int
func (*EnrouteSquawkCodePool) Return ¶ added in v0.12.0
func (p *EnrouteSquawkCodePool) Return(code Squawk) error
func (*EnrouteSquawkCodePool) Take ¶ added in v0.12.0
func (p *EnrouteSquawkCodePool) Take(code Squawk) error
type ExitRoute ¶
type ExitRoute struct {
SID string `json:"sid"`
AssignedAltitude int `json:"assigned_altitude"`
ClearedAltitude int `json:"cleared_altitude"`
SpeedRestriction int `json:"speed_restriction"`
Waypoints WaypointArray `json:"waypoints"`
Description string `json:"description"`
// optional, control position to handoff to at a /ho
HandoffController string `json:"handoff_controller"`
}
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 ¶ added in v0.11.9
func (ap FAAAirport) SelectBestRunway(wind WindModel, magneticVariation float32) (*Runway, *Runway)
func (FAAAirport) ValidRunways ¶
func (ap FAAAirport) ValidRunways() string
type FleetAircraft ¶
type FlightPlan ¶
type FlightPlan struct {
Rules FlightRules
AircraftType string
CruiseSpeed int
DepartureAirport string
Altitude int
ArrivalAirport string
AlternateAirport string
Exit string
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 FlightStrip ¶
type FlightStrip struct {
Callsign string
}
type Frequency ¶
type Frequency int
Frequencies are scaled by 1000 and then stored in integers.
func NewFrequency ¶
type GhostTrack ¶ added in v0.12.0
type GhostTrack struct {
ADSBCallsign ADSBCallsign
Position math.Point2LL
Groundspeed int
LeaderLineDirection math.CardinalOrdinalDirection
TrackId string
}
type InboundFlow ¶ added in v0.11.9
type InboundFlow struct {
Arrivals []Arrival `json:"arrivals"`
Overflights []Overflight `json:"overflights"`
}
type LocalPool ¶ added in v0.12.0
type LocalPool struct {
Initial *util.IntRangeSet
Available *util.IntRangeSet
Ranges [][2]Squawk
Backups string
FlightRules FlightRules
}
type LocalSquawkCodePool ¶ added in v0.12.0
type LocalSquawkCodePool struct {
Pools map[string]LocalPool
BeaconCodeTable BeaconCodeTable
}
func MakeLocalSquawkCodePool ¶ added in v0.12.0
func MakeLocalSquawkCodePool(spec LocalSquawkCodePoolSpecifier) *LocalSquawkCodePool
func (*LocalSquawkCodePool) Get ¶ added in v0.12.0
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 ¶ added in v0.12.1
func (p *LocalSquawkCodePool) InInitialPool(code Squawk) bool
func (*LocalSquawkCodePool) IsAssigned ¶ added in v0.12.1
func (p *LocalSquawkCodePool) IsAssigned(code Squawk) bool
func (*LocalSquawkCodePool) IsReservedVFRCode ¶ added in v0.12.0
func (p *LocalSquawkCodePool) IsReservedVFRCode(sq Squawk) bool
func (*LocalSquawkCodePool) Return ¶ added in v0.12.0
func (p *LocalSquawkCodePool) Return(sq Squawk) error
type LocalSquawkCodePoolSpecifier ¶ added in v0.12.0
type LocalSquawkCodePoolSpecifier struct {
Pools map[string]PoolSpecifier `json:"auto_assignable_codes"`
BeaconCodeTable BeaconCodeTableSpecifier `json:"beacon_code_table"`
}
SSR Codes Windows
func (*LocalSquawkCodePoolSpecifier) PostDeserialize ¶ added in v0.12.0
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 METAR ¶
type METAR struct {
AirportICAO string
Time string
Auto bool
Wind Wind `json:"wind"` // WAR changing this from a strong to deserialization doesn't fail.
Altimeter string
Weather string
Rmk string
}
func GetWeather ¶ added in v0.11.9
type MVA ¶
type MVAExterior ¶
type MVAExterior struct {
LinearRing MVALinearRing `xml:"LinearRing"`
}
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 MagneticGrid ¶
type MultiUserController ¶
type MultiUserController struct {
Primary bool `json:"primary"`
BackupController string `json:"backup"`
Departures []string `json:"departures"`
Arrivals []string `json:"arrivals"` // TEMPORARY for inbound flows transition
InboundFlows []string `json:"inbound_flows"`
}
func (*MultiUserController) IsDepartureController ¶
func (c *MultiUserController) IsDepartureController(ap, rwy, sid string) bool
func (*MultiUserController) IsInboundController ¶ added in v0.11.2
func (c *MultiUserController) IsInboundController(group string) bool
type Overflight ¶ added in v0.11.2
type Overflight struct {
Waypoints WaypointArray `json:"waypoints"`
InitialAltitudes util.SingleOrArray[int] `json:"initial_altitude"`
CruiseAltitude float32 `json:"cruise_altitude"`
AssignedAltitude float32 `json:"assigned_altitude"`
InitialSpeed float32 `json:"initial_speed"`
AssignedSpeed float32 `json:"assigned_speed"`
SpeedRestriction float32 `json:"speed_restriction"`
InitialController string `json:"initial_controller"`
Scratchpad string `json:"scratchpad"`
SecondaryScratchpad string `json:"secondary_scratchpad"`
Description string `json:"description"`
Airlines []OverflightAirline `json:"airlines"`
}
func (*Overflight) PostDeserialize ¶ added in v0.11.2
func (of *Overflight) PostDeserialize(loc Locator, nmPerLongitude float32, magneticVariation float32, airports map[string]*Airport, controlPositions map[string]*Controller, checkScratchpad func(string) bool, e *util.ErrorLogger)
type OverflightAirline ¶ added in v0.11.2
type OverflightAirline struct {
AirlineSpecifier
DepartureAirport string `json:"departure_airport"`
ArrivalAirport string `json:"arrival_airport"`
}
type PoolSpecifier ¶ added in v0.12.0
type ProcedureTurn ¶
type ProcedureTurn struct {
Type PTType
RightTurns bool
ExitAltitude int `json:",omitempty"`
MinuteLimit float32 `json:",omitempty"`
NmLimit float32 `json:",omitempty"`
Entry180NoPT bool `json:",omitempty"`
}
func (*ProcedureTurn) SelectRacetrackEntry ¶
func (pt *ProcedureTurn) SelectRacetrackEntry(inboundHeading float32, aircraftFixHeading float32) RacetrackPTEntry
type RacetrackPTEntry ¶
type RacetrackPTEntry int
func (RacetrackPTEntry) MarshalJSON ¶
func (e RacetrackPTEntry) MarshalJSON() ([]byte, error)
func (RacetrackPTEntry) String ¶
func (e RacetrackPTEntry) String() string
func (*RacetrackPTEntry) UnmarshalJSON ¶
func (e *RacetrackPTEntry) UnmarshalJSON(b []byte) error
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 float32
Groundspeed float32
TypeOfFlight TypeOfFlight
}
type ReportingPoint ¶
type RestrictionArea ¶ added in v0.11.9
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
Deleted bool
}
func RestrictionAreaFromTFR ¶ added in v0.11.9
func RestrictionAreaFromTFR(tfr TFR) RestrictionArea
func (*RestrictionArea) AverageVertexPosition ¶ added in v0.11.9
func (ra *RestrictionArea) AverageVertexPosition() math.Point2LL
func (*RestrictionArea) MoveTo ¶ added in v0.11.9
func (ra *RestrictionArea) MoveTo(p math.Point2LL)
func (*RestrictionArea) UpdateTriangles ¶ added in v0.11.9
func (ra *RestrictionArea) UpdateTriangles()
type RouteGenerator ¶ added in v0.11.9
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 ¶ added in v0.11.9
func MakeRouteGenerator(p0ll, p1ll math.Point2LL, nmPerLongitude float32) RouteGenerator
type Runway ¶
type Runway struct {
Id string
Heading float32
Threshold math.Point2LL
ThresholdCrossingHeight int // delta from elevation
Elevation int
DisplacedThresholdDistance float32 // in nm
}
func LookupOppositeRunway ¶
func LookupRunway ¶
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 SplitConfiguration ¶
type SplitConfiguration map[string]*MultiUserController
callsign -> controller contig
func (SplitConfiguration) GetDepartureController ¶
func (sc SplitConfiguration) GetDepartureController(airport, runway, sid string) (string, error)
func (SplitConfiguration) GetInboundController ¶ added in v0.11.2
func (sc SplitConfiguration) GetInboundController(group string) (string, error)
func (SplitConfiguration) ResolveController ¶
func (sc SplitConfiguration) ResolveController(id string, active func(id string) bool) (string, error)
ResolveController takes a controller callsign and returns the signed-in controller that is responsible for that position (possibly just the provided callsign).
type SplitConfigurationSet ¶
type SplitConfigurationSet map[string]SplitConfiguration
split -> config
func (SplitConfigurationSet) GetConfiguration ¶
func (sc SplitConfigurationSet) GetConfiguration(split string) (SplitConfiguration, error)
func (SplitConfigurationSet) GetPrimaryController ¶
func (sc SplitConfigurationSet) GetPrimaryController(split string) (string, error)
func (SplitConfigurationSet) Len ¶
func (sc SplitConfigurationSet) Len() int
func (SplitConfigurationSet) Splits ¶
func (sc SplitConfigurationSet) Splits() []string
type Squawk ¶
type Squawk int
func ParseSquawk ¶
func ParseSquawkOrBlock ¶ added in v0.11.10
type StaticDatabase ¶
type StaticDatabase struct {
Airports map[string]FAAAirport
Fixes map[string]Fix
Airways map[string][]Airway
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
ERAMAdaptations map[string]ERAMAdaptation
TRACONs map[string]TRACON
MVAs map[string][]MVA // TRACON -> MVAs
BravoAirspace map[string][]AirspaceVolume
CharlieAirspace map[string][]AirspaceVolume
DeltaAirspace map[string][]AirspaceVolume
}
var DB *StaticDatabase
func (StaticDatabase) LookupWaypoint ¶
func (d StaticDatabase) LookupWaypoint(f string) (math.Point2LL, bool)
type TFR ¶ added in v0.11.6
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.
}
TFR represents an FAA-issued temporary flight restriction.
type TFRCache ¶ added in v0.11.6
type TFRCache struct {
TFRs map[string]TFR // URL -> TFR
// contains filtered or unexported fields
}
TFRCache stores active TFRs that have been retrieved previously; we save it out on the config so that we don't download all of them each time vice is launched.
func MakeTFRCache ¶ added in v0.11.6
func MakeTFRCache() TFRCache
func (*TFRCache) Sync ¶ added in v0.11.6
Sync synchronizes the cache, adding any newly-downloaded TFRs. It returns after the given timeout passes if we haven't gotten results back yet.
func (*TFRCache) TFRsForTRACON ¶ added in v0.11.6
TFRsForTRACON returns all TFRs that apply to the given TRACON. (It currently return all of the ones for the TRACON's ARTCC, which is overkill; we should probably cull them based on distance to the center of the TRACON.)
func (*TFRCache) UpdateAsync ¶ added in v0.11.6
UpdateAsync kicks off an update of the TFRCache; it runs asynchronously with synchronization happening when Sync or TFRsForTRACON is called.
type TFRListJSON ¶ added in v0.12.1
type TFRListJSON struct {
Notam_id string `json:"notam_id"`
}
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 TypeOfFlight ¶ added in v0.12.0
type TypeOfFlight int
const ( FlightTypeUnknown TypeOfFlight = iota FlightTypeDeparture FlightTypeArrival FlightTypeOverflight )
type VFRRandomsSpec ¶ added in v0.11.9
type VFRReportingPoint ¶ added in v0.12.0
type VFRReportingPoint struct {
Description string `json:"description"`
Location math.Point2LL `json:"location"`
}
func (*VFRReportingPoint) PostDeserialize ¶ added in v0.12.0
func (rp *VFRReportingPoint) PostDeserialize(loc Locator, controllers map[string]*Controller, e *util.ErrorLogger)
type VFRRouteSpec ¶ added in v0.11.9
type Waypoint ¶
type Waypoint struct {
Fix string `json:"fix"`
Location math.Point2LL // not provided in scenario JSON; derived from fix
AltitudeRestriction *AltitudeRestriction `json:"altitude_restriction,omitempty"`
Speed int `json:"speed,omitempty"`
Heading int `json:"heading,omitempty"` // outbound heading after waypoint
PresentHeading bool
ProcedureTurn *ProcedureTurn `json:"pt,omitempty"`
NoPT bool `json:"nopt,omitempty"`
HumanHandoff bool `json:"human_handoff"` // To named TCP.
TCPHandoff string `json:"tcp_handoff"` // To named TCP.
PointOut string `json:"pointout,omitempty"`
ClearApproach bool `json:"clear_approach,omitempty"` // used for distractor a/c, clears them for the approach passing the wp.
FlyOver bool `json:"flyover,omitempty"`
Delete bool `json:"delete,omitempty"`
Land bool `json:"land,omitempty"`
Arc *DMEArc `json:"arc,omitempty"`
IAF, IF, FAF bool // not provided in scenario JSON; derived from fix
Airway string // when parsing waypoints, this is set if we're on an airway after the fix
OnSID, OnSTAR bool // set during deserialization
OnApproach bool // set during deserialization
AirworkRadius int // set during deserialization
AirworkMinutes int // set during deserialization
Radius float32
Shift float32
PrimaryScratchpad string
ClearPrimaryScratchpad bool
SecondaryScratchpad string
ClearSecondaryScratchpad bool
TransferComms bool
}
func AppendVFRLanding ¶ added in v0.12.1
func AppendVFRLanding(wps []Waypoint, perf AircraftPerformance, airport string, wind WindModel, nmPerLongitude float32, magneticVariation float32, lg *log.Logger) []Waypoint
Takes waypoints up to the one with the Land specifier. Rewrite that one and then append the landing route.
type WaypointArray ¶
type WaypointArray []Waypoint
func (WaypointArray) CheckArrival ¶
func (wa WaypointArray) CheckArrival(e *util.ErrorLogger, ctrl map[string]*Controller, approachAssigned bool, checkScratchpad func(string) bool)
func (WaypointArray) CheckDeparture ¶
func (wa WaypointArray) CheckDeparture(e *util.ErrorLogger, controllers map[string]*Controller, checkScratchpads func(string) bool)
func (WaypointArray) CheckOverflight ¶ added in v0.11.2
func (wa WaypointArray) CheckOverflight(e *util.ErrorLogger, ctrl map[string]*Controller, checkScratchpads func(string) bool)
func (WaypointArray) Encode ¶
func (wa WaypointArray) Encode() string
func (WaypointArray) InitializeLocations ¶ added in v0.11.6
func (wa WaypointArray) InitializeLocations(loc Locator, nmPerLongitude float32, magneticVariation float32, allowSlop bool, e *util.ErrorLogger) WaypointArray
func (WaypointArray) RouteString ¶ added in v0.11.2
func (wa WaypointArray) RouteString() string
func (*WaypointArray) UnmarshalJSON ¶
func (wa *WaypointArray) UnmarshalJSON(b []byte) error
type Wind ¶
type XNOTAMUpdate ¶ added in v0.11.6
type XNOTAMUpdate struct {
Group struct {
Add struct {
Not struct {
NotUid struct {
TxtLocalName string `xml:"txtLocalName"`
} `xml:"NotUid"`
DateEffective string `xml:"dateEffective"`
DateExpire string `xml:"dateExpire"`
CodeTimeZone string `xml:"codeTimeZone"`
CodeExpirationTimeZone string `xml:"codeExpirationTimeZone"`
CodeFacility string `xml:"codeFacility"`
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"`
} `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...