// An32.ADI.cpp
// Copyright (c) 2006 Microsoft Corporation. All rights reserved.
// Set up gauge header
char adi_gauge_name[] = GAUGE_NAME;
extern PELEMENT_HEADER adi_list;
extern MOUSERECT adi_mouse_rect[];
GAUGE_HEADER_FS700(GAUGE_W, adi_gauge_name, &adi_list, \
adi_mouse_rect, 0, 0, 0, 0);
UINT32 gyro_card = 0;
/////////////////////////////////////////////////////////////////////////////
FAILURE_RECORD adi_fail[] =
{
{FAIL_GAUGE_MAGNETIC_COMPASS, FAIL_ACTION_FREEZE},
{FAIL_NONE, FAIL_ACTION_NONE}
};
#define PITCH_LIMIT 90.0 // stop at 90 degrees
/////////////////////////////////////////////////////////////////////////////
FLOAT64 FSAPI adi_moving_card_x_cb( PELEMENT_MOVING_IMAGE pelement )
{
return 1.0;
}
FLOAT64 FSAPI adi_moving_card_y_cb( PELEMENT_MOVING_IMAGE pelement )
{
FLOAT64 val = pelement->source_var_y.var_value.n;
if( val > PITCH_LIMIT )
val = PITCH_LIMIT;
else if( val < -PITCH_LIMIT )
val = -PITCH_LIMIT;
return val;
}
FLOAT64 FSAPI adi_needle_cb( PELEMENT_NEEDLE pelement )
{
FLOAT64 val = pelement->source_var.var_value.n;
val *= -1;
return val;
}
MODULE_VAR gyro_hdg = { PLANE_HEADING_DEGREES_GYRO };
FLOAT64 FSAPI obi_deviation_cb( PELEMENT_NEEDLE pelement ) //pelement = VOR1_OBI
{
lookup_var(&gyro_hdg);
gyro_card = 359 - gyro_hdg.var_value.n;
// Offset by attitude card's bank
return (pelement->source_var.var_value.n + gyro_card); //gyro_hdg.var_value.n - pelement->source_var_0.var_value.n;
}
/////////////////////////////////////////////////////////////////////////////
//Slideres
MAKE_SLIDER //ILS
(
cs_adi_slider_horizontal,
BMP_ADI_VERT_MARK,
NULL,
0,
IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY,
0,
175,62,
//176,62,
VOR1_NEEDLE, NULL, 0.38, //Hace el papel del ILS
MODULE_VAR_NONE, NULL, 0
)
MAKE_SLIDER //ILS Glide Slope
(
cs_adi_slider_vertical,
BMP_ADI_HORI_MARK,
NULL,
0,
IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY,
0,
//36,193,
36,194,
MODULE_VAR_NONE, NULL, 0,
VOR1_GS_NEEDLE, NULL, 0.4 //Hace el papel del ILS
)
MAKE_SLIDER //Glide Slope
(
cs_adi_slider_glide_slope,
BMP_ADI_GLIDE_SLOPE,
NULL,
0,
IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY,
0,
125,193,
MODULE_VAR_NONE, NULL, 0,
VOR1_GS_NEEDLE, NULL, 0.4 //Hace el papel del ILS
)
PELEMENT_HEADER cs_adi_sliders_list[] =
{
&cs_adi_slider_vertical.header,
&cs_adi_slider_horizontal.header,
&cs_adi_slider_glide_slope.header,
NULL
};
/////////////////////////////////////////////////////////////////////////////
MAKE_NEEDLE //Obi Needle
(
adi_localizer_needle,
BMP_ADI_LOCALIZER,
cs_adi_sliders_list,
adi_fail,
IMAGE_USE_TRANSPARENCY|IMAGE_USE_ERASE|IMAGE_BILINEAR_COLOR,
0,
177, 282,
3, 123,
VOR1_OBI, obi_deviation_cb,
NULL,
4
)
PELEMENT_HEADER adi_localizer_needle_list[] =
{
(PELEMENT_HEADER)&adi_localizer_needle,
NULL
};
MAKE_NEEDLE
(
adi_needle,
BMP_ADI_NEEDLE,
adi_localizer_needle_list,
adi_fail,
IMAGE_USE_TRANSPARENCY|IMAGE_USE_ERASE|IMAGE_BILINEAR_COLOR,
0,
177, 195,
112, 13,
ATTITUDE_INDICATOR_BANK_DEGREES, adi_needle_cb,
NULL,
4
)
PELEMENT_HEADER adi_needle_list[] =
{
(PELEMENT_HEADER)&adi_needle,
NULL
};
MAKE_MOVING
(
adi_moving_card,
BMP_ADI_HORIZONTE,
adi_needle_list,
adi_fail,
IMAGE_USE_ERASE | IMAGE_USE_TRANSPARENCY,
0,
//130,-500, //Posición del bitamp
125, 96,
MODULE_VAR_NONE, adi_moving_card_x_cb,
0, 0,
ATTITUDE_INDICATOR_PITCH_DEGREES, adi_moving_card_y_cb,
-90, 90
)
PELEMENT_HEADER adi_moving_card_list[2] =
{
&adi_moving_card.header, //Hace referencia a adi_moving_card
NULL
};
MAKE_STATIC
(
adi_background,
BMP_ADI_BACKGROUND,
&adi_moving_card_list,
NULL,
IMAGE_USE_TRANSPARENCY,
0,
0,0
)
PELEMENT_HEADER adi_list = &adi_background.header;
/////////////////////////////////////////////////////////////////////////////
MOUSE_BEGIN( adi_mouse_rect, HELPID_GAUGE_WHISKEY_COMPASS, 0, 0 )
MOUSE_END
/////////////////////////////////////////////////////////////////////////////
#undef GAUGE_NAME
#undef GAUGEHDR_VAR_NAME
#undef GAUGE_W