Showing 4 changed files with 291 additions and 579 deletions
+18 -36
Nasal/buttons.nas
... ...
@@ -15,49 +15,31 @@ var buttonsClass = {
15 15
         setprop('/instrumentation/nav[' ~ n ~ ']/frequencies/standby-mhz', tmp);
16 16
     },
17 17
 
18
-    AsSwitchCOM : func (emergency = 0) {
19
-        if (emergency) {
20
-            setprop('/instrumentation/comm/frequencies/selected-mhz', 121.500);
21
-            setprop('/instrumentation/zkv1000/radios/comm1-selected', 1);
22
-            setprop('/instrumentation/zkv1000/radios/comm2-selected', 0);
23
-        }
24
-        else {
25
-            var c = getprop('/instrumentation/zkv1000/radios/comm-tune');
26
-            var tmp = getprop('/instrumentation/comm[' ~ c ~ ']/frequencies/selected-mhz');
27
-            setprop('/instrumentation/comm[' ~ c ~ ']/frequencies/selected-mhz', getprop('/instrumentation/comm[' ~ c ~ ']/frequencies/standby-mhz'));
28
-            setprop('/instrumentation/comm[' ~ c ~ ']/frequencies/standby-mhz', tmp);
29
-        }
30
-    },
31
-
32
-    NAV : func (x) {
18
+    AsSwitchCOM : func (x) {
33 19
         if (x) {
34
-            fgcommand('property-toggle', props.Node.new({
35
-                property: '/instrumentation/zkv1000/radios/nav-tune'
36
-            }));
20
+            me.AsSwitchCOM_pushed = getprop('/sim/time/elapsed-sec');
37 21
         }
38
-    },
39
-
40
-    COM : func (x) {
41
-        if (x) {
42
-            fgcommand('property-toggle', props.Node.new({
43
-                property: '/instrumentation/zkv1000/radios/comm-tune'
44
-            }));
22
+        else {
23
+            var pressed = getprop('/sim/time/elapsed-sec') - me.AsSwitchCOM_pushed;
24
+            if (pressed > 2) {
25
+                setprop('/instrumentation/comm/frequencies/selected-mhz', 121.500);
26
+                setprop('/instrumentation/zkv1000/radios/comm1-selected', 1);
27
+                setprop('/instrumentation/zkv1000/radios/comm2-selected', 0);
28
+            }
29
+            else {
30
+                var c = getprop('/instrumentation/zkv1000/radios/comm-tune');
31
+                var tmp = getprop('/instrumentation/comm[' ~ c ~ ']/frequencies/selected-mhz');
32
+                setprop('/instrumentation/comm[' ~ c ~ ']/frequencies/selected-mhz', getprop('/instrumentation/comm[' ~ c ~ ']/frequencies/standby-mhz'));
33
+                setprop('/instrumentation/comm[' ~ c ~ ']/frequencies/standby-mhz', tmp);
34
+            }
45 35
         }
46 36
     },
47 37
 
48
-    HDG : func (x) {
49
-        if (x) {
50
-            fgcommand('property-assign', props.Node.new({
51
-                property: '/instrumentation/zkv1000/afcs/heading-bug-deg',
52
-                property: '/orientation/heading-magnetic-deg'
53
-            }));
54
-        }
38
+    ALT : func () {
39
+        var alt = getprop('instrumentation/altimeter/indicated-altitude-ft');
40
+        setprop('/instrumentation/zkv1000/afcs/selected-alt-ft', math.round(alt, 10));
55 41
     },
56 42
 
57
-    VolNAV : void,
58
-    VolCOM : void,
59
-    ALT : void,
60
-    BARO : void,
61 43
     DirectTo : void,
62 44
     MENU : void,
63 45
     FPL : void,
-66
Nasal/knobs.nas
... ...
@@ -5,72 +5,6 @@ var knobsClass = {
5 5
         return m;
6 6
     },
7 7
 
8
-    ALT : func (x) {
9
-        fgcommand('property-adjust', props.Node.new({
10
-            property: '/instrumentation/zkv1000/afcs/selected-alt-ft',
11
-            step: x,
12
-            min: 0,
13
-            max: 16000,
14
-            wrap: 0
15
-        }));
16
-    },
17
-
18
-    HDG : func (x) {
19
-        fgcommand('property-adjust', props.Node.new({
20
-            property: '/instrumentation/zkv1000/afcs/heading-bug-deg',
21
-            step: x,
22
-            min: 0,
23
-            max: 360,
24
-            wrap: 1
25
-        }));
26
-    },
27
-
28
-    CRS : func (x) {
29
-        if (x) fgcommand('property-adjust', props.Node.new({
30
-            property: '/instrumentation/zkv1000/cdi/course',
31
-            step: x,
32
-            min: 0,
33
-            max: 360,
34
-            wrap: 1
35
-        }));
36
-        else fgcommand('property-assign', props.Node.new({
37
-            property: '/instrumentation/zkv1000/cdi/course',
38
-            property: '/instrumentation/zkv1000/cdi/radial'
39
-        }));
40
-    },
41
-
42
-    BARO : func (x) {
43
-        fgcommand('property-adjust', props.Node.new({
44
-            property: '/instrumentation/altimeter/setting-inhg',
45
-            step: x,
46
-            min: 28.50,
47
-            max: 33.00,
48
-            warp: 0
49
-        }));
50
-    },
51
-
52
-    NAV : func (x) {
53
-        fgcommand('property-adjust', props.Node.new({
54
-            property: '/instrumentation/zkv1000/radios/nav-freq-mhz',
55
-            step: x,
56
-            min: 108.00,
57
-            max: 118.00,
58
-            wrap: 1
59
-        }));
60
-    },
61
-
62
-    COM : func (x) {
63
-        fgcommand('property-adjust', props.Node.new({
64
-            property: '/instrumentation/zkv1000/radios/comm-freq-mhz',
65
-            step: x,
66
-            min: 118.00,
67
-            max: 137.975,
68
-            wrap: 1
69
-        }));
70
-    },
71
-
72
-    VolNAV : void,
73
-    VolCOM : void,
74 8
     FmsInner : void,
75 9
     FmsOuter : void
76 10
 };
+137 -239
mfd.xml
... ...
@@ -160,37 +160,25 @@
160 160
         <condition>
161 161
           <property>/instrumentation/zkv1000/device[1]/status</property>
162 162
         </condition>
163
-        <command>nasal</command>
164
-        <script>zkv1000.device[1].buttons.VolNAV(1);</script>
165
-      </binding>
166
-      <mod-up>
167
-        <binding>
168
-          <condition>
169
-            <property>/instrumentation/zkv1000/device[1]/status</property>
170
-          </condition>
171
-          <command>nasal</command>
172
-          <script>zkv1000.device[1].buttons.VolNAV(0);</script>
173
-        </binding>
174
-      </mod-up>
175
-    </action>
176
-    <action>
177
-      <button>3</button>
178
-      <binding>
179
-        <condition>
180
-          <property>/instrumentation/zkv1000/device[1]/status</property>
181
-        </condition>
182
-       <command>nasal</command>
183
-       <script>zkv1000.device[1].knobs.VolNAV(0.1);</script>
163
+        <command>property-toggle</command>
164
+        <property>/instrumentation/zkv1000/radios/nav-ident</property>
184 165
       </binding>
185 166
     </action>
167
+  </animation>
168
+  <animation>
169
+    <type>knob</type>
170
+    <object-name>VolNAV</object-name>
186 171
     <action>
187
-      <button>4</button>
188 172
       <binding>
189 173
         <condition>
190 174
           <property>/instrumentation/zkv1000/device[1]/status</property>
191 175
         </condition>
192
-       <command>nasal</command>
193
-       <script>zkv1000.device[1].knobs.VolNAV(-0.1);</script>
176
+        <command>property-adjust</command>
177
+        <property>/instrumentation/zkv1000/radios/nav-volume</property>
178
+        <factor>0.05</factor>
179
+        <min>0</min>
180
+        <max>1</max>
181
+        <wrap>false</wrap>
194 182
       </binding>
195 183
     </action>
196 184
   </animation>
... ...
@@ -221,71 +209,44 @@
221 209
 
222 210
   <animation>
223 211
     <type>pick</type>
224
-    <object-name>NavOuter</object-name>
225
-    <action>
226
-      <button>3</button>
227
-      <binding>
228
-        <condition>
229
-          <property>/instrumentation/zkv1000/device[1]/status</property>
230
-        </condition>
231
-       <command>nasal</command>
232
-       <script>zkv1000.device[1].knobs.NAV(0.2);</script>
233
-      </binding>
234
-    </action>
212
+    <object-name>NavInner</object-name>
235 213
     <action>
236
-      <button>4</button>
214
+      <button>0</button>
237 215
       <binding>
238 216
         <condition>
239 217
           <property>/instrumentation/zkv1000/device[1]/status</property>
240 218
         </condition>
241
-       <command>nasal</command>
242
-       <script>zkv1000.device[1].knobs.NAV(-0.5);</script>
219
+        <command>property-toggle</command>
220
+        <property>/instrumentation/zkv1000/radios/nav-selected</property>
243 221
       </binding>
244 222
     </action>
245 223
   </animation>
246
-
247 224
   <animation>
248
-    <type>pick</type>
225
+    <type>knob</type>
249 226
     <object-name>NavInner</object-name>
250 227
     <action>
251
-      <button>0</button>
252 228
       <binding>
253 229
         <condition>
254 230
           <property>/instrumentation/zkv1000/device[1]/status</property>
255 231
         </condition>
256
-        <command>nasal</command>
257
-        <script>zkv1000.device[1].buttons.NAV(1);</script>
232
+        <command>property-adjust</command>
233
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
234
+        <factor>0.05</factor>
235
+        <min>108.000</min>
236
+        <max>118.000</max>
237
+        <wrap>true></wrap>
258 238
       </binding>
259
-      <mod-up>
260
-        <binding>
261
-          <condition>
262
-            <property>/instrumentation/zkv1000/device[1]/status</property>
263
-          </condition>
264
-          <command>nasal</command>
265
-          <script>zkv1000.device[1].buttons.NAV(0);</script>
266
-        </binding>
267
-      </mod-up>
268 239
     </action>
269
-    <action>
270
-      <button>3</button>
240
+    <shift-action>
271 241
       <binding>
272 242
         <condition>
273 243
           <property>/instrumentation/zkv1000/device[1]/status</property>
274 244
         </condition>
275
-       <command>nasal</command>
276
-       <script>zkv1000.device[1].knobs.NAV(0.05);</script>
245
+        <command>property-adjust</command>
246
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
247
+        <factor>0.50</factor>
277 248
       </binding>
278
-    </action>
279
-    <action>
280
-      <button>4</button>
281
-      <binding>
282
-        <condition>
283
-          <property>/instrumentation/zkv1000/device[1]/status</property>
284
-        </condition>
285
-       <command>nasal</command>
286
-       <script>zkv1000.device[1].knobs.NAV(-0.05);</script>
287
-      </binding>
288
-    </action>
249
+    </shift-action>
289 250
   </animation>
290 251
 
291 252
   <animation>
... ...
@@ -297,62 +258,45 @@
297 258
         <condition>
298 259
           <property>/instrumentation/zkv1000/device[1]/status</property>
299 260
         </condition>
300
-        <command>nasal</command>
301
-        <script>zkv1000.device[1].buttons.HDG(1);</script>
302
-      </binding>
303
-      <mod-up>
304
-        <binding>
305
-          <condition>
306
-            <property>/instrumentation/zkv1000/device[1]/status</property>
307
-          </condition>
308
-          <command>nasal</command>
309
-          <script>zkv1000.device[1].buttons.HDG(0);</script>
310
-        </binding>
311
-      </mod-up>
312
-    </action>
313
-    <action>
314
-      <button>3</button>
315
-      <binding>
316
-        <condition>
317
-          <property>/instrumentation/zkv1000/device[1]/status</property>
318
-        </condition>
319
-       <command>nasal</command>
320
-       <script>zkv1000.device[1].knobs.HDG(1);</script>
321
-      </binding>
322
-    </action>
323
-    <action>
324
-      <button>4</button>
325
-      <binding>
326
-        <condition>
327
-          <property>/instrumentation/zkv1000/device[1]/status</property>
328
-        </condition>
329
-       <command>nasal</command>
330
-       <script>zkv1000.device[1].knobs.HDG(-1);</script>
261
+        <command>property-assign</command>
262
+        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
263
+        <property>/orientation/heading-magnetic-deg</property>
331 264
       </binding>
332 265
     </action>
333 266
   </animation>
334
-
335 267
   <animation>
336
-    <type>pick</type>
337
-    <object-name>AltOuter</object-name>
268
+    <type>knob</type>
269
+    <object-name>HDG</object-name>
270
+    <property>/instrumentation/zkv1000/device[1]/knobs/HDG</property>
271
+    <center>
272
+      <x-m>0.0025172 </x-m>
273
+      <y-m>-0.1220634</y-m>
274
+      <z-m>0.0169178 </z-m>
275
+    </center>
276
+    <axis>
277
+      <x>1</x>
278
+      <y>0</y>
279
+      <z>0</z>
280
+    </axis>
338 281
     <action>
339
-      <button>3</button>
340 282
       <binding>
341
-        <condition>
342
-          <property>/instrumentation/zkv1000/device[1]/status</property>
343
-        </condition>
344
-       <command>nasal</command>
345
-       <script>zkv1000.device[1].knobs.ALT(500);</script>
283
+       <command>property-adjust</command>
284
+       <property>/instrumentation/zkv1000/device[1]/knobs/HDG</property>
285
+       <factor>10</factor>
286
+       <min>0</min>
287
+       <max>359</max>
288
+       <wrap>true</wrap>
346 289
       </binding>
347
-    </action>
348
-    <action>
349
-      <button>4</button>
350 290
       <binding>
351 291
         <condition>
352 292
           <property>/instrumentation/zkv1000/device[1]/status</property>
353 293
         </condition>
354
-       <command>nasal</command>
355
-       <script>zkv1000.device[1].knobs.ALT(-500);</script>
294
+       <command>property-adjust</command>
295
+       <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
296
+       <factor>1</factor>
297
+       <min>0</min>
298
+       <max>359</max>
299
+       <wrap>true</wrap>
356 300
       </binding>
357 301
     </action>
358 302
   </animation>
... ...
@@ -367,38 +311,36 @@
367 311
           <property>/instrumentation/zkv1000/device[1]/status</property>
368 312
         </condition>
369 313
         <command>nasal</command>
370
-        <script>zkv1000.device[1].buttons.ALT(1);</script>
314
+        <script>zkv1000.device[1].buttons.ALT();</script>
371 315
       </binding>
372
-      <mod-up>
373
-        <binding>
374
-          <condition>
375
-            <property>/instrumentation/zkv1000/device[1]/status</property>
376
-          </condition>
377
-          <command>nasal</command>
378
-          <script>zkv1000.device[1].buttons.ALT(0);</script>
379
-        </binding>
380
-      </mod-up>
381 316
     </action>
317
+  </animation>
318
+  <animation>
319
+    <type>knob</type>
320
+    <object-name>AltInner</object-name>
382 321
     <action>
383
-      <button>3</button>
384 322
       <binding>
385 323
         <condition>
386 324
           <property>/instrumentation/zkv1000/device[1]/status</property>
387 325
         </condition>
388
-       <command>nasal</command>
389
-       <script>zkv1000.device[1].knobs.ALT(50);</script>
326
+       <command>property-adjust</command>
327
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
328
+       <factor>10</factor>
329
+       <min>0</min>
330
+       <max>16000</max>
331
+       <wrap>false</wrap>
390 332
       </binding>
391 333
     </action>
392
-    <action>
393
-      <button>4</button>
334
+    <shift-action>
394 335
       <binding>
395 336
         <condition>
396 337
           <property>/instrumentation/zkv1000/device[1]/status</property>
397 338
         </condition>
398
-       <command>nasal</command>
399
-       <script>zkv1000.device[1].knobs.ALT(-50);</script>
339
+       <command>property-adjust</command>
340
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
341
+       <factor>100</factor>
400 342
       </binding>
401
-    </action>
343
+    </shift-action>
402 344
   </animation>
403 345
 
404 346
   <animation>
... ...
@@ -410,37 +352,25 @@
410 352
         <condition>
411 353
           <property>/instrumentation/zkv1000/device[1]/status</property>
412 354
         </condition>
413
-        <command>nasal</command>
414
-        <script>zkv1000.device[1].buttons.VolCOM(1);</script>
415
-      </binding>
416
-      <mod-up>
417
-        <binding>
418
-          <condition>
419
-            <property>/instrumentation/zkv1000/device[1]/status</property>
420
-          </condition>
421
-          <command>nasal</command>
422
-          <script>zkv1000.device[1].buttons.VolCOM(0);</script>
423
-        </binding>
424
-      </mod-up>
425
-    </action>
426
-    <action>
427
-      <button>3</button>
428
-      <binding>
429
-        <condition>
430
-          <property>/instrumentation/zkv1000/device[1]/status</property>
431
-        </condition>
432
-       <command>nasal</command>
433
-       <script>zkv1000.device[1].knobs.VolCOM(0.1);</script>
355
+        <command>property-toggle</command>
356
+        <property>/instrumentation/zkv1000/comm-add-noise</property>
434 357
       </binding>
435 358
     </action>
359
+  </animation>
360
+  <animation>
361
+    <type>knob</type>
362
+    <object-name>VolCOM</object-name>
436 363
     <action>
437
-      <button>4</button>
438 364
       <binding>
439 365
         <condition>
440 366
           <property>/instrumentation/zkv1000/device[1]/status</property>
441 367
         </condition>
442
-       <command>nasal</command>
443
-       <script>zkv1000.device[1].knobs.VolCOM(-0.1);</script>
368
+        <command>property-adjust</command>
369
+        <property>/instrumentation/zkv1000/radios/comm-volume</property>
370
+        <factor>0.05</factor>
371
+        <min>0</min>
372
+        <max>1</max>
373
+        <wrap>false</wrap>
444 374
       </binding>
445 375
     </action>
446 376
   </animation>
... ...
@@ -469,31 +399,6 @@
469 399
     </action>
470 400
   </animation>
471 401
 
472
-  <animation>
473
-    <type>pick</type>
474
-    <object-name>ComOuter</object-name>
475
-    <action>
476
-      <button>3</button>
477
-      <binding>
478
-        <condition>
479
-          <property>/instrumentation/zkv1000/device[1]/status</property>
480
-        </condition>
481
-       <command>nasal</command>
482
-       <script>zkv1000.device[1].knobs.COM(0.1);</script>
483
-      </binding>
484
-    </action>
485
-    <action>
486
-      <button>4</button>
487
-      <binding>
488
-        <condition>
489
-          <property>/instrumentation/zkv1000/device[1]/status</property>
490
-        </condition>
491
-       <command>nasal</command>
492
-       <script>zkv1000.device[1].knobs.COM(-0.1);</script>
493
-      </binding>
494
-    </action>
495
-  </animation>
496
-
497 402
   <animation>
498 403
     <type>pick</type>
499 404
     <object-name>ComInner</object-name>
... ...
@@ -503,108 +408,101 @@
503 408
         <condition>
504 409
           <property>/instrumentation/zkv1000/device[1]/status</property>
505 410
         </condition>
506
-        <command>nasal</command>
507
-        <script>zkv1000.device[1].buttons.COM(1);</script>
411
+        <command>property-toggle</command>
412
+        <property>/intrumentation/zkv1000/radios/comm-selected</property>
508 413
       </binding>
509
-      <mod-up>
510
-        <binding>
511
-          <condition>
512
-            <property>/instrumentation/zkv1000/device[1]/status</property>
513
-          </condition>
514
-          <command>nasal</command>
515
-          <script>zkv1000.device[1].buttons.COM(0);</script>
516
-        </binding>
517
-      </mod-up>
518 414
     </action>
415
+  </animation>
416
+  <animation>
417
+    <type>knob</type>
519 418
     <action>
520
-      <button>3</button>
521 419
       <binding>
522 420
         <condition>
523 421
           <property>/instrumentation/zkv1000/device[1]/status</property>
524 422
         </condition>
525
-       <command>nasal</command>
526
-       <script>zkv1000.device[1].knobs.COM(0.025);</script>
423
+        <command>property-adjust</command>
424
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
425
+        <factor>0.025</factor>
426
+        <min>118.000</min>
427
+        <max>137.975</max>
428
+        <wrap>true</wrap>
527 429
       </binding>
528 430
     </action>
529
-    <action>
530
-      <button>4</button>
431
+    <shift-action>
531 432
       <binding>
532 433
         <condition>
533 434
           <property>/instrumentation/zkv1000/device[1]/status</property>
534 435
         </condition>
535
-       <command>nasal</command>
536
-       <script>zkv1000.device[1].knobs.COM(-0.025);</script>
436
+        <command>property-adjust</command>
437
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
438
+        <factor>0.1</factor>
537 439
       </binding>
538
-    </action>
440
+    </shift-action>
539 441
   </animation>
540 442
 
541 443
   <animation>
542
-    <type>pick</type>
444
+    <type>knob</type>
543 445
     <object-name>CRS</object-name>
446
+    <property>/instrumentation/zkv1000/device[1]/knobs/CRS</property>
447
+    <center>
448
+      <x-m>0.0038567</x-m>
449
+      <y-m>0.1222390</y-m>
450
+      <z-m>0.0171226</z-m>
451
+    </center>
452
+    <axis>
453
+      <x>1</x>
454
+      <y>0</y>
455
+      <z>0</z>
456
+    </axis>
544 457
     <action>
545
-      <button>3</button>
546 458
       <binding>
547
-        <condition>
548
-          <property>/instrumentation/zkv1000/device[1]/status</property>
549
-        </condition>
550
-       <command>nasal</command>
551
-       <script>zkv1000.device[1].knobs.CRS(1);</script>
459
+        <command>property-adjust</command>
460
+        <property>/instrumentation/zkv1000/device[1]/knobs/CRS</property>
461
+        <factor>10</factor>
462
+        <min>0</min>
463
+        <max>359</max>
464
+        <wrap>true</wrap>
552 465
       </binding>
553
-    </action>
554
-    <action>
555
-      <button>4</button>
556 466
       <binding>
557 467
         <condition>
558 468
           <property>/instrumentation/zkv1000/device[1]/status</property>
559 469
         </condition>
560
-       <command>nasal</command>
561
-       <script>zkv1000.device[1].knobs.CRS(-1);</script>
470
+        <command>property-adjust</command>
471
+        <property>/instrumentation/zkv1000/cdi/course</property>
472
+        <factor>1</factor>
473
+        <min>0</min>
474
+        <max>359</max>
475
+        <wrap>true</wrap>
562 476
       </binding>
563 477
     </action>
564 478
   </animation>
565 479
 
566 480
   <animation>
567
-    <type>pick</type>
481
+    <type>knob</type>
568 482
     <object-name>BARO</object-name>
569 483
     <action>
570
-      <button>0</button>
571 484
       <binding>
572 485
         <condition>
573 486
           <property>/instrumentation/zkv1000/device[1]/status</property>
574 487
         </condition>
575
-        <command>nasal</command>
576
-        <script>zkv1000.device[1].buttons.BARO(1);</script>
488
+       <command>property-adjust</command>
489
+       <property>/instrumentation/altimeter/setting-inhg</property>
490
+       <factor>0.01</factor>
491
+       <min>28.500</min>
492
+       <max>33.000</max>
493
+       <wrap>false</wrap>
577 494
       </binding>
578
-      <mod-up>
579
-        <binding>
580
-          <condition>
581
-            <property>/instrumentation/zkv1000/device[1]/status</property>
582
-          </condition>
583
-          <command>nasal</command>
584
-          <script>zkv1000.device[1].buttons.BARO(0);</script>
585
-        </binding>
586
-      </mod-up>
587 495
     </action>
588
-    <action>
589
-      <button>3</button>
496
+    <shift-action>
590 497
       <binding>
591 498
         <condition>
592 499
           <property>/instrumentation/zkv1000/device[1]/status</property>
593 500
         </condition>
594
-       <command>nasal</command>
595
-       <script>zkv1000.device[1].knobs.BARO(0.01);</script>
501
+       <command>property-adjust</command>
502
+       <property>/instrumentation/altimeter/setting-inhg</property>
503
+       <factor>0.10</factor>
596 504
       </binding>
597
-    </action>
598
-    <action>
599
-      <button>4</button>
600
-      <binding>
601
-        <condition>
602
-          <property>/instrumentation/zkv1000/device[1]/status</property>
603
-        </condition>
604
-       <command>nasal</command>
605
-       <script>zkv1000.device[1].knobs.BARO(-0.01);</script>
606
-      </binding>
607
-    </action>
505
+    </shift-action>
608 506
   </animation>
609 507
 
610 508
   <animation>
... ...
@@ -967,7 +865,7 @@
967 865
           <not>
968 866
             <property>/instrumentation/zkv1000/device[1]/status</property>
969 867
           </not>
970
-          <property>/instrumentation/zkv1000/device[0]/status</property>
868
+          <property>/instrumentation/zkv1000/device[1]/status</property>
971 869
         </condition>
972 870
         <command>nasal</command>
973 871
         <script>zkv1000.powerOn(1);</script>
+136 -238
pfd.xml
... ...
@@ -171,37 +171,25 @@
171 171
         <condition>
172 172
           <property>/instrumentation/zkv1000/device[0]/status</property>
173 173
         </condition>
174
-        <command>nasal</command>
175
-        <script>zkv1000.device[0].buttons.VolNAV(1);</script>
176
-      </binding>
177
-      <mod-up>
178
-        <binding>
179
-          <condition>
180
-            <property>/instrumentation/zkv1000/device[0]/status</property>
181
-          </condition>
182
-          <command>nasal</command>
183
-          <script>zkv1000.device[0].buttons.VolNAV(0);</script>
184
-        </binding>
185
-      </mod-up>
186
-    </action>
187
-    <action>
188
-      <button>3</button>
189
-      <binding>
190
-        <condition>
191
-          <property>/instrumentation/zkv1000/device[0]/status</property>
192
-        </condition>
193
-       <command>nasal</command>
194
-       <script>zkv1000.device[0].knobs.VolNAV(0.1);</script>
174
+        <command>property-toggle</command>
175
+        <property>/instrumentation/zkv1000/radios/nav-ident</property>
195 176
       </binding>
196 177
     </action>
178
+  </animation>
179
+  <animation>
180
+    <type>knob</type>
181
+    <object-name>VolNAV</object-name>
197 182
     <action>
198
-      <button>4</button>
199 183
       <binding>
200 184
         <condition>
201 185
           <property>/instrumentation/zkv1000/device[0]/status</property>
202 186
         </condition>
203
-       <command>nasal</command>
204
-       <script>zkv1000.device[0].knobs.VolNAV(-0.1);</script>
187
+        <command>property-adjust</command>
188
+        <property>/instrumentation/zkv1000/radios/nav-volume</property>
189
+        <factor>0.05</factor>
190
+        <min>0</min>
191
+        <max>1</max>
192
+        <wrap>false</wrap>
205 193
       </binding>
206 194
     </action>
207 195
   </animation>
... ...
@@ -232,71 +220,44 @@
232 220
 
233 221
   <animation>
234 222
     <type>pick</type>
235
-    <object-name>NavOuter</object-name>
236
-    <action>
237
-      <button>3</button>
238
-      <binding>
239
-        <condition>
240
-          <property>/instrumentation/zkv1000/device[0]/status</property>
241
-        </condition>
242
-       <command>nasal</command>
243
-       <script>zkv1000.device[0].knobs.NAV(0.2);</script>
244
-      </binding>
245
-    </action>
223
+    <object-name>NavInner</object-name>
246 224
     <action>
247
-      <button>4</button>
225
+      <button>0</button>
248 226
       <binding>
249 227
         <condition>
250 228
           <property>/instrumentation/zkv1000/device[0]/status</property>
251 229
         </condition>
252
-       <command>nasal</command>
253
-       <script>zkv1000.device[0].knobs.NAV(-0.5);</script>
230
+        <command>property-toggle</command>
231
+        <property>/instrumentation/zkv1000/radios/nav-selected</property>
254 232
       </binding>
255 233
     </action>
256 234
   </animation>
257
-
258 235
   <animation>
259
-    <type>pick</type>
236
+    <type>knob</type>
260 237
     <object-name>NavInner</object-name>
261 238
     <action>
262
-      <button>0</button>
263
-      <binding>
264
-        <condition>
265
-          <property>/instrumentation/zkv1000/device[0]/status</property>
266
-        </condition>
267
-        <command>nasal</command>
268
-        <script>zkv1000.device[0].buttons.NAV(1);</script>
269
-      </binding>
270
-      <mod-up>
271
-        <binding>
272
-          <condition>
273
-            <property>/instrumentation/zkv1000/device[0]/status</property>
274
-          </condition>
275
-          <command>nasal</command>
276
-          <script>zkv1000.device[0].buttons.NAV(0);</script>
277
-        </binding>
278
-      </mod-up>
279
-    </action>
280
-    <action>
281
-      <button>3</button>
282 239
       <binding>
283 240
         <condition>
284 241
           <property>/instrumentation/zkv1000/device[0]/status</property>
285 242
         </condition>
286
-       <command>nasal</command>
287
-       <script>zkv1000.device[0].knobs.NAV(0.05);</script>
243
+        <command>property-adjust</command>
244
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
245
+        <factor>0.05</factor>
246
+        <min>108.000</min>
247
+        <max>118.000</max>
248
+        <wrap>true></wrap>
288 249
       </binding>
289 250
     </action>
290
-    <action>
291
-      <button>4</button>
251
+    <shift-action>
292 252
       <binding>
293 253
         <condition>
294 254
           <property>/instrumentation/zkv1000/device[0]/status</property>
295 255
         </condition>
296
-       <command>nasal</command>
297
-       <script>zkv1000.device[0].knobs.NAV(-0.05);</script>
256
+        <command>property-adjust</command>
257
+        <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
258
+        <factor>0.50</factor>
298 259
       </binding>
299
-    </action>
260
+    </shift-action>
300 261
   </animation>
301 262
 
302 263
   <animation>
... ...
@@ -308,62 +269,45 @@
308 269
         <condition>
309 270
           <property>/instrumentation/zkv1000/device[0]/status</property>
310 271
         </condition>
311
-        <command>nasal</command>
312
-        <script>zkv1000.device[0].buttons.HDG(1);</script>
313
-      </binding>
314
-      <mod-up>
315
-        <binding>
316
-          <condition>
317
-            <property>/instrumentation/zkv1000/device[0]/status</property>
318
-          </condition>
319
-          <command>nasal</command>
320
-          <script>zkv1000.device[0].buttons.HDG(0);</script>
321
-        </binding>
322
-      </mod-up>
323
-    </action>
324
-    <action>
325
-      <button>3</button>
326
-      <binding>
327
-        <condition>
328
-          <property>/instrumentation/zkv1000/device[0]/status</property>
329
-        </condition>
330
-       <command>nasal</command>
331
-       <script>zkv1000.device[0].knobs.HDG(1);</script>
332
-      </binding>
333
-    </action>
334
-    <action>
335
-      <button>4</button>
336
-      <binding>
337
-        <condition>
338
-          <property>/instrumentation/zkv1000/device[0]/status</property>
339
-        </condition>
340
-       <command>nasal</command>
341
-       <script>zkv1000.device[0].knobs.HDG(-1);</script>
272
+        <command>property-assign</command>
273
+        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
274
+        <property>/orientation/heading-magnetic-deg</property>
342 275
       </binding>
343 276
     </action>
344 277
   </animation>
345
-
346 278
   <animation>
347
-    <type>pick</type>
348
-    <object-name>AltOuter</object-name>
279
+    <type>knob</type>
280
+    <object-name>HDG</object-name>
281
+    <property>/instrumentation/zkv1000/device[0]/knobs/HDG</property>
282
+    <center>
283
+      <x-m>0.0025172 </x-m>
284
+      <y-m>-0.1220634</y-m>
285
+      <z-m>0.0169178 </z-m>
286
+    </center>
287
+    <axis>
288
+      <x>1</x>
289
+      <y>0</y>
290
+      <z>0</z>
291
+    </axis>
349 292
     <action>
350
-      <button>3</button>
351 293
       <binding>
352
-        <condition>
353
-          <property>/instrumentation/zkv1000/device[0]/status</property>
354
-        </condition>
355
-       <command>nasal</command>
356
-       <script>zkv1000.device[0].knobs.ALT(500);</script>
294
+       <command>property-adjust</command>
295
+       <property>/instrumentation/zkv1000/device[0]/knobs/HDG</property>
296
+       <factor>10</factor>
297
+       <min>0</min>
298
+       <max>359</max>
299
+       <wrap>true</wrap>
357 300
       </binding>
358
-    </action>
359
-    <action>
360
-      <button>4</button>
361 301
       <binding>
362 302
         <condition>
363 303
           <property>/instrumentation/zkv1000/device[0]/status</property>
364 304
         </condition>
365
-       <command>nasal</command>
366
-       <script>zkv1000.device[0].knobs.ALT(-500);</script>
305
+       <command>property-adjust</command>
306
+       <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
307
+       <factor>1</factor>
308
+       <min>0</min>
309
+       <max>359</max>
310
+       <wrap>true</wrap>
367 311
       </binding>
368 312
     </action>
369 313
   </animation>
... ...
@@ -378,38 +322,36 @@
378 322
           <property>/instrumentation/zkv1000/device[0]/status</property>
379 323
         </condition>
380 324
         <command>nasal</command>
381
-        <script>zkv1000.device[0].buttons.ALT(1);</script>
325
+        <script>zkv1000.device[0].buttons.ALT();</script>
382 326
       </binding>
383
-      <mod-up>
384
-        <binding>
385
-          <condition>
386
-            <property>/instrumentation/zkv1000/device[0]/status</property>
387
-          </condition>
388
-          <command>nasal</command>
389
-          <script>zkv1000.device[0].buttons.ALT(0);</script>
390
-        </binding>
391
-      </mod-up>
392 327
     </action>
328
+  </animation>
329
+  <animation>
330
+    <type>knob</type>
331
+    <object-name>AltInner</object-name>
393 332
     <action>
394
-      <button>3</button>
395 333
       <binding>
396 334
         <condition>
397 335
           <property>/instrumentation/zkv1000/device[0]/status</property>
398 336
         </condition>
399
-       <command>nasal</command>
400
-       <script>zkv1000.device[0].knobs.ALT(50);</script>
337
+       <command>property-adjust</command>
338
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
339
+       <factor>10</factor>
340
+       <min>0</min>
341
+       <max>16000</max>
342
+       <wrap>false</wrap>
401 343
       </binding>
402 344
     </action>
403
-    <action>
404
-      <button>4</button>
345
+    <shift-action>
405 346
       <binding>
406 347
         <condition>
407 348
           <property>/instrumentation/zkv1000/device[0]/status</property>
408 349
         </condition>
409
-       <command>nasal</command>
410
-       <script>zkv1000.device[0].knobs.ALT(-50);</script>
350
+       <command>property-adjust</command>
351
+       <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
352
+       <factor>100</factor>
411 353
       </binding>
412
-    </action>
354
+    </shift-action>
413 355
   </animation>
414 356
 
415 357
   <animation>
... ...
@@ -421,37 +363,25 @@
421 363
         <condition>
422 364
           <property>/instrumentation/zkv1000/device[0]/status</property>
423 365
         </condition>
424
-        <command>nasal</command>
425
-        <script>zkv1000.device[0].buttons.VolCOM(1);</script>
426
-      </binding>
427
-      <mod-up>
428
-        <binding>
429
-          <condition>
430
-            <property>/instrumentation/zkv1000/device[0]/status</property>
431
-          </condition>
432
-          <command>nasal</command>
433
-          <script>zkv1000.device[0].buttons.VolCOM(0);</script>
434
-        </binding>
435
-      </mod-up>
436
-    </action>
437
-    <action>
438
-      <button>3</button>
439
-      <binding>
440
-        <condition>
441
-          <property>/instrumentation/zkv1000/device[0]/status</property>
442
-        </condition>
443
-       <command>nasal</command>
444
-       <script>zkv1000.device[0].knobs.VolCOM(0.1);</script>
366
+        <command>property-toggle</command>
367
+        <property>/instrumentation/zkv1000/comm-add-noise</property>
445 368
       </binding>
446 369
     </action>
370
+  </animation>
371
+  <animation>
372
+    <type>knob</type>
373
+    <object-name>VolCOM</object-name>
447 374
     <action>
448
-      <button>4</button>
449 375
       <binding>
450 376
         <condition>
451 377
           <property>/instrumentation/zkv1000/device[0]/status</property>
452 378
         </condition>
453
-       <command>nasal</command>
454
-       <script>zkv1000.device[0].knobs.VolCOM(-0.1);</script>
379
+        <command>property-adjust</command>
380
+        <property>/instrumentation/zkv1000/radios/comm-volume</property>
381
+        <factor>0.05</factor>
382
+        <min>0</min>
383
+        <max>1</max>
384
+        <wrap>false</wrap>
455 385
       </binding>
456 386
     </action>
457 387
   </animation>
... ...
@@ -480,31 +410,6 @@
480 410
     </action>
481 411
   </animation>
482 412
 
483
-  <animation>
484
-    <type>pick</type>
485
-    <object-name>ComOuter</object-name>
486
-    <action>
487
-      <button>3</button>
488
-      <binding>
489
-        <condition>
490
-          <property>/instrumentation/zkv1000/device[0]/status</property>
491
-        </condition>
492
-       <command>nasal</command>
493
-       <script>zkv1000.device[0].knobs.COM(0.1);</script>
494
-      </binding>
495
-    </action>
496
-    <action>
497
-      <button>4</button>
498
-      <binding>
499
-        <condition>
500
-          <property>/instrumentation/zkv1000/device[0]/status</property>
501
-        </condition>
502
-       <command>nasal</command>
503
-       <script>zkv1000.device[0].knobs.COM(-0.1);</script>
504
-      </binding>
505
-    </action>
506
-  </animation>
507
-
508 413
   <animation>
509 414
     <type>pick</type>
510 415
     <object-name>ComInner</object-name>
... ...
@@ -514,108 +419,101 @@
514 419
         <condition>
515 420
           <property>/instrumentation/zkv1000/device[0]/status</property>
516 421
         </condition>
517
-        <command>nasal</command>
518
-        <script>zkv1000.device[0].buttons.COM(1);</script>
422
+        <command>property-toggle</command>
423
+        <property>/intrumentation/zkv1000/radios/comm-selected</property>
519 424
       </binding>
520
-      <mod-up>
521
-        <binding>
522
-          <condition>
523
-            <property>/instrumentation/zkv1000/device[0]/status</property>
524
-          </condition>
525
-          <command>nasal</command>
526
-          <script>zkv1000.device[0].buttons.COM(0);</script>
527
-        </binding>
528
-      </mod-up>
529 425
     </action>
426
+  </animation>
427
+  <animation>
428
+    <type>knob</type>
530 429
     <action>
531
-      <button>3</button>
532 430
       <binding>
533 431
         <condition>
534 432
           <property>/instrumentation/zkv1000/device[0]/status</property>
535 433
         </condition>
536
-       <command>nasal</command>
537
-       <script>zkv1000.device[0].knobs.COM(0.025);</script>
434
+        <command>property-adjust</command>
435
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
436
+        <factor>0.025</factor>
437
+        <min>118.000</min>
438
+        <max>137.975</max>
439
+        <wrap>true</wrap>
538 440
       </binding>
539 441
     </action>
540
-    <action>
541
-      <button>4</button>
442
+    <shift-action>
542 443
       <binding>
543 444
         <condition>
544 445
           <property>/instrumentation/zkv1000/device[0]/status</property>
545 446
         </condition>
546
-       <command>nasal</command>
547
-       <script>zkv1000.device[0].knobs.COM(-0.025);</script>
447
+        <command>property-adjust</command>
448
+        <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
449
+        <factor>0.1</factor>
548 450
       </binding>
549
-    </action>
451
+    </shift-action>
550 452
   </animation>
551 453
 
552 454
   <animation>
553
-    <type>pick</type>
455
+    <type>knob</type>
554 456
     <object-name>CRS</object-name>
457
+    <property>/instrumentation/zkv1000/device[0]/knobs/CRS</property>
458
+    <center>
459
+      <x-m>0.0038567</x-m>
460
+      <y-m>0.1222390</y-m>
461
+      <z-m>0.0171226</z-m>
462
+    </center>
463
+    <axis>
464
+      <x>1</x>
465
+      <y>0</y>
466
+      <z>0</z>
467
+    </axis>
555 468
     <action>
556
-      <button>3</button>
557 469
       <binding>
558
-        <condition>
559
-          <property>/instrumentation/zkv1000/device[0]/status</property>
560
-        </condition>
561
-       <command>nasal</command>
562
-       <script>zkv1000.device[0].knobs.CRS(1);</script>
470
+        <command>property-adjust</command>
471
+        <property>/instrumentation/zkv1000/device[0]/knobs/CRS</property>
472
+        <factor>10</factor>
473
+        <min>0</min>
474
+        <max>359</max>
475
+        <wrap>true</wrap>
563 476
       </binding>
564
-    </action>
565
-    <action>
566
-      <button>4</button>
567 477
       <binding>
568 478
         <condition>
569 479
           <property>/instrumentation/zkv1000/device[0]/status</property>
570 480
         </condition>
571
-       <command>nasal</command>
572
-       <script>zkv1000.device[0].knobs.CRS(-1);</script>
481
+        <command>property-adjust</command>
482
+        <property>/instrumentation/zkv1000/cdi/course</property>
483
+        <factor>1</factor>
484
+        <min>0</min>
485
+        <max>359</max>
486
+        <wrap>true</wrap>
573 487
       </binding>
574 488
     </action>
575 489
   </animation>
576 490
 
577 491
   <animation>
578
-    <type>pick</type>
492
+    <type>knob</type>
579 493
     <object-name>BARO</object-name>
580 494
     <action>
581
-      <button>0</button>
582 495
       <binding>
583 496
         <condition>
584 497
           <property>/instrumentation/zkv1000/device[0]/status</property>
585 498
         </condition>
586
-        <command>nasal</command>
587
-        <script>zkv1000.device[0].buttons.BARO(1);</script>
499
+       <command>property-adjust</command>
500
+       <property>/instrumentation/altimeter/setting-inhg</property>
501
+       <factor>0.01</factor>
502
+       <min>28.500</min>
503
+       <max>33.000</max>
504
+       <wrap>false</wrap>
588 505
       </binding>
589
-      <mod-up>
590
-        <binding>
591
-          <condition>
592
-            <property>/instrumentation/zkv1000/device[0]/status</property>
593
-          </condition>
594
-          <command>nasal</command>
595
-          <script>zkv1000.device[0].buttons.BARO(0);</script>
596
-        </binding>
597
-      </mod-up>
598 506
     </action>
599
-    <action>
600
-      <button>3</button>
507
+    <shift-action>
601 508
       <binding>
602 509
         <condition>
603 510
           <property>/instrumentation/zkv1000/device[0]/status</property>
604 511
         </condition>
605
-       <command>nasal</command>
606
-       <script>zkv1000.device[0].knobs.BARO(0.01);</script>
512
+       <command>property-adjust</command>
513
+       <property>/instrumentation/altimeter/setting-inhg</property>
514
+       <factor>0.10</factor>
607 515
       </binding>
608
-    </action>
609
-    <action>
610
-      <button>4</button>
611
-      <binding>
612
-        <condition>
613
-          <property>/instrumentation/zkv1000/device[0]/status</property>
614
-        </condition>
615
-       <command>nasal</command>
616
-       <script>zkv1000.device[0].knobs.BARO(-0.01);</script>
617
-      </binding>
618
-    </action>
516
+    </shift-action>
619 517
   </animation>
620 518
 
621 519
   <animation>