Skip to content
View in the app

A better way to browse. Learn more.

The AVSIM Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Selected Vertical Speed change in a C gauge... (Redux)

Featured Replies

  • Moderator

Note, this was a post from Aug 20 2005 originally. The forum software change following the "hack attack" managed to FUBAR the original code. Also, I've changed from trigger_key_event to send_key_event to eliminate potential conflicts with keyboard input.
Here's one way to get "Vertical Speed Change" working in a C autopilot. VS is selected via the "knob" to descend or ascend. Clicking on the knob's center will "cancel" SVS (Selected Vertical Speed) and return the AP HOLD (current altitude. For brevity, I've only included the relevant parts of the C source code:

/* The two FLOAT64 values may be simple "float" if you wish. 
I have to use FLOAT64 because of the need to convert to WCHAR for a GDI+ string */ 

FLOAT64 vspeed = 0; 

// This variable is used for display of the AUTOPILOT_VERTICAL_HOLD_VAR FLOAT64 dvspeed = 0; 

// This variable is needed because the AUTOPILOT_VERTICAL_HOLD_VAR cannot be "changed" when in ALT HOLD mode 
FLOAT64 oldAlt = 0;

MODULE_VAR AUTOPILOT_ALTITUDE_LOCKvar = {AUTOPILOT_ALTITUDE_LOCK}; 
MODULE_VAR AUTOPILOT_ACTIVEvar = {AUTOPILOT_ACTIVE}; 
MODULE_VAR AUTOPILOT_HEADING_LOCKvar = {AUTOPILOT_HEADING_LOCK}; 
MODULE_VAR AUTOPILOT_NAV1_LOCKvar = {AUTOPILOT_NAV1_LOCK}; 
MODULE_VAR GPS_GROUND_TRACKvar = {GPS_GROUND_TRACK};
MODULE_VAR AUTOPILOT_VERTICAL_HOLD_VARvar = {AUTOPILOT_VERTICAL_HOLD_VAR};
MODULE_VAR AUTOPILOT_VERTICAL_HOLDvar = {AUTOPILOT_VERTICAL_HOLD}; 
MODULE_VAR AUTOPILOT_ATTITUDE_HOLDvar = { AUTOPILOT_ATTITUDE_HOLD }; 
case PANEL_SERVICE_PRE_UPDATE: 
	lookup_var(&AUTOPILOT_ALTITUDE_LOCKvar); 
	lookup_var(&AUTOPILOT_ACTIVEvar); 
	lookup_var(&AUTOPILOT_NAV1_LOCKvar);
	lookup_var(&AUTOPILOT_VERTICAL_HOLD_VARvar); 
	lookup_var(&AUTOPILOT_ATTITUDE_HOLDvar); 
	vspeed = (AUTOPILOT_VERTICAL_HOLD_VARvar.var_value.n);
	lookup_var(&AUTOPILOT_HEADING_LOCKvar); 
	lookup_var(&AUTOPILOT_HEADING_LOCK_DIRvar); 
	hdg = (AUTOPILOT_HEADING_LOCK_DIRvar.var_value.n); 
	lookup_var(&HSI_OBI_NEEDLEvar); 
	crs = (HSI_OBI_NEEDLEvar.var_value.n); 
	lookup_var(&GPS_GROUND_TRACKvar); 
	dtk = RAD_TO_DEG(GPS_GROUND_TRACKvar.var_value.n); 
	break; 

case PANEL_SERVICE_PRE_DRAW: { 
	/* Update Routines */ 
	/* The dvspeed variable is set via the "knob turn" in the mouse callback. */ 
	/* This line ensures that the "selected altitude" is always different (plus or minus) than current altitude! */ 
	if ((ALT_FROM_BAROMETRIC_PRESSUREvar.var_value.n != oldAlt) || (dvspeed != olddvspeed)) 
		{ send_key_event(KEY_AP_ALT_VAR_SET_ENGLISH, (ALT_FROM_BAROMETRIC_PRESSUREvar.var_value.n + dvspeed) ); 
		oldAlt = ALT_FROM_BAROMETRIC_PRESSUREvar.var_value.n; olddvspeed = dvspeed; 
		} 
	}
	break; 
	
	/* This is the DECREASE mousepoint */ 
	BOOL FSAPI DF_mouse_cb2( PPIXPOINT relative_point, FLAGS32 mouse_flags) 
	{ if (mode == 3 || mode == 5) { dvspeed = dvspeed - 100; 
	send_key_event(KEY_AP_VS_VAR_SET_ENGLISH, dvspeed);
	send_key_event(KEY_AP_WING_LEVELER_OFF,0); 
	} 
	return FALSE; } 
	
	/* This is the INCREASE mousepoint */ 
	BOOL FSAPI DF_mouse_cb3( PPIXPOINT relative_point, FLAGS32 mouse_flags) 
	{ if (mode == 3 || mode == 5) { dvspeed = dvspeed + 100; 
	send_key_event(KEY_AP_VS_VAR_SET_ENGLISH, dvspeed); 
	send_key_event(KEY_AP_WING_LEVELER_OFF,0); } return FALSE; 

	} /* This is the CANCEL mousepoint */ 
	BOOL FSAPI DF_mouse_cb4( PPIXPOINT relative_point, FLAGS32 mouse_flags) 
	{ if (mode == 3 || mode == 5 ) { dvspeed = 0; 
	send_key_event(KEY_AP_VS_VAR_SET_ENGLISH, dvspeed); 
	send_key_event(KEY_AP_ALT_VAR_SET_ENGLISH, (ALT_FROM_BAROMETRIC_PRESSUREvar.var_value.n) ); 
	send_key_event(KEY_AP_WING_LEVELER_OFF,0); send_key_event(KEY_AP_PANEL_VS_OFF, 0); 
	}
	}

Fr. Bill    

AOPA Member: 07141481 AARP Member: 3209010556


     Avsim Board of Directors | Avsim Forums Moderator

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.