brevity

package
v0.10.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 2, 2024 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

package brevity contains types and models for air combat communication brevity

Index

Constants

View Source
const (
	UnknownAspect Aspect = "maneuver"
	// Hot aspect is 0-30° target aspect or 180-150° aspect angle.
	Hot = "hot"
	// Flank is 40-70° target aspect or 140-110° aspect angle.
	Flank = "flank"
	// Beam is 80-110° target aspect or 100-70° aspect angle.
	Beam = "beam"
	// Drag is 120-180° target aspect or 60-0° aspect angle.
	Drag = "drag"
)
View Source
const (
	// MergeEntryDistance is the distance at which contacts are considered to enter the merge.
	MergeEntryDistance = 3 * unit.NauticalMile
	// MergeExitDistance is the distance at which contacts are considered to exit the merge.
	MergeExitDistance = 5 * unit.NauticalMile
)
View Source
const MandatoryThreatDistance = 35 * unit.NauticalMile

MandatoryThreatDistance is the distance at which a contact is considered a threat regardless of aspect. Reference: ATP 3-52.4 Chapter V section 18 subsection c.

Variables

This section is empty.

Functions

This section is empty.

Types

type AlphaCheckRequest

type AlphaCheckRequest struct {
	// Callsign of the friendly aircraft requesting the ALPHA CHECK.
	Callsign string
}

AlphaCheckRequest is a request for an ALPHA CHECK. An ALPHA CHECK is a request for the friendly aircraft's position. It is used by aircrews to check their position equipment, especially for aircraft without GPS. Reference: ATP 3-52.4 Chapter II section 4.

func (AlphaCheckRequest) String added in v0.6.0

func (r AlphaCheckRequest) String() string

type AlphaCheckResponse

type AlphaCheckResponse struct {
	// Callsign of the friendly aircraft requesting the ALPHA CHECK.
	Callsign string
	// Status is true if the ALPHA CHECK was correlated to an aircraft on frequency, otherwise false.
	Status bool
	// Location of the friendly aircraft. If Status is false, this may be nil.
	Location Bullseye
}

AlphaCheckResponse is a response to an ALPHA CHECK.

type Aspect

type Aspect string

Aspect indicates the target aspect or aspect angle between a contact and fighter. Reference: ATP 3-52.4 Chapter IV section 6, Figure 1.

func AspectFromAngle

func AspectFromAngle(bearing bearings.Bearing, track bearings.Bearing) Aspect

AspectFromAngle computes target aspect based on the magnetic bearing from an aircraft to the target and the track direction of the target.

type BRA

type BRA interface {
	// Bearing is the heading from the fighter to the contact, rounded to the nearest degree.
	Bearing() bearings.Bearing
	// Range is the distance from the fighter to the contact, rounded to the nearest nautical mile.
	Range() unit.Length
	// Altitude of the contact above sea level, rounded to the nearest thousands of feet.
	Altitude() unit.Length
	// Altitude STACKS of the contact above sea level, rounded to the nearest thousands of feet.
	Stacks() []Stack
}

BRA is an abbreviated form of BRAA without aspect.

func NewBRA

func NewBRA(b bearings.Bearing, r unit.Length, a ...unit.Length) BRA

type BRAA

type BRAA interface {
	BRA
	// Aspect of the contact.
	Aspect() Aspect
}

BRAA provides target bearing, range, altitude and aspect relative to a specified friendly aircraft. Reference: ATP 3-52.4 Chapter IV section 4 subsection b.

func NewBRAA

func NewBRAA(b bearings.Bearing, r unit.Length, a []unit.Length, aspect Aspect) BRAA

type BogeyDopeRequest

type BogeyDopeRequest struct {
	// Callsign of the friendly aircraft requesting the BOGEY DOPE.
	Callsign string
	// Filter for the type of aircraft to include in the BOGEY DOPE.
	Filter ContactCategory
}

BogeyDopeRequest is a request for a BOGEY DOPE. Reference: ATP 3-52.4 Chapter V section 11.

func (BogeyDopeRequest) String added in v0.6.0

func (r BogeyDopeRequest) String() string

type BogeyDopeResponse

type BogeyDopeResponse struct {
	// Callsign of the friendly aircraft requesting the BOGEY DOPE.
	Callsign string
	// Group which is closest to the fighter. If there are no eligible groups, this may be nil.
	Group Group
}

type Bullseye

type Bullseye struct {
	// contains filtered or unexported fields
}

