... | ... |
@@ -51,6 +51,28 @@ var buttonsClass = { |
51 | 51 |
setprop('/instrumentation/zkv1000/afcs/selected-alt-ft', math.round(alt, 10)); |
52 | 52 |
}, |
53 | 53 |
|
54 |
+ ValidateTMRREF : func (a = 0) { |
|
55 |
+ if (a) |
|
56 |
+ return; |
|
57 |
+ var (id, selected) = split('-', me.device.windows.selected); |
|
58 |
+ var state = me.device.windows.state[id]; |
|
59 |
+ selected += state.scroll.offset; |
|
60 |
+ if (contains(state.objects[selected], 'callback')) |
|
61 |
+ call(state.objects[selected].callback, [id, selected], me); |
|
62 |
+ }, |
|
63 |
+ |
|
64 |
+ ClearTMRREF : func (a = 0) { |
|
65 |
+ if (a) |
|
66 |
+ return; |
|
67 |
+ me.device.windows.del(); |
|
68 |
+ me.device.data.TMRtimer = nil; |
|
69 |
+ me.device.knobs.FmsInner = func; |
|
70 |
+ me.device.knobs.FmsOuter = func; |
|
71 |
+ me.device.buttons.ENT = func; |
|
72 |
+ me.device.buttons.FMS = func; |
|
73 |
+ me.device.buttons.CLR = func; |
|
74 |
+ }, |
|
75 |
+ |
|
54 | 76 |
DirectTo : void, |
55 | 77 |
MENU : void, |
56 | 78 |
FPL : void, |
... | ... |
@@ -297,6 +297,60 @@ var softkeysClass = { |
297 | 297 |
}, |
298 | 298 |
'TMR/REF' : func { |
299 | 299 |
if (!contains(me.device.windows.state, 'TMR/REF')) { |
300 |
+ var Vspeed_visiblity = func (id, selected, Vspeed) |
|
301 |
+ me.device.data[Vspeed ~ '-visible'] = |
|
302 |
+ me.device.windows.state[id].objects[selected].text |
|
303 |
+ == |
|
304 |
+ me.device.windows.state[id].objects[selected].choices[0]; |
|
305 |
+ var GenericTimer = func (id, selected) { |
|
306 |
+ var action = me.device.windows.state[id].objects[selected].text; |
|
307 |
+ if (action == 'START?') { |
|
308 |
+ me.device.data.TMRrevert = 0; |
|
309 |
+ me.device.data.TMRlast = getprop('/sim/time/elapsed-sec') - 1; |
|
310 |
+ me.device.data.TMRreset = me.device.windows.state[id].objects[selected - 2].text; |
|
311 |
+ me.device.data.TMRtimer = maketimer(1, func { |
|
312 |
+ var (hh, mm, ss) = split(':', |
|
313 |
+ me.device.windows.state[id].objects[selected - 2].text); |
|
314 |
+ var direction = -1; |
|
315 |
+ if ((me.device.windows.state[id].objects[selected - 1].text |
|
316 |
+ == |
|
317 |
+ me.device.windows.state[id].objects[selected - 1].choices[0]) |
|
318 |
+ or me.device.data.TMRrevert) |
|
319 |
+ direction = 1; |
|
320 |
+ var now = getprop('/sim/time/elapsed-sec'); |
|
321 |
+ var dt = int(now - me.device.data.TMRlast) * direction; |
|
322 |
+ me.device.data.TMRlast = now; |
|
323 |
+ var val = HMS(hh, mm, ss, dt); |
|
324 |
+ me.device.windows.state[id].objects[selected - 2].text = val; |
|
325 |
+ me.device.windows.window[id ~ '-' ~ (selected -2)] |
|
326 |
+ .setText(val); |
|
327 |
+ if (val == '00:00:00' and direction == -1) |
|
328 |
+ me.device.data.TMRrevert = 1; |
|
329 |
+ }, me); |
|
330 |
+ me.device.data.TMRtimer.start(); |
|
331 |
+ action = 'STOP?'; |
|
332 |
+ } |
|
333 |
+ elsif (action == 'STOP?') { |
|
334 |
+ me.device.data.TMRtimer.stop(); |
|
335 |
+ action = 'RESET?'; |
|
336 |
+ } |
|
337 |
+ elsif (action == 'RESET?') { |
|
338 |
+ action = 'START?'; |
|
339 |
+ if ((me.device.windows.state[id].objects[selected - 1].text |
|
340 |
+ == |
|
341 |
+ me.device.windows.state[id].objects[selected - 1].choices[1]) |
|
342 |
+ and !me.device.data.TMRrevert) |
|
343 |
+ var val = me.device.data.TMRreset; |
|
344 |
+ else |
|
345 |
+ var val = '00:00:00'; |
|
346 |
+ me.device.windows.state[id].objects[selected - 2].text = val; |
|
347 |
+ me.device.windows.window[id ~ '-' ~ (selected -2)] |
|
348 |
+ .setText(val); |
|
349 |
+ } |
|
350 |
+ me.device.windows.window[me.device.windows.selected] |
|
351 |
+ .setText(action); |
|
352 |
+ me.device.windows.state[id].objects[selected].text = action; |
|
353 |
+ }; |
|
300 | 354 |
me.device.windows.draw( |
301 | 355 |
'TMR/REF', |
302 | 356 |
{x: 720, y: 535, w: 300, l: 5, sep: 3}, |
... | ... |
@@ -305,20 +359,20 @@ var softkeysClass = { |
305 | 359 |
{type: 'separator'}, |
306 | 360 |
{text: 'TIMER', type: 'normal'}, |
307 | 361 |
{text: '00:00:00', type: 'selected|time', }, |
308 |
- {text: ' UP >', type: 'editable', choices: [' UP >', '<DOWN '], callback: func}, |
|
309 |
- {text: 'START?', type: 'editable|end-of-line|choices', choices: ['START?', 'RESET?', 'STOP?'], callback: func}, |
|
362 |
+ {text: ' UP >', type: 'editable', choices: [' UP >', '<DOWN ']}, |
|
363 |
+ {text: 'START?', type: 'editable|end-of-line', callback: func (id, selected) GenericTimer(id, selected)}, |
|
310 | 364 |
{type: 'separator'}, |
311 |
- {text: sprintf('Vx % 3iKT', alerts.getNode('Vx').getValue()), type: 'normal', scrollgroup:0}, |
|
312 |
- {text: ' ON >', type: 'editable|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:0, callback: func}, |
|
313 |
- {text: sprintf('Vy % 3iKT', alerts.getNode('Vy').getValue()), type: 'normal', scrollgroup:1}, |
|
314 |
- {text: ' ON >', type: 'editable|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:1, callback: func}, |
|
315 |
- {text: sprintf('Vr % 3iKT', alerts.getNode('Vr').getValue()), type: 'normal', scrollgroup:2}, |
|
316 |
- {text: ' ON >', type: 'editable|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:2, callback: func}, |
|
317 |
- {text: sprintf('Vglide % 3iKT', alerts.getNode('Vglide').getValue()), type: 'normal', scrollgroup:3}, |
|
318 |
- {text: ' ON >', type: 'editable|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:3, callback: func}, |
|
365 |
+ {text: sprintf('Vx %3iKT', alerts.getNode('Vx').getValue()), type: 'normal', scrollgroup:0}, |
|
366 |
+ {text: me.device.data['Vx-visible'] ? ' ON >' : '< OFF ', type: 'editable|immediate|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:0, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vx')}, |
|
367 |
+ {text: sprintf('Vy %3iKT', alerts.getNode('Vy').getValue()), type: 'normal', scrollgroup:1}, |
|
368 |
+ {text: me.device.data['Vy-visible'] ? ' ON >' : '< OFF ', type: 'editable|immediate|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:1, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vy')}, |
|
369 |
+ {text: sprintf('Vr %3iKT', alerts.getNode('Vr').getValue()), type: 'normal', scrollgroup:2}, |
|
370 |
+ {text: me.device.data['Vr-visible'] ? ' ON >' : '< OFF ', type: 'editable|immediate|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:2, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vr')}, |
|
371 |
+ {text: sprintf('Vglide %3iKT', alerts.getNode('Vglide').getValue()), type: 'normal', scrollgroup:3}, |
|
372 |
+ {text: me.device.data['Vglide-visible'] ? ' ON >' : '< OFF ', type: 'editable|immediate|end-of-line', choices: [' ON >', '< OFF '], scrollgroup:3, callback: func (id, selected) Vspeed_visiblity(id, selected, 'Vglide')}, |
|
319 | 373 |
{type: 'separator'}, |
320 | 374 |
{text: 'MINIMUMS', type: 'normal'}, |
321 |
- {text: ' BARO >', type: 'editable', choices: [' BARO >','< TST1 >','< TST2 '], callback: func}, |
|
375 |
+ {text: ' OFF >', type: 'editable', choices: [' OFF >', '< BARO >','<TEMP COMP'], callback: func}, |
|
322 | 376 |
{text: ' 1000FT', type: 'editable', format: '% 5iFT', factor: 100, callback: func}, |
323 | 377 |
], |
324 | 378 |
{ # scrolling info, see menu.nas |
... | ... |
@@ -328,11 +382,12 @@ var softkeysClass = { |
328 | 382 |
); |
329 | 383 |
me.device.knobs.FmsInner = me.device.knobs.MenuSettings; |
330 | 384 |
me.device.knobs.FmsOuter = me.device.knobs.NavigateMenu; |
385 |
+ me.device.buttons.ENT = me.device.buttons.ValidateTMRREF; |
|
386 |
+ me.device.buttons.FMS = me.device.buttons.ValidateTMRREF; |
|
387 |
+ me.device.buttons.CLR = me.device.buttons.ClearTMRREF; |
|
331 | 388 |
} |
332 | 389 |
else { |
333 |
- me.device.knobs.FmsInner = func; |
|
334 |
- me.device.knobs.FmsOuter = func; |
|
335 |
- me.device.windows.del(); |
|
390 |
+ me.device.buttons.ClearTMRREF(); |
|
336 | 391 |
} |
337 | 392 |
}, |
338 | 393 |
}, |
... | ... |
@@ -74,6 +74,7 @@ Please report bug at <seb.marque@free.fr>. |
74 | 74 |
* possibility to add a copilot's PFD, and other displays |
75 | 75 |
* EIS: separation for aircraft specifics (selected by the zkv1000 config) |
76 | 76 |
* ![][90%] |
77 |
+ * TMR/REF Timer ![][done], Vspeeds ![][done], minimums ![][pending] (don't understand the role of this) |
|
77 | 78 |
* Bearing needs some checks to be sure it shows the correct information |
78 | 79 |
* XPDR: emergency code depending of the country (eg.: 1200 for US, 7700 for Europe), should be set in settings |
79 | 80 |
* ![][80%] |
... | ... |
@@ -81,7 +82,6 @@ Please report bug at <seb.marque@free.fr>. |
81 | 82 |
* ![][70%] |
82 | 83 |
* make booting animation visible ![][pending] |
83 | 84 |
* ![][60%] |
84 |
- * TMR/REF ![][ongoing] |
|
85 | 85 |
* ![][50%] |
86 | 86 |
* EIS: animations for temperature for YaSim and JSBSim |
87 | 87 |
* ![][40%] |
... | ... |
@@ -103,6 +103,7 @@ Please report bug at <seb.marque@free.fr>. |
103 | 103 |
* rotation and zooming of online maps in-flight ![][pending] |
104 | 104 |
* VS guidance |
105 | 105 |
* VNAV |
106 |
+ * scrolling lift in menus |
|
106 | 107 |
* tutorials |
107 | 108 |
* many more... |
108 | 109 |
|