Documentation
¶
Index ¶
- Constants
- Variables
- func BroadcastMessage(hostname, msg, password string, lg *log.Logger)
- func ForceWhisperRebenchmark(lg *log.Logger, ...)
- func GetWhisperBenchmarkStatus() string
- func GetWhisperDeviceID() string
- func GetWhisperModelName() string
- func GetWhisperModelTiers() []string
- func IsSTTAvailable() bool
- func IsWhisperBenchmarkDone() bool
- func IsWhisperBenchmarking() bool
- func PreloadWhisperModel(lg *log.Logger, cachedModelName, cachedDeviceID string, ...)
- func ReportWhisperBenchmark(remoteServer *Server, lg *log.Logger) bool
- func SelectWhisperModel(lg *log.Logger, modelName string, ...)
- func SetSTTEvalEnabled(enabled bool)
- func TryConnectRemoteServer(hostname string, lg *log.Logger) chan *serverConnection
- func WhisperModelError() error
- type AircraftCommandRequest
- type ConnectionManager
- func (cm *ConnectionManager) ClientIsLocal() bool
- func (cm *ConnectionManager) ConnectToSim(config server.JoinSimRequest, initials string, srv *Server, lg *log.Logger) error
- func (cm *ConnectionManager) Connected() bool
- func (cm *ConnectionManager) ConnectionStartTime() time.Time
- func (cm *ConnectionManager) CreateNewSim(config server.NewSimRequest, initials string, srv *Server, lg *log.Logger) error
- func (cm *ConnectionManager) Disconnect()
- func (cm *ConnectionManager) LoadLocalSim(s *sim.Sim, initials string, lg *log.Logger) (*ControlClient, error)
- func (cm *ConnectionManager) Update(es *sim.EventStream, p platform.Platform, lg *log.Logger)
- func (cm *ConnectionManager) UpdateRunningSims() error
- type ControlClient
- func (c *ControlClient) AcceptHandoff(acid sim.ACID, callback func(error))
- func (c *ControlClient) AcceptRedirectedHandoff(acid sim.ACID, callback func(error))
- func (c *ControlClient) AcknowledgePointOut(acid sim.ACID, callback func(error))
- func (c *ControlClient) ActivateFlightPlan(callsign av.ADSBCallsign, fpACID sim.ACID, spec sim.FlightPlanSpecifier, ...)
- func (c *ControlClient) AirspaceForTCW(tcw sim.TCW) []av.ControllerAirspaceVolume
- func (c *ControlClient) AssociateFlightPlan(callsign av.ADSBCallsign, spec sim.FlightPlanSpecifier, callback func(error))
- func (c *ControlClient) CancelHandoff(acid sim.ACID, callback func(error))
- func (c *ControlClient) ConfigureATPA(op sim.ATPAConfigOp, volumeId string, callback func(output string, err error))
- func (c *ControlClient) Connected() bool
- func (c *ControlClient) ConsolidateTCP(receivingTCW sim.TCW, sendingTCP sim.TCP, consType sim.ConsolidationType, ...)
- func (c *ControlClient) CreateArrival(group, airport string, ac *sim.Aircraft, callback func(error))
- func (c *ControlClient) CreateDeparture(airport, runway, category string, rules av.FlightRules, ac *sim.Aircraft, ...)
- func (c *ControlClient) CreateFlightPlan(spec sim.FlightPlanSpecifier, callback func(error))
- func (c *ControlClient) CreateOverflight(group string, ac *sim.Aircraft, callback func(error))
- func (c *ControlClient) CreateRestrictionArea(ra av.RestrictionArea, callback func(int, error))
- func (c *ControlClient) CurrentTime() time.Time
- func (c *ControlClient) DeconsolidateTCP(tcp sim.TCP, callback func(error))
- func (c *ControlClient) DeleteAircraft(aircraft []sim.Aircraft, callback func(err error))
- func (c *ControlClient) DeleteAllAircraft(callback func(err error))
- func (c *ControlClient) DeleteFlightPlan(acid sim.ACID, callback func(error))
- func (c *ControlClient) DeleteRestrictionArea(idx int, callback func(error))
- func (c *ControlClient) Disconnect()
- func (c *ControlClient) FastForward()
- func (c *ControlClient) FeedAudioToStreaming(samples []int16)
- func (c *ControlClient) FlightPlanDirect(aircraft sim.ACID, fix string, callback func(err error))
- func (c *ControlClient) ForceQL(acid sim.ACID, to sim.ControlPosition, callback func(error))
- func (c *ControlClient) GetAircraftDisplayState(callsign av.ADSBCallsign) (sim.AircraftDisplayState, error)
- func (c *ControlClient) GetAndClearPTTReleaseTime() time.Time
- func (c *ControlClient) GetAtmosGrid(t time.Time, callback func(*wx.AtmosGrid, error))
- func (c *ControlClient) GetLastCommand() string
- func (c *ControlClient) GetLastTranscription() string
- func (c *ControlClient) GetLastWhisperDurationMs() int64
- func (c *ControlClient) GetPrecipURL(t time.Time, callback func(url string, nextTime time.Time, err error))
- func (c *ControlClient) GetSerializeSim() (*sim.Sim, error)
- func (c *ControlClient) GetSimRate() float32
- func (c *ControlClient) GetUpdates(eventStream *sim.EventStream, p platform.Platform, onErr func(error))
- func (c *ControlClient) GetVideoMapLibrary(filename string) (*sim.VideoMapLibrary, error)
- func (c *ControlClient) HandoffTrack(acid sim.ACID, to sim.ControlPosition, callback func(error))
- func (c *ControlClient) HaveTTS() bool
- func (c *ControlClient) HoldRadioTransmissions()
- func (c *ControlClient) LastTTSCallsign() av.ADSBCallsign
- func (c *ControlClient) LaunchArrivalOverflight(ac sim.Aircraft)
- func (c *ControlClient) LaunchDeparture(ac sim.Aircraft, rwy string)
- func (c *ControlClient) ModifyFlightPlan(acid sim.ACID, spec sim.FlightPlanSpecifier, callback func(error))
- func (c *ControlClient) PointOut(acid sim.ACID, to sim.ControlPosition, callback func(error))
- func (c *ControlClient) RPCClient() *RPCClient
- func (c *ControlClient) RadioIsActive() bool
- func (c *ControlClient) RecallPointOut(acid sim.ACID, callback func(error))
- func (c *ControlClient) RedirectHandoff(acid sim.ACID, to sim.ControlPosition, callback func(error))
- func (c *ControlClient) RejectPointOut(acid sim.ACID, callback func(error))
- func (c *ControlClient) ReleaseDeparture(callsign av.ADSBCallsign, callback func(error))
- func (c *ControlClient) RepositionTrack(acid sim.ACID, callsign av.ADSBCallsign, p math.Point2LL, callback func(error))
- func (c *ControlClient) RequestContactTransmission()
- func (c *ControlClient) RequestFlightFollowing()
- func (c *ControlClient) RunAircraftCommands(req AircraftCommandRequest, ...)
- func (c *ControlClient) SendGlobalMessage(message string)
- func (c *ControlClient) SendRouteCoordinates(aircraft sim.ACID, minutes int, callback func(err error))
- func (c *ControlClient) SetLastCommand(s string)
- func (c *ControlClient) SetLastTranscription(s string)
- func (c *ControlClient) SetLaunchConfig(lc sim.LaunchConfig)
- func (c *ControlClient) SetRemoteServer(remote *RPCClient)
- func (c *ControlClient) SetSimRate(r float32)
- func (c *ControlClient) SetWaypointCommands(commands string)
- func (c *ControlClient) StartStreamingSTT(lg *log.Logger) error
- func (c *ControlClient) Status() string
- func (c *ControlClient) StopStreamingSTT(lg *log.Logger)
- func (c *ControlClient) StringIsSPC(s string) bool
- func (c *ControlClient) TakeOrReturnLaunchControl(eventStream *sim.EventStream)
- func (c *ControlClient) ToggleSimPause()
- func (c *ControlClient) TowerListAirports() []string
- func (c *ControlClient) TriggerEmergency(emergencyName string)
- func (c *ControlClient) UpdateRestrictionArea(idx int, ra av.RestrictionArea, callback func(error))
- type RPCClient
- type STTBugContext
- type Server
- type SessionStats
- type SimState
- func (ss *SimState) BeaconCodeInUse(sq av.Squawk) bool
- func (ss *SimState) GetAllReleaseDepartures() []sim.ReleaseDeparture
- func (ss *SimState) GetFlightPlanForACID(acid sim.ACID) *sim.NASFlightPlan
- func (ss *SimState) GetInitialCenter() math.Point2LL
- func (ss *SimState) GetInitialRange() float32
- func (ss *SimState) GetOurTrackByACID(acid sim.ACID) (*sim.Track, bool)
- func (ss *SimState) GetOurTrackByCallsign(callsign av.ADSBCallsign) (*sim.Track, bool)
- func (ss *SimState) GetRegularReleaseDepartures() []sim.ReleaseDeparture
- func (ss *SimState) GetSTARSReleaseDepartures() []sim.ReleaseDeparture
- func (ss *SimState) GetTrackByACID(acid sim.ACID) (*sim.Track, bool)
- func (ss *SimState) GetTrackByCallsign(callsign av.ADSBCallsign) (*sim.Track, bool)
- func (ss *SimState) GetTrackByFLID(flid string) (*sim.Track, bool)
- func (ss *SimState) GetUserConsolidation() *sim.TCPConsolidation
- func (ss *SimState) UserControlsPosition(pos sim.ControlPosition) bool
- func (ss *SimState) UserControlsTrack(track *sim.Track) bool
- type TransmissionManager
- func (tm *TransmissionManager) EnqueueReadbackPCM(callsign av.ADSBCallsign, ty av.RadioTransmissionType, pcm []int16)
- func (tm *TransmissionManager) EnqueueTransmissionPCM(callsign av.ADSBCallsign, ty av.RadioTransmissionType, pcm []int16)
- func (tm *TransmissionManager) Hold()
- func (tm *TransmissionManager) HoldAfterSilentContact(callsign av.ADSBCallsign)
- func (tm *TransmissionManager) HoldAfterTransmission()
- func (tm *TransmissionManager) IsContactRequested() bool
- func (tm *TransmissionManager) IsPlaying() bool
- func (tm *TransmissionManager) LastTransmissionCallsign() av.ADSBCallsign
- func (tm *TransmissionManager) SetContactRequested(requested bool)
- func (tm *TransmissionManager) SetEventStream(es *sim.EventStream)
- func (tm *TransmissionManager) ShouldRequestContact() bool
- func (tm *TransmissionManager) Unhold()
- func (tm *TransmissionManager) Update(p platform.Platform, paused, sttActive bool)
Constants ¶
const WhisperBenchmarkIndex = 4
WhisperBenchmarkIndex is the current benchmark generation. If the stored index in config is less than this, re-benchmarking is triggered. Increment this when benchmark criteria change (e.g., models, thresholds).
Variables ¶
var ErrCPUNotSupported = errors.New("CPU does not support required instructions for speech-to-text")
ErrCPUNotSupported is returned when the CPU doesn't support the required instruction sets for speech-to-text (AVX on x86/amd64).
Functions ¶
func BroadcastMessage ¶
func ForceWhisperRebenchmark ¶ added in v0.14.0
func ForceWhisperRebenchmark(lg *log.Logger, saveCallback func(modelName, deviceID string, benchmarkIndex int, realtimeFactor float64))
ForceWhisperRebenchmark closes the current model and triggers a fresh benchmark. This should be called when the user wants to re-run the benchmark.
func GetWhisperBenchmarkStatus ¶ added in v0.14.0
func GetWhisperBenchmarkStatus() string
GetWhisperBenchmarkStatus returns the current benchmark status message for UI display.
func GetWhisperDeviceID ¶ added in v0.14.0
func GetWhisperDeviceID() string
GetWhisperDeviceID returns the device identifier used for whisper inference.
func GetWhisperModelName ¶ added in v0.14.0
func GetWhisperModelName() string
GetWhisperModelName returns the name of the currently loaded whisper model. Uses atomic load to avoid blocking the UI thread during whisper inference.
func GetWhisperModelTiers ¶ added in v0.14.0
func GetWhisperModelTiers() []string
GetWhisperModelTiers returns the list of available whisper models, from smallest to largest.
func IsSTTAvailable ¶ added in v0.14.0
func IsSTTAvailable() bool
IsSTTAvailable returns true if speech-to-text is available. This blocks until the whisper model finishes loading.
func IsWhisperBenchmarkDone ¶ added in v0.14.0
func IsWhisperBenchmarkDone() bool
IsWhisperBenchmarkDone returns true if the whisper model loading/benchmarking has completed.
func IsWhisperBenchmarking ¶ added in v0.14.0
func IsWhisperBenchmarking() bool
IsWhisperBenchmarking returns true if we're currently running actual benchmarks (as opposed to just loading a cached model). This is used to determine whether to show the benchmark progress dialog.
func PreloadWhisperModel ¶ added in v0.14.0
func PreloadWhisperModel(lg *log.Logger, cachedModelName, cachedDeviceID string, cachedBenchmarkIndex int, cachedRealtimeFactor float64, saveCallback func(modelName, deviceID string, benchmarkIndex int, realtimeFactor float64))
PreloadWhisperModel loads the whisper model in the background so it's ready when PTT is first pressed. This avoids blocking the UI.
If cachedModelName and cachedDeviceID match the current device and the cachedBenchmarkIndex matches the current WhisperBenchmarkIndex, the cached model is loaded directly without benchmarking. Otherwise, a full benchmark is performed.
The saveCallback is called when a model is selected (after benchmarking) to allow saving the selection to config.
func ReportWhisperBenchmark ¶ added in v0.14.0
ReportWhisperBenchmark sends the benchmark results to the remote server if available. This should be called once the connection manager has established a connection to the remote server. Returns true if the report was sent, false if no report available or already reported.
func SelectWhisperModel ¶ added in v0.14.0
func SelectWhisperModel(lg *log.Logger, modelName string, saveCallback func(modelName, deviceID string, benchmarkIndex int, realtimeFactor float64))
SelectWhisperModel directly selects a whisper model without benchmarking. This is used when the user manually chooses a model from the settings dropdown.
func SetSTTEvalEnabled ¶ added in v0.14.0
func SetSTTEvalEnabled(enabled bool)
SetSTTEvalEnabled enables or disables STT evaluation mode. When enabled, each voice command runs through all whisper models and results are printed.
func TryConnectRemoteServer ¶
func WhisperModelError ¶ added in v0.14.0
func WhisperModelError() error
WhisperModelError waits for the whisper model to finish loading and returns any error that occurred. Returns nil if the model loaded successfully. This can be used to check if STT is available and show an error dialog if not.
Types ¶
type AircraftCommandRequest ¶ added in v0.14.0
type AircraftCommandRequest struct {
Callsign av.ADSBCallsign
Commands string
Multiple bool
ClickedTrack bool
// STT-related fields (zero values for keyboard input)
WhisperDuration time.Duration
AudioDuration time.Duration
WhisperTranscript string
WhisperModel string
AircraftContext map[string]stt.Aircraft
STTDebugLogs []string
}
AircraftCommandRequest contains parameters for RunAircraftCommands. For keyboard input, only Callsign, Commands, Multiple, and ClickedTrack need to be set; all STT-related fields can be left as zero values.
type ConnectionManager ¶
type ConnectionManager struct {
LocalServer *Server
RemoteServer *Server
// contains filtered or unexported fields
}
func MakeServerManager ¶
func MakeServerManager(serverAddress, additionalScenario, additionalVideoMap string, disableTTSPtr *bool, lg *log.Logger, onNewClient func(*ControlClient), onError func(error)) (*ConnectionManager, util.ErrorLogger, string)
func (*ConnectionManager) ClientIsLocal ¶
func (cm *ConnectionManager) ClientIsLocal() bool
func (*ConnectionManager) ConnectToSim ¶
func (cm *ConnectionManager) ConnectToSim(config server.JoinSimRequest, initials string, srv *Server, lg *log.Logger) error
func (*ConnectionManager) Connected ¶
func (cm *ConnectionManager) Connected() bool
func (*ConnectionManager) ConnectionStartTime ¶
func (cm *ConnectionManager) ConnectionStartTime() time.Time
func (*ConnectionManager) CreateNewSim ¶
func (cm *ConnectionManager) CreateNewSim(config server.NewSimRequest, initials string, srv *Server, lg *log.Logger) error
func (*ConnectionManager) Disconnect ¶
func (cm *ConnectionManager) Disconnect()
func (*ConnectionManager) LoadLocalSim ¶
func (cm *ConnectionManager) LoadLocalSim(s *sim.Sim, initials string, lg *log.Logger) (*ControlClient, error)
func (*ConnectionManager) Update ¶
func (cm *ConnectionManager) Update(es *sim.EventStream, p platform.Platform, lg *log.Logger)
func (*ConnectionManager) UpdateRunningSims ¶ added in v0.13.3
func (cm *ConnectionManager) UpdateRunningSims() error
type ControlClient ¶
type ControlClient struct {
LastTranscription string
LastCommand string
LastWhisperDurationMs int64 // Last whisper transcription time in milliseconds
SessionStats SessionStats
// This is all read-only data that we expect other parts of the system
// to access directly.
State SimState
// contains filtered or unexported fields
}
func NewControlClient ¶
func (*ControlClient) AcceptHandoff ¶
func (c *ControlClient) AcceptHandoff(acid sim.ACID, callback func(error))
func (*ControlClient) AcceptRedirectedHandoff ¶
func (c *ControlClient) AcceptRedirectedHandoff(acid sim.ACID, callback func(error))
func (*ControlClient) AcknowledgePointOut ¶
func (c *ControlClient) AcknowledgePointOut(acid sim.ACID, callback func(error))
func (*ControlClient) ActivateFlightPlan ¶
func (c *ControlClient) ActivateFlightPlan(callsign av.ADSBCallsign, fpACID sim.ACID, spec sim.FlightPlanSpecifier, callback func(error))
func (*ControlClient) AirspaceForTCW ¶ added in v0.13.3
func (c *ControlClient) AirspaceForTCW(tcw sim.TCW) []av.ControllerAirspaceVolume
func (*ControlClient) AssociateFlightPlan ¶
func (c *ControlClient) AssociateFlightPlan(callsign av.ADSBCallsign, spec sim.FlightPlanSpecifier, callback func(error))
func (*ControlClient) CancelHandoff ¶
func (c *ControlClient) CancelHandoff(acid sim.ACID, callback func(error))
func (*ControlClient) ConfigureATPA ¶ added in v0.13.3
func (c *ControlClient) ConfigureATPA(op sim.ATPAConfigOp, volumeId string, callback func(output string, err error))
func (*ControlClient) Connected ¶
func (c *ControlClient) Connected() bool
func (*ControlClient) ConsolidateTCP ¶ added in v0.13.3
func (c *ControlClient) ConsolidateTCP(receivingTCW sim.TCW, sendingTCP sim.TCP, consType sim.ConsolidationType, callback func(error))
ConsolidateTCP consolidates the sendingTCP to the receivingTCW's keyboard. sim.ConsolidationFull transfers active tracks; sim.ConsolidationBasic only inactive/future flights.
func (*ControlClient) CreateArrival ¶
func (c *ControlClient) CreateArrival(group, airport string, ac *sim.Aircraft, callback func(error))
func (*ControlClient) CreateDeparture ¶
func (c *ControlClient) CreateDeparture(airport, runway, category string, rules av.FlightRules, ac *sim.Aircraft, callback func(error))
func (*ControlClient) CreateFlightPlan ¶
func (c *ControlClient) CreateFlightPlan(spec sim.FlightPlanSpecifier, callback func(error))
func (*ControlClient) CreateOverflight ¶
func (c *ControlClient) CreateOverflight(group string, ac *sim.Aircraft, callback func(error))
func (*ControlClient) CreateRestrictionArea ¶
func (c *ControlClient) CreateRestrictionArea(ra av.RestrictionArea, callback func(int, error))
func (*ControlClient) CurrentTime ¶
func (c *ControlClient) CurrentTime() time.Time
CurrentTime returns an extrapolated value that models the current Sim's time. (Because the Sim may be running remotely, we have to make some approximations, though they shouldn't cause much trouble since we get an update from the Sim at least once a second...)
func (*ControlClient) DeconsolidateTCP ¶ added in v0.13.3
func (c *ControlClient) DeconsolidateTCP(tcp sim.TCP, callback func(error))
DeconsolidateTCP returns a secondary TCP to its default keyboard. If tcp is empty, deconsolidates the default TCP for the TCW (i.e., the TCP one with the same name) back to the user's TCW.
func (*ControlClient) DeleteAircraft ¶
func (c *ControlClient) DeleteAircraft(aircraft []sim.Aircraft, callback func(err error))
func (*ControlClient) DeleteAllAircraft ¶
func (c *ControlClient) DeleteAllAircraft(callback func(err error))
func (*ControlClient) DeleteFlightPlan ¶
func (c *ControlClient) DeleteFlightPlan(acid sim.ACID, callback func(error))
func (*ControlClient) DeleteRestrictionArea ¶
func (c *ControlClient) DeleteRestrictionArea(idx int, callback func(error))
func (*ControlClient) Disconnect ¶
func (c *ControlClient) Disconnect()
func (*ControlClient) FastForward ¶
func (c *ControlClient) FastForward()
func (*ControlClient) FeedAudioToStreaming ¶ added in v0.14.0
func (c *ControlClient) FeedAudioToStreaming(samples []int16)
FeedAudioToStreaming sends audio samples to the streaming transcriber.
func (*ControlClient) FlightPlanDirect ¶ added in v0.13.0
func (c *ControlClient) FlightPlanDirect(aircraft sim.ACID, fix string, callback func(err error))
func (*ControlClient) ForceQL ¶
func (c *ControlClient) ForceQL(acid sim.ACID, to sim.ControlPosition, callback func(error))
func (*ControlClient) GetAircraftDisplayState ¶
func (c *ControlClient) GetAircraftDisplayState(callsign av.ADSBCallsign) (sim.AircraftDisplayState, error)
func (*ControlClient) GetAndClearPTTReleaseTime ¶ added in v0.14.0
func (c *ControlClient) GetAndClearPTTReleaseTime() time.Time
GetAndClearPTTReleaseTime returns the PTT release time and clears it. Returns zero time if no PTT release is pending.
func (*ControlClient) GetAtmosGrid ¶ added in v0.13.0
func (*ControlClient) GetLastCommand ¶ added in v0.14.0
func (c *ControlClient) GetLastCommand() string
func (*ControlClient) GetLastTranscription ¶ added in v0.14.0
func (c *ControlClient) GetLastTranscription() string
func (*ControlClient) GetLastWhisperDurationMs ¶ added in v0.14.0
func (c *ControlClient) GetLastWhisperDurationMs() int64
func (*ControlClient) GetPrecipURL ¶ added in v0.13.0
func (*ControlClient) GetSerializeSim ¶
func (c *ControlClient) GetSerializeSim() (*sim.Sim, error)
func (*ControlClient) GetSimRate ¶
func (c *ControlClient) GetSimRate() float32
func (*ControlClient) GetUpdates ¶
func (c *ControlClient) GetUpdates(eventStream *sim.EventStream, p platform.Platform, onErr func(error))
func (*ControlClient) GetVideoMapLibrary ¶
func (c *ControlClient) GetVideoMapLibrary(filename string) (*sim.VideoMapLibrary, error)
func (*ControlClient) HandoffTrack ¶
func (c *ControlClient) HandoffTrack(acid sim.ACID, to sim.ControlPosition, callback func(error))
func (*ControlClient) HaveTTS ¶
func (c *ControlClient) HaveTTS() bool
func (*ControlClient) HoldRadioTransmissions ¶
func (c *ControlClient) HoldRadioTransmissions()
func (*ControlClient) LastTTSCallsign ¶
func (c *ControlClient) LastTTSCallsign() av.ADSBCallsign
func (*ControlClient) LaunchArrivalOverflight ¶
func (c *ControlClient) LaunchArrivalOverflight(ac sim.Aircraft)
func (*ControlClient) LaunchDeparture ¶
func (c *ControlClient) LaunchDeparture(ac sim.Aircraft, rwy string)
func (*ControlClient) ModifyFlightPlan ¶
func (c *ControlClient) ModifyFlightPlan(acid sim.ACID, spec sim.FlightPlanSpecifier, callback func(error))
func (*ControlClient) PointOut ¶
func (c *ControlClient) PointOut(acid sim.ACID, to sim.ControlPosition, callback func(error))
func (*ControlClient) RPCClient ¶
func (c *ControlClient) RPCClient() *RPCClient
func (*ControlClient) RadioIsActive ¶
func (c *ControlClient) RadioIsActive() bool
func (*ControlClient) RecallPointOut ¶
func (c *ControlClient) RecallPointOut(acid sim.ACID, callback func(error))
func (*ControlClient) RedirectHandoff ¶
func (c *ControlClient) RedirectHandoff(acid sim.ACID, to sim.ControlPosition, callback func(error))
func (*ControlClient) RejectPointOut ¶
func (c *ControlClient) RejectPointOut(acid sim.ACID, callback func(error))
func (*ControlClient) ReleaseDeparture ¶
func (c *ControlClient) ReleaseDeparture(callsign av.ADSBCallsign, callback func(error))
func (*ControlClient) RepositionTrack ¶
func (c *ControlClient) RepositionTrack(acid sim.ACID, callsign av.ADSBCallsign, p math.Point2LL, callback func(error))
func (*ControlClient) RequestContactTransmission ¶ added in v0.14.0
func (c *ControlClient) RequestContactTransmission()
RequestContactTransmission requests the next pending contact transmission from the server. The result (if any) will be delivered via GetStateUpdate and enqueued for playback.
func (*ControlClient) RequestFlightFollowing ¶
func (c *ControlClient) RequestFlightFollowing()
func (*ControlClient) RunAircraftCommands ¶
func (c *ControlClient) RunAircraftCommands(req AircraftCommandRequest, handleResult func(message string, remainingInput string))
func (*ControlClient) SendGlobalMessage ¶
func (c *ControlClient) SendGlobalMessage(message string)
func (*ControlClient) SendRouteCoordinates ¶ added in v0.13.0
func (c *ControlClient) SendRouteCoordinates(aircraft sim.ACID, minutes int, callback func(err error))
func (*ControlClient) SetLastCommand ¶ added in v0.14.0
func (c *ControlClient) SetLastCommand(s string)
func (*ControlClient) SetLastTranscription ¶ added in v0.14.0
func (c *ControlClient) SetLastTranscription(s string)
Thread-safe access to STT fields
func (*ControlClient) SetLaunchConfig ¶
func (c *ControlClient) SetLaunchConfig(lc sim.LaunchConfig)
func (*ControlClient) SetRemoteServer ¶ added in v0.14.0
func (c *ControlClient) SetRemoteServer(remote *RPCClient)
func (*ControlClient) SetSimRate ¶
func (c *ControlClient) SetSimRate(r float32)
func (*ControlClient) SetWaypointCommands ¶ added in v0.13.0
func (c *ControlClient) SetWaypointCommands(commands string)
func (*ControlClient) StartStreamingSTT ¶ added in v0.14.0
func (c *ControlClient) StartStreamingSTT(lg *log.Logger) error
StartStreamingSTT begins a transcription session. Audio samples can be fed via FeedAudioToStreaming. Call StopStreamingSTT to end the session and process the result.
func (*ControlClient) Status ¶
func (c *ControlClient) Status() string
func (*ControlClient) StopStreamingSTT ¶ added in v0.14.0
func (c *ControlClient) StopStreamingSTT(lg *log.Logger)
StopStreamingSTT ends the streaming session and processes the final result. The session is captured synchronously to avoid races, then processing continues asynchronously to avoid blocking the UI.
func (*ControlClient) StringIsSPC ¶
func (c *ControlClient) StringIsSPC(s string) bool
func (*ControlClient) TakeOrReturnLaunchControl ¶
func (c *ControlClient) TakeOrReturnLaunchControl(eventStream *sim.EventStream)
func (*ControlClient) ToggleSimPause ¶
func (c *ControlClient) ToggleSimPause()
func (*ControlClient) TowerListAirports ¶
func (c *ControlClient) TowerListAirports() []string
func (*ControlClient) TriggerEmergency ¶ added in v0.13.2
func (c *ControlClient) TriggerEmergency(emergencyName string)
func (*ControlClient) UpdateRestrictionArea ¶
func (c *ControlClient) UpdateRestrictionArea(idx int, ra av.RestrictionArea, callback func(error))
type STTBugContext ¶ added in v0.14.0
type STTBugContext struct {
Transcript string // Raw whisper transcript
AircraftContext map[string]stt.Aircraft // Aircraft context used for decoding
DebugLogs []string // Captured logLocalStt output
DecodedCommand string // Result of DecodeTranscript
Timestamp time.Time // When this decode happened
}
STTBugContext stores context from a previous STT decode for bug reporting.
type Server ¶
type Server struct {
*RPCClient
HaveTTS bool
AvailableWXByTRACON map[string][]util.TimeInterval
// contains filtered or unexported fields
}
This is the client-side representation of a server (perhaps could be better-named...)
func (*Server) GetRunningSims ¶
func (s *Server) GetRunningSims() map[string]*server.RunningSim
func (*Server) GetScenarioCatalogs ¶ added in v0.13.3
func (s *Server) GetScenarioCatalogs() map[string]map[string]*server.ScenarioCatalog
type SessionStats ¶
type SessionStats struct {
Departures int
Arrivals int
IntraFacility int
Overflights int
SignOnTime time.Time
Initials string
// contains filtered or unexported fields
}
func (*SessionStats) Update ¶
func (s *SessionStats) Update(ss *SimState)
type SimState ¶ added in v0.13.3
SimState is the client's view of simulation state. It embeds server.SimState, providing access to all its fields and methods.
func (*SimState) BeaconCodeInUse ¶ added in v0.13.3
func (*SimState) GetAllReleaseDepartures ¶ added in v0.13.3
func (ss *SimState) GetAllReleaseDepartures() []sim.ReleaseDeparture
func (*SimState) GetFlightPlanForACID ¶ added in v0.13.3
func (ss *SimState) GetFlightPlanForACID(acid sim.ACID) *sim.NASFlightPlan
func (*SimState) GetInitialCenter ¶ added in v0.13.3
func (*SimState) GetInitialRange ¶ added in v0.13.3
func (*SimState) GetOurTrackByACID ¶ added in v0.13.3
func (*SimState) GetOurTrackByCallsign ¶ added in v0.13.3
func (*SimState) GetRegularReleaseDepartures ¶ added in v0.13.3
func (ss *SimState) GetRegularReleaseDepartures() []sim.ReleaseDeparture
func (*SimState) GetSTARSReleaseDepartures ¶ added in v0.13.3
func (ss *SimState) GetSTARSReleaseDepartures() []sim.ReleaseDeparture
func (*SimState) GetTrackByACID ¶ added in v0.13.3
func (*SimState) GetTrackByCallsign ¶ added in v0.13.3
func (*SimState) GetTrackByFLID ¶ added in v0.13.3
func (*SimState) GetUserConsolidation ¶ added in v0.13.3
func (ss *SimState) GetUserConsolidation() *sim.TCPConsolidation
GetUserConsolidation returns the consolidation state for the current user's TCW. Returns nil if no consolidation state exists.
func (*SimState) UserControlsPosition ¶ added in v0.13.3
func (ss *SimState) UserControlsPosition(pos sim.ControlPosition) bool
UserControlsPosition returns true if the current user controls the given position.
type TransmissionManager ¶ added in v0.14.0
type TransmissionManager struct {
// contains filtered or unexported fields
}
TransmissionManager manages queuing and playback of radio transmissions. It centralizes the logic for playing MP3s in the correct order and handling playback state like holds after transmissions.
func NewTransmissionManager ¶ added in v0.14.0
func NewTransmissionManager(lg *log.Logger) *TransmissionManager
NewTransmissionManager creates a new TransmissionManager.
func (*TransmissionManager) EnqueueReadbackPCM ¶ added in v0.14.0
func (tm *TransmissionManager) EnqueueReadbackPCM(callsign av.ADSBCallsign, ty av.RadioTransmissionType, pcm []int16)
EnqueueReadbackPCM adds a readback with pre-decoded PCM to the front of the queue (high priority). Readbacks come from WebSocket delivery with pre-decoded audio.
func (*TransmissionManager) EnqueueTransmissionPCM ¶ added in v0.14.0
func (tm *TransmissionManager) EnqueueTransmissionPCM(callsign av.ADSBCallsign, ty av.RadioTransmissionType, pcm []int16)
EnqueueTransmissionPCM adds a pilot transmission with pre-decoded PCM to the queue. Used for contact and emergency transmissions where MP3 is decoded before enqueueing.
func (*TransmissionManager) Hold ¶ added in v0.14.0
func (tm *TransmissionManager) Hold()
Hold increments the hold counter, preventing playback until Unhold is called. Used during STT recording/processing to prevent speech playback.
func (*TransmissionManager) HoldAfterSilentContact ¶ added in v0.14.0
func (tm *TransmissionManager) HoldAfterSilentContact(callsign av.ADSBCallsign)
HoldAfterSilentContact sets a hold period after processing a contact without audio playback (when TTS is disabled). This maintains proper pacing of contacts.
func (*TransmissionManager) HoldAfterTransmission ¶ added in v0.14.0
func (tm *TransmissionManager) HoldAfterTransmission()
HoldAfterTransmission sets a hold period, used when the user initiates their own transmission and we should pause pilot transmissions briefly.
func (*TransmissionManager) IsContactRequested ¶ added in v0.14.0
func (tm *TransmissionManager) IsContactRequested() bool
IsContactRequested returns true if we're waiting for a contact response.
func (*TransmissionManager) IsPlaying ¶ added in v0.14.0
func (tm *TransmissionManager) IsPlaying() bool
IsPlaying returns true if a transmission is currently playing.
func (*TransmissionManager) LastTransmissionCallsign ¶ added in v0.14.0
func (tm *TransmissionManager) LastTransmissionCallsign() av.ADSBCallsign
LastTransmissionCallsign returns the callsign of the last played transmission.
func (*TransmissionManager) SetContactRequested ¶ added in v0.14.0
func (tm *TransmissionManager) SetContactRequested(requested bool)
SetContactRequested marks that we've sent a contact request and are waiting.
func (*TransmissionManager) SetEventStream ¶ added in v0.14.0
func (tm *TransmissionManager) SetEventStream(es *sim.EventStream)
SetEventStream sets the event stream for posting TTS latency events. This must be called before Update() will post latency events.
func (*TransmissionManager) ShouldRequestContact ¶ added in v0.14.0
func (tm *TransmissionManager) ShouldRequestContact() bool
ShouldRequestContact returns true if the client should request a contact from the server. It checks that we're not playing, not held, queue is empty, and no request is pending. It also returns true slightly early (2s before hold expires) to hide TTS latency.
func (*TransmissionManager) Unhold ¶ added in v0.14.0
func (tm *TransmissionManager) Unhold()
Unhold decrements the hold counter. Playback resumes when count reaches zero.