Bullseye is a magnetic bearing and distance from a reference point called the BULLSEYE. Reference: ATP 3-52.4 Chapter IV section 4 subsection a.

func NewBullseye

func NewBullseye(bearing bearings.Bearing, distance unit.Length) *Bullseye

func (*Bullseye) Bearing

func (b *Bullseye) Bearing() bearings.Bearing

Bearing from the BULLSEYE to the contact, rounded to the nearest degree.

func (*Bullseye) Distance

func (b *Bullseye) Distance() unit.Length

Distance from the BULLSEYE to the contact, rounded to the nearest nautical mile.

func (Bullseye) String added in v0.6.0

func (b Bullseye) String() string

type ContactCategory

type ContactCategory int
const (
	Aircraft ContactCategory = iota
	FixedWing
	RotaryWing
)

func (ContactCategory) String added in v0.6.4

func (c ContactCategory) String() string

type Declaration

type Declaration string

Reference ATP 3-52.4 Chapter V section 6.

const (
	// Bogey indicates the contact's' whose identity is unknown.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Bogey Declaration = "bogey"
	// Friendly indicates the contact is a positively identified friendly.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Friendly Declaration = "friendly"
	// Neutral indicates the contact is a positively identified aircraft whose characteristics, behavior, origin or nationality indicate it is neither supporting nor opposing friendly forces.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Neutral Declaration = "neutral"
	// Bandit indicates the contact is a positively idenfieid enemy in accordance with theater identification criteria. It does not imply direction or authority to engage.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Bandit Declaration = "bandit"
	// Hostile indicates the contact is a identified as an enemy upon which clearance to fire is authorized in accordance with theater rules of engagement.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Hostile Declaration = "hostile"
	// DeclarationFurball indicates that non-friendly and friendly aircraft are inside of 5 nauctical miles of each other.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Furball Declaration = "furball"
	// Unable indications that the responder is unable to provide a declaration as requested.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Unable Declaration = "unable"
	// Clean indicates there is no sensor information on the contact.
	// Reference: ATP 1-02.1 Chapter I Table 2.
	Clean Declaration = "clean"
)

type DeclareRequest

type DeclareRequest struct {
	// Callsign of the friendly aircraft requesting DECLARE.
	Callsign string
	// IsBRAA indicates if the contact is provided using Bullseye (false) or BRAA (true).
	IsBRAA bool
	// Bullseye of the contact, if provided using Bullseye.
	Bullseye Bullseye
	// Bearing of the contact, if provided using BRAA.
	Bearing bearings.Bearing
	/// Range to the contact, if provided using BRAA.
	Range unit.Length
	// Altitude of the contact above sea level, rounded to the nearest thousands of feet.
	Altitude unit.Length
	// Track direction. Optional, used to discriminate between multiple contacts at the same location.
	Track Track
}

DeclareRequest is a DECLARE call. Reference: ATP 3-52.4 Chapter V section 6.

func (DeclareRequest) String added in v0.6.0

func (r DeclareRequest) String() string

type DeclareResponse

type DeclareResponse struct {
	// Callsign of the friendly aircraft requesting DECLARE.
	Callsign string
	// Declaration of the contact.
	Declaration Declaration
	// Group that was identified, if a specific one was identifiable.
	// This may be nil if Declaration is Furball, Unable, or Clean.
	Group Group
}

DeclareResponse is a response to a DECLARE call. Reference: ATP 3-52.4 Chapter V section 6.

type FadedCall

type FadedCall struct {
	// Group which has faded.
	Group Group
}

FadedCall reports a previously tracked group has not been updated by on or off-board sensors for 30 seconds. Reference: ATP 3-52.4 Chapter V section 19 subsection a.

type Group

