1## garmin 196 functions 2var last_time = 0.0; 3var last_bearing = -1; 4var tab_chiffres_lettres = ["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]; 5var old_status = -1; 6 7var init_variables = func{ 8 ##version 9 props.globals.getNode("/instrumentation/garmin196/version",1).setValue("JeeP v. 18/03/2012"); 10 11 ##routes 12 props.globals.getNode("/instrumentation/garmin196/menu_routes/search/x_char",1).setIntValue(0); 13 props.globals.getNode("/instrumentation/garmin196/menu_routes/search/y_char",1).setIntValue(0); 14 props.globals.getNode("/instrumentation/garmin196/menu_routes/fpl-loaded",1).setBoolValue(0); 15 props.globals.getNode("/instrumentation/garmin196/menu_routes/waypoint-jump",1).setBoolValue(0); 16 17 ##points 18 props.globals.getNode("/instrumentation/garmin196/menu_points/x_char",1).setIntValue(0); 19 props.globals.getNode("/instrumentation/garmin196/menu_points/y_char",1).setIntValue(0); 20 21 ##aircrafts 22 props.globals.getNode("/instrumentation/garmin196/menu_aircraft/x_char",1).setIntValue(0); 23 props.globals.getNode("/instrumentation/garmin196/menu_aircraft/y_char",1).setIntValue(0); 24 25 ##init waypoint system 26 props.globals.getNode("/instrumentation/garmin196/panel-wpt-bearing",1).setDoubleValue(0); 27 props.globals.getNode("/instrumentation/garmin196/position-wpt-bearing",1).setDoubleValue(0); 28 props.globals.getNode("/instrumentation/garmin196/panel-wpt-id",1).setValue("------"); 29 props.globals.getNode("/instrumentation/gps/config/drive-autopilot",1).setBoolValue(0); ##pour ne pas interferer avec l'autopilot 30 31 ##init map system 32 props.globals.getNode("/instrumentation/garmin196/map-range",1).setDoubleValue(0.125); 33 34 ##init dto system 35 props.globals.getNode("/instrumentation/garmin196/dto_display/x_char",1).setIntValue(0); 36 props.globals.getNode("/instrumentation/garmin196/dto_display/y_char",1).setIntValue(0); 37 38 ##init saveable variables 39 props.globals.getNode("/instrumentation/garmin196/antenne-deg",1).setDoubleValue(30); 40 props.globals.getNode("/instrumentation/garmin196/light",1).setDoubleValue(30); 41 props.globals.getNode("/instrumentation/garmin196/max-speed",1).setDoubleValue(150); 42 props.globals.getNode("/instrumentation/garmin196/cruise-speed",1).setDoubleValue(120); 43 props.globals.getNode("/instrumentation/garmin196/fuel-flow",1).setDoubleValue(5); 44 props.globals.getNode("/instrumentation/garmin196/no_aircraft",1).setIntValue(0); 45 props.globals.getNode("/instrumentation/garmin196/symbols/params/airport",1).setBoolValue(1); 46 props.globals.getNode("/instrumentation/garmin196/symbols/params/vor",1).setBoolValue(1); 47 props.globals.getNode("/instrumentation/garmin196/symbols/params/ndb",1).setBoolValue(1); 48 props.globals.getNode("/instrumentation/garmin196/symbols/params/fix",1).setBoolValue(1); 49 props.globals.getNode("/instrumentation/garmin196/symbols/params/twn",1).setBoolValue(1); 50 props.globals.getNode("/instrumentation/garmin196/symbols/params/wpt",1).setBoolValue(1); 51 52 props.globals.getNode("/instrumentation/garmin196/params/units/distance",1).setIntValue(1); 53 props.globals.getNode("/instrumentation/garmin196/params/units/speed",1).setIntValue(1); 54 props.globals.getNode("/instrumentation/garmin196/params/units/vert-speed",1).setIntValue(1); 55 props.globals.getNode("/instrumentation/garmin196/params/units/altitude",1).setIntValue(1); 56 props.globals.getNode("/instrumentation/garmin196/params/units/pressure",1).setIntValue(1); 57 props.globals.getNode("/instrumentation/garmin196/params/units/temperature",1).setIntValue(1); 58 59 props.globals.getNode("/instrumentation/garmin196/params/filtrage",1).setBoolValue(0); 60 props.globals.getNode("/instrumentation/garmin196/params/vnav-indicator",1).setBoolValue(1); 61 62 ##status du gps 63 #0 eteint 64 #1 startup page 65 #1x map page 66 #2x panel page 67 #3x position page 68 #50 coffee page 69 #menus 70 #100 = menu gps 71 #110 = menu flights 72 #120 = menu route 73 #130 = menu points 74 #140 = menu aircraft 75 #150 = menu e6b 76 #160 = menu map 77 #170 = menu setup 78 props.globals.getNode("/instrumentation/garmin196/status",1).setIntValue(0); 79 80 ##popup windows 81 #0 = pas de popup 82 #1 = affichage du reglage de la lumiere 83 #10,11,12 = dto aviation 84 #20 = dto recent 85 #30 = dto user 86 #40 = nrst airport 87 #50 = nrst vor 88 #60 = nrst ndb 89 #70 = nrst fix 90 #80 = nrst cities 91 92 props.globals.getNode("/instrumentation/garmin196/popup_status",1).setIntValue(0); 93 94 props.globals.getNode("/instrumentation/garmin196/serviceable",1).setBoolValue(0); 95 props.globals.getNode("/instrumentation/garmin196/light",1).setDoubleValue(0); 96 props.globals.getNode("/instrumentation/garmin196/coffee",1).setIntValue(0); 97 98 load_cities(); 99 main_loop(); 100} 101#setlistener("/sim/signals/fdm-initialized",,0,0); 102 103var nasalInit = setlistener("/sim/signals/fdm-initialized", func{ 104 settimer(init_variables, 2); 105 removelistener(nasalInit); 106}); 107 108var load_parameters = func{ 109 fgcommand("loadxml", props.Node.new({ filename: getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", targetnode: "/instrumentation/garmin196/save" })); 110 111 if(getprop("/instrumentation/garmin196/save/antenne-deg")!=nil){ 112 setprop("/instrumentation/garmin196/antenne-deg",getprop("/instrumentation/garmin196/save/antenne-deg")); 113 } 114 if(getprop("/instrumentation/garmin196/save/light")!=nil){ 115 setprop("/instrumentation/garmin196/light",getprop("/instrumentation/garmin196/save/light")); 116 } 117 if(getprop("/instrumentation/garmin196/save/max-speed")!=nil){ 118 setprop("/instrumentation/garmin196/max-speed",getprop("/instrumentation/garmin196/save/max-speed")); 119 } 120 if(getprop("/instrumentation/garmin196/save/cruise-speed")!=nil){ 121 setprop("/instrumentation/garmin196/cruise-speed",getprop("/instrumentation/garmin196/save/cruise-speed")); 122 } 123 if(getprop("/instrumentation/garmin196/save/fuel-flow")!=nil){ 124 setprop("/instrumentation/garmin196/fuel-flow",getprop("/instrumentation/garmin196/save/fuel-flow")); 125 } 126 if(getprop("/instrumentation/garmin196/save/no_aircraft")!=nil){ 127 setprop("/instrumentation/garmin196/no_aircraft",getprop("/instrumentation/garmin196/save/no_aircraft")); 128 } 129 if(getprop("/instrumentation/garmin196/save/symbols/params/airport")!=nil){ 130 setprop("/instrumentation/garmin196/symbols/params/airport",getprop("/instrumentation/garmin196/save/symbols/params/airport")); 131 } 132 if(getprop("/instrumentation/garmin196/save/symbols/params/vor")!=nil){ 133 setprop("/instrumentation/garmin196/symbols/params/vor",getprop("/instrumentation/garmin196/save/symbols/params/vor")); 134 } 135 if(getprop("/instrumentation/garmin196/save/symbols/params/ndb")!=nil){ 136 setprop("/instrumentation/garmin196/symbols/params/ndb",getprop("/instrumentation/garmin196/save/symbols/params/ndb")); 137 } 138 if(getprop("/instrumentation/garmin196/save/symbols/params/fix")!=nil){ 139 setprop("/instrumentation/garmin196/symbols/params/fix",getprop("/instrumentation/garmin196/save/symbols/params/fix")); 140 } 141 if(getprop("/instrumentation/garmin196/save/symbols/params/twn")!=nil){ 142 setprop("/instrumentation/garmin196/symbols/params/twn",getprop("/instrumentation/garmin196/save/symbols/params/twn")); 143 } 144 if(getprop("/instrumentation/garmin196/save/symbols/params/wpt")!=nil){ 145 setprop("/instrumentation/garmin196/symbols/params/wpt",getprop("/instrumentation/garmin196/save/symbols/params/wpt")); 146 } 147 148 if(getprop("/instrumentation/garmin196/save/params/units/distance")!=nil){ 149 setprop("/instrumentation/garmin196/params/units/distance",getprop("/instrumentation/garmin196/save/params/units/distance")); 150 } 151 if(getprop("/instrumentation/garmin196/save/params/units/speed")!=nil){ 152 setprop("/instrumentation/garmin196/params/units/speed",getprop("/instrumentation/garmin196/save/params/units/speed")); 153 } 154 if(getprop("/instrumentation/garmin196/save/params/units/vert-speed")!=nil){ 155 setprop("/instrumentation/garmin196/params/units/vert-speed",getprop("/instrumentation/garmin196/save/params/units/vert-speed")); 156 } 157 if(getprop("/instrumentation/garmin196/save/params/units/altitude")!=nil){ 158 setprop("/instrumentation/garmin196/params/units/altitude",getprop("/instrumentation/garmin196/save/params/units/altitude")); 159 } 160 if(getprop("/instrumentation/garmin196/save/params/units/pressure")!=nil){ 161 setprop("/instrumentation/garmin196/params/units/pressure",getprop("/instrumentation/garmin196/save/params/units/pressure")); 162 } 163 if(getprop("/instrumentation/garmin196/save/params/units/temperature")!=nil){ 164 setprop("/instrumentation/garmin196/params/units/temperature",getprop("/instrumentation/garmin196/save/params/units/temperature")); 165 } 166 if(getprop("/instrumentation/garmin196/save/params/filtrage")!=nil){ 167 setprop("/instrumentation/garmin196/params/filtrage",getprop("/instrumentation/garmin196/save/params/filtrage")); 168 } 169 if(getprop("/instrumentation/garmin196/save/params/vnav-indicator")!=nil){ 170 setprop("/instrumentation/garmin196/params/vnav-indicator",getprop("/instrumentation/garmin196/save/params/vnav-indicator")); 171 } 172 173 for(var i=0;i<5;i=i+1){ 174 if(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id")!=nil){ 175 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id")); 176 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/type")); 177 } 178 } 179 180 for(var i=0;i<5;i=i+1){ 181 if(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id")!=nil){ 182 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id")); 183 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude",1).setDoubleValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/latitude")); 184 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude",1).setDoubleValue(getprop("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/longitude")); 185 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude")); 186 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude")); 187 props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")~"WPTUSR"); 188 setprop("/instrumentation/gps/command","define-user-wpt"); 189 } 190 } 191 192 for(var i=0;i<6;i=i+1){ 193 if(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name")!=nil){ 194 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name")); 195 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed",1).setIntValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/max-speed")); 196 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed",1).setIntValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/cruise-speed")); 197 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/fuel-flow")); 198 } 199 } 200 201 for(var i=0;i<9;i=i+1){ 202 if(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/start")!=nil){ 203 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/start")); 204 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/end")); 205 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/date")); 206 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/aircraft")); 207 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/distance")); 208 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/save/flights/flight["~i~"]/duration")); 209 } 210 } 211 212 for(var i=0;i<11;i=i+1){ 213 if(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/name")!=nil){ 214 props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/name")); 215 for(var j=0;j<10;j=j+1){ 216 if(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){ 217 props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id")); 218 props.globals.getNode("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type",1).setValue(getprop("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/type")); 219 } 220 } 221 } 222 } 223} 224setlistener("/sim/signals/fdm-initialized",load_parameters); 225 226var save_parameters = func{ 227 props.globals.getNode("/instrumentation/garmin196/save").remove(); 228 229 ##preparation 230 if(getprop("/instrumentation/garmin196/antenne-deg")!=nil){ 231 props.globals.getNode("/instrumentation/garmin196/save/antenne-deg",1).setDoubleValue(getprop("/instrumentation/garmin196/antenne-deg")); 232 } 233 if(getprop("/instrumentation/garmin196/light")!=nil){ 234 props.globals.getNode("/instrumentation/garmin196/save/light",1).setDoubleValue(getprop("/instrumentation/garmin196/light")); 235 } 236 if(getprop("/instrumentation/garmin196/max-speed")!=nil){ 237 props.globals.getNode("/instrumentation/garmin196/save/max-speed",1).setDoubleValue(getprop("/instrumentation/garmin196/max-speed")); 238 } 239 if(getprop("/instrumentation/garmin196/cruise-speed")!=nil){ 240 props.globals.getNode("/instrumentation/garmin196/save/cruise-speed",1).setDoubleValue(getprop("/instrumentation/garmin196/cruise-speed")); 241 } 242 if(getprop("/instrumentation/garmin196/fuel-flow")!=nil){ 243 props.globals.getNode("/instrumentation/garmin196/save/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/fuel-flow")); 244 } 245 if(getprop("/instrumentation/garmin196/no_aircraft")!=nil){ 246 props.globals.getNode("/instrumentation/garmin196/save/no_aircraft",1).setDoubleValue(getprop("/instrumentation/garmin196/no_aircraft")); 247 } 248 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/airport",1).setDoubleValue(getprop("/instrumentation/garmin196/symbols/params/airport")); 249 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/vor",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/vor")); 250 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/ndb",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/ndb")); 251 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/fix",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/fix")); 252 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/twn",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/twn")); 253 props.globals.getNode("/instrumentation/garmin196/save/symbols/params/wpt",1).setBoolValue(getprop("/instrumentation/garmin196/symbols/params/wpt")); 254 255 props.globals.getNode("/instrumentation/garmin196/save/params/units/distance",1).setIntValue(getprop("/instrumentation/garmin196/params/units/distance")); 256 props.globals.getNode("/instrumentation/garmin196/save/params/units/speed",1).setIntValue(getprop("/instrumentation/garmin196/params/units/speed")); 257 props.globals.getNode("/instrumentation/garmin196/save/params/units/vert-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/units/vert-speed")); 258 props.globals.getNode("/instrumentation/garmin196/save/params/units/altitude",1).setIntValue(getprop("/instrumentation/garmin196/params/units/altitude")); 259 props.globals.getNode("/instrumentation/garmin196/save/params/units/pressure",1).setIntValue(getprop("/instrumentation/garmin196/params/units/pressure")); 260 props.globals.getNode("/instrumentation/garmin196/save/params/units/temperature",1).setIntValue(getprop("/instrumentation/garmin196/params/units/temperature")); 261 props.globals.getNode("/instrumentation/garmin196/save/params/filtrage",1).setBoolValue(getprop("/instrumentation/garmin196/params/filtrage")); 262 props.globals.getNode("/instrumentation/garmin196/save/params/vnav-indicator",1).setBoolValue(getprop("/instrumentation/garmin196/params/vnav-indicator")); 263 264 for(var i=0;i<5;i=i+1){ 265 if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")!=nil){ 266 props.globals.getNode("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")); 267 props.globals.getNode("/instrumentation/garmin196/save/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type")); 268 } 269 } 270 271 for(var i=0;i<9;i=i+1){ 272 if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")!=nil){ 273 props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")); 274 props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/latitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude")); 275 props.globals.getNode("/instrumentation/garmin196/save/waypoints/user/wpt["~i~"]/longitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude")); 276 } 277 } 278 279 for(var i=0;i<6;i=i+1){ 280 if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")!=nil){ 281 props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")); 282 props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/max-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed")); 283 props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/cruise-speed",1).setIntValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed")); 284 props.globals.getNode("/instrumentation/garmin196/save/params/aircrafts/aircraft["~i~"]/fuel-flow",1).setDoubleValue(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow")); 285 } 286 } 287 for(var i=0;i<8;i=i+1){ 288 if(getprop("/instrumentation/garmin196/flights/flight["~i~"]/start")!=nil){ 289 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/start")); 290 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/end")); 291 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/date")); 292 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/aircraft")); 293 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/distance")); 294 props.globals.getNode("/instrumentation/garmin196/save/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~i~"]/duration")); 295 } 296 } 297 for(var i=0;i<11;i=i+1){ 298 if(getprop("/instrumentation/garmin196/routes/route["~i~"]/name")!=nil){ 299 props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/name",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/name")); 300 for(var j=0;j<10;j=j+1){ 301 if(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){ 302 props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/id",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")); 303 props.globals.getNode("/instrumentation/garmin196/save/routes/route["~i~"]/wpts/wpt["~j~"]/type",1).setValue(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type")); 304 } 305 } 306 } 307 } 308 ##delete file before saving to delete keys 309 var file = io.open(getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", mode="w"); 310 io.write(file,""); 311 io.close(file); 312 fgcommand("savexml", props.Node.new({ filename: getprop("/sim/fg-home")~"/aircraft-data/garmin196.xml", sourcenode: "/instrumentation/garmin196/save" })); 313} 314 315var main_loop = func{ 316 var time = getprop("/sim/time/elapsed-sec"); 317 var dt = time - last_time; 318 last_time = time; 319 320 calcul_turn_rate(dt); 321 change_speed_display(); 322 change_position_wpt_bug(); 323 update_flight(); 324 update_e6b_menu(); 325 326 settimer(main_loop, 0.3); 327} 328 329var nyi = func (x) { gui.popupTip(x ~ ": not yet implemented", 3); } 330 331var power = func (x){ 332 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 333 if(x==0){ 334 if(serviceable==1){ 335 setprop("/instrumentation/garmin196/serviceable",0); 336 setprop("/instrumentation/garmin196/status",0); 337 setprop("/instrumentation/garmin196/popup_status",0); 338 }else{ 339 setprop("/instrumentation/garmin196/serviceable",1); 340 setprop("/instrumentation/garmin196/status",1); 341 } 342 } 343 344 if(x==1 and serviceable==1){ 345 setprop("/instrumentation/garmin196/popup_status",1) 346 } 347 348} 349 350var in = func (x){ 351 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 352 if(serviceable==1){ 353 var status = getprop("/instrumentation/garmin196/status"); 354 if(x==0){ 355 ##traitement des pages 356 if(status==10){ 357 var range = getprop("/instrumentation/garmin196/map-range"); 358 range = range / 2; 359 if(range<0.125){ 360 range = 0.125; 361 } 362 setprop("/instrumentation/garmin196/map-range",range); 363 return; 364 } 365 }elsif(x==1){ 366 if(getprop("/instrumentation/garmin196/coffee")==2 and status>=10){ 367 setprop("/instrumentation/garmin196/coffee",0); 368 setprop("/instrumentation/garmin196/status",50); 369 } 370 } 371 } 372} 373 374var out = func (x){ 375 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 376 if(serviceable==1){ 377 var status = getprop("/instrumentation/garmin196/status"); 378 if(x==0){ 379 ##traitement des pages 380 if(status==10){ 381 var range = getprop("/instrumentation/garmin196/map-range"); 382 range = range * 2; 383 if(range>32){ 384 range = 32; 385 } 386 setprop("/instrumentation/garmin196/map-range",range); 387 return; 388 } 389 }elsif(x==1){ 390 if(getprop("/instrumentation/garmin196/coffee")==1 and status>=10){ 391 setprop("/instrumentation/garmin196/coffee",2); 392 } 393 } 394 } 395} 396 397var page = func (x){ 398 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 399 if(serviceable==1){ 400 var status = getprop("/instrumentation/garmin196/status"); 401 if(x==0){ 402 ##traitement des pages 403 if(status==10){ 404 setprop("/instrumentation/garmin196/status",20); 405 return; 406 } 407 408 if(status==20){ 409 setprop("/instrumentation/garmin196/status",30); 410 return; 411 } 412 413 if(status==30){ 414 setprop("/instrumentation/garmin196/status",10); 415 update_map(); 416 return; 417 } 418 419 if(status==50){ 420 setprop("/instrumentation/garmin196/status",10); 421 update_map(); 422 return; 423 } 424 }elsif(x==1){ 425 if(getprop("/instrumentation/garmin196/coffee")==0 and status>=10){ 426 setprop("/instrumentation/garmin196/coffee",1); 427 } 428 } 429 } 430} 431 432var quit = func (x){ 433 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 434 if(serviceable==1){ 435 if(x==0){ 436 #traitement des popup 437 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 438 if(popup_status==1){ 439 setprop("/instrumentation/garmin196/popup_status",0); 440 save_parameters(); 441 return; 442 } 443 if(popup_status>=10 and popup_status<=99){ 444 setprop("/instrumentation/garmin196/popup_status",0); 445 return; 446 } 447 448 ##traitement des pages 449 var status = getprop("/instrumentation/garmin196/status"); 450 if(status==10){ 451 setprop("/instrumentation/garmin196/status",30); 452 return; 453 } 454 455 if(status==20){ 456 setprop("/instrumentation/garmin196/status",10); 457 update_map(); 458 return; 459 } 460 461 if(status==30){ 462 setprop("/instrumentation/garmin196/status",20); 463 return; 464 } 465 466 if(status==50){ 467 setprop("/instrumentation/garmin196/status",10); 468 update_map(); 469 return; 470 } 471 472 if(status==111){ 473 setprop("/instrumentation/garmin196/status",110); 474 setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",-1); 475 return; 476 } 477 478 if(status==112){ 479 setprop("/instrumentation/garmin196/status",111); 480 return; 481 } 482 483 ##menu routes 484 if(status==121){ 485 setprop("/instrumentation/garmin196/status",120); 486 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1); 487 return; 488 } 489 490 if(status==122){ 491 setprop("/instrumentation/garmin196/status",121); 492 save_parameters(); 493 return; 494 } 495 496 if(status==123){ 497 setprop("/instrumentation/garmin196/status",122); 498 return; 499 } 500 501 if(status==124){ 502 setprop("/instrumentation/garmin196/status",123); 503 return; 504 } 505 506 ##menu points 507 if(status==131){ 508 setprop("/instrumentation/garmin196/status",130); 509 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",-1); 510 init_list_points(); 511 return; 512 } 513 514 if(status==132){ 515 setprop("/instrumentation/garmin196/status",131); 516 return; 517 } 518 519 if(status==133){ 520 setprop("/instrumentation/garmin196/status",132); 521 return; 522 } 523 524 if(status==134){ 525 setprop("/instrumentation/garmin196/status",133); 526 return; 527 } 528 529 if(status==135){ 530 setprop("/instrumentation/garmin196/status",134); 531 return; 532 } 533 534 if(status==136){ 535 setprop("/instrumentation/garmin196/status",135); 536 return; 537 } 538 539 ##menu aircraft 540 if(status==141){ 541 setprop("/instrumentation/garmin196/status",140); 542 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1); 543 init_list_aircraft(); 544 display_list_aircraft(); 545 return; 546 } 547 548 if(status==142){ 549 setprop("/instrumentation/garmin196/status",141); 550 display_list_aircraft(); 551 return; 552 } 553 554 if(status==143){ 555 setprop("/instrumentation/garmin196/status",142); 556 return; 557 } 558 559 if(status==144){ 560 setprop("/instrumentation/garmin196/status",143); 561 return; 562 } 563 564 if(status==145){ 565 setprop("/instrumentation/garmin196/status",144); 566 return; 567 } 568 569 ##menu map 570 if(status==161){ 571 setprop("/instrumentation/garmin196/status",160); 572 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1); 573 return; 574 } 575 576 ##menu setup 577 if(status==171){ 578 setprop("/instrumentation/garmin196/status",170); 579 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",-1); 580 return; 581 } 582 583 if(status==176){ 584 setprop("/instrumentation/garmin196/status",175); 585 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",-1); 586 return; 587 } 588 589 if(status>=100 and status <180){ 590 if(old_status>=10){ 591 status = old_status; 592 }else{ 593 status = 10; 594 } 595 setprop("/instrumentation/garmin196/status",status); 596 if(status==10){ 597 update_map(); 598 } 599 return; 600 } 601 } 602 } 603} 604 605var enter = func (x){ 606 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 607 if(serviceable==1){ 608 if(x==0){ 609 #traitement des popup 610 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 611 if(popup_status==1){ 612 setprop("/instrumentation/garmin196/popup_status",0); 613 save_parameters(); 614 return; 615 } 616 617 if(popup_status==10){ 618 setprop("/instrumentation/garmin196/popup_status",11); 619 display_dto_search(); 620 return; 621 } 622 623 if(popup_status==11){ 624 if(getprop("/instrumentation/garmin196/dto_display/max_ligne_selected")>=0){ 625 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne[0]/selected",1).setBoolValue(1); 626 setprop("/instrumentation/garmin196/popup_status",12); 627 return; 628 } 629 } 630 631 if(popup_status==12 or popup_status==30){ 632 setprop("/instrumentation/garmin196/popup_status",0); 633 var id = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/id"); 634 var type = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/type"); 635 affectation_waypoint(id); 636 ##rolling recents waypoints 637 var existe_deja = 0; 638 for(var i=0;i<5;i=i+1){ 639 if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")==id){ 640 existe_deja = 1; 641 break; 642 } 643 } 644 if(existe_deja==0){ 645 for(var i=4;i>0;i=i-1){ 646 if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")){ 647 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")); 648 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/type")); 649 } 650 } 651 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/id",1).setValue(id); 652 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/type",1).setValue(type); 653 save_parameters(); 654 } 655 return; 656 } 657 658 if(popup_status==20){ 659 setprop("/instrumentation/garmin196/popup_status",0); 660 var id = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/id"); 661 var type = getprop("/instrumentation/garmin196/dto_display/ligne["~getprop("/instrumentation/garmin196/dto_display/no_ligne_selected")~"]/type"); 662 affectation_waypoint(id); 663 return; 664 } 665 666 if(popup_status>30 and popup_status<=89){ 667 setprop("/instrumentation/garmin196/popup_status",0); 668 var id = getprop("/instrumentation/garmin196/nrst_display/ligne["~getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected")~"]/id"); 669 var type = getprop("/instrumentation/garmin196/nrst_display/ligne["~getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected")~"]/type"); 670 affectation_waypoint(id); 671 ##rolling recents waypoints 672 var existe_deja = 0; 673 for(var i=0;i<5;i=i+1){ 674 if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id")==id){ 675 existe_deja = 1; 676 break; 677 } 678 } 679 if(existe_deja==0){ 680 for(var i=4;i>0;i=i-1){ 681 if(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")){ 682 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/id")); 683 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt["~i~"]/type",1).setValue(getprop("/instrumentation/garmin196/waypoints/recent/wpt["~(i-1)~"]/type")); 684 } 685 } 686 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/id",1).setValue(id); 687 props.globals.getNode("/instrumentation/garmin196/waypoints/recent/wpt[0]/type",1).setValue(type); 688 save_parameters(); 689 } 690 return; 691 } 692 693 ##validation de la startup page 694 var status = getprop("/instrumentation/garmin196/status"); 695 if(status==1){ 696 setprop("/instrumentation/garmin196/status",10); 697 update_map(); 698 return; 699 } 700 701 if(status==110){ 702 if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){ 703 setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",0); 704 setprop("/instrumentation/garmin196/status",111); 705 } 706 return; 707 } 708 709 if(status==111){ 710 update_menu_flights_detail(); 711 setprop("/instrumentation/garmin196/status",112); 712 return; 713 } 714 715 if(status==112){ 716 setprop("/instrumentation/garmin196/status",111); 717 return; 718 } 719 720 if(status==120){ 721 setprop("/instrumentation/garmin196/status",121); 722 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",0); 723 return; 724 } 725 726 if(status==121){ 727 setprop("/instrumentation/garmin196/status",122); 728 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 729 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")==nil){ 730 init_new_route(no_ligne); 731 } 732 update_menu_routes_detail(); 733 setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",0); 734 return; 735 } 736 737 if(status==122){ 738 setprop("/instrumentation/garmin196/status",123); 739 var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 740 var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 741 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id")==nil){ 742 init_search_route("0"); 743 }else{ 744 init_search_route(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id")); 745 } 746 setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",-1); 747 return; 748 } 749 750 if(status==123){ 751 if(getprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected")>=0){ 752 setprop("/instrumentation/garmin196/status",124); 753 setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",0); 754 } 755 return; 756 } 757 758 if(status==124){ 759 validate_menu_search_routes(); 760 update_menu_routes_detail(); 761 init_menu_routes_list(); 762 setprop("/instrumentation/garmin196/status",122); 763 return; 764 } 765 766 if(status==130){ 767 setprop("/instrumentation/garmin196/status",131); 768 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",0); 769 return; 770 } 771 772 if(status==131){ 773 setprop("/instrumentation/garmin196/status",132); 774 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 775 if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id")==nil){ 776 init_new_point(no_ligne); 777 } 778 update_menu_points(); 779 return; 780 } 781 782 if(status==132){ 783 setprop("/instrumentation/garmin196/status",133); 784 return; 785 } 786 787 if(status==133){ 788 setprop("/instrumentation/garmin196/status",134); 789 return; 790 } 791 792 if(status==134){ 793 setprop("/instrumentation/garmin196/status",135); 794 return; 795 } 796 797 if(status==135){ 798 setprop("/instrumentation/garmin196/status",136); 799 return; 800 } 801 802 if(status==136){ 803 setprop("/instrumentation/garmin196/status",131); 804 validate_menu_points(); 805 init_list_points(); 806 return; 807 } 808 809 if(status==140){ 810 setprop("/instrumentation/garmin196/status",141); 811 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",getprop("/instrumentation/garmin196/no_aircraft")); 812 display_list_aircraft(); 813 return; 814 } 815 816 if(status==141){ 817 setprop("/instrumentation/garmin196/status",142); 818 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 819 if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name")==nil){ 820 init_new_aircraft(no_ligne); 821 } 822 init_menu_aircraft(); 823 return; 824 } 825 826 if(status==142){ 827 setprop("/instrumentation/garmin196/status",143); 828 return; 829 } 830 831 if(status==143){ 832 setprop("/instrumentation/garmin196/status",144); 833 return; 834 } 835 836 if(status==144){ 837 setprop("/instrumentation/garmin196/status",145); 838 return; 839 } 840 841 if(status==145){ 842 setprop("/instrumentation/garmin196/status",141); 843 validate_menu_aircraft(); 844 init_list_aircraft(); 845 display_list_aircraft(); 846 return; 847 } 848 849 ##menu map 850 if(status==160){ 851 setprop("/instrumentation/garmin196/status",161); 852 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",0); 853 return; 854 } 855 856 if(status==161){ 857 var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected"); 858 if(no_ligne==0){ 859 setprop("/instrumentation/garmin196/symbols/params/airport",(getprop("/instrumentation/garmin196/symbols/params/airport")==1 ? 0 : 1)); 860 } 861 if(no_ligne==1){ 862 setprop("/instrumentation/garmin196/symbols/params/vor",(getprop("/instrumentation/garmin196/symbols/params/vor")==1 ? 0 : 1)); 863 } 864 if(no_ligne==2){ 865 setprop("/instrumentation/garmin196/symbols/params/ndb",(getprop("/instrumentation/garmin196/symbols/params/ndb")==1 ? 0 : 1)); 866 } 867 if(no_ligne==3){ 868 setprop("/instrumentation/garmin196/symbols/params/fix",(getprop("/instrumentation/garmin196/symbols/params/fix")==1 ? 0 : 1)); 869 } 870 if(no_ligne==4){ 871 setprop("/instrumentation/garmin196/symbols/params/twn",(getprop("/instrumentation/garmin196/symbols/params/twn")==1 ? 0 : 1)); 872 } 873 if(no_ligne==5){ 874 setprop("/instrumentation/garmin196/symbols/params/wpt",(getprop("/instrumentation/garmin196/symbols/params/wpt")==1 ? 0 : 1)); 875 } 876 save_parameters(); 877 return; 878 } 879 880 ##menu setup 881 if(status==170){ 882 setprop("/instrumentation/garmin196/status",171); 883 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",0); 884 return; 885 } 886 887 if(status==171){ 888 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 889 if(no_ligne==0){ 890 setprop("/instrumentation/garmin196/params/units/distance",(getprop("/instrumentation/garmin196/params/units/distance")==1 ? 2 : 1)); 891 } 892 if(no_ligne==1){ 893 setprop("/instrumentation/garmin196/params/units/speed",(getprop("/instrumentation/garmin196/params/units/speed")==1 ? 2 : 1)); 894 } 895 if(no_ligne==2){ 896 setprop("/instrumentation/garmin196/params/units/vert-speed",(getprop("/instrumentation/garmin196/params/units/vert-speed")==1 ? 2 : 1)); 897 } 898 if(no_ligne==3){ 899 setprop("/instrumentation/garmin196/params/units/altitude",(getprop("/instrumentation/garmin196/params/units/altitude")==1 ? 2 : 1)); 900 } 901 if(no_ligne==4){ 902 setprop("/instrumentation/garmin196/params/units/pressure",(getprop("/instrumentation/garmin196/params/units/pressure")==1 ? 2 : 1)); 903 } 904 if(no_ligne==5){ 905 setprop("/instrumentation/garmin196/params/units/temperature",(getprop("/instrumentation/garmin196/params/units/temperature")==1 ? 2 : 1)); 906 } 907 save_parameters(); 908 return; 909 } 910 911 if(status==175){ 912 setprop("/instrumentation/garmin196/status",176); 913 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",0); 914 return; 915 } 916 if(status==176){ 917 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 918 if(no_ligne==0){ 919 setprop("/instrumentation/garmin196/params/filtrage",(getprop("/instrumentation/garmin196/params/filtrage")==0 ? 1 : 0)); 920 } 921 if(no_ligne==1){ 922 setprop("/instrumentation/garmin196/params/vnav-indicator",(getprop("/instrumentation/garmin196/params/vnav-indicator")==0 ? 1 : 0)); 923 } 924 save_parameters(); 925 return; 926 } 927 928 }elsif(x==1){ 929 #traitement des popup 930 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 931 var status = getprop("/instrumentation/garmin196/status"); 932 if(popup_status==0){##pas de popup 933 if(status>=10 and status<=39){ 934 old_status = status; 935 setprop("/instrumentation/garmin196/status",132); 936 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",0); 937 var points = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1).getChildren("wpt"); 938 for(var i=size(points)-1;i>=0;i=i-1){ 939 if(i<8){ 940 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/id",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")); 941 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/latitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude")); 942 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(i+1)~"]/longitude",1).setValue(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude")); 943 } 944 } 945 init_new_point(0); 946 update_menu_points(); 947 #init_list_points(); 948 } 949 } 950 } 951 } 952} 953 954var menu = func (x){ 955 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 956 var status = getprop("/instrumentation/garmin196/status"); 957 if(serviceable==1){ 958 if(status>=10 and status<100){ 959 old_status = status; 960 setprop("/instrumentation/garmin196/status",100); 961 setprop("/instrumentation/garmin196/popup_status",0); 962 963 ##particularite map 964 if(status==10){ 965 setprop("/instrumentation/garmin196/status",160); 966 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1); 967 } 968 }elsif(status>=100){ 969 if(old_status>=10){ 970 status = old_status; 971 }else{ 972 status = 10; 973 } 974 setprop("/instrumentation/garmin196/status",status); 975 } 976 } 977} 978 979var nrst = func (x){ 980 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 981 var status = getprop("/instrumentation/garmin196/status"); 982 if(serviceable==1 and status>1 and status<100){ 983 if(x==0){ 984 setprop("/instrumentation/garmin196/popup_status",40); 985 display_nrst("airport"); 986 } 987 } 988} 989 990var dto = func (x){ 991 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 992 var status = getprop("/instrumentation/garmin196/status"); 993 if(serviceable==1 and status>1 and status<100){ 994 if(x==0){ 995 setprop("/instrumentation/garmin196/popup_status",10); 996 setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search"); 997 init_dto_display(); 998 setprop("/instrumentation/garmin196/dto_display/x_char",0); 999 setprop("/instrumentation/garmin196/dto_display/y_char",0); 1000 } 1001 } 1002} 1003 1004var rockerup = func (x){ 1005 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 1006 if(serviceable==1){ 1007 if(x==0){ 1008 #traitement des popup 1009 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 1010 1011 if(popup_status==1){ 1012 var light_level = getprop("/instrumentation/garmin196/light"); 1013 light_level = light_level + 0.1; 1014 if(light_level>1){ 1015 light_level = 1; 1016 } 1017 setprop("/instrumentation/garmin196/light",light_level); 1018 return; 1019 } 1020 1021 if(popup_status==11){ 1022 var y_char = getprop("/instrumentation/garmin196/dto_display/y_char"); 1023 y_char = y_char + 1; 1024 if(y_char>35){ 1025 y_char = 0; 1026 } 1027 setprop("/instrumentation/garmin196/dto_display/y_char",y_char); 1028 display_dto_search(); 1029 return; 1030 } 1031 1032 if(popup_status==12){ 1033 var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected"); 1034 var old_no_ligne = no_ligne; 1035 no_ligne = no_ligne - 1; 1036 if(no_ligne<0){ 1037 no_ligne = 0; 1038 } 1039 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne); 1040 if(old_no_ligne!=no_ligne){ 1041 setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1); 1042 setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0); 1043 } 1044 return; 1045 } 1046 1047 if(popup_status==20 or popup_status==30){ 1048 var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected"); 1049 var old_no_ligne = no_ligne; 1050 no_ligne = no_ligne - 1; 1051 if(no_ligne<0){ 1052 no_ligne = 0; 1053 } 1054 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne); 1055 setprop("/instrumentation/garmin196/dto_display/ligne_select",getprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/texte")); 1056 if(old_no_ligne!=no_ligne){ 1057 setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1); 1058 setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0); 1059 } 1060 return; 1061 } 1062 1063 if(popup_status>=40 and popup_status<=99){ 1064 var no_ligne = getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected"); 1065 var old_no_ligne = no_ligne; 1066 no_ligne = no_ligne - 1; 1067 if(no_ligne<0){ 1068 no_ligne = 0; 1069 } 1070 setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",no_ligne); 1071 setprop("/instrumentation/garmin196/nrst_display/ligne_select",getprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/texte")); 1072 if(old_no_ligne!=no_ligne){ 1073 setprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/selected",1); 1074 setprop("/instrumentation/garmin196/nrst_display/ligne["~old_no_ligne~"]/selected",0); 1075 } 1076 return; 1077 } 1078 1079 ##traitement des menus 1080 var status = getprop("/instrumentation/garmin196/status"); 1081 if(status>=100 and status<110){ 1082 setprop("/instrumentation/garmin196/status",170); 1083 return; 1084 } 1085 1086 if(status==110){ 1087 setprop("/instrumentation/garmin196/status",100); 1088 return; 1089 } 1090 1091 if(status==111){ 1092 if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){ 1093 var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected"); 1094 no_ligne = no_ligne - 1; 1095 if(no_ligne<0){ 1096 no_ligne = 0; 1097 } 1098 setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",no_ligne); 1099 } 1100 } 1101 1102 if(status==120){ 1103 setprop("/instrumentation/garmin196/status",110); 1104 display_menu_flights(); 1105 return; 1106 } 1107 1108 if(status==121){ 1109 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 1110 no_ligne = no_ligne - 1; 1111 if(no_ligne<0){ 1112 no_ligne = 0; 1113 } 1114 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",no_ligne); 1115 return; 1116 } 1117 1118 if(status==122){ 1119 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 1120 no_ligne = no_ligne - 1; 1121 if(no_ligne<0){ 1122 no_ligne = 0; 1123 } 1124 setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",no_ligne); 1125 return; 1126 } 1127 1128 if(status==123){ 1129 var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char"); 1130 y_char = y_char + 1; 1131 if(y_char>35){ 1132 y_char = 0; 1133 } 1134 setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char); 1135 display_route_waypoint_search(); 1136 return; 1137 } 1138 1139 if(status==124){ 1140 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected"); 1141 no_ligne = no_ligne - 1; 1142 if(no_ligne<0){ 1143 no_ligne = 0; 1144 } 1145 setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",no_ligne); 1146 return; 1147 } 1148 1149 if(status==130){ 1150 setprop("/instrumentation/garmin196/status",120); 1151 init_menu_routes_list(); 1152 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1); 1153 return; 1154 } 1155 1156 if(status==131){ 1157 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 1158 no_ligne = no_ligne - 1; 1159 if(no_ligne<0){ 1160 no_ligne = 0; 1161 } 1162 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",no_ligne); 1163 return; 1164 } 1165 1166 if(status==132){ 1167 var y_char = getprop("/instrumentation/garmin196/menu_points/y_char"); 1168 y_char = y_char + 1; 1169 if(y_char>35){ 1170 y_char = 0; 1171 } 1172 setprop("/instrumentation/garmin196/menu_points/y_char",y_char); 1173 display_menu_points(); 1174 return; 1175 } 1176 1177 if(status==133){ 1178 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1179 latitude = latitude + 1; 1180 if(latitude>180){ 1181 latitude = 180; 1182 } 1183 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1184 display_menu_points(); 1185 return; 1186 } 1187 1188 if(status==134){ 1189 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1190 latitude = latitude + .01; 1191 if(latitude>180){ 1192 latitude = 180; 1193 } 1194 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1195 display_menu_points(); 1196 return; 1197 } 1198 1199 if(status==135){ 1200 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1201 longitude = longitude + 1; 1202 if(longitude>180){ 1203 longitude = -180; 1204 } 1205 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1206 display_menu_points(); 1207 return; 1208 } 1209 1210 if(status==136){ 1211 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1212 longitude = longitude + .01; 1213 if(longitude>180){ 1214 longitude = -180; 1215 } 1216 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1217 display_menu_points(); 1218 return; 1219 } 1220 1221 if(status==140){ 1222 setprop("/instrumentation/garmin196/status",130); 1223 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",-1); 1224 init_list_points(); 1225 return; 1226 } 1227 1228 if(status==141){ 1229 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 1230 no_ligne = no_ligne - 1; 1231 if(no_ligne<0){ 1232 no_ligne = 0; 1233 } 1234 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",no_ligne); 1235 display_list_aircraft(); 1236 return; 1237 } 1238 1239 if(status==142){ 1240 var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char"); 1241 y_char = y_char + 1; 1242 if(y_char>35){ 1243 y_char = 0; 1244 } 1245 setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char); 1246 display_menu_aircraft_name(); 1247 return; 1248 } 1249 1250 if(status==143){ 1251 var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise"); 1252 cruise = cruise + 1; 1253 if(cruise>500){ 1254 cruise = 500; 1255 } 1256 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise); 1257 display_menu_aircraft(); 1258 return; 1259 } 1260 1261 if(status==144){ 1262 var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max"); 1263 max = max + 1; 1264 if(max>500){ 1265 max = 500; 1266 } 1267 setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max); 1268 display_menu_aircraft(); 1269 return; 1270 } 1271 1272 if(status==145){ 1273 var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow"); 1274 fuelflow = fuelflow + 0.1; 1275 if(fuelflow>100){ 1276 fuelflow = 100; 1277 } 1278 setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow); 1279 return; 1280 } 1281 1282 if(status==150){ 1283 setprop("/instrumentation/garmin196/status",140); 1284 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1); 1285 init_list_aircraft(); 1286 display_list_aircraft(); 1287 return; 1288 } 1289 1290 if(status==160){ 1291 setprop("/instrumentation/garmin196/status",150); 1292 return; 1293 } 1294 1295 if(status==161){ 1296 var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected"); 1297 no_ligne = no_ligne - 1; 1298 if(no_ligne<0){ 1299 no_ligne = 0; 1300 } 1301 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",no_ligne); 1302 return; 1303 } 1304 1305 if(status==170){ 1306 setprop("/instrumentation/garmin196/status",160); 1307 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1); 1308 return; 1309 } 1310 1311 if(status==171){ 1312 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 1313 no_ligne = no_ligne - 1; 1314 if(no_ligne<0){ 1315 no_ligne = 0; 1316 } 1317 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne); 1318 return; 1319 } 1320 1321 if(status==176){ 1322 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 1323 no_ligne = no_ligne - 1; 1324 if(no_ligne<0){ 1325 no_ligne = 0; 1326 } 1327 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne); 1328 return; 1329 } 1330 1331 }elsif(x==1){ 1332 #traitement des popup 1333 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 1334 if(popup_status==11){ 1335 var y_char = getprop("/instrumentation/garmin196/dto_display/y_char"); 1336 y_char = y_char + 10; 1337 if(y_char>35){ 1338 y_char = y_char-36; 1339 } 1340 setprop("/instrumentation/garmin196/dto_display/y_char",y_char); 1341 display_dto_search(); 1342 return; 1343 } 1344 1345 ##traitement des menus 1346 var status = getprop("/instrumentation/garmin196/status"); 1347 1348 if(status==123){ 1349 var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char"); 1350 y_char = y_char + 10; 1351 if(y_char>35){ 1352 y_char = y_char-36; 1353 } 1354 setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char); 1355 display_route_waypoint_search(); 1356 return; 1357 } 1358 1359 if(status==132){ 1360 var y_char = getprop("/instrumentation/garmin196/menu_points/y_char"); 1361 y_char = y_char + 10; 1362 if(y_char>35){ 1363 y_char = y_char-36; 1364 } 1365 setprop("/instrumentation/garmin196/menu_points/y_char",y_char); 1366 display_menu_points(); 1367 return; 1368 } 1369 1370 if(status==133){ 1371 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1372 latitude = latitude + 10; 1373 if(latitude>180){ 1374 latitude = 180; 1375 } 1376 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1377 display_menu_points(); 1378 return; 1379 } 1380 1381 if(status==134){ 1382 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1383 latitude = latitude + .1; 1384 if(latitude>180){ 1385 latitude = 180; 1386 } 1387 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1388 display_menu_points(); 1389 return; 1390 } 1391 1392 if(status==135){ 1393 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1394 longitude = longitude + 10; 1395 if(longitude>180){ 1396 longitude = -180; 1397 } 1398 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1399 display_menu_points(); 1400 return; 1401 } 1402 1403 if(status==136){ 1404 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1405 longitude = longitude + .1; 1406 if(longitude>180){ 1407 longitude = -180; 1408 } 1409 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1410 display_menu_points(); 1411 return; 1412 } 1413 1414 if(status==142){ 1415 var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char"); 1416 y_char = y_char + 10; 1417 if(y_char>35){ 1418 y_char = y_char-36; 1419 } 1420 setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char); 1421 display_menu_aircraft_name(); 1422 return; 1423 } 1424 1425 if(status==143){ 1426 var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise"); 1427 cruise = cruise + 10; 1428 if(cruise>500){ 1429 cruise = 500; 1430 } 1431 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise); 1432 display_menu_aircraft(); 1433 return; 1434 } 1435 1436 if(status==144){ 1437 var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max"); 1438 max = max + 10; 1439 if(max>500){ 1440 max = 500; 1441 } 1442 setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max); 1443 display_menu_aircraft(); 1444 return; 1445 } 1446 1447 if(status==145){ 1448 var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow"); 1449 fuelflow = fuelflow + 1; 1450 if(fuelflow>100){ 1451 fuelflow = 100; 1452 } 1453 setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow); 1454 return; 1455 } 1456 } 1457 } 1458} 1459 1460var rockerdown = func (x){ 1461 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 1462 if(serviceable==1){ 1463 if(x==0){ 1464 #traitement des popup 1465 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 1466 if(popup_status==1){ 1467 var light_level = getprop("/instrumentation/garmin196/light"); 1468 light_level = light_level - 0.1; 1469 if(light_level<0){ 1470 light_level = 0; 1471 } 1472 setprop("/instrumentation/garmin196/light",light_level); 1473 return; 1474 } 1475 1476 if(popup_status==11){ 1477 var y_char = getprop("/instrumentation/garmin196/dto_display/y_char"); 1478 y_char = y_char - 1; 1479 if(y_char<0){ 1480 y_char = 35; 1481 } 1482 setprop("/instrumentation/garmin196/dto_display/y_char",y_char); 1483 display_dto_search(); 1484 return; 1485 } 1486 1487 if(popup_status==12){ 1488 var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected"); 1489 var old_no_ligne = no_ligne; 1490 var max_ligne = getprop("/instrumentation/garmin196/dto_display/max_ligne_selected"); 1491 no_ligne = no_ligne + 1; 1492 if(no_ligne>max_ligne){ 1493 no_ligne = max_ligne; 1494 } 1495 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne); 1496 if(old_no_ligne!=no_ligne){ 1497 setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1); 1498 setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0); 1499 } 1500 return; 1501 } 1502 1503 if(popup_status==20 or popup_status==30){ 1504 var no_ligne = getprop("/instrumentation/garmin196/dto_display/no_ligne_selected"); 1505 var old_no_ligne = no_ligne; 1506 var max_ligne = getprop("/instrumentation/garmin196/dto_display/max_ligne_selected"); 1507 no_ligne = no_ligne + 1; 1508 if(no_ligne>max_ligne){ 1509 no_ligne = max_ligne; 1510 } 1511 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",no_ligne); 1512 setprop("/instrumentation/garmin196/dto_display/ligne_select",getprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/texte")); 1513 if(old_no_ligne!=no_ligne){ 1514 setprop("/instrumentation/garmin196/dto_display/ligne["~no_ligne~"]/selected",1); 1515 setprop("/instrumentation/garmin196/dto_display/ligne["~old_no_ligne~"]/selected",0); 1516 } 1517 return; 1518 } 1519 1520 if(popup_status>=40 and popup_status<=99){ 1521 var no_ligne = getprop("/instrumentation/garmin196/nrst_display/no_ligne_selected"); 1522 var old_no_ligne = no_ligne; 1523 var max_ligne = getprop("/instrumentation/garmin196/nrst_display/max_ligne_selected"); 1524 no_ligne = no_ligne + 1; 1525 if(no_ligne>max_ligne){ 1526 no_ligne = max_ligne; 1527 } 1528 setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",no_ligne); 1529 setprop("/instrumentation/garmin196/nrst_display/ligne_select",getprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/texte")); 1530 if(old_no_ligne!=no_ligne){ 1531 setprop("/instrumentation/garmin196/nrst_display/ligne["~no_ligne~"]/selected",1); 1532 setprop("/instrumentation/garmin196/nrst_display/ligne["~old_no_ligne~"]/selected",0); 1533 } 1534 return; 1535 } 1536 1537 ##traitement des menus 1538 var status = getprop("/instrumentation/garmin196/status"); 1539 if(status>=100 and status<110){ 1540 setprop("/instrumentation/garmin196/status",110); 1541 display_menu_flights(); 1542 return; 1543 } 1544 1545 if(status==110){ 1546 setprop("/instrumentation/garmin196/status",120); 1547 init_menu_routes_list(); 1548 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1); 1549 return; 1550 } 1551 1552 if(status==111){ 1553 if(getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")>=0){ 1554 var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected"); 1555 no_ligne = no_ligne + 1; 1556 if(no_ligne>getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected")){ 1557 no_ligne = getprop("/instrumentation/garmin196/menu_flights/max_ligne_selected"); 1558 } 1559 setprop("/instrumentation/garmin196/menu_flights/no_ligne_selected",no_ligne); 1560 } 1561 return; 1562 } 1563 1564 if(status==120){ 1565 setprop("/instrumentation/garmin196/status",130); 1566 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",-1); 1567 init_list_points(); 1568 return; 1569 } 1570 1571 if(status==121){ 1572 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 1573 var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/max_no_ligne"); 1574 no_ligne = no_ligne + 1; 1575 if(no_ligne>max_no_ligne){ 1576 no_ligne = max_no_ligne; 1577 } 1578 setprop("/instrumentation/garmin196/menu_routes/no_ligne_selected",no_ligne); 1579 return; 1580 } 1581 1582 if(status==122){ 1583 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 1584 var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/max_no_ligne_detail"); 1585 no_ligne = no_ligne + 1; 1586 if(no_ligne>max_no_ligne){ 1587 no_ligne = max_no_ligne; 1588 } 1589 setprop("/instrumentation/garmin196/menu_routes/no_ligne_detail",no_ligne); 1590 return; 1591 } 1592 1593 if(status==123){ 1594 var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char"); 1595 y_char = y_char - 1; 1596 if(y_char<0){ 1597 y_char = 35; 1598 } 1599 setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char); 1600 display_route_waypoint_search(); 1601 return; 1602 } 1603 1604 if(status==124){ 1605 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected"); 1606 var max_no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected"); 1607 no_ligne = no_ligne + 1; 1608 if(no_ligne>max_no_ligne){ 1609 no_ligne = max_no_ligne; 1610 } 1611 setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",no_ligne); 1612 return; 1613 } 1614 1615 if(status==130){ 1616 setprop("/instrumentation/garmin196/status",140); 1617 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",-1); 1618 init_list_aircraft(); 1619 display_list_aircraft(); 1620 return; 1621 } 1622 1623 if(status==131){ 1624 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 1625 no_ligne = no_ligne + 1; 1626 if(no_ligne>getprop("/instrumentation/garmin196/menu_points/max_no_ligne")){ 1627 no_ligne = getprop("/instrumentation/garmin196/menu_points/max_no_ligne"); 1628 } 1629 setprop("/instrumentation/garmin196/menu_points/no_ligne_selected",no_ligne); 1630 return; 1631 } 1632 1633 if(status==132){ 1634 var y_char = getprop("/instrumentation/garmin196/menu_points/y_char"); 1635 y_char = y_char - 1; 1636 if(y_char<0){ 1637 y_char = 35; 1638 } 1639 setprop("/instrumentation/garmin196/menu_points/y_char",y_char); 1640 display_menu_points(); 1641 return; 1642 } 1643 1644 if(status==133){ 1645 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1646 latitude = latitude - 1; 1647 if(latitude<-180){ 1648 latitude = -180; 1649 } 1650 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1651 display_menu_points(); 1652 return; 1653 } 1654 1655 if(status==134){ 1656 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1657 latitude = latitude - .01; 1658 if(latitude<-180){ 1659 latitude = -180; 1660 } 1661 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1662 display_menu_points(); 1663 return; 1664 } 1665 1666 if(status==135){ 1667 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1668 longitude = longitude - 1; 1669 if(longitude<-180){ 1670 longitude = 180; 1671 } 1672 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1673 display_menu_points(); 1674 return; 1675 } 1676 1677 if(status==136){ 1678 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1679 longitude = longitude - .01; 1680 if(longitude<-180){ 1681 longitude = 180; 1682 } 1683 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1684 display_menu_points(); 1685 return; 1686 } 1687 1688 if(status==140){ 1689 setprop("/instrumentation/garmin196/status",150); 1690 return; 1691 } 1692 1693 if(status==141){ 1694 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 1695 no_ligne = no_ligne + 1; 1696 if(no_ligne>getprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne")){ 1697 no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne"); 1698 } 1699 setprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected",no_ligne); 1700 display_list_aircraft(); 1701 return; 1702 } 1703 1704 if(status==142){ 1705 var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char"); 1706 y_char = y_char - 1; 1707 if(y_char<0){ 1708 y_char = 35; 1709 } 1710 setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char); 1711 display_menu_aircraft_name(); 1712 return; 1713 } 1714 1715 if(status==143){ 1716 var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise"); 1717 cruise = cruise - 1; 1718 if(cruise<1){ 1719 cruise = 1; 1720 } 1721 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise); 1722 display_menu_aircraft(); 1723 return; 1724 } 1725 1726 if(status==144){ 1727 var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max"); 1728 max = max - 1; 1729 if(max<1){ 1730 max = 1; 1731 } 1732 setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max); 1733 display_menu_aircraft(); 1734 return; 1735 } 1736 1737 if(status==145){ 1738 var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow"); 1739 fuelflow = fuelflow - 0.1; 1740 if(fuelflow<1){ 1741 fuelflow = 1; 1742 } 1743 setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow); 1744 return; 1745 } 1746 1747 if(status==150){ 1748 setprop("/instrumentation/garmin196/status",160); 1749 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",-1); 1750 return; 1751 } 1752 1753 if(status==160){ 1754 setprop("/instrumentation/garmin196/status",170); 1755 return; 1756 } 1757 1758 if(status==161){ 1759 var no_ligne = getprop("/instrumentation/garmin196/menu_map/no_ligne_selected"); 1760 no_ligne = no_ligne + 1; 1761 if(no_ligne>5){ 1762 no_ligne = 5; 1763 } 1764 setprop("/instrumentation/garmin196/menu_map/no_ligne_selected",no_ligne); 1765 return; 1766 } 1767 1768 if(status==170){ 1769 setprop("/instrumentation/garmin196/status",100); 1770 return; 1771 } 1772 1773 if(status==171){ 1774 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 1775 no_ligne = no_ligne + 1; 1776 if(no_ligne>5){ 1777 no_ligne = 5; 1778 } 1779 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne); 1780 return; 1781 } 1782 1783 if(status==176){ 1784 var no_ligne = getprop("/instrumentation/garmin196/menu_setup/no_ligne_selected"); 1785 no_ligne = no_ligne + 1; 1786 if(no_ligne>1){ 1787 no_ligne = 1; 1788 } 1789 setprop("/instrumentation/garmin196/menu_setup/no_ligne_selected",no_ligne); 1790 return; 1791 } 1792 1793 }elsif(x==1){ 1794 #traitement des popup 1795 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 1796 if(popup_status==11){ 1797 var y_char = getprop("/instrumentation/garmin196/dto_display/y_char"); 1798 y_char = y_char - 10; 1799 if(y_char<0){ 1800 y_char = y_char + 36; 1801 } 1802 setprop("/instrumentation/garmin196/dto_display/y_char",y_char); 1803 display_dto_search(); 1804 return; 1805 } 1806 1807 ##traitement des menus 1808 var status = getprop("/instrumentation/garmin196/status"); 1809 1810 if(status==123){ 1811 var y_char = getprop("/instrumentation/garmin196/menu_routes/search/y_char"); 1812 y_char = y_char - 10; 1813 if(y_char<0){ 1814 y_char = y_char + 36; 1815 } 1816 setprop("/instrumentation/garmin196/menu_routes/search/y_char",y_char); 1817 display_route_waypoint_search(); 1818 return; 1819 } 1820 1821 if(status==132){ 1822 var y_char = getprop("/instrumentation/garmin196/menu_points/y_char"); 1823 y_char = y_char - 10; 1824 if(y_char<0){ 1825 y_char = y_char + 36; 1826 } 1827 setprop("/instrumentation/garmin196/menu_points/y_char",y_char); 1828 display_menu_points(); 1829 return; 1830 } 1831 1832 if(status==132){ 1833 var y_char = getprop("/instrumentation/garmin196/menu_points/y_char"); 1834 y_char = y_char - 1; 1835 if(y_char<0){ 1836 y_char = 35; 1837 } 1838 setprop("/instrumentation/garmin196/menu_points/y_char",y_char); 1839 display_menu_points(); 1840 return; 1841 } 1842 1843 if(status==133){ 1844 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1845 latitude = latitude - 10; 1846 if(latitude<-180){ 1847 latitude = -180; 1848 } 1849 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1850 display_menu_points(); 1851 return; 1852 } 1853 1854 if(status==134){ 1855 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 1856 latitude = latitude - .1; 1857 if(latitude<-180){ 1858 latitude = -180; 1859 } 1860 setprop("/instrumentation/garmin196/menu_points/latitude",latitude); 1861 display_menu_points(); 1862 return; 1863 } 1864 1865 if(status==135){ 1866 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1867 longitude = longitude - 10; 1868 if(longitude<-180){ 1869 longitude = 180; 1870 } 1871 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1872 display_menu_points(); 1873 return; 1874 } 1875 1876 if(status==136){ 1877 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 1878 longitude = longitude - .1; 1879 if(longitude<-180){ 1880 longitude = 180; 1881 } 1882 setprop("/instrumentation/garmin196/menu_points/longitude",longitude); 1883 display_menu_points(); 1884 return; 1885 } 1886 1887 if(status==142){ 1888 var y_char = getprop("/instrumentation/garmin196/menu_aircraft/y_char"); 1889 y_char = y_char - 10; 1890 if(y_char<0){ 1891 y_char = y_char + 36; 1892 } 1893 setprop("/instrumentation/garmin196/menu_aircraft/y_char",y_char); 1894 display_menu_aircraft_name(); 1895 return; 1896 } 1897 1898 if(status==143){ 1899 var cruise = getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise"); 1900 cruise = cruise - 10; 1901 if(cruise<1){ 1902 cruise = 1; 1903 } 1904 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",cruise); 1905 display_menu_aircraft(); 1906 return; 1907 } 1908 1909 if(status==144){ 1910 var max = getprop("/instrumentation/garmin196/menu_aircraft/selected-max"); 1911 max = max - 10; 1912 if(max<1){ 1913 max = 1; 1914 } 1915 setprop("/instrumentation/garmin196/menu_aircraft/selected-max",max); 1916 display_menu_aircraft(); 1917 return; 1918 } 1919 1920 if(status==145){ 1921 var fuelflow = getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow"); 1922 fuelflow = fuelflow - 1; 1923 if(fuelflow<1){ 1924 fuelflow = 1; 1925 } 1926 setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",fuelflow); 1927 return; 1928 } 1929 } 1930 } 1931} 1932 1933var rockerleft = func (x){ 1934 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 1935 if(serviceable==1){ 1936 if(x==0){ 1937 #traitement des popup 1938 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 1939 if(popup_status==10){ 1940 setprop("/instrumentation/garmin196/popup_status",30); 1941 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 1942 init_dto_display(); 1943 display_dto_user(); 1944 return; 1945 } 1946 if(popup_status==11){ 1947 var x_char = getprop("/instrumentation/garmin196/dto_display/x_char"); 1948 if(x_char>0){ 1949 setprop("/instrumentation/garmin196/dto_display/x_char",x_char-1); 1950 setprop("/instrumentation/garmin196/dto_display/y_char",searchLastChar(getprop("/instrumentation/garmin196/dto_display/ligne_select"),getprop("/instrumentation/garmin196/dto_display/x_char"))); 1951 display_dto_search(); 1952 } 1953 return; 1954 } 1955 if(popup_status==20){ 1956 setprop("/instrumentation/garmin196/popup_status",10); 1957 setprop("/instrumentation/garmin196/dto_display/x_char",0); 1958 setprop("/instrumentation/garmin196/dto_display/y_char",0); 1959 setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search"); 1960 init_dto_display(); 1961 return; 1962 } 1963 if(popup_status==30){ 1964 setprop("/instrumentation/garmin196/popup_status",20); 1965 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 1966 init_dto_display(); 1967 display_dto_recent(); 1968 return; 1969 } 1970 1971 if(popup_status==40){ 1972 setprop("/instrumentation/garmin196/popup_status",80); 1973 display_nrst("wpt"); 1974 return; 1975 } 1976 1977 if(popup_status==50){ 1978 setprop("/instrumentation/garmin196/popup_status",40); 1979 display_nrst("airport"); 1980 return; 1981 } 1982 1983 if(popup_status==60){ 1984 setprop("/instrumentation/garmin196/popup_status",50); 1985 display_nrst("vor"); 1986 return; 1987 } 1988 1989 if(popup_status==70){ 1990 setprop("/instrumentation/garmin196/popup_status",60); 1991 display_nrst("ndb"); 1992 return; 1993 } 1994 1995 if(popup_status==80){ 1996 setprop("/instrumentation/garmin196/popup_status",70); 1997 display_nrst("fix"); 1998 return; 1999 } 2000 2001 var status = getprop("/instrumentation/garmin196/status"); 2002 2003 ##menu routes 2004 #suppression de la ligne 2005 if(status==121){ 2006 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 2007 delete_route(no_ligne); 2008 init_menu_routes_list(); 2009 } 2010 2011 if(status==122){ 2012 var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 2013 var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 2014 delete_route_detail(no_ligne_liste,no_ligne_detail); 2015 update_menu_routes_detail(); 2016 return; 2017 } 2018 2019 if(status==123){ 2020 var x_char = getprop("/instrumentation/garmin196/menu_routes/search/x_char"); 2021 if(x_char>0){ 2022 setprop("/instrumentation/garmin196/menu_routes/search/x_char",x_char-1); 2023 setprop("/instrumentation/garmin196/menu_routes/search/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_routes/search/ligne_select"),getprop("/instrumentation/garmin196/menu_routes/search/x_char"))); 2024 display_route_waypoint_search(); 2025 } 2026 return; 2027 } 2028 2029 ##menu points 2030 #suppression de la ligne 2031 if(status==131){ 2032 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 2033 delete_point(no_ligne); 2034 init_list_points(); 2035 } 2036 2037 if(status==132){ 2038 var x_char = getprop("/instrumentation/garmin196/menu_points/x_char"); 2039 if(x_char>0){ 2040 setprop("/instrumentation/garmin196/menu_points/x_char",x_char-1); 2041 setprop("/instrumentation/garmin196/menu_points/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_points/name"),getprop("/instrumentation/garmin196/menu_points/x_char"))); 2042 display_menu_points(); 2043 } 2044 return; 2045 } 2046 2047 ##menu aircraft 2048 #suppression de la ligne 2049 if(status==141){ 2050 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 2051 delete_aircraft(no_ligne); 2052 init_list_aircraft(); 2053 display_list_aircraft(); 2054 } 2055 2056 if(status==142){ 2057 var x_char = getprop("/instrumentation/garmin196/menu_aircraft/x_char"); 2058 if(x_char>0){ 2059 setprop("/instrumentation/garmin196/menu_aircraft/x_char",x_char-1); 2060 setprop("/instrumentation/garmin196/menu_aircraft/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"),getprop("/instrumentation/garmin196/menu_aircraft/x_char"))); 2061 display_menu_aircraft_name(); 2062 } 2063 return; 2064 } 2065 2066 if(status==175){ 2067 setprop("/instrumentation/garmin196/status",170); 2068 } 2069 2070 } 2071 } 2072} 2073 2074var rockerright = func (x){ 2075 var serviceable = getprop("/instrumentation/garmin196/serviceable"); 2076 if(serviceable==1){ 2077 if(x==0){ 2078 #traitement des popup 2079 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2080 if(popup_status==10){ 2081 setprop("/instrumentation/garmin196/popup_status",20); 2082 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 2083 init_dto_display(); 2084 display_dto_recent(); 2085 return; 2086 } 2087 if(popup_status==11){ 2088 var x_char = getprop("/instrumentation/garmin196/dto_display/x_char"); 2089 if(x_char<20){ 2090 setprop("/instrumentation/garmin196/dto_display/x_char",x_char+1); 2091 display_dto_search(); 2092 } 2093 return; 2094 } 2095 if(popup_status==20){ 2096 setprop("/instrumentation/garmin196/popup_status",30); 2097 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 2098 init_dto_display(); 2099 display_dto_user(); 2100 return; 2101 } 2102 if(popup_status==30){ 2103 setprop("/instrumentation/garmin196/popup_status",10); 2104 setprop("/instrumentation/garmin196/dto_display/ligne_select","Press Enter to search"); 2105 init_dto_display(); 2106 setprop("/instrumentation/garmin196/dto_display/x_char",0); 2107 setprop("/instrumentation/garmin196/dto_display/y_char",0); 2108 return; 2109 } 2110 2111 if(popup_status==40){ 2112 setprop("/instrumentation/garmin196/popup_status",50); 2113 display_nrst("vor"); 2114 return; 2115 } 2116 2117 if(popup_status==50){ 2118 setprop("/instrumentation/garmin196/popup_status",60); 2119 display_nrst("ndb"); 2120 return; 2121 } 2122 2123 if(popup_status==60){ 2124 setprop("/instrumentation/garmin196/popup_status",70); 2125 display_nrst("fix"); 2126 return; 2127 } 2128 2129 if(popup_status==70){ 2130 setprop("/instrumentation/garmin196/popup_status",80); 2131 display_nrst("wpt"); 2132 return; 2133 } 2134 2135 if(popup_status==80){ 2136 setprop("/instrumentation/garmin196/popup_status",40); 2137 display_nrst("airport"); 2138 return; 2139 } 2140 2141 var status = getprop("/instrumentation/garmin196/status"); 2142 2143 ##menu routes 2144 if(status==121){ 2145 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 2146 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")!=nil){ 2147 load_flight_plan(no_ligne); 2148 affiche_fpl_loaded(); 2149 } 2150 return; 2151 } 2152 2153 if(status==122){ 2154 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 2155 var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 2156 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt["~no_ligne_detail~"]/id")!=nil){ 2157 jump_to_waypoint(no_ligne_detail); 2158 affiche_waypoint_jump(); 2159 } 2160 return; 2161 } 2162 2163 if(status==123){ 2164 var x_char = getprop("/instrumentation/garmin196/menu_routes/search/x_char"); 2165 if(x_char<20){ 2166 setprop("/instrumentation/garmin196/menu_routes/search/x_char",x_char+1); 2167 display_route_waypoint_search(); 2168 } 2169 return; 2170 } 2171 2172 ##menu points 2173 if(status==132){ 2174 var x_char = getprop("/instrumentation/garmin196/menu_points/x_char"); 2175 if(x_char<20){ 2176 setprop("/instrumentation/garmin196/menu_points/x_char",x_char+1); 2177 display_menu_points(); 2178 } 2179 return; 2180 } 2181 2182 ##menu aircraft 2183 if(status==142){ 2184 var x_char = getprop("/instrumentation/garmin196/menu_aircraft/x_char"); 2185 if(x_char<20){ 2186 setprop("/instrumentation/garmin196/menu_aircraft/x_char",x_char+1); 2187 display_menu_aircraft_name(); 2188 } 2189 return; 2190 } 2191 2192 if(status==170){ 2193 setprop("/instrumentation/garmin196/status",175); 2194 } 2195 2196 } 2197 } 2198} 2199 2200##recalc speed to display 2201var change_speed_display = func{ 2202 var max_speed = getprop("/instrumentation/garmin196/max-speed"); 2203 var speed = getprop("/instrumentation/gps/indicated-ground-speed-kt"); 2204 setprop("/instrumentation/garmin196/speed-display",315*speed/max_speed); 2205} 2206 2207##calcul du turn rate 2208var calcul_turn_rate = func(dt){ 2209 if(last_bearing==-1){ 2210 last_bearing = getprop("/instrumentation/gps/magnetic-bug-error-deg"); 2211 } 2212 bearing = getprop("/instrumentation/gps/magnetic-bug-error-deg"); 2213 2214 var turn_rate = abs(bearing - last_bearing); 2215 if(turn_rate>180){ 2216 turn_rate = 360 - turn_rate; 2217 } 2218 var sgn = 1; 2219 if(bearing - last_bearing<0){ 2220 sgn = -1; 2221 } 2222 turn_rate = turn_rate/dt; 2223 if(turn_rate<10){##pour enlever les valeurs aberentes 2224 props.globals.getNode("/instrumentation/garmin196/turn-rate",1).setDoubleValue(sgn*turn_rate); 2225 } 2226 last_bearing = bearing; 2227} 2228 2229var change_wpt_id = func{ 2230 if(getprop("/instrumentation/gps/mode")!=nil and getprop("/autopilot/route-manager/wp[0]/id")!=""){ 2231 props.global.getNode("/instrumentation/garmin196/panel-wpt-id").alias("/autopilot/route-manager/wp[0]/id"); 2232 }else{ 2233 setprop("/instrumentation/garmin196/panel-wpt-id",getprop("/instrumentation/garmin196/panel-wpt-dto-id")); 2234 } 2235} 2236setlistener("/instrumentation/gps/mode",change_wpt_id); 2237 2238var change_position_wpt_bug = func{ 2239 var wpt_bearing = getprop("/instrumentation/gps/wp/wp[1]/bearing-mag-deg"); 2240 var aircraft_bearing = getprop("/instrumentation/gps/indicated-track-magnetic-deg"); 2241 2242 var diff = wpt_bearing - aircraft_bearing; 2243 setprop("/instrumentation/garmin196/position-wpt-bearing",diff); 2244 setprop("/instrumentation/garmin196/panel-wpt-bearing",diff); 2245 2246 var nb_wpt = getprop("/autopilot/route-manager/route/num"); 2247 var no_wpt = getprop("/autopilot/route-manager/current-wp"); 2248 var panel_course = 0; 2249 if(no_wpt>0 and no_wpt<(nb_wpt-1)){ 2250 panel_course = getprop("/autopilot/route-manager/route/wp["~(no_wpt-1)~"]/leg-bearing-true-deg"); 2251 }else{ 2252 panel_course = getprop("/instrumentation/gps/wp/wp[1]/bearing-mag-deg"); 2253 } 2254 panel_course = panel_course - aircraft_bearing; 2255 var panel_deflexion = diff - panel_course; 2256 2257 if(math.cos(diff*math.pi/180)>0){ 2258 setprop("/instrumentation/garmin196/panel-neddle-to-flag",1); 2259 }else{ 2260 setprop("/instrumentation/garmin196/panel-neddle-to-flag",0); 2261 } 2262 if(panel_deflexion>10){ 2263 panel_deflexion = 10; 2264 } 2265 if(panel_deflexion<-10){ 2266 panel_deflexion = -10; 2267 } 2268 2269 setprop("/instrumentation/garmin196/panel-neddle-course",panel_course); 2270 setprop("/instrumentation/garmin196/panel-neddle-deflexion",panel_deflexion); 2271 2272 ##vnav 2273 var altitude_id = getprop("/instrumentation/garmin196/vnav/altitude-m"); 2274 var latitude_id = getprop("/instrumentation/garmin196/vnav/latitude"); 2275 var longitude_id = getprop("/instrumentation/garmin196/vnav/longitude"); 2276 if(altitude_id!=nil and latitude_id!=nil and longitude_id!=nil and latitude_id!=-9999 and longitude_id!=-9999 and getprop("/instrumentation/garmin196/params/vnav-indicator")==1){ 2277 var altitude_aircraft = getprop("/instrumentation/gps/indicated-altitude-ft") * 0.3048; 2278 var latitude_aircraft = getprop("/instrumentation/gps/indicated-latitude-deg"); 2279 var longitude_aircraft = getprop("/instrumentation/gps/indicated-longitude-deg"); 2280 2281 var coord_id = geo.Coord.new().set_latlon(latitude_id,longitude_id); 2282 var coord_aircraft = geo.Coord.new().set_latlon(latitude_aircraft,longitude_aircraft); 2283 var distance = coord_aircraft.distance_to(coord_id);## en metres 2284 var diff_altitude = altitude_aircraft - altitude_id; 2285 var angle = math.atan2(diff_altitude,distance)*180/math.pi; 2286 #setprop("/instrumentation/garmin196/vnav/angle",angle); 2287 var deviation = angle - 3;#pente ideale = 3 degres 2288 if(deviation>10){ 2289 deviation = 10; 2290 } 2291 if(deviation<-10){ 2292 deviation = -10; 2293 } 2294 setprop("/instrumentation/garmin196/vnav/deviation",deviation); 2295 }else{ 2296 setprop("/instrumentation/garmin196/vnav/deviation",0); 2297 } 2298} 2299 2300var update_map = func{ 2301 ##protection, une seule recherche gps a la fois, la popup devient prioritaire 2302 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2303 if(popup_status<10 or popup_status>99){ 2304 var max_plots = 25; 2305 var offset_mul = 0.034; 2306 var symbol_map_range = getprop("/instrumentation/garmin196/map-range") * 8; 2307 var plots = []; 2308 var type_symbol = [ "airport" , "vor" , "ndb" , "fix" , "twn" , "wpt"]; 2309 2310 for(var i=0;i<size(type_symbol);i=i+1){ 2311 if(getprop("/instrumentation/garmin196/symbols/params/"~type_symbol[i])==1){ 2312 if(type_symbol[i]=="twn" or type_symbol[i]=="wpt"){ 2313 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(max_plots*8 + 1); 2314 }else{ 2315 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(max_plots*4 + 1); 2316 } 2317 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2318 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2319 var type = type_symbol[i]; 2320 if(type == "twn"){ 2321 type = "wpt"; 2322 } 2323 setprop("/instrumentation/gps/scratch/type", type); 2324 setprop("/instrumentation/gps/command", "nearest"); 2325 2326 while (getprop('/instrumentation/gps/scratch/has-next')) { 2327 var id = getprop('/instrumentation/gps/scratch/ident'); 2328 var range = getprop('/instrumentation/gps/scratch/distance-nm') / symbol_map_range; 2329 var bearing = 360 - getprop("/instrumentation/gps/indicated-track-magnetic-deg") + getprop('/instrumentation/gps/scratch/mag-bearing-deg'); 2330 if(bearing<0){ 2331 bearing = bearing + 360; 2332 } 2333 2334 if(bearing>360){ 2335 bearing = bearing - 360; 2336 } 2337 2338 if(i==1){##vor 2339 id = id ~ " " ~ sprintf("%2.2f",getprop('/instrumentation/gps/scratch/frequency-mhz')); 2340 } 2341 2342 if(i==2){##ndb 2343 id = id ~ " " ~ sprintf("%2.1f",getprop('/instrumentation/gps/scratch/frequency-khz')); 2344 } 2345 2346 var plot = { id: id,bearing: bearing,type: i,range: range}; 2347 if(range<=1){ 2348 if(i<4){ 2349 append(plots,plot); 2350 }elsif(i==4 and substr(id,size(id)-6)=="WPTTWN"){ 2351 append(plots,plot); 2352 }elsif(i==5 and substr(id,size(id)-6)=="WPTUSR"){ 2353 append(plots,plot); 2354 } 2355 }else{ 2356 break; 2357 } 2358 setprop("/instrumentation/gps/command", "next"); 2359 } 2360 } 2361 } 2362 2363 var plots_sorted = sort (plots, func (a,b) a.range - b.range); 2364 2365 ##suppression des points les plus proches si il y en a de trop 2366 var filtrage = getprop("/instrumentation/garmin196/params/filtrage"); 2367 if(filtrage==1){ 2368 var nb_points = 0; 2369 for(var i=0;i<size(plots_sorted);i=i+1){ 2370 if(plots_sorted[i].range<0.25){#un quart d'ecran 2371 nb_points = nb_points + 1; 2372 }else{ 2373 break; 2374 } 2375 } 2376 if(nb_points>5){ 2377 plots_sorted = subvec(plots_sorted,nb_points); 2378 } 2379 } 2380 2381 var nb_plots = max_plots; 2382 if(nb_plots>size(plots_sorted)){ 2383 nb_plots = size(plots_sorted); 2384 } 2385 for(var i=0;i<nb_plots;i=i+1){ 2386 if(plots_sorted[i].type==4 or plots_sorted[i].type==5){##town or waypoint 2387 var type_wpt = substr(plots_sorted[i].id,size(plots_sorted[i].id)-6); 2388 if(type_wpt=="WPTTWN"){#cities 2389 plots_sorted[i].id = substr(plots_sorted[i].id,0,size(plots_sorted[i].id)-8); 2390 }elsif(type_wpt=="WPTUSR"){#wpt user 2391 plots_sorted[i].id = substr(plots_sorted[i].id,0,size(plots_sorted[i].id)-6); 2392 plots_sorted[i].type = 5; 2393 } 2394 } 2395 2396 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/id",1).setValue(plots_sorted[i].id); 2397 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/type",1).setValue(plots_sorted[i].type); 2398 2399 ##calcul des coordonnees 2400 var x_wp = math.cos(plots_sorted[i].bearing*math.pi/180) * plots_sorted[i].range * offset_mul; 2401 var y_wp = math.sin(plots_sorted[i].bearing*math.pi/180) * plots_sorted[i].range * offset_mul; 2402 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/x",1).setDoubleValue(x_wp); 2403 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/y",1).setDoubleValue(y_wp); 2404 2405 if(x_wp<0.026 and x_wp>-0.026 and y_wp<0.0323 and y_wp>-0.0323){##si on est dans l'ecran, on affiche 2406 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setBoolValue(1); 2407 }else{ 2408 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setBoolValue(0); 2409 } 2410 } 2411 2412 for(var i=nb_plots;i<max_plots;i=i+1){ 2413 props.globals.getNode("/instrumentation/garmin196/symbols/symbol["~i~"]/visible",1).setIntValue(0); 2414 } 2415 2416 ##wpt path calculations 2417 var offset_range_wp_direct = 0.19; 2418 var range_wp_direct = offset_range_wp_direct * getprop("/instrumentation/gps/wp/wp[1]/distance-nm") / symbol_map_range; 2419 2420 var bearing_wp_direct = getprop("/instrumentation/garmin196/panel-wpt-bearing"); 2421 var x_range_wp_direct = math.abs(math.cos(bearing_wp_direct*math.pi/180) * range_wp_direct); #max 0.15 2422 if(x_range_wp_direct>0.15){ 2423 range_wp_direct = math.abs(0.15 / math.cos(bearing_wp_direct*math.pi/180)); 2424 } 2425 var y_range_wp_direct = math.abs(math.sin(bearing_wp_direct*math.pi/180) * range_wp_direct); #max 0.18 2426 if(y_range_wp_direct>0.18){ 2427 range_wp_direct = math.abs(0.18 / math.sin(bearing_wp_direct*math.pi/180)); 2428 } 2429 setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/range",range_wp_direct); 2430 2431 if(getprop("/instrumentation/garmin196/panel-wpt-id")!=nil and getprop("/instrumentation/garmin196/panel-wpt-id")!="------"){ 2432 setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/visible",1); 2433 }else{ 2434 setprop("/instrumentation/garmin196/symbols/paths/range_wp_direct/visible",0); 2435 } 2436 2437 ##flight plan calculation 2438 var nb_path = getprop("/autopilot/route-manager/route/num"); 2439 if(nb_path>9){ 2440 nb_path = 9; 2441 } 2442 2443 var aircraft_bearing = getprop("/instrumentation/gps/indicated-track-magnetic-deg"); 2444 for(var i=0;i<(nb_path-1);i=i+1){ 2445 var id = getprop("/autopilot/route-manager/route/wp["~i~"]/id"); 2446 2447 setprop("/instrumentation/gps/scratch/max-results",1); 2448 setprop("/instrumentation/gps/scratch/longitude-deg",-9999); 2449 setprop("/instrumentation/gps/scratch/latitude-deg",-9999); 2450 setprop("/instrumentation/gps/scratch/type", ""); 2451 setprop("/instrumentation/gps/scratch/query", id); 2452 setprop("/instrumentation/gps/command", "search"); 2453 2454 if(getprop("/instrumentation/gps/scratch/valid")==0 or getprop("/instrumentation/gps/scratch/ident")!=id){ 2455 setprop("/instrumentation/gps/scratch/type", "fix"); 2456 setprop("/instrumentation/gps/scratch/query", id); 2457 setprop("/instrumentation/gps/command", "search"); 2458 } 2459 2460 var distance_to_wp = getprop("/instrumentation/gps/scratch/distance-nm") / symbol_map_range; 2461 var bearing_to_wp = 360 - getprop("/instrumentation/gps/indicated-track-magnetic-deg") + getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2462 2463 var x_wp_fpl = math.cos(bearing_to_wp*math.pi/180) * distance_to_wp * offset_mul; 2464 var y_wp_fpl = math.sin(bearing_to_wp*math.pi/180) * distance_to_wp * offset_mul; 2465 2466 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/x",x_wp_fpl); 2467 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/y",y_wp_fpl); 2468 2469 var wp_bearing = 360 - getprop("/instrumentation/gps/indicated-track-true-deg") + getprop("/autopilot/route-manager/route/wp["~i~"]/leg-bearing-true-deg"); 2470 var wp_distance = offset_range_wp_direct * getprop("/autopilot/route-manager/route/wp["~i~"]/leg-distance-nm") / symbol_map_range; 2471 2472 var x_range_wp =(math.cos(wp_bearing*math.pi/180) * wp_distance) + ((x_wp_fpl/0.026)*0.15); #max 0.15 2473 if(math.abs(x_range_wp)>0.15){ 2474 wp_distance = math.abs(((0.15*math.sgn(math.cos(wp_bearing*math.pi/180))) - ((x_wp_fpl/0.026)*0.15))/math.cos(wp_bearing*math.pi/180)); 2475 } 2476 2477 var y_range_wp =(math.sin(wp_bearing*math.pi/180) * wp_distance) + ((y_wp_fpl/0.0323)*0.18); #max 0.18 2478 if(math.abs(y_range_wp)>0.18){ 2479 wp_distance = math.abs(((0.18*math.sgn(math.sin(wp_bearing*math.pi/180))) - ((y_wp_fpl/0.0323)*0.18))/math.sin(wp_bearing*math.pi/180)); 2480 } 2481 2482 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/range",wp_distance); 2483 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/bearing",wp_bearing); 2484 2485 if(x_wp_fpl<0.026 and x_wp_fpl>-0.026 and y_wp_fpl<0.0323 and y_wp_fpl>-0.0323){##si on est dans l'ecran, on affiche 2486 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",1); 2487 }else{ 2488 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",0); 2489 } 2490 } 2491 for(var i=nb_path;i<9;i=i+1){ 2492 setprop("/instrumentation/garmin196/symbols/paths/range_wp_"~i~"_"~(i+1)~"/visible",0); 2493 } 2494 2495 } 2496 if(getprop("/instrumentation/garmin196/serviceable")==1 and getprop("/instrumentation/garmin196/status")==10){ 2497 settimer(update_map,1); 2498 } 2499} 2500 2501var display_dto_recent = func{ 2502 var waypoints = props.globals.getNode("/instrumentation/garmin196/waypoints/recent/",1); 2503 var i = 0; 2504 foreach (var e; waypoints.getChildren("wpt")) { 2505 var id = e.getChild("id").getValue(); 2506 var type = e.getChild("type").getValue(); 2507 var ligne = id; 2508 if(type=="wpt"){ 2509 var type_wpt = substr(id,size(id)-6); 2510 if(type_wpt=="WPTTWN"){#cities 2511 ligne = substr(id,0,size(id)-8); 2512 ligne = substr(ligne,0,15); 2513 }elsif(type_wpt=="WPTUSR"){#wpt user 2514 ligne = substr(id,0,size(id)-6); 2515 } 2516 } 2517 2518 ligne = ligne ~ " " ~ type; 2519 var ligne_spaces = " "; 2520 ligne_spaces = substr(ligne_spaces,0,15-size(ligne)); 2521 2522 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1); 2523 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2524 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2525 setprop("/instrumentation/gps/scratch/type", type); 2526 setprop("/instrumentation/gps/scratch/query", id); 2527 setprop("/instrumentation/gps/command", "search"); 2528 2529 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2530 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2531 2532 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2533 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2534 ligne = ligne ~sprintf(" %3.1fnm",range); 2535 }else{ 2536 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2537 } 2538 2539 if(i==0){ 2540 setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne); 2541 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1); 2542 }else{ 2543 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0); 2544 } 2545 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte",ligne); 2546 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id",id); 2547 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type",type); 2548 i=i+1; 2549 } 2550 for(var j=i;j<5;j=j+1){ 2551 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte",""); 2552 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0); 2553 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id",""); 2554 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type",""); 2555 } 2556 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0); 2557 setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",i-1); 2558 if(i==0){ 2559 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 2560 } 2561} 2562 2563var display_dto_user = func{ 2564 var waypoints = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1); 2565 var i = 0; 2566 foreach (var e; waypoints.getChildren("wpt")) { 2567 var id = e.getChild("id").getValue()~"WPTUSR"; 2568 var type = "wpt"; 2569 var ligne = substr(id,0,size(id)-6); 2570 ligne = substr(ligne,0,14); 2571 2572 var ligne_spaces = " "; 2573 ligne_spaces = substr(ligne_spaces,0,14-size(ligne)); 2574 2575 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1); 2576 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2577 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2578 setprop("/instrumentation/gps/scratch/type", type); 2579 setprop("/instrumentation/gps/scratch/query", id); 2580 setprop("/instrumentation/gps/command", "search"); 2581 2582 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2583 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2584 2585 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2586 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2587 ligne = ligne ~sprintf(" %3.1fnm",range); 2588 }else{ 2589 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2590 } 2591 2592 if(i==0){ 2593 setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne); 2594 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1); 2595 }else{ 2596 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0); 2597 } 2598 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte",ligne); 2599 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id",id); 2600 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type",type); 2601 i=i+1; 2602 } 2603 for(var j=i;j<5;j=j+1){ 2604 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte",""); 2605 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0); 2606 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id",""); 2607 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type",""); 2608 } 2609 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0); 2610 setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",i-1); 2611 if(i==0){ 2612 setprop("/instrumentation/garmin196/dto_display/ligne_select",""); 2613 } 2614} 2615 2616var affectation_waypoint = func(id){ 2617 setprop("/autopilot/route-manager/input","@CLEAR"); 2618 setprop("/autopilot/route-manager/input","@POP"); 2619 setprop("/autopilot/route-manager/input","@insert0:"~id); 2620 setprop("/autopilot/route-manager/input","@JUMP0"); 2621 setprop("/autopilot/route-manager/input","@ACTIVATE"); 2622} 2623 2624var display_dto_search = func{ 2625 var ligne_selected = getprop("/instrumentation/garmin196/dto_display/ligne_select"); 2626 var x_char = props.globals.getNode("/instrumentation/garmin196/dto_display/x_char").getValue(); 2627 ligne_selected = substr(ligne_selected,0,x_char); 2628 ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/dto_display/y_char")]; 2629 setprop("/instrumentation/garmin196/dto_display/ligne_select",ligne_selected); 2630 2631 var plots = []; 2632 ##recherche gps globale 2633 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 2634 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2635 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2636 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 2637 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 2638 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(""); 2639 2640 setprop("/instrumentation/gps/command", "search"); 2641 var i=0; 2642 var flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2643 while (flag_continue and i<5) { 2644 var id = getprop("/instrumentation/gps/scratch/ident"); 2645 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2646 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2647 var type = getprop("/instrumentation/gps/scratch/type"); 2648 2649 var ligne = id; 2650 if(type=="waypoint"){ 2651 type = "wpt"; 2652 var type_wpt = substr(id,size(id)-6); 2653 if(type_wpt=="WPTTWN"){#cities 2654 ligne = substr(id,0,size(id)-8); 2655 }elsif(type_wpt=="WPTUSR"){#wpt user 2656 ligne = substr(id,0,size(id)-6); 2657 } 2658 } 2659 2660 ligne = ligne ~ " " ~ type; 2661 var ligne_spaces = " "; 2662 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 2663 2664 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2665 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2666 ligne = ligne ~sprintf(" %3.1fnm",range); 2667 }else{ 2668 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2669 } 2670 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2671 2672 2673 var plot = { id: id,texte: ligne,type: type}; 2674 append(plots,plot); 2675 2676 i=i+1; 2677 setprop("/instrumentation/gps/command", "next"); 2678 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2679 } 2680 2681 ##recherche gps fix 2682 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 2683 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2684 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2685 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 2686 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 2687 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("fix"); 2688 2689 setprop("/instrumentation/gps/command", "search"); 2690 i=0; 2691 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2692 while (flag_continue and i<5) { 2693 var id = getprop("/instrumentation/gps/scratch/ident"); 2694 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2695 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2696 var type = getprop("/instrumentation/gps/scratch/type"); 2697 2698 var ligne = id ~ " " ~ type; 2699 var ligne_spaces = " "; 2700 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 2701 2702 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2703 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2704 ligne = ligne ~sprintf(" %3.1fnm",range); 2705 }else{ 2706 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2707 } 2708 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2709 2710 2711 var plot = { id: id,texte: ligne,type: type}; 2712 append(plots,plot); 2713 2714 i=i+1; 2715 setprop("/instrumentation/gps/command", "next"); 2716 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2717 } 2718 2719 ##recherche gps vor 2720 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 2721 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2722 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2723 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 2724 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 2725 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("vor"); 2726 2727 setprop("/instrumentation/gps/command", "search"); 2728 i=0; 2729 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2730 while (flag_continue and i<5) { 2731 var id = getprop("/instrumentation/gps/scratch/ident"); 2732 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2733 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2734 var type = getprop("/instrumentation/gps/scratch/type"); 2735 2736 var ligne = id ~ " vor"; 2737 var ligne_spaces = " "; 2738 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 2739 2740 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2741 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2742 ligne = ligne ~sprintf(" %3.1fnm",range); 2743 }else{ 2744 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2745 } 2746 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2747 2748 2749 var plot = { id: id,texte: ligne,type: type}; 2750 append(plots,plot); 2751 2752 i=i+1; 2753 setprop("/instrumentation/gps/command", "next"); 2754 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2755 } 2756 2757 ##recherche gps ndb 2758 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 2759 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2760 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2761 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 2762 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 2763 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("ndb"); 2764 2765 setprop("/instrumentation/gps/command", "search"); 2766 i=0; 2767 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2768 while (flag_continue and i<5) { 2769 var id = getprop("/instrumentation/gps/scratch/ident"); 2770 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2771 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2772 var type = getprop("/instrumentation/gps/scratch/type"); 2773 2774 var ligne = id ~ " ndb"; 2775 var ligne_spaces = " "; 2776 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 2777 2778 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2779 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2780 ligne = ligne ~sprintf(" %3.1fnm",range); 2781 }else{ 2782 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2783 } 2784 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 2785 2786 2787 var plot = { id: id,texte: ligne,type: type}; 2788 append(plots,plot); 2789 2790 i=i+1; 2791 setprop("/instrumentation/gps/command", "next"); 2792 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2793 } 2794 2795 var plots_sorted = sort (plots, func (a,b) cmp (a.id, b.id)); 2796 var nb_plots = size(plots_sorted); 2797 if(nb_plots>5){ 2798 nb_plots = 5; 2799 } 2800 for(var j=0;j<nb_plots;j=j+1){ 2801 if(i==0 and popup_status!=10 and popup_status!=11){ 2802 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(1); 2803 }else{ 2804 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0); 2805 } 2806 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte",plots_sorted[j].texte); 2807 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id",plots_sorted[j].id); 2808 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type",plots_sorted[j].type); 2809 } 2810 2811 for(var j=nb_plots;j<5;j=j+1){ 2812 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/texte",""); 2813 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~j~"]/selected",1).setBoolValue(0); 2814 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/id",""); 2815 setprop("/instrumentation/garmin196/dto_display/ligne["~j~"]/type",""); 2816 } 2817 setprop("/instrumentation/garmin196/dto_display/no_ligne_selected",0); 2818 setprop("/instrumentation/garmin196/dto_display/max_ligne_selected",nb_plots-1); 2819} 2820 2821var searchLastChar = func(chaine, char){ 2822 var result = -1; 2823 var char_a_tester = substr(chaine,char,1); 2824 for(var i=0;i<size(tab_chiffres_lettres);i=i+1){ 2825 if(tab_chiffres_lettres[i]==char_a_tester){ 2826 result = i; 2827 break; 2828 } 2829 } 2830 return result; 2831} 2832 2833var init_dto_display = func{ 2834 for(var i=0;i<5;i=i+1){ 2835 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/texte",""); 2836 props.globals.getNode("/instrumentation/garmin196/dto_display/ligne["~i~"]/selected",1).setBoolValue(0); 2837 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/id",""); 2838 setprop("/instrumentation/garmin196/dto_display/ligne["~i~"]/type",""); 2839 } 2840} 2841 2842var init_nrst_display = func{ 2843 for(var i=0;i<5;i=i+1){ 2844 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte",""); 2845 props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0); 2846 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id",""); 2847 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type",""); 2848 } 2849} 2850 2851var display_nrst = func(type){ 2852 if(type=="wpt"){ 2853 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(25); 2854 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2855 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2856 #props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(1); 2857 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(type); 2858 setprop("/instrumentation/gps/command", "nearest"); 2859 var i=0; 2860 var flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2861 while (flag_continue and i<5) { 2862 var id = getprop("/instrumentation/gps/scratch/ident"); 2863 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2864 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2865 2866 var type_wpt = substr(id,size(id)-6); 2867 if(type_wpt=="WPTTWN"){ 2868 var ligne = substr(id,0,size(id)-8); 2869 }elsif(type_wpt=="WPTUSR"){ 2870 var ligne = substr(id,0,size(id)-6); 2871 } 2872 ligne = substr(ligne,0,18); 2873 var ligne_spaces = " "; 2874 ligne_spaces = substr(ligne_spaces,0,18-size(ligne)); 2875 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2876 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2877 ligne = ligne ~sprintf(" %3.1fnm",range); 2878 }else{ 2879 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2880 } 2881 2882 if(i==0){ 2883 setprop("/instrumentation/garmin196/nrst_display/ligne_select",ligne); 2884 props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(1); 2885 }else{ 2886 props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0); 2887 } 2888 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte",ligne); 2889 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id",id); 2890 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type",type); 2891 i=i+1; 2892 2893 setprop("/instrumentation/gps/command", "next"); 2894 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2895 } 2896 setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",0); 2897 setprop("/instrumentation/garmin196/nrst_display/max_ligne_selected",(i-1)); 2898 2899 }else{ 2900 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(6); 2901 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 2902 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 2903 #props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(1); 2904 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(type); 2905 props.globals.getNode("/instrumentation/gps/scratch").removeChildren("runways"); 2906 setprop("/instrumentation/gps/command", "nearest"); 2907 var i=0; 2908 var flag_continue = getprop("/instrumentation/gps/scratch/valid"); 2909 while (flag_continue and i<5) { 2910 var id = getprop("/instrumentation/gps/scratch/ident"); 2911 var ligne = id; 2912 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 2913 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 2914 var ligne_spaces = " "; 2915 ligne_spaces = substr(ligne_spaces,0,6-size(ligne)); 2916 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 2917 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2918 ligne = ligne ~sprintf(" %3.1fnm",range); 2919 }else{ 2920 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 2921 } 2922 if(type=="airport"){ 2923 var runways = props.globals.getNode("/instrumentation/gps/scratch",1); 2924 var max_length = 0; 2925 foreach (var e; runways.getChildren("runways")) { 2926 var runway_length = e.getChild("length-ft").getValue(); 2927 if(runway_length>max_length){ 2928 max_length = runway_length; 2929 } 2930 } 2931 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 2932 ligne = ligne ~ " " ~ sprintf("%4.0fft",max_length); 2933 }else{ 2934 ligne = ligne ~ " " ~ sprintf("%4.0fm",max_length*0.3048); 2935 } 2936 2937 var radio = airportinfo(id).comms('ATIS'); 2938 if(size(radio) > 0){ 2939 ligne = ligne ~ sprintf(" %3.2f",radio[0]); 2940 } 2941 }elsif(type=="vor"){ 2942 ligne = ligne ~ " " ~ sprintf("%2.2f",getprop('/instrumentation/gps/scratch/frequency-mhz')); 2943 }elsif(type=="ndb"){ 2944 ligne = ligne ~ " " ~ sprintf("%2.1f",getprop('/instrumentation/gps/scratch/frequency-khz')); 2945 } 2946 if(i==0){ 2947 setprop("/instrumentation/garmin196/nrst_display/ligne_select",ligne); 2948 props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(1); 2949 }else{ 2950 props.globals.getNode("/instrumentation/garmin196/nrst_display/ligne["~i~"]/selected",1).setBoolValue(0); 2951 } 2952 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/texte",ligne); 2953 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/id",id); 2954 setprop("/instrumentation/garmin196/nrst_display/ligne["~i~"]/type",type); 2955 i=i+1; 2956 2957 props.globals.getNode("/instrumentation/gps/scratch").removeChildren("runways"); 2958 setprop("/instrumentation/gps/command", "next"); 2959 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 2960 } 2961 setprop("/instrumentation/garmin196/nrst_display/no_ligne_selected",0); 2962 setprop("/instrumentation/garmin196/nrst_display/max_ligne_selected",(i-1)); 2963 } 2964} 2965 2966var load_cities = func{ 2967 print("Garmin 196 loading cities"); 2968 fgcommand("loadxml", props.Node.new({ filename: getprop("/sim/fg-root")~"/Aircraft/Instruments-3d/garmin196/cities.xml", targetnode: "/instrumentation/garmin196/cities" })); 2969 var waypoints = props.globals.getNode("/instrumentation/garmin196/cities/waypoints",1); 2970 foreach (var e; waypoints.getChildren("waypoint")) { 2971 var id = e.getChild("id").getValue(); 2972 var latitude = e.getChild("latitude").getValue(); 2973 var longitude = e.getChild("longitude").getValue(); 2974 2975 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(longitude); 2976 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(latitude); 2977 props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(id); 2978 #setprop("/instrumentation/gps/command","define-user-wpt"); 2979 } 2980 props.globals.getNode("/instrumentation/garmin196").removeChildren("cities"); 2981 2982 2983 print("Garmin 196 loading cities done"); 2984} 2985 2986var update_wp_id_display=func{ 2987 var id=getprop("/autopilot/route-manager/wp[0]/id"); 2988 if(size(id)>6){ 2989 var type_wpt=substr(id,size(id)-6); 2990 if(type_wpt=="WPTTWN"){#cities 2991 id=substr(id,0,size(id)-8); 2992 id=substr(id,0,13); 2993 }elsif(type_wpt=="WPTUSR"){#wpt user 2994 id=substr(id,0,size(id)-6); 2995 } 2996 } 2997 setprop("/instrumentation/garmin196/panel-wpt-id",id); 2998 setprop("/instrumentation/garmin196/position-wpt-id",id); 2999 3000 ##stockage des coordonnees pour la vnav 3001 setprop("/instrumentation/gps/scratch/max-results",1); 3002 setprop("/instrumentation/gps/scratch/longitude-deg",-9999); 3003 setprop("/instrumentation/gps/scratch/latitude-deg",-9999); 3004 setprop("/instrumentation/gps/scratch/type", ""); 3005 setprop("/instrumentation/gps/scratch/query", id); 3006 setprop("/instrumentation/gps/command", "search"); 3007 3008 if(getprop("/instrumentation/gps/scratch/type")=="airport"){ 3009 ##stockage des coordonnees du waypoint pour vnav 3010 props.globals.getNode("/instrumentation/garmin196/vnav/longitude",1).setDoubleValue(getprop("/instrumentation/gps/scratch/longitude-deg")); 3011 props.globals.getNode("/instrumentation/garmin196/vnav/latitude",1).setDoubleValue(getprop("/instrumentation/gps/scratch/latitude-deg")); 3012 props.globals.getNode("/instrumentation/garmin196/vnav/altitude-m",1).setDoubleValue(getprop("/instrumentation/gps/scratch/altitude-ft") * 0.3048); 3013 props.globals.getNode("/instrumentation/garmin196/vnav/visible",1).setBoolValue(1); 3014 }else{ 3015 props.globals.getNode("/instrumentation/garmin196/vnav/visible",1).setBoolValue(0); 3016 } 3017 3018} 3019setlistener("/autopilot/route-manager/wp[0]/id",update_wp_id_display); 3020 3021var init_list_aircraft = func{ 3022 var aircrafts = props.globals.getNode("/instrumentation/garmin196/params/aircrafts",1); 3023 var i = 0; 3024 foreach (var e; aircrafts.getChildren("aircraft")) { 3025 setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~i~"]/texte",e.getChild("name").getValue()); 3026 i=i+1; 3027 } 3028 3029 for(var j=i;j<6;j=j+1){ 3030 setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~j~"]/texte",""); 3031 } 3032 3033 if(i<6){ 3034 setprop("/instrumentation/garmin196/menu_aircraft/aircraft["~i~"]/texte","ENTER TO ADD AIRCRAFT"); 3035 }else{ 3036 i=5; 3037 } 3038 setprop("/instrumentation/garmin196/menu_aircraft/max_no_ligne",i); 3039} 3040 3041var init_new_aircraft = func(no_aircraft){ 3042 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name", 1).setValue("AIRCRAFT"); 3043 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/max-speed", 1).setIntValue(150); 3044 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/cruise-speed", 1).setIntValue(120); 3045 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/fuel-flow", 1).setIntValue(5); 3046} 3047 3048var delete_aircraft = func(no_aircraft){ 3049 for(var i=no_aircraft+1;i<6;i=i+1){ 3050 if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")!=nil){ 3051 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/name",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/name")); 3052 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/max-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/max-speed")); 3053 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/cruise-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/cruise-speed")); 3054 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~(i-1)~"]/fuel-flow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~i~"]/fuel-flow")); 3055 } 3056 } 3057 var nb_aircraft = size(props.globals.getNode("/instrumentation/garmin196/params/aircrafts",1).getChildren("aircraft")); 3058 if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name")!=nil){ 3059 props.globals.getNode("/instrumentation/garmin196/params/aircrafts/aircraft["~(nb_aircraft-1)~"]").remove(); 3060 } 3061 3062 setprop("/instrumentation/garmin196/no_aircraft",no_aircraft-1); 3063 save_parameters(); 3064} 3065 3066var display_list_aircraft = func{ 3067 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 3068 if(no_ligne==-1){ 3069 no_ligne = getprop("/instrumentation/garmin196/no_aircraft"); 3070 } 3071 var aircraft_display = ""; 3072 if(getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed")!=nil){ 3073 var max_speed = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed"); 3074 var name = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name"); 3075 setprop("/instrumentation/garmin196/max-speed",max_speed); 3076 setprop("/instrumentation/garmin196/cruise-speed",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed")); 3077 setprop("/instrumentation/garmin196/fuel-flow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow")); 3078 setprop("/instrumentation/garmin196/no_aircraft",no_ligne); 3079 3080 aircraft_display = name ~ " vmax="; 3081 if(getprop("/instrumentation/garmin196/params/units/speed")==1){ 3082 aircraft_display = aircraft_display ~ max_speed ~"kt"; 3083 }else{ 3084 aircraft_display = aircraft_display ~ sprintf("%3.0f",(max_speed*1.852)) ~"km/h"; 3085 } 3086 }else{ 3087 aircraft_display = "NEW AIRCRAFT"; 3088 } 3089 setprop("/instrumentation/garmin196/menu_aircraft/text",aircraft_display); 3090} 3091 3092var init_menu_aircraft = func{ 3093 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 3094 3095 setprop("/instrumentation/garmin196/menu_aircraft/selected-name",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name")); 3096 setprop("/instrumentation/garmin196/menu_aircraft/selected-max",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed")); 3097 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed")); 3098 setprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow",getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow")); 3099 3100 setprop("/instrumentation/garmin196/menu_aircraft/x_char",size(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"))-1); 3101 setprop("/instrumentation/garmin196/menu_aircraft/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_aircraft/selected-name"),getprop("/instrumentation/garmin196/menu_aircraft/x_char"))); 3102 display_menu_aircraft(); 3103} 3104 3105var validate_menu_aircraft=func{ 3106 var no_ligne = getprop("/instrumentation/garmin196/menu_aircraft/no_ligne_selected"); 3107 3108 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/name",getprop("/instrumentation/garmin196/menu_aircraft/selected-name")); 3109 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/max-speed",getprop("/instrumentation/garmin196/menu_aircraft/selected-max")); 3110 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/cruise-speed",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise")); 3111 setprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_ligne~"]/fuel-flow",getprop("/instrumentation/garmin196/menu_aircraft/selected-fuelflow")); 3112 save_parameters(); 3113} 3114 3115var display_menu_aircraft=func{ 3116 if(getprop("/instrumentation/garmin196/params/units/speed")==1){ 3117 setprop("/instrumentation/garmin196/menu_aircraft/selected-max-display",getprop("/instrumentation/garmin196/menu_aircraft/selected-max")~"kt"); 3118 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise-display",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise")~"kt"); 3119 }else{ 3120 setprop("/instrumentation/garmin196/menu_aircraft/selected-max-display",sprintf("%3.0fkm/h",getprop("/instrumentation/garmin196/menu_aircraft/selected-max")*1.852)); 3121 setprop("/instrumentation/garmin196/menu_aircraft/selected-cruise-display",sprintf("%3.0fkm/h",getprop("/instrumentation/garmin196/menu_aircraft/selected-cruise")*1.852)); 3122 } 3123} 3124 3125var display_menu_aircraft_name = func{ 3126 var ligne_selected = getprop("/instrumentation/garmin196/menu_aircraft/selected-name"); 3127 var x_char = props.globals.getNode("/instrumentation/garmin196/menu_aircraft/x_char").getValue(); 3128 ligne_selected = substr(ligne_selected,0,x_char); 3129 ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_aircraft/y_char")]; 3130 setprop("/instrumentation/garmin196/menu_aircraft/selected-name",ligne_selected); 3131} 3132 3133var display_menu_flights = func{ 3134 var flights = props.globals.getNode("/instrumentation/garmin196/flights",1); 3135 var i = 0; 3136 foreach (var e; flights.getChildren("flight")) { 3137 var start = e.getChild("start").getValue(); 3138 var end = e.getChild("end").getValue(); 3139 var date = e.getChild("date").getValue(); 3140 var aircraft = e.getChild("aircraft").getValue(); 3141 var distance = e.getChild("distance").getValue(); 3142 var duration = e.getChild("duration").getValue(); 3143 3144 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3145 distance = sprintf("%03.1fnm",distance); 3146 }else{ 3147 distance = sprintf("%03.1fkm",distance*1.852); 3148 } 3149 var ligne = sprintf("%s to %s %s",start,end,date); 3150 3151 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/texte",ligne); 3152 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/start",start); 3153 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/end",end); 3154 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/date",date); 3155 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/aircraft",aircraft); 3156 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/distance",distance); 3157 setprop("/instrumentation/garmin196/menu_flights/ligne["~i~"]/duration",sprintf("%03.1fh",duration)); 3158 3159 i=i+1; 3160 } 3161 for(var j=i;j<8;j=j+1){ 3162 setprop("/instrumentation/garmin196/menu_flights/ligne["~j~"]/texte",""); 3163 } 3164 setprop("/instrumentation/garmin196/menu_flights/max_ligne_selected",i-1); 3165} 3166 3167var update_menu_flights_detail = func{ 3168 var no_ligne = getprop("/instrumentation/garmin196/menu_flights/no_ligne_selected"); 3169 setprop("/instrumentation/garmin196/menu_flights/ligne_selected/texte",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/start")~" to "~getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/end")); 3170 setprop("/instrumentation/garmin196/menu_flights/ligne_selected/date",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/date")); 3171 setprop("/instrumentation/garmin196/menu_flights/ligne_selected/aircraft",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/aircraft")); 3172 setprop("/instrumentation/garmin196/menu_flights/ligne_selected/distance",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/distance")); 3173 setprop("/instrumentation/garmin196/menu_flights/ligne_selected/duration",getprop("/instrumentation/garmin196/menu_flights/ligne["~no_ligne~"]/duration")); 3174} 3175 3176var update_flight = func{ 3177 if(getprop("/instrumentation/garmin196/flight/inflight")==nil){ 3178 props.globals.getNode("/instrumentation/garmin196/flight/inflight",1).setBoolValue(0); 3179 props.globals.getNode("/instrumentation/garmin196/flight/start",1).setValue(""); 3180 } 3181 3182 var inflight = getprop("/instrumentation/garmin196/flight/inflight"); 3183 var speed = getprop("/instrumentation/gps/indicated-ground-speed-kt"); 3184 if(inflight==1){ 3185 if(speed<30){#speed<30kt, flight saved 3186 3187 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1); 3188 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3189 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3190 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("airport"); 3191 setprop("/instrumentation/gps/command", "nearest"); 3192 var id = getprop("/instrumentation/gps/scratch/ident"); 3193 props.globals.getNode("/instrumentation/garmin196/flight/end",1).setValue(id); 3194 props.globals.getNode("/instrumentation/garmin196/flight/distance",1).setDoubleValue(getprop("/instrumentation/gps/trip-odometer")); 3195 props.globals.getNode("/instrumentation/garmin196/flight/duration",1).setDoubleValue((getprop("/sim/time/elapsed-sec")-getprop("/instrumentation/garmin196/flight/start-time"))/3600); 3196 setprop("/instrumentation/garmin196/flight/inflight",0); 3197 3198 ##inscription dans le carnet de vol 3199 for(var i=7;i>0;i=i-1){ 3200 if(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/start")!=nil){ 3201 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/start",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/start")); 3202 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/end",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/end")); 3203 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/date",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/date")); 3204 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/aircraft")); 3205 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/distance")); 3206 props.globals.getNode("/instrumentation/garmin196/flights/flight["~i~"]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flights/flight["~(i-1)~"]/duration")); 3207 } 3208 } 3209 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/start",1).setValue(getprop("/instrumentation/garmin196/flight/start")); 3210 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/end",1).setValue(getprop("/instrumentation/garmin196/flight/end")); 3211 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/date",1).setValue(getprop("/instrumentation/garmin196/flight/date")); 3212 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/aircraft",1).setValue(getprop("/instrumentation/garmin196/flight/aircraft")); 3213 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/distance",1).setDoubleValue(getprop("/instrumentation/garmin196/flight/distance")); 3214 props.globals.getNode("/instrumentation/garmin196/flights/flight[0]/duration",1).setDoubleValue(getprop("/instrumentation/garmin196/flight/duration")); 3215 display_menu_flights(); 3216 save_parameters(); 3217 } 3218 }else{ 3219 if(speed>30){#speed>30kt, flight started 3220 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(1); 3221 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3222 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3223 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("airport"); 3224 setprop("/instrumentation/gps/command", "nearest"); 3225 var id = getprop("/instrumentation/gps/scratch/ident"); 3226 props.globals.getNode("/instrumentation/garmin196/flight/start",1).setValue(id); 3227 var no_aircraft = getprop("/instrumentation/garmin196/no_aircraft"); 3228 var aircraft = getprop("/instrumentation/garmin196/params/aircrafts/aircraft["~no_aircraft~"]/name"); 3229 if(aircraft==nil){ 3230 props.globals.getNode("/instrumentation/garmin196/flight/aircraft",1).setValue("NO AIRCRAFT"); 3231 }else{ 3232 props.globals.getNode("/instrumentation/garmin196/flight/aircraft",1).setValue(aircraft); 3233 } 3234 props.globals.getNode("/instrumentation/garmin196/flight/date",1).setValue(substr(getprop("/sim/time/gmt"),0,10)); 3235 props.globals.getNode("/instrumentation/garmin196/flight/start-time",1).setDoubleValue(getprop("/sim/time/elapsed-sec")); 3236 setprop("/instrumentation/gps/trip-odometer",0); 3237 setprop("/instrumentation/garmin196/flight/inflight",1); 3238 } 3239 } 3240} 3241 3242var update_e6b_menu=func{ 3243 var status = getprop("/instrumentation/garmin196/status"); 3244 if(status==150){ 3245 if(getprop("/instrumentation/garmin196/params/units/pressure")==1){ 3246 setprop("/instrumentation/garmin196/menu_e6b/baro-pressure",sprintf("%2.2fInHg",getprop("/environment/pressure-sea-level-inhg"))); 3247 }else{ 3248 setprop("/instrumentation/garmin196/menu_e6b/baro-pressure",sprintf("%4.0fhPa",getprop("/environment/pressure-sea-level-inhg")/0.03)); 3249 } 3250 3251 var diff_speed = getprop("/instrumentation/gps/indicated-ground-speed-kt") - getprop("/velocities/airspeed-kt"); 3252 if(getprop("/instrumentation/garmin196/params/units/speed")==1){ 3253 setprop("/instrumentation/garmin196/menu_e6b/wind-speed",sprintf("%1.0fkt",getprop("/environment/wind-speed-kt"))); 3254 setprop("/instrumentation/garmin196/menu_e6b/calibrated-airspeed",sprintf("%1.0fkt",getprop("/instrumentation/gps/indicated-ground-speed-kt"))); 3255 setprop("/instrumentation/garmin196/menu_e6b/true-airspeed",sprintf("%1.0fkt",getprop("/velocities/airspeed-kt"))); 3256 setprop("/instrumentation/garmin196/menu_e6b/head-wind",sprintf("%1.0fkt",diff_speed)); 3257 }else{ 3258 setprop("/instrumentation/garmin196/menu_e6b/wind-speed",sprintf("%1.0fkm/h",getprop("/environment/wind-speed-kt")*1.852)); 3259 setprop("/instrumentation/garmin196/menu_e6b/calibrated-airspeed",sprintf("%1.0fkm/h",getprop("/instrumentation/gps/indicated-ground-speed-kt")*1.852)); 3260 setprop("/instrumentation/garmin196/menu_e6b/true-airspeed",sprintf("%1.0fkm/h",getprop("/velocities/airspeed-kt")*1.852)); 3261 setprop("/instrumentation/garmin196/menu_e6b/head-wind",sprintf("%1.0fkm/h",diff_speed*1.852)); 3262 } 3263 3264 if(getprop("/instrumentation/garmin196/params/units/altitude")==1){ 3265 setprop("/instrumentation/garmin196/menu_e6b/indicated-altitude",sprintf("%1.0fft",getprop("/instrumentation/gps/indicated-altitude-ft"))); 3266 setprop("/instrumentation/garmin196/menu_e6b/density-altitude",sprintf("%1.0fft",getprop("/position/altitude-ft"))); 3267 }else{ 3268 setprop("/instrumentation/garmin196/menu_e6b/indicated-altitude",sprintf("%1.0fm",getprop("/instrumentation/gps/indicated-altitude-ft")*0.1097)); 3269 setprop("/instrumentation/garmin196/menu_e6b/density-altitude",sprintf("%1.0fm",getprop("/position/altitude-ft")*0.1097)); 3270 } 3271 3272 if(getprop("/instrumentation/garmin196/params/units/temperature")==1){ 3273 setprop("/instrumentation/garmin196/menu_e6b/air-temp",sprintf("%1.1fC",getprop("/environment/temperature-degc"))); 3274 }else{ 3275 setprop("/instrumentation/garmin196/menu_e6b/air-temp",sprintf("%1.1fF",getprop("/environment/temperature-degf"))); 3276 } 3277 setprop("/instrumentation/garmin196/menu_e6b/wind-from",sprintf("%1.0f",getprop("/environment/wind-from-heading-deg"))); 3278 setprop("/instrumentation/garmin196/menu_e6b/heading",sprintf("%1.0f",getprop("/orientation/heading-deg"))); 3279 } 3280} 3281 3282var init_list_points = func{ 3283 var points = props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1); 3284 var i = 0; 3285 foreach (var e; points.getChildren("wpt")) { 3286 setprop("/instrumentation/garmin196/menu_points/point["~i~"]/texte",e.getChild("id").getValue()); 3287 i=i+1; 3288 } 3289 3290 for(var j=i;j<9;j=j+1){ 3291 setprop("/instrumentation/garmin196/menu_points/point["~j~"]/texte",""); 3292 } 3293 3294 if(i<9){ 3295 setprop("/instrumentation/garmin196/menu_points/point["~i~"]/texte","ENTER TO ADD WAYPOINT"); 3296 }else{ 3297 i=8; 3298 } 3299 setprop("/instrumentation/garmin196/menu_points/max_no_ligne",i); 3300} 3301 3302var init_new_point = func(no_point){ 3303 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/id", 1).setValue("POINT"); 3304 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/latitude", 1).setDoubleValue(getprop("/position/latitude-deg")); 3305 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/longitude", 1).setDoubleValue(getprop("/position/longitude-deg")); 3306} 3307 3308var delete_point = func(no_point){ 3309 for(var i=no_point+1;i<9;i=i+1){ 3310 if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")!=nil){ 3311 setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/id",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/id")); 3312 setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/latitude",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/latitude")); 3313 setprop("/instrumentation/garmin196/waypoints/user/wpt["~(i-1)~"]/longitude",getprop("/instrumentation/garmin196/waypoints/user/wpt["~i~"]/longitude")); 3314 } 3315 } 3316 var nb_points = size(props.globals.getNode("/instrumentation/garmin196/waypoints/user/",1).getChildren("wpt")); 3317 if(getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_point~"]/id")!=nil){ 3318 props.globals.getNode("/instrumentation/garmin196/waypoints/user/wpt["~(nb_points-1)~"]").remove(); 3319 } 3320 save_parameters(); 3321} 3322 3323var update_menu_points = func{ 3324 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 3325 var name = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id"); 3326 var latitude = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/latitude"); 3327 var longitude = getprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/longitude"); 3328 3329 setprop("/instrumentation/garmin196/menu_points/name",name); 3330 props.globals.getNode("/instrumentation/garmin196/menu_points/longitude", 1).setDoubleValue(longitude); 3331 props.globals.getNode("/instrumentation/garmin196/menu_points/latitude", 1).setDoubleValue(latitude); 3332 setprop("/instrumentation/garmin196/menu_points/x_char",size(getprop("/instrumentation/garmin196/menu_points/name"))-1); 3333 setprop("/instrumentation/garmin196/menu_points/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_points/name"),getprop("/instrumentation/garmin196/menu_points/x_char"))); 3334 display_menu_points(); 3335} 3336 3337var validate_menu_points = func{ 3338 var no_ligne = getprop("/instrumentation/garmin196/menu_points/no_ligne_selected"); 3339 3340 var id = getprop("/instrumentation/garmin196/menu_points/name"); 3341 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 3342 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 3343 setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/id",id); 3344 setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/latitude",latitude); 3345 setprop("/instrumentation/garmin196/waypoints/user/wpt["~no_ligne~"]/longitude",longitude); 3346 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(longitude); 3347 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(latitude); 3348 props.globals.getNode("/instrumentation/gps/scratch/ident",1).setValue(id~"WPTUSR"); 3349 setprop("/instrumentation/gps/command","define-user-wpt"); 3350 update_menu_points(); 3351 save_parameters(); 3352} 3353 3354var display_menu_points = func{ 3355 var ligne_selected = getprop("/instrumentation/garmin196/menu_points/name"); 3356 var x_char = props.globals.getNode("/instrumentation/garmin196/menu_points/x_char").getValue(); 3357 ligne_selected = substr(ligne_selected,0,x_char); 3358 ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_points/y_char")]; 3359 setprop("/instrumentation/garmin196/menu_points/name",ligne_selected); 3360 3361 var latitude = getprop("/instrumentation/garmin196/menu_points/latitude"); 3362 var latitude_tab = split(".",sprintf("%3.2f",math.abs(latitude))); 3363 var latitude_text10 = latitude_tab[0]; 3364 var latitude_text1 = "00"; 3365 if(size(latitude_tab)>1){ 3366 latitude_text1 = sprintf("%0.2s",latitude_tab[1]); 3367 } 3368 if(latitude>=0){ 3369 latitude_text10 = "N" ~ latitude_text10; 3370 }else{ 3371 latitude_text10 = "S" ~ latitude_text10; 3372 } 3373 var longitude = getprop("/instrumentation/garmin196/menu_points/longitude"); 3374 var longitude_tab = split(".",sprintf("%3.2f",math.abs(longitude))); 3375 var longitude_text10 = longitude_tab[0]; 3376 var longitude_text1 = "00"; 3377 if(size(longitude_tab)>1){ 3378 longitude_text1 = sprintf("%0.2s",longitude_tab[1]); 3379 } 3380 if(longitude>=0){ 3381 longitude_text10 = "E" ~ longitude_text10; 3382 }else{ 3383 longitude_text10 = "W" ~ longitude_text10; 3384 } 3385 3386 setprop("/instrumentation/garmin196/menu_points/latitude10_text",latitude_text10); 3387 setprop("/instrumentation/garmin196/menu_points/latitude1_text",latitude_text1); 3388 setprop("/instrumentation/garmin196/menu_points/longitude10_text",longitude_text10); 3389 setprop("/instrumentation/garmin196/menu_points/longitude1_text",longitude_text1); 3390} 3391 3392var init_menu_routes_list = func{ 3393 var routes = props.globals.getNode("/instrumentation/garmin196/routes",1); 3394 var i = 0; 3395 foreach (var e; routes.getChildren("route")) { 3396 setprop("/instrumentation/garmin196/menu_routes/route["~i~"]/texte",e.getChild("name").getValue()); 3397 i=i+1; 3398 } 3399 3400 for(var j=i;j<11;j=j+1){ 3401 setprop("/instrumentation/garmin196/menu_routes/route["~j~"]/texte",""); 3402 } 3403 3404 if(i<11){ 3405 setprop("/instrumentation/garmin196/menu_routes/route["~i~"]/texte","ENTER TO ADD ROUTE"); 3406 }else{ 3407 i=10; 3408 } 3409 setprop("/instrumentation/garmin196/menu_routes/max_no_ligne",i); 3410} 3411 3412var init_new_route = func(no_ligne){ 3413 setprop("/instrumentation/gps/scratch/max-results", 1); 3414 setprop("/instrumentation/gps/scratch/longitude-deg",-9999); 3415 setprop("/instrumentation/gps/scratch/latitude-deg",-9999); 3416 setprop("/instrumentation/gps/scratch/type", "airport"); 3417 setprop("/instrumentation/gps/command", "nearest"); 3418 var id = getprop("/instrumentation/gps/scratch/ident"); 3419 3420 props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/name",1).setValue(id~" to "~id); 3421 props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt[0]/id",1).setValue(id); 3422 props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/wpt[0]/type",1).setValue("airport"); 3423} 3424 3425var update_menu_routes_detail = func{ 3426 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 3427 3428 var points = props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/",1); 3429 var i = 0; 3430 var last_longitude = 0; 3431 var last_latitude = 0; 3432 3433 var distance_total = 0; 3434 var cruise_speed = getprop("/instrumentation/garmin196/cruise-speed"); 3435 var conso_horaire = getprop("/instrumentation/garmin196/fuel-flow"); 3436 3437 foreach (var e; points.getChildren("wpt")) { 3438 var id = e.getChild("id").getValue(); 3439 var type = e.getChild("type").getValue(); 3440 var ligne = id; 3441 if(substr(id,size(id)-6)=="WPTUSR"){ 3442 ligne = substr(id,0,size(id)-6); 3443 }elsif(substr(id,size(id)-6)=="WPTTWN"){ 3444 ligne = substr(id,0,size(id)-8); 3445 } 3446 ligne = substr(ligne,0,8); 3447 3448 if(i==0){ 3449 setprop("/instrumentation/gps/scratch/max-results", 1); 3450 setprop("/instrumentation/gps/scratch/exact", 0); 3451 setprop("/instrumentation/gps/scratch/query", id); 3452 setprop("/instrumentation/gps/scratch/type", type); 3453 setprop("/instrumentation/gps/command", "search"); 3454 last_longitude = getprop("/instrumentation/gps/scratch/longitude-deg"); 3455 last_latitude = getprop("/instrumentation/gps/scratch/latitude-deg"); 3456 }else{ 3457 var ligne_spaces = " "; 3458 ligne_spaces = substr(ligne_spaces,0,8-size(ligne)); 3459 var coord_last_id = geo.Coord.new().set_latlon(last_latitude,last_longitude); 3460 setprop("/instrumentation/gps/scratch/max-results", 1); 3461 setprop("/instrumentation/gps/scratch/exact", 0); 3462 setprop("/instrumentation/gps/scratch/query", id); 3463 setprop("/instrumentation/gps/scratch/type", type); 3464 setprop("/instrumentation/gps/command", "search"); 3465 last_longitude = getprop("/instrumentation/gps/scratch/longitude-deg"); 3466 last_latitude = getprop("/instrumentation/gps/scratch/latitude-deg"); 3467 3468 var coord_id = geo.Coord.new().set_latlon(last_latitude,last_longitude); 3469 var distance = coord_last_id.distance_to(coord_id) * 0.000539; 3470 var bearing = coord_last_id.course_to(coord_id); 3471 3472 var ete = distance / cruise_speed; 3473 var ete_hours = int(ete); 3474 var ete_minutes = int(ete*60-ete_hours*60); 3475 var conso = ete * conso_horaire; 3476 distance_total = distance_total + distance; 3477 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3478 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.0f %03.1f %02.0f:%02.0f %02.1f",bearing,distance,ete_hours,ete_minutes,conso); 3479 }else{ 3480 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.0f %03.1f %02.0f:%02.0f %02.1f",bearing,(distance*1.852),ete_hours,ete_minutes,conso); 3481 } 3482 } 3483 setprop("/instrumentation/garmin196/menu_routes/point["~i~"]/texte",ligne); 3484 i=i+1; 3485 } 3486 3487 var ete_total = distance_total / cruise_speed; 3488 var ete_total_hours = int(ete_total); 3489 var ete_total_minutes = int(ete_total*60-ete_total_hours*60); 3490 var conso_total = ete_total * conso_horaire; 3491 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3492 setprop("/instrumentation/garmin196/menu_routes/total/texte",sprintf("%03.1f %02.0f:%02.0f %02.1f",distance_total,ete_total_hours,ete_total_minutes,conso_total)); 3493 }else{ 3494 setprop("/instrumentation/garmin196/menu_routes/total/texte",sprintf("%03.1f %02.0f:%02.0f %02.1f",(distance_total*1.852),ete_total_hours,ete_total_minutes,conso_total)); 3495 } 3496 3497 for(var j=i;j<10;j=j+1){ 3498 setprop("/instrumentation/garmin196/menu_routes/point["~j~"]/texte",""); 3499 } 3500 if(i<10){ 3501 setprop("/instrumentation/garmin196/menu_routes/point["~i~"]/texte","ENTER TO ADD WAYPOINT"); 3502 }else{ 3503 i=9; 3504 } 3505 setprop("/instrumentation/garmin196/menu_routes/max_no_ligne_detail",i); 3506} 3507 3508var init_search_route = func(start_string){ 3509 if(substr(start_string,size(start_string)-6)=="WPTUSR"){ 3510 start_string = substr(start_string,0,size(start_string)-6); 3511 }elsif(substr(start_string,size(start_string)-6)=="WPTTWN"){ 3512 start_string = substr(start_string,0,size(start_string)-8); 3513 } 3514 setprop("/instrumentation/garmin196/menu_routes/search/ligne_select",start_string); 3515 setprop("/instrumentation/garmin196/menu_routes/search/x_char",size(start_string)-1); 3516 setprop("/instrumentation/garmin196/menu_routes/search/y_char",searchLastChar(getprop("/instrumentation/garmin196/menu_routes/search/ligne_select"),getprop("/instrumentation/garmin196/menu_routes/search/x_char"))); 3517 3518 display_route_waypoint_search(); 3519} 3520 3521var display_route_waypoint_search = func{ 3522 var ligne_selected = getprop("/instrumentation/garmin196/menu_routes/search/ligne_select"); 3523 var x_char = props.globals.getNode("/instrumentation/garmin196/menu_routes/search/x_char").getValue(); 3524 ligne_selected = substr(ligne_selected,0,x_char); 3525 ligne_selected = ligne_selected ~ tab_chiffres_lettres[getprop("/instrumentation/garmin196/menu_routes/search/y_char")]; 3526 setprop("/instrumentation/garmin196/menu_routes/search/ligne_select",ligne_selected); 3527 3528 var plots = []; 3529 ##recherche gps globale 3530 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 3531 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3532 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3533 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 3534 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 3535 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue(""); 3536 3537 setprop("/instrumentation/gps/command", "search"); 3538 var i=0; 3539 var flag_continue = getprop("/instrumentation/gps/scratch/valid"); 3540 while (flag_continue and i<5) { 3541 var id = getprop("/instrumentation/gps/scratch/ident"); 3542 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 3543 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 3544 var type = getprop("/instrumentation/gps/scratch/type"); 3545 3546 var ligne = id; 3547 if(type=="waypoint"){ 3548 type = "wpt"; 3549 var type_wpt = substr(id,size(id)-6); 3550 if(type_wpt=="WPTTWN"){#cities 3551 ligne = substr(id,0,size(id)-8); 3552 }elsif(type_wpt=="WPTUSR"){#wpt user 3553 ligne = substr(id,0,size(id)-6); 3554 } 3555 } 3556 3557 ligne = ligne ~ " " ~ type; 3558 var ligne_spaces = " "; 3559 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 3560 3561 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 3562 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3563 ligne = ligne ~sprintf(" %3.1fnm",range); 3564 }else{ 3565 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 3566 } 3567 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 3568 3569 3570 var plot = { id: id,texte: ligne,type: type}; 3571 append(plots,plot); 3572 3573 i=i+1; 3574 setprop("/instrumentation/gps/command", "next"); 3575 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 3576 } 3577 3578 ##recherche gps fix 3579 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 3580 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3581 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3582 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 3583 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 3584 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("fix"); 3585 3586 setprop("/instrumentation/gps/command", "search"); 3587 i=0; 3588 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 3589 while (flag_continue and i<5) { 3590 var id = getprop("/instrumentation/gps/scratch/ident"); 3591 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 3592 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 3593 var type = getprop("/instrumentation/gps/scratch/type"); 3594 3595 var ligne = id ~ " " ~ type; 3596 var ligne_spaces = " "; 3597 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 3598 3599 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 3600 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3601 ligne = ligne ~sprintf(" %3.1fnm",range); 3602 }else{ 3603 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 3604 } 3605 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 3606 3607 3608 var plot = { id: id,texte: ligne,type: type}; 3609 append(plots,plot); 3610 3611 i=i+1; 3612 setprop("/instrumentation/gps/command", "next"); 3613 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 3614 } 3615 3616 ##recherche gps vor 3617 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 3618 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3619 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3620 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 3621 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 3622 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("vor"); 3623 3624 setprop("/instrumentation/gps/command", "search"); 3625 i=0; 3626 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 3627 while (flag_continue and i<5) { 3628 var id = getprop("/instrumentation/gps/scratch/ident"); 3629 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 3630 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 3631 var type = getprop("/instrumentation/gps/scratch/type"); 3632 3633 var ligne = id ~ " vor"; 3634 var ligne_spaces = " "; 3635 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 3636 3637 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 3638 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3639 ligne = ligne ~sprintf(" %3.1fnm",range); 3640 }else{ 3641 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 3642 } 3643 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 3644 3645 3646 var plot = { id: id,texte: ligne,type: type}; 3647 append(plots,plot); 3648 3649 i=i+1; 3650 setprop("/instrumentation/gps/command", "next"); 3651 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 3652 } 3653 3654 ##recherche gps ndb 3655 props.globals.getNode("/instrumentation/gps/scratch/max-results", 1).setIntValue(5); 3656 props.globals.getNode("/instrumentation/gps/scratch/longitude-deg", 1).setDoubleValue(-9999); 3657 props.globals.getNode("/instrumentation/gps/scratch/latitude-deg", 1).setDoubleValue(-9999); 3658 props.globals.getNode("/instrumentation/gps/scratch/exact", 1).setBoolValue(0); 3659 props.globals.getNode("/instrumentation/gps/scratch/query",1).setValue(ligne_selected); 3660 props.globals.getNode("/instrumentation/gps/scratch/type",1).setValue("ndb"); 3661 3662 setprop("/instrumentation/gps/command", "search"); 3663 i=0; 3664 flag_continue = getprop("/instrumentation/gps/scratch/valid"); 3665 while (flag_continue and i<5) { 3666 var id = getprop("/instrumentation/gps/scratch/ident"); 3667 var range = getprop("/instrumentation/gps/scratch/distance-nm"); 3668 var bearing = getprop("/instrumentation/gps/scratch/mag-bearing-deg"); 3669 var type = getprop("/instrumentation/gps/scratch/type"); 3670 3671 var ligne = id ~ " ndb"; 3672 var ligne_spaces = " "; 3673 ligne_spaces = substr(ligne_spaces,0,16-size(ligne)); 3674 3675 ligne = ligne ~ ligne_spaces ~ sprintf(" %03.f",bearing); 3676 if(getprop("/instrumentation/garmin196/params/units/distance")==1){ 3677 ligne = ligne ~sprintf(" %3.1fnm",range); 3678 }else{ 3679 ligne = ligne ~sprintf(" %3.1fkm",range*1.852); 3680 } 3681 var popup_status = getprop("/instrumentation/garmin196/popup_status"); 3682 3683 3684 var plot = { id: id,texte: ligne,type: type}; 3685 append(plots,plot); 3686 3687 i=i+1; 3688 setprop("/instrumentation/gps/command", "next"); 3689 flag_continue = getprop("/instrumentation/gps/scratch/has-next"); 3690 } 3691 3692 var plots_sorted = sort (plots, func (a,b) cmp (a.id, b.id)); 3693 var nb_plots = size(plots_sorted); 3694 if(nb_plots>9){ 3695 nb_plots = 9; 3696 } 3697 for(var j=0;j<nb_plots;j=j+1){ 3698 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/texte",plots_sorted[j].texte); 3699 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/id",plots_sorted[j].id); 3700 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/type",plots_sorted[j].type); 3701 } 3702 3703 for(var j=nb_plots;j<9;j=j+1){ 3704 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/texte",""); 3705 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/id",""); 3706 setprop("/instrumentation/garmin196/menu_routes/search/ligne["~j~"]/type",""); 3707 } 3708 setprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected",-1); 3709 setprop("/instrumentation/garmin196/menu_routes/search/max_ligne_selected",nb_plots-1); 3710} 3711 3712var delete_route = func(no_ligne){ 3713 for(var i=no_ligne+1;i<11;i=i+1){ 3714 if(getprop("/instrumentation/garmin196/routes/route["~i~"]/name")!=nil){ 3715 setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/name",getprop("/instrumentation/garmin196/routes/route["~i~"]/name")); 3716 for(var j=0;j<10;j=j+1){ 3717 if(getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")!=nil){ 3718 setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/wpts/wpt["~j~"]/id",getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/id")); 3719 setprop("/instrumentation/garmin196/routes/route["~(i-1)~"]/wpts/wpt["~j~"]/type",getprop("/instrumentation/garmin196/routes/route["~i~"]/wpts/wpt["~j~"]/type")); 3720 } 3721 } 3722 } 3723 } 3724 var nb_routes = size(props.globals.getNode("/instrumentation/garmin196/routes",1).getChildren("route")); 3725 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne~"]/name")!=nil){ 3726 props.globals.getNode("/instrumentation/garmin196/routes/route["~(nb_routes-1)~"]").remove(); 3727 } 3728 3729 save_parameters(); 3730} 3731 3732var delete_route_detail = func(no_ligne_liste,no_ligne_detail){ 3733 if(no_ligne_detail>0){ 3734 for(var i=no_ligne_detail+1;i<10;i=i+1){ 3735 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/id")!=nil){ 3736 setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(i-1)~"]/id",getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/id")); 3737 setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(i-1)~"]/type",getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~i~"]/type")); 3738 } 3739 } 3740 3741 var nb_waypoints = size(props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts",1).getChildren("wpt")); 3742 if(getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id")!=nil){ 3743 props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(nb_waypoints-1)~"]").remove(); 3744 } 3745 save_parameters(); 3746 } 3747} 3748 3749var validate_menu_search_routes = func{ 3750 var no_ligne = getprop("/instrumentation/garmin196/menu_routes/search/no_ligne_selected"); 3751 var id = getprop("/instrumentation/garmin196/menu_routes/search/ligne["~no_ligne~"]/id"); 3752 var type = getprop("/instrumentation/garmin196/menu_routes/search/ligne["~no_ligne~"]/type"); 3753 var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 3754 var no_ligne_detail = getprop("/instrumentation/garmin196/menu_routes/no_ligne_detail"); 3755 setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/id",id); 3756 setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~no_ligne_detail~"]/type",type); 3757 3758 var name_wpt0 = getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt[0]/id"); 3759 if(substr(name_wpt0,size(name_wpt0)-6)=="WPTUSR"){ 3760 name_wpt0 = substr(name_wpt0,0,size(name_wpt0)-6); 3761 }elsif(substr(name_wpt0,size(name_wpt0)-6)=="WPTTWN"){ 3762 name_wpt0 = substr(name_wpt0,0,size(name_wpt0)-8); 3763 } 3764 var name_wpt1 = name_wpt0; 3765 var nb_points = size(props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts").getChildren("wpt")); 3766 if(nb_points>1){ 3767 name_wpt1 = getprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/wpts/wpt["~(nb_points-1)~"]/id"); 3768 if(substr(name_wpt1,size(name_wpt1)-6)=="WPTUSR"){ 3769 name_wpt1 = substr(name_wpt1,0,size(name_wpt1)-6); 3770 }elsif(substr(name_wpt1,size(name_wpt1)-6)=="WPTTWN"){ 3771 name_wpt1 = substr(name_wpt1,0,size(name_wpt1)-8); 3772 } 3773 } 3774 3775 var name = name_wpt0 ~ " to " ~ name_wpt1; 3776 setprop("/instrumentation/garmin196/routes/route["~no_ligne_liste~"]/name",name); 3777} 3778 3779var load_flight_plan = func(no_ligne){ 3780 setprop("/autopilot/route-manager/input","@CLEAR"); 3781 setprop("/autopilot/route-manager/input","@POP"); 3782 var points = props.globals.getNode("/instrumentation/garmin196/routes/route["~no_ligne~"]/wpts/",1); 3783 foreach (var e; points.getChildren("wpt")) { 3784 var id = e.getChild("id").getValue(); 3785 setprop("/autopilot/route-manager/input",id); 3786 } 3787 setprop("/autopilot/route-manager/input","@JUMP0"); 3788 setprop("/autopilot/route-manager/input","@ACTIVATE"); 3789} 3790 3791var close_fpl_loaded = func{ 3792 setprop("/instrumentation/garmin196/menu_routes/fpl-loaded",0); 3793} 3794var affiche_fpl_loaded = func{ 3795 setprop("/instrumentation/garmin196/menu_routes/fpl-loaded",1); 3796 settimer(close_fpl_loaded,3); 3797} 3798 3799var close_waypoint_jump = func{ 3800 setprop("/instrumentation/garmin196/menu_routes/waypoint-jump",0); 3801} 3802var affiche_waypoint_jump = func{ 3803 setprop("/instrumentation/garmin196/menu_routes/waypoint-jump",1); 3804 settimer(close_waypoint_jump,3); 3805} 3806 3807var jump_to_waypoint = func(no_ligne){ 3808 var no_ligne_liste = getprop("/instrumentation/garmin196/menu_routes/no_ligne_selected"); 3809 load_flight_plan(no_ligne_liste); 3810 setprop("/autopilot/route-manager/input","@JUMP"~no_ligne); 3811} 3812