11using CoreAudio ;
22using Microsoft . Win32 ;
33using System ;
4- using System . IO ;
54using System . Diagnostics ;
5+ using System . IO ;
66using System . Linq ;
77using System . Threading ;
88
@@ -55,6 +55,9 @@ public class GsxController
5555 private AudioSessionControl2 gsxAudioSession = null ;
5656 private float gsxAudioVolume = - 1 ;
5757 private int gsxAudioMute = - 1 ;
58+ private AudioSessionControl2 vhf1AudioSession = null ;
59+ private float vhf1AudioVolume = - 1 ;
60+ private int vhf1AudioMute = - 1 ;
5861
5962 public int Interval { get ; set ; } = 1000 ;
6063
@@ -81,21 +84,23 @@ public GsxController(ServiceModel model)
8184 SimConnect . SubscribeLvar ( "FSDT_VAR_EnginesStopped" ) ;
8285 SimConnect . SubscribeLvar ( "FSDT_GSX_COUATL_STARTED" ) ;
8386 SimConnect . SubscribeLvar ( "FSDT_GSX_JETWAY" ) ;
87+ SimConnect . SubscribeLvar ( "FSDT_GSX_OPERATEJETWAYS_STATE" ) ;
8488 SimConnect . SubscribeLvar ( "FSDT_GSX_STAIRS" ) ;
89+ SimConnect . SubscribeLvar ( "FSDT_GSX_OPERATESTAIRS_STATE" ) ;
8590 SimConnect . SubscribeLvar ( "S_MIP_PARKING_BRAKE" ) ;
8691 SimConnect . SubscribeLvar ( "S_OH_EXT_LT_BEACON" ) ;
8792 SimConnect . SubscribeLvar ( "I_OH_ELEC_EXT_PWR_L" ) ;
8893 SimConnect . SubscribeLvar ( "I_OH_ELEC_APU_START_U" ) ;
8994 SimConnect . SubscribeLvar ( "S_OH_PNEUMATIC_APU_BLEED" ) ;
95+ SimConnect . SubscribeLvar ( "I_FCU_TRACK_FPA_MODE" ) ;
96+ SimConnect . SubscribeLvar ( "I_FCU_HEADING_VS_MODE" ) ;
9097
9198 FenixController = new ( Model ) ;
9299
93100 if ( Model . GsxVolumeControl )
94101 {
95102 SimConnect . SubscribeLvar ( "I_ASP_INT_REC" ) ;
96103 SimConnect . SubscribeLvar ( "A_ASP_INT_VOLUME" ) ;
97- SimConnect . SubscribeLvar ( "I_FCU_TRACK_FPA_MODE" ) ;
98- SimConnect . SubscribeLvar ( "I_FCU_HEADING_VS_MODE" ) ;
99104
100105 MMDeviceEnumerator deviceEnumerator = new ( Guid . NewGuid ( ) ) ;
101106 var devices = deviceEnumerator . EnumerateAudioEndPoints ( DataFlow . Render , DeviceState . Active ) ;
@@ -117,6 +122,31 @@ public GsxController(ServiceModel model)
117122 }
118123 }
119124
125+ if ( ! string . IsNullOrEmpty ( Model . Vhf1VolumeApp ) )
126+ {
127+ SimConnect . SubscribeLvar ( "I_ASP_VHF_1_REC" ) ;
128+ SimConnect . SubscribeLvar ( "A_ASP_VHF_1_VOLUME" ) ;
129+
130+ MMDeviceEnumerator deviceEnumerator = new ( Guid . NewGuid ( ) ) ;
131+ var devices = deviceEnumerator . EnumerateAudioEndPoints ( DataFlow . Render , DeviceState . Active ) ;
132+
133+ foreach ( var device in devices )
134+ {
135+ foreach ( var session in device . AudioSessionManager2 . Sessions )
136+ {
137+ Process p = Process . GetProcessById ( ( int ) session . ProcessID ) ;
138+ if ( p . ProcessName == Model . Vhf1VolumeApp )
139+ {
140+ vhf1AudioSession = session ;
141+ break ;
142+ }
143+ }
144+
145+ if ( vhf1AudioSession != null )
146+ break ;
147+ }
148+ }
149+
120150 string regPath = ( string ) Registry . GetValue ( registryPath , registryValue , null ) + pathMenuFile ;
121151 if ( Path . Exists ( regPath ) )
122152 menuFile = regPath ;
@@ -132,31 +162,60 @@ public void ResetAudio()
132162 gsxAudioSession . SimpleAudioVolume . MasterVolume = 1.0f ;
133163 gsxAudioSession . SimpleAudioVolume . Mute = false ;
134164 }
165+
166+ if ( vhf1AudioSession != null )
167+ {
168+ vhf1AudioSession . SimpleAudioVolume . MasterVolume = 1.0f ;
169+ vhf1AudioSession . SimpleAudioVolume . Mute = false ;
170+ }
135171 }
136172
137173 public void ControlAudio ( )
138174 {
139- if ( ! Model . GsxVolumeControl || gsxAudioSession == null )
140- return ;
141-
142- if ( ! ( SimConnect . ReadLvar ( "I_FCU_TRACK_FPA_MODE" ) == 1 || SimConnect . ReadLvar ( "I_FCU_HEADING_VS_MODE" ) == 1 ) )
175+ if ( Model . GsxVolumeControl && gsxAudioSession != null )
143176 {
144- ResetAudio ( ) ;
145- return ;
146- }
177+ if ( ! ( SimConnect . ReadLvar ( "I_FCU_TRACK_FPA_MODE" ) == 1 || SimConnect . ReadLvar ( "I_FCU_HEADING_VS_MODE" ) == 1 ) )
178+ {
179+ ResetAudio ( ) ;
180+ return ;
181+ }
147182
148- float volume = SimConnect . ReadLvar ( "A_ASP_INT_VOLUME" ) ;
149- int muted = ( int ) SimConnect . ReadLvar ( "I_ASP_INT_REC" ) ;
150- if ( volume >= 0 && volume != gsxAudioVolume )
151- {
152- gsxAudioSession . SimpleAudioVolume . MasterVolume = volume ;
153- gsxAudioVolume = volume ;
183+ float volume = SimConnect . ReadLvar ( "A_ASP_INT_VOLUME" ) ;
184+ int muted = ( int ) SimConnect . ReadLvar ( "I_ASP_INT_REC" ) ;
185+ if ( volume >= 0 && volume != gsxAudioVolume )
186+ {
187+ gsxAudioSession . SimpleAudioVolume . MasterVolume = volume ;
188+ gsxAudioVolume = volume ;
189+ }
190+
191+ if ( muted >= 0 && muted != gsxAudioMute )
192+ {
193+ gsxAudioSession . SimpleAudioVolume . Mute = muted == 0 ;
194+ gsxAudioMute = muted ;
195+ }
154196 }
155197
156- if ( muted >= 0 && muted != gsxAudioMute )
198+ if ( ! string . IsNullOrEmpty ( Model . Vhf1VolumeApp ) && vhf1AudioSession != null )
157199 {
158- gsxAudioSession . SimpleAudioVolume . Mute = muted == 0 ;
159- gsxAudioMute = muted ;
200+ if ( ! Model . GsxVolumeControl && ( ! ( SimConnect . ReadLvar ( "I_FCU_TRACK_FPA_MODE" ) == 1 || SimConnect . ReadLvar ( "I_FCU_HEADING_VS_MODE" ) == 1 ) ) )
201+ {
202+ ResetAudio ( ) ;
203+ return ;
204+ }
205+
206+ float volume = SimConnect . ReadLvar ( "A_ASP_VHF_1_VOLUME" ) ;
207+ int muted = ( int ) SimConnect . ReadLvar ( "I_ASP_VHF_1_REC" ) ;
208+ if ( volume >= 0 && volume != vhf1AudioVolume )
209+ {
210+ vhf1AudioSession . SimpleAudioVolume . MasterVolume = volume ;
211+ vhf1AudioVolume = volume ;
212+ }
213+
214+ if ( muted >= 0 && muted != vhf1AudioMute )
215+ {
216+ vhf1AudioSession . SimpleAudioVolume . Mute = muted == 0 ;
217+ vhf1AudioMute = muted ;
218+ }
160219 }
161220 }
162221
@@ -402,7 +461,7 @@ public void RunServices()
402461 {
403462 Logger . Log ( LogLevel . Information , "GsxController:RunServices" , $ "Preparing for Pushback - removing Equipment") ;
404463 int departState = ( int ) SimConnect . ReadLvar ( "FSDT_GSX_DEPARTURE_STATE" ) ;
405- if ( SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) != 2 && departState < 4 )
464+ if ( departState < 4 && SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) != 2 && SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) == 5 && SimConnect . ReadLvar ( "FSDT_GSX_OPERATEJETWAYS_STATE" ) < 3 )
406465 {
407466 MenuOpen ( ) ;
408467 Logger . Log ( LogLevel . Information , "GsxController:RunServices" , $ "Removing Jetway") ;
@@ -595,21 +654,21 @@ private void CallJetwayStairs()
595654 {
596655 MenuOpen ( ) ;
597656
598- if ( SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) != 2 )
657+ if ( SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) != 2 && SimConnect . ReadLvar ( "FSDT_GSX_JETWAY" ) != 5 && SimConnect . ReadLvar ( "FSDT_GSX_OPERATEJETWAYS_STATE" ) < 3 )
599658 {
600659 Logger . Log ( LogLevel . Information , "GsxController:RunServices" , $ "Calling Jetway") ;
601660 MenuItem ( 6 ) ;
602661 OperatorSelection ( ) ;
603662
604- if ( SimConnect . ReadLvar ( "FSDT_GSX_STAIRS" ) != 2 )
663+ if ( SimConnect . ReadLvar ( "FSDT_GSX_STAIRS" ) != 2 && SimConnect . ReadLvar ( "FSDT_GSX_STAIRS" ) != 5 && SimConnect . ReadLvar ( "FSDT_GSX_OPERATESTAIRS_STATE" ) < 3 )
605664 {
606665 Thread . Sleep ( 1500 ) ;
607666 MenuOpen ( ) ;
608667 Logger . Log ( LogLevel . Information , "GsxController:RunServices" , $ "Calling Stairs") ;
609668 MenuItem ( 7 ) ;
610669 }
611670 }
612- else
671+ else if ( SimConnect . ReadLvar ( "FSDT_GSX_STAIRS" ) != 5 && SimConnect . ReadLvar ( "FSDT_GSX_OPERATESTAIRS_STATE" ) < 3 )
613672 {
614673 Logger . Log ( LogLevel . Information , "GsxController:RunServices" , $ "Calling Stairs") ;
615674 MenuItem ( 7 ) ;
0 commit comments