type Group interface {
	// Threat indicates if the THREAT criteria is met.
	Threat() bool
	// SetThreat sets the THREAT status.
	SetThreat(bool)
	// Contacts is the number of contacts in the group.
	Contacts() int
	// Bullseye is the location of the group. This may be nil for BOGEY DOPE, SNAPLOCK, and THREAT calls.
	Bullseye() *Bullseye
	// Altitude is the group's highest altitude. This may be zero for BOGEY DOPE, SNAPLOCK, and THREAT calls.
	Altitude() unit.Length
	// Stacks are the group's altitude STACKS, ordered from highest to lowest in intervals of at least 10,000 feet.
	// This may be empty for BOGEY DOPE, SNAPLOCK, and THREAT calls.
	Stacks() []Stack
	// Track is the group's track direction. This may be UnknownDirection for BOGEY DOPE, SNAPLOCK, and THREAT calls.
	Track() Track
	// Aspect is the group's aspect angle relative to another aircraft. This may be nil for BOGEY DOPE, SNAPLOCK, and some THREAT calls.
	Aspect() Aspect
	// BRAA is an alternate format for the group's location. This is nil except for BOGEY DOPE, SNAPLOCK, and some THREAT calls.
	BRAA() BRAA
	// Declaration of the group's friend or foe status.
	Declaration() Declaration
	// SetDeclaration sets the group's friend or foe status.
	SetDeclaration(Declaration)
	// Heavy is true if the group contacts 3 or more contacts.
	Heavy() bool
	// Platforms are the NATO reporting names of the group's aircraft platforms (for Soviet/Russian/Chinese aircraft) or
	// alternative names for other aircraft. Skyeye supports mixed-platform groups, so this returns multiple values.
	Platforms() []string
	// High is true if the aircraft altitude is above 40,000 feet.
	High() bool
	// Fast is true if the group's speed is 600-900kts ground speed or 1.0-1.5 Mach.
	Fast() bool
	// VeryFast is true is the group's speed is above 900kts ground speed or 1.5 Mach.
	VeryFast() bool
	// MergedWith is the number of friendlies this group is merged with.
	MergedWith() int
	// SetMergedWith sets the number of friendlies this group is merged with.
	SetMergedWith(int)
	// String returns a human-readable description of the group.
	String() string
	// ObjectIDs returns the object IDs of all contacts in the group.
	ObjectIDs() []uint64
}

Group describes any number of air contacts within 3 nautical miles in azimuth and range of each other. Groups are distinguished by either a unique name or a location. This implementation only uses location. Location may be either BRAA or Bullseye, altitude and track. Bullseye is preferred except for:

  • BOGEY DOPE and SNAPLOCK responses
  • THREAT calls that pertain to a single aircraft

Reference: ATP 3-52.4 Chapter IV section 2.

type MergedCall added in v0.4.0

type MergedCall struct {
	// Callsigns of the friendly aircraft in the merge.
	Callsigns []string
}

type NegativeRadarContactResponse

type NegativeRadarContactResponse struct {
	// Callsign of the friendly aircraft that made the request.
	Callsign string
}

NegativeRadarContactResponse provides a response when the GCI controller cannot find the caller on the radar scope.

type PictureRequest

type PictureRequest struct {
	// Callsign of the friendly aircraft requesting the PICTURE.
	Callsign string
}

PictureRequest is a request for an updated PICTURE.

func (PictureRequest) String added in v0.6.0

func (r PictureRequest) String() string

type PictureResponse

type PictureResponse struct {
	// Count is the total number of groups in the PICTURE.
	Count int
	// Groups included in the PICTURE. This is a maximum of 3 groups.
	Groups []Group
}

PICTURE is a report to establish a tactical air image. Reference: ATP 3-52.4 Chapter IV section 9.

type RadioCheckRequest

type RadioCheckRequest struct {
	// Callsign of the friendly aircraft requesting the RADIO CHECK.
	Callsign string
}

RadioCheckRequest is a request for a RADIO CHECK.

func (RadioCheckRequest) String added in v0.6.0

func (r RadioCheckRequest) String() string

type RadioCheckResponse

type RadioCheckResponse struct {
	// Callsign of the friendly aircraft requesting the RADIO CHECK.
	// If the callsign was misheard, this may not be the actual callsign of any actual aircraft.
	Callsign string
	// RadarContact indicates whether the callsign was found on the radar scope.
	RadarContact bool
}

RadioCheckResponse is a response to a RADIO CHECK.

type SayAgainResponse

type SayAgainResponse struct {
	// Callsign of the friendly aircraft that made the request.
	// This may be empty if the GCI is unsure of the caller's identity.
	Callsign string
}

SayAgainResponse is a generic response asking the caller to repeat their last transmission.

type ShoppingRequest added in v0.10.0

type ShoppingRequest struct {
	Callsign string
}

Shopping is an air-to-ground brevity commonly mistaken as an air-to-air brevity.

func (ShoppingRequest) String added in v0.10.0

func (r ShoppingRequest) String() string

type ShoppingResponse added in v0.10.0

type ShoppingResponse struct {
	Callsign string
}

ShoppingResponse is reeducation.

type SnaplockRequest

