249 lines
12 KiB
Text
249 lines
12 KiB
Text
|
var nd_display = {};
|
||
|
|
||
|
setlistener("sim/signals/fdm-initialized", func() {
|
||
|
|
||
|
setprop("instrumentation/efis/nd/display-mode", "ARC");
|
||
|
setprop("instrumentation/efis/inputs/tfc", 1);
|
||
|
setprop("instrumentation/efis/inputs/wpt", 0);
|
||
|
setprop("instrumentation/efis/inputs/wxr", 1);
|
||
|
setprop("instrumentation/efis/inputs/sta", 0);
|
||
|
setprop("instrumentation/efis/inputs/arpt", 0);
|
||
|
setprop("instrumentation/efis/mfd/true-north", 0);
|
||
|
|
||
|
var toggle_listeners = {
|
||
|
# symbolic alias : relative property (as used in bindings), initial value, type
|
||
|
'toggle_range': {path: '/inputs/range-nm', value:40, type:'INT'},
|
||
|
'toggle_weather': {path: '/inputs/wxr', value:0, type:'BOOL'},
|
||
|
'toggle_airports': {path: '/inputs/arpt', value:0, type:'BOOL'},
|
||
|
'toggle_ndb': {path: '/inputs/NDB', value:0, type:'BOOL'},
|
||
|
'toggle_stations': {path: '/inputs/sta', value:0, type:'BOOL'},
|
||
|
'toggle_vor': {path: '/inputs/VORD', value:0, type:'BOOL'},
|
||
|
'toggle_cstr': {path: '/inputs/CSTR', value:0, type:'BOOL'},
|
||
|
'toggle_waypoints': {path: '/inputs/wpt', value:0, type:'BOOL'},
|
||
|
'toggle_position': {path: '/inputs/pos', value:0, type:'BOOL'},
|
||
|
'toggle_data': {path: '/inputs/data',value:0, type:'BOOL'},
|
||
|
'toggle_terrain': {path: '/inputs/terr',value:0, type:'BOOL'},
|
||
|
'toggle_traffic': {path: '/inputs/tfc',value:0, type:'BOOL'},
|
||
|
'toggle_centered': {path: '/inputs/nd-centered',value:0, type:'BOOL'},
|
||
|
'toggle_lh_vor_adf': {path: '/input/lh-vor-adf',value:0, type:'INT'},
|
||
|
'toggle_rh_vor_adf': {path: '/input/rh-vor-adf',value:0, type:'INT'},
|
||
|
'toggle_display_mode': {path: '/nd/canvas-display-mode', value:'NAV', type:'STRING'},
|
||
|
'toggle_display_type': {path: '/mfd/display-type', value:'LCD', type:'STRING'},
|
||
|
'toggle_true_north': {path: '/mfd/true-north', value:1, type:'BOOL'},
|
||
|
'toggle_track_heading': {path: '/trk-selected', value:0, type:'BOOL'},
|
||
|
'toggle_fplan': {path: '/nd/route-manager-active', value:0, type: 'BOOL'}, # flight plan active
|
||
|
'toggle_lnav': {path: '/nd/lnav', value:0, type: 'BOOL'}, # LNAV active
|
||
|
'toggle_vnav': {path: '/nd/vnav', value:0, type: 'BOOL'}, # VNAV active
|
||
|
'toggle_wpt_idx': {path: '/inputs/plan-wpt-index', value: -1, type: 'INT'},# WPT Index to be used in PLAN
|
||
|
'toggle_plan_loop': {path: '/nd/plan-mode-loop', value: 0, type: 'INT'}, # Not used
|
||
|
'toggle_app_mode': {path: '/nd/app-mode', value:'', type: 'STRING'}, # Approach mode string (ie. 'ILS APP')
|
||
|
'toggle_cur_td': {path: '/nd/current-td', value: 0, type: 'INT'}, # Top of Desc dist. along route
|
||
|
'toggle_cur_tc': {path: '/nd/current-tc', value: 0, type: 'INT'}, # Top of Climb dist. along route
|
||
|
'toggle_cur_sc': {path: '/nd/current-sc', value: 0, type: 'INT'}, # Start of Climb dist. along route
|
||
|
'toggle_cur_ed': {path: '/nd/current-ed', value: 0, type: 'INT'}, # End of Desc dist. along route
|
||
|
'toggle_cur_sd': {path: '/nd/current-sd', value: 0, type: 'INT'}, # Start of Desc dist. along route
|
||
|
'toggle_cur_ec': {path: '/nd/current-ec', value: 0, type: 'INT'}, # End of Climb dist. along route
|
||
|
'toggle_lvl_off_at': {path: '/nd/level-off-at', value: 0, type: 'INT'}, # Level-off point along route
|
||
|
'toggle_man_spd': {path: '/nd/managed-spd', value: 0, type: 'INT'}, # Managed Speed Mode
|
||
|
'toggle_athr': {path: '/nd/athr', value: 0, type: 'INT'}, # Auto-thrust engaged
|
||
|
'toggle_spd_point_100': {path: '/nd/spd-change-raw-100', value: 0, type: 'INT'}, # Speed limit change point FL100
|
||
|
'toggle_spd_point_140': {path: '/nd/spd-change-raw-140', value: 0, type: 'INT'}, # Speed limit change point FL140
|
||
|
'toggle_spd_point_250': {path: '/nd/spd-change-raw-250', value: 0, type: 'INT'}, # Speed limit change point FL250
|
||
|
'toggle_spd_point_260': {path: '/nd/spd-change-raw-260', value: 0, type: 'INT'}, # Speed limit change point FL260
|
||
|
'toggle_nav1_frq': {path: '/nd/nav1_frq', value: 0, type: 'INT'}, # Nav1 Freq. Listener
|
||
|
'toggle_nav2_frq': {path: '/nd/nav2_frq', value: 0, type: 'INT'}, # Nav2 Freq. Listener
|
||
|
'toggle_adf1_frq': {path: '/nd/adf1_frq', value: 0, type: 'INT'}, # ADF1 Freq. Listener
|
||
|
'toggle_adf2_frq': {path: '/nd/adf2_frq', value: 0, type: 'INT'}, # ADF2 Freq. Listener
|
||
|
'toggle_hold_init': {path: '/nd/hold_init', value: 0, type: 'INT'}, # HOLD pattern init Listener
|
||
|
'toggle_hold_update': {path: '/nd/hold_update', value: 0, type: 'INT'}, # HOLD pattern update Listener
|
||
|
'toggle_hold_wp': {path: '/nd/hold_wp', value: '', type: 'STRING'}, # HOLD pattern waypoint
|
||
|
'toggle_route_num': {path: '/nd/route_num', value: 0, type: 'INT'}, # Route waypoint count
|
||
|
'toggle_cur_wp': {path: '/nd/cur_wp', value: 0, type: 'INT'}, # Current Waypoint (TO Waypoint) index
|
||
|
'toggle_ap1': {path: '/nd/ap1', value: '', type: 'STRING'}, # AP1 engaged
|
||
|
'toggle_ap2': {path: '/nd/ap2', value: '', type: 'STRING'}, # AP2 engaged
|
||
|
'toggle_dep_rwy': {path: '/nd/dep_rwy', value: '', type: 'STRING'}, # Departure runway
|
||
|
'toggle_dest_rwy': {path: '/nd/dest_rwy', value: '', type: 'STRING'}, # Destination runway
|
||
|
};
|
||
|
|
||
|
var ND = canvas.NavDisplay;
|
||
|
var NDCpt = ND.new("instrumentation/efis", toggle_listeners, 'Airbus');
|
||
|
|
||
|
nd_display.main = canvas.new({
|
||
|
"name": "ND",
|
||
|
"size": [1024, 1024],
|
||
|
"view": [1024, 1024],
|
||
|
"mipmapping": 1
|
||
|
});
|
||
|
|
||
|
nd_display.main.addPlacement({"node": "ND.screen"});
|
||
|
var group = nd_display.main.createGroup();
|
||
|
|
||
|
NDCpt.newMFD(group);
|
||
|
|
||
|
NDCpt.update();
|
||
|
|
||
|
setprop("instrumentation/efis/inputs/plan-wpt-index", -1);
|
||
|
|
||
|
print("ND Canvas Initialized!");
|
||
|
}); # fdm-initialized listener callback
|
||
|
|
||
|
# Create Listeners to update the ND, change the property map values to fit
|
||
|
# the properties you use in your own aircraft
|
||
|
|
||
|
var property_map = {
|
||
|
des_apt: "/autopilot/route-manager/destination/airport",
|
||
|
dep_apt: "/autopilot/route-manager/departure/airport",
|
||
|
des_rwy: "/autopilot/route-manager/destination/runway",
|
||
|
dep_rwy: "/autopilot/route-manager/departure/runway",
|
||
|
fplan_active: 'autopilot/route-manager/active',
|
||
|
athr: '/flight-management/control/a-thrust',
|
||
|
cur_wp: "/autopilot/route-manager/current-wp",
|
||
|
vnav_node: "/autopilot/route-manager/vnav/",
|
||
|
spd_node: "/autopilot/route-manager/spd/",
|
||
|
holding: "/flight-management/hold",
|
||
|
holding_points: "/flight-management/hold/points",
|
||
|
adf1_frq: 'instrumentation/adf/frequencies/selected-khz',
|
||
|
adf2_frq: 'instrumentation/adf[1]/frequencies/selected-khz',
|
||
|
nav1_frq: 'instrumentation/nav/frequencies/selected-mhz',
|
||
|
nav2_frq: 'instrumentation/nav[1]/frequencies/selected-mhz',
|
||
|
lat_ctrl: 'flight-management/control/lat-ctrl',
|
||
|
ver_ctrl: "flight-management/control/ver-ctrl",
|
||
|
spd_ctrl: "flight-management/control/spd-ctrl",
|
||
|
};
|
||
|
|
||
|
setlistener("instrumentation/efis/nd/display-mode", func{
|
||
|
var canvas_mode = "instrumentation/efis/nd/canvas-display-mode";
|
||
|
var nd_centered = "instrumentation/efis/inputs/nd-centered";
|
||
|
var mode = getprop("instrumentation/efis/nd/display-mode");
|
||
|
var cvs_mode = 'NAV';
|
||
|
var centered = 1;
|
||
|
if(mode == 'ILS'){
|
||
|
cvs_mode = 'APP';
|
||
|
}
|
||
|
elsif(mode == 'VOR') {
|
||
|
cvs_mode = 'VOR';
|
||
|
}
|
||
|
elsif(mode == 'NAV'){
|
||
|
cvs_mode = 'MAP';
|
||
|
}
|
||
|
elsif(mode == 'ARC'){
|
||
|
cvs_mode = 'MAP';
|
||
|
centered = 0;
|
||
|
}
|
||
|
elsif(mode == 'PLAN'){
|
||
|
cvs_mode = 'PLAN';
|
||
|
}
|
||
|
setprop(canvas_mode, cvs_mode);
|
||
|
setprop(nd_centered, centered);
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.fplan_active, func{
|
||
|
var actv = getprop(property_map.fplan_active);
|
||
|
setprop('instrumentation/efis/nd/route-manager-active', actv);
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.athr, func{
|
||
|
var athr = getprop(property_map.athr);
|
||
|
setprop('instrumentation/efis/nd/athr', (athr == 'eng'));
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.ver_ctrl, func{
|
||
|
var verctrl = getprop(property_map.ver_ctrl);
|
||
|
setprop('instrumentation/efis/nd/vnav', (verctrl == 'fmgc'));
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.spd_ctrl, func{
|
||
|
var spdctrl = getprop(property_map.spd_ctrl);
|
||
|
setprop('instrumentation/efis/nd/managed-spd', (spdctrl == 'fmgc'));
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.lat_ctrl, func{
|
||
|
var latctrl = getprop(property_map.lat_ctrl);
|
||
|
setprop('instrumentation/efis/nd/lnav', (latctrl == 'fmgc'));
|
||
|
});
|
||
|
|
||
|
setlistener("/instrumentation/mcdu/f-pln/disp/first", func{
|
||
|
var first = getprop("/instrumentation/mcdu/f-pln/disp/first");
|
||
|
if(typeof(first) == 'nil') first = -1;
|
||
|
if(getprop('autopilot/route-manager/route/num') == 0) first = -1;
|
||
|
setprop("instrumentation/efis/inputs/plan-wpt-index", first);
|
||
|
});
|
||
|
|
||
|
setlistener('/instrumentation/efis/nd/terrain-on-nd', func{
|
||
|
var terr_on_hd = getprop('/instrumentation/efis/nd/terrain-on-nd');
|
||
|
var alpha = 1;
|
||
|
if(terr_on_hd) alpha = 0.5;
|
||
|
nd_display.main.setColorBackground(0,0,0,alpha);
|
||
|
});
|
||
|
|
||
|
setlistener('instrumentation/nav/frequencies/selected-mhz', func{
|
||
|
var mhz = getprop('instrumentation/nav/frequencies/selected-mhz');
|
||
|
if(mhz == nil) mhz = 0;
|
||
|
setprop('/instrumentation/efis/nd/nav1_frq', mhz);
|
||
|
});
|
||
|
|
||
|
setlistener('instrumentation/nav[1]/frequencies/selected-mhz', func{
|
||
|
var mhz = getprop('instrumentation/nav[1]/frequencies/selected-mhz');
|
||
|
if(mhz == nil) mhz = 0;
|
||
|
setprop('/instrumentation/efis/nd/nav2_frq', mhz);
|
||
|
});
|
||
|
|
||
|
setlistener('instrumentation/adf/frequencies/selected-khz', func{
|
||
|
var khz = getprop('instrumentation/adf/frequencies/selected-khz');
|
||
|
if(khz == nil) khz = 0;
|
||
|
setprop('/instrumentation/efis/nd/adf1_frq', khz);
|
||
|
});
|
||
|
|
||
|
setlistener('instrumentation/adf[1]/frequencies/selected-khz', func{
|
||
|
var khz = getprop('instrumentation/adf[1]/frequencies/selected-khz');
|
||
|
if(khz == nil) khz = 0;
|
||
|
setprop('/instrumentation/efis/nd/adf2_frq', khz);
|
||
|
});
|
||
|
|
||
|
setlistener('flight-management/hold/init', func{
|
||
|
var init = getprop('flight-management/hold/init');
|
||
|
if(init == nil) init = 0;
|
||
|
setprop('/instrumentation/efis/nd/hold_init', init);
|
||
|
});
|
||
|
|
||
|
setlistener("/flight-management/hold/wp", func{
|
||
|
var wpid = getprop("/flight-management/hold/wp");
|
||
|
if(wpid == nil) wpid = '';
|
||
|
setprop('/instrumentation/efis/nd/hold_wp', wpid);
|
||
|
});
|
||
|
|
||
|
setlistener('autopilot/route-manager/route/num', func{
|
||
|
var num = getprop('autopilot/route-manager/route/num');
|
||
|
setprop('/instrumentation/efis/nd/route_num', num);
|
||
|
});
|
||
|
|
||
|
setlistener(property_map.cur_wp, func(){
|
||
|
var curwp = getprop('autopilot/route-manager/current-wp');
|
||
|
setprop('/instrumentation/efis/nd/cur_wp',curwp);
|
||
|
});
|
||
|
|
||
|
setlistener("/flight-management/control/ap1-master", func(){
|
||
|
var ap1 = getprop("/flight-management/control/ap1-master");
|
||
|
setprop('/instrumentation/efis/nd/ap1',ap1);
|
||
|
});
|
||
|
|
||
|
setlistener("/flight-management/control/ap2-master", func(){
|
||
|
var ap2 = getprop("/flight-management/control/ap2-master");
|
||
|
setprop('/instrumentation/efis/nd/ap2',ap2);
|
||
|
});
|
||
|
|
||
|
setlistener("/autopilot/route-manager/departure/runway", func(){
|
||
|
var rwy = getprop("/autopilot/route-manager/departure/runway");
|
||
|
setprop('/instrumentation/efis/nd/dep_rwy',rwy);
|
||
|
});
|
||
|
|
||
|
setlistener("/autopilot/route-manager/destination/runway", func(){
|
||
|
var rwy = getprop("/autopilot/route-manager/destination/runway");
|
||
|
setprop('/instrumentation/efis/nd/dest_rwy',rwy);
|
||
|
});
|
||
|
|
||
|
var showNd = func() {
|
||
|
# The optional second arguments enables creating a window decoration
|
||
|
var dlg = canvas.Window.new([400, 400], "dialog");
|
||
|
dlg.setCanvas( nd_display["main"] );
|
||
|
}
|