type SnaplockRequest struct {
	// Callsign of the friendly aircraft requesting the SNAPLOCK.
	Callsign string
	// BRA is the location of the contact.
	BRA BRA
}

SnaplockRequest is an abbreviated form of DECLARE used to quickly gain infomation on a contact inside THREAT range with BEAM or hotter aspect. Aspect is implied to be Beam or greater. Reference ATP 3-52.4 Chapter V section 20.

func (SnaplockRequest) String added in v0.6.0

func (r SnaplockRequest) String() string

type SnaplockResponse

type SnaplockResponse struct {
	// Callsign of the friendly aircraft requesting the SNAPLOCK.
	Callsign string
	// Declaration of the contact.
	Declaration Declaration
	// Group that was identified. If Declaration is Unable or Furball, this may be nil.
	Group Group
}

SnaplockResponse is a response to a SNAPLOCK call. Reference ATP 3-52.4 Chapter V section 20.

type SpikedRequest

type SpikedRequest struct {
	// Callsign of the friendly aircraft calling SPIKED.
	Callsign string
	// Bearing to the radar spike.
	Bearing bearings.Bearing
}

SpikedRequest is a request to correlate a radar spike within ±30 degrees. Reference: ATP 3-52.4 Chapter V section 13.

func (SpikedRequest) String added in v0.6.0

func (r SpikedRequest) String() string

type SpikedResponse

type SpikedResponse struct {
	// Callsign of the friendly aircraft calling SPIKED.
	Callsign string
	// True if the spike was correlated to a contact. False otherwise.
	Status bool
	// Range to the correlated contact. If Status is false, this may be 0.
	Range unit.Length
	// Altitude of the correlated contact. If Status is false, this may be 0.
	Altitude unit.Length
	// Aspect of the correlated contact. If Status is false, this may be UnknownAspect.
	Aspect Aspect
	// Track of the correlated contact. If Status is false, this may be UnknownDirection.
	Track Track
	// Declaration of the correlated contact. If Status is false, this may be Clean.
	Declaration Declaration
	// Number of contacts in the correlated group. If Status is false, this may be zero.
	Contacts int
	// Reported spike bearing. This is used if the response did not correlate to a group.
	Bearing bearings.Bearing
}

SpikedResponse reports any contacts within ±30 degrees of a reported radar spike. Reference: ATP 3-52.4 Chapter V section 13.

type Stack

type Stack struct {
	Altitude unit.Length
	Count    int
}

Stack represents a single layer of an altitude STACK.

func Stacks

func Stacks(a ...unit.Length) []Stack

Stacks creates altitude STACKS from altitudes.

func (Stack) String added in v0.6.0

func (s Stack) String() string

type SunriseCall

type SunriseCall struct {
	// Frequency which the GCI is listening on.
	Frequencies []unit.Frequency
}

SunriseCall reports that the GCI is online and ready for requests.

type ThreatCall

type ThreatCall struct {
	// Callsigns of the friendly aircraft under threat.
	Callsigns []string
	// Group that is threatening the friendly aircraft.
	Group Group
}

ThreatCall reports that a fighter will piece the threat range to a friendly aircraft. THREAT is more complicated in the real world, so this bot offers a simplified version. Reference: ATP 3-52.4 Chapter V section 18.

type Track

type Track string

Track is a compass direction.

const (
	UnknownDirection Track = "unknown"
	North            Track = "north"
	Northeast        Track = "northeast"
	East             Track = "east"
	Southeast        Track = "southeast"
	South            Track = "south"
	Southwest        Track = "southwest"
	West             Track = "west"
	Northwest        Track = "northwest"
)

func TrackFromBearing

func TrackFromBearing(bearing bearings.Bearing) Track

TrackFromBearing computes a track direction based on the given magnetic bearing.

type TripwireRequest

type TripwireRequest struct {
	Callsign string
}

TripwireRequest does not exist.

func (TripwireRequest) String added in v0.6.0

func (r TripwireRequest) String() string

type TripwireResponse

type TripwireResponse struct {
	Callsign string
}

TripwireResponse is reeducation.

type UnableToUnderstandRequest

type UnableToUnderstandRequest struct {
	// Callsign of the friendly aircraft that made the request.
	// If the callsign was unclear, this field will be empty.
	Callsign string
}

UnableToUnderstandRequest provides a response when the GCI controller cannot understand the caller's request because either the caller's callsign or the request itself is unclear.

func (UnableToUnderstandRequest) String added in v0.6.0

func (r UnableToUnderstandRequest) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL