Showing 7 changed files with 331 additions and 403 deletions
+4 -2
Nasal/buttons.nas
... ...
@@ -13,8 +13,10 @@ var buttonsClass = {
13 13
         var tmp = getprop('/instrumentation/nav[' ~ n ~ ']/frequencies/selected-mhz');
14 14
         setprop('/instrumentation/nav[' ~ n ~ ']/frequencies/selected-mhz', getprop('/instrumentation/nav[' ~ n ~ ']/frequencies/standby-mhz'));
15 15
         setprop('/instrumentation/nav[' ~ n ~ ']/frequencies/standby-mhz', tmp);
16
-        device[0].display.updateNAV({refresh: n+1});
17
-        device[1].display.updateNAV({refresh: n+1});
16
+        if (contains(PFD, 'display'))
17
+            PFD.display.updateNAV({refresh: n+1});
18
+        if (contains(MFD, 'display'))
19
+            MFD.display.updateNAV({refresh: n+1});
18 20
     },
19 21
 
20 22
     AsSwitchCOM : func (x) {
+46 -119
Nasal/core.nas
... ...
@@ -1,105 +1,88 @@
1
-var main_loop_id = 0;
2
-var loop_check_functions_max_index = 0;
3
-var loop_check_functions = [];
4
-var device = [nil, nil];
5
-var deviceClass = {};
6
-
7
-var init_main_loop = func {
8
-    loop_check_functions = [
9
-        pfdCursors,
10
-        checkTrafficProximity,
11
-        checkMarkerBaecon,
12
-        device[0] == nil ? void : func { moveMap (0) },
13
-        checkRollAcquisition,
14
-        checkPitchAcquisition,
15
-        pfdCursors,
16
-        computeAltitudeDiff,
17
-        computeAirspeedDiff,
18
-        device[1] == nil ? void : func { moveMap(1) },
19
-        checkAlerts,
20
-    ];
21
-    loop_check_functions_max_index = size(loop_check_functions);
22
-}
23
-
24
-var main_loop = func () {
25
-    getData();
26
-    FLCcomputation();
27
-    loop_check_functions[main_loop_id]();
28
-    main_loop_id += 1;
29
-    if (main_loop_id == loop_check_functions_max_index) main_loop_id = 0;
30
-    settimer(main_loop, 0);
31
-}
1
+var PFD = nil;
2
+var MFD = nil;
32 3
 
33 4
 # les listeners triggent en permanence sur les fréquences...
34 5
 var setListeners = func {
35 6
     setlistener('/instrumentation/nav/nav-id',
36 7
             func (n) {
37 8
                 var val = n.getValue();
38
-                device[0].display.updateNAV({'nav-id': 1, val: val});
39
-                device[0].display.updateNAV({'nav-id': 1, val: val});
9
+                if (PFD != nil)
10
+                    PFD.display.updateNAV({'nav-id': 1, val: val});
11
+                if (MFD != nil)
12
+                    MFD.display.updateNAV({'nav-id': 1, val: val});
40 13
             }, 1, 2);
41 14
     setlistener('/instrumentation/nav[1]/nav-id',
42 15
             func (n) {
43 16
                 var val = n.getValue();
44
-                device[0].display.updateNAV({'nav-id': 2, val: val});
45
-                device[1].display.updateNAV({'nav-id': 2, val: val});
17
+                if (PFD != nil)
18
+                    PFD.display.updateNAV({'nav-id': 2, val: val});
19
+                if (MFD != nil)
20
+                    MFD.display.updateNAV({'nav-id': 2, val: val});
46 21
             }, 1, 2);
47 22
     setlistener('/instrumentation/zkv1000/radios/nav-tune',
48 23
             func (n) {
49 24
                 var val = n.getValue();
50 25
                 setNavTune();
51
-                device[0].display.updateNAV({tune: val});
52
-                device[1].display.updateNAV({tune: val});
26
+                if (PFD != nil)
27
+                    PFD.display.updateNAV({tune: val});
28
+                if (MFD != nil)
29
+                    MFD.display.updateNAV({tune: val});
53 30
             }, 1, 2);
54 31
     setlistener('/instrumentation/zkv1000/radios/comm-tune',
55 32
             func (n) {
56 33
                 var val = n.getValue();
57 34
                 setCommTune();
58
-                device[0].display.updateCOMM({tune: val});
59
-                device[1].display.updateCOMM({tune: val});
35
+                if (PFD != nil)
36
+                    PFD.display.updateCOMM({tune: val});
37
+                if (MFD != nil)
38
+                    MFD.display.updateCOMM({tune: val});
60 39
             }, 1, 2);
61 40
     setlistener('/instrumentation/zkv1000/afcs/heading-bug-deg',
62 41
             func (n) {
63 42
                 var val = n.getValue();
64 43
                 if (val != nil) {
65
-                    device[0].display.updateHDG(val);
66
-                    device[1].display.updateHDG(val);
44
+                    if (PFD != nil)
45
+                        PFD.display.updateHDG(val);
46
+                    if (MFD != nil)
47
+                        MFD.display.updateHDG(val);
67 48
                 }
68 49
             }, 0, 2);
69
-    setlistener('/instrumentation/zkv1000/device[0]/knobs/CRS',
50
+    setlistener('/instrumentation/zkv1000/PFD/knobs/CRS',
70 51
             func (n) {
71 52
                 var val = n.getValue();
72 53
                 if (val != nil) {
73
-                    device[0].display.updateCRS();
74
-                    device[1].display.updateCRS();
54
+                    if (PFD != nil)
55
+                        PFD.display.updateCRS();
56
+                    if (MFD != nil)
57
+                        MFD.display.updateCRS();
75 58
                 }
76 59
             }, 0, 2);
77 60
     setlistener('/instrumentation/zkv1000/afcs/selected-alt-ft',
78 61
             func (n) {
79 62
                 var val = n.getValue();
80
-                if (val != nil) {
81
-                    if (! device[0].display.screenElements['SelectedALT'].getVisible()) {
82
-                        device[0].display.screenElements['SelectedALT'].show();
83
-                        device[0].display.screenElements['SelectedALT-text'].show();
84
-                        device[0].display.screenElements['SelectedALT-symbol'].show();
85
-                        device[0].display.screenElements['SelectedALT-bug'].show();
86
-                        device[0].display.screenElements['SelectedALT-bg'].show();
63
+                if (val != nil  and PFD != nil) {
64
+                    if (! PFD.display.screenElements['SelectedALT'].getVisible()) {
65
+                        PFD.display.screenElements['SelectedALT'].show();
66
+                        PFD.display.screenElements['SelectedALT-text'].show();
67
+                        PFD.display.screenElements['SelectedALT-symbol'].show();
68
+                        PFD.display.screenElements['SelectedALT-bug'].show();
69
+                        PFD.display.screenElements['SelectedALT-bg'].show();
87 70
                     }
88
-                    device[0].display.updateSelectedALT();
71
+                    PFD.display.updateSelectedALT();
89 72
                 }
90 73
             }, 0, 2);
91 74
     setlistener('/gear/gear/wow',
92
-            func device[0].display.updateXPDR(),
75
+            func if (PFD != nil) PFD.display.updateXPDR(),
93 76
             0, 0);
94 77
     setlistener('/instrumentation/altimeter/setting-inhg',
95
-            func device[0].display.updateBARO(), 0, 2);
78
+            func if (PFD != nil) PFD.display.updateBARO(), 0, 2);
96 79
 }
97 80
 
98 81
 var deviceClass = {
99
-    new: func (d) {
82
+    new: func (role) {
100 83
         var m = { parents: [ deviceClass ] };
101
-        m.role = d ? 'MFD' : 'PFD';
102
-        m.node = zkv.getNode('device[' ~ d ~ ']', 1);
84
+        m.role = role;
85
+        m.node = zkv.getNode(role, 1);
103 86
         m.display  = displayClass.new(m, m.role);
104 87
         m.display.showInitProgress(m.role);
105 88
         m.softkeys = softkeysClass.new(m, m.node, m.role);
... ...
@@ -121,73 +104,17 @@ var deviceClass = {
121 104
             clip : 'PitchScale',
122 105
         });
123 106
         zkv.getNode(m.role ~ 'init').setIntValue(0);
124
-        m.setstatus(d + 1);
107
+        setprop('/instrumentation/zkv1000/' ~ m.role ~ '/status', 1);
125 108
         msg(m.role ~ ' switched on!');
126 109
         return m;
127 110
     },
128
-
129
-    status: 0,
130
-
131
-    role: '',
132
-
133
-    setstatus: func (s) {
134
-        if (s == 1) {
135
-        }
136
-        elsif (s == 2) {
137
-            me.rootmenu = 12;
138
-            me.node.getNode('mfd-title',1).setValue('TOPO');
139
-        }
140
-        me.status = s;
141
-        me.node.getNode('status', 1).setIntValue(s);
142
-    },
143
-
144
-    
145
-    MFD: func {
146
-        m.rootmenu = 12;
147
-        m.newstatus(2);
148
-        m.node.getNode('mfd-title',1).setValue('TOPO');
149
-    },
150
-
151
-
152
-    MENUkeyItems: {},
153
-
154
-    set_MENUkeyItems: func {
155
-        me.MENUkeyItems = {
156
-            'MAIN MENU': [
157
-                    [['ROUTE MANAGER'],   func { me.MENUsoftkey('ROUTE MANAGER') }],
158
-                    [['GENERAL OPTIONS'], func { me.MENUsoftkey('GENERAL OPTIONS') }],
159
-                ],
160
-            'ROUTE MANAGER': [
161
-                    [[sprintf('%sACTIVATE ROUTE MANAGER', getprop('/autopilot/route-manager/active') ? 'DES' : ''), ' '],
162
-                        func { 
163
-                            getprop('/autopilot/route-manager/route/num') or return;
164
-                            setprop('/autopilot/route-manager/current-wp', 0);
165
-                            var v = getprop('/autopilot/route-manager/active');
166
-                            setprop('/autopilot/route-manager/active', !v);
167
-                            me.mud.node.getNode('line[' ~ me.mud.selected.first_line ~ ']').setValue(sprintf('%sACTIVATE ROUTE MANAGER', v ? '' : 'DES'));
168
-                        }],
169
-                    [['SEARCH AIRPORT'], void],
170
-                    [['SEARCH NAVAID'], void],
171
-                    [['SEARCH FIX'], void],
172
-                    [['BACK'], func { me.MENUsoftkey('MAIN MENU') }],
173
-                ],
174
-            'BACKLIGHT LEVEL': [
175
-                    [['HIGH'], func { setprop('/instrumentation/zkv1000/emission', 1.0) }],
176
-                    [['MEDIUM HIGH'], func { setprop('/instrumentation/zkv1000/emission', 0.6) }],
177
-                    [['MEDIUM LOW'], func { setprop('/instrumentation/zkv1000/emission', 0.4) }],
178
-                    [['LOW'], func { setprop('/instrumentation/zkv1000/emission', 0.2) }],
179
-                    [[' ', 'BACK'], func { me.MENUsoftkey('GENERAL OPTIONS') }],
180
-                ],
181
-            'GENERAL OPTIONS': [
182
-                    [['ADJUST BACKLIGHT'], func { me.MENUsoftkey('BACKLIGHT LEVEL') }],
183
-                    [['MAX NAVAIDS SHOW'], void],
184
-                ],
185
-        };
186
-    },
187 111
 };
188 112
 
189 113
 var powerOn = func {
190
-    device[0] = deviceClass.new(0);
191
-    device[1] = deviceClass.new(1);
114
+    foreach (var role; ['PFD', 'MFD'])
115
+        if (zkv.getNode(role) != nil)
116
+#            thread.newthread(func {
117
+                zkv1000[role] = deviceClass.new(role);
118
+#            });
192 119
     settimer(setListeners, 5);
193 120
 }
+1 -2
Nasal/display.nas
... ...
@@ -779,7 +779,7 @@ var displayClass = {
779 779
 
780 780
     updateSelectedALT : func {
781 781
 # animation for altitude section, called via updatedALT {{{
782
-        if (! device[0].display.screenElements['SelectedALT'].getVisible())
782
+        if (! PFD.display.screenElements['SelectedALT'].getVisible())
783 783
             return;
784 784
         var selected_alt = getprop('/instrumentation/zkv1000/afcs/selected-alt-ft');
785 785
         var delta_alt = me._updated_alt - selected_alt;
... ...
@@ -1195,7 +1195,6 @@ var displayClass = {
1195 1195
         var marker = nil;
1196 1196
         foreach (var m; ['outer', 'middle', 'inner'])
1197 1197
             if (getprop('/instrumentation/marker-beacon/' ~ m)) {
1198
-                print(m);
1199 1198
                 marker = m;
1200 1199
                 me.screenElements['OMI']
1201 1200
                     .show();
+1 -1
README.md
... ...
@@ -72,8 +72,8 @@ Please report bug at <seb.marque@free.fr>.
72 72
   * CDI
73 73
   * OMI
74 74
   * Slipskid animation
75
+  * Radio stack, including ID for NAV
75 76
 * ![][90%]
76
-  * Radio stack, including ID for NAV (![][green-bug] [NAV1 ID isn't displayed on MFD](/git/seb/zkv1000/issues/1))
77 77
   * Bearing needs some checks to be sure it shows the correct information
78 78
   * XPDR: emergency code depending of the country (eg.: 1200 for US, 7700 for Europe), should be set in settings
79 79
 * ![][80%]
+1 -1
Systems/multikey.xml
... ...
@@ -20,7 +20,7 @@
20 20
         <exit/>
21 21
         <binding>
22 22
           <command>nasal</command>
23
-          <script>if (zkv1000.device[0] != nil and zkv1000.device[1] != nil) zkv1000.LIGHT();</script>
23
+          <script>if (zkv1000.PFD != nil and zkv1000.MFD != nil) zkv1000.LIGHT();</script>
24 24
         </binding>
25 25
       </key>
26 26
     </key>
+139 -139
mfd.xml
... ...
@@ -158,7 +158,7 @@
158 158
       <button>0</button>
159 159
       <binding>
160 160
         <condition>
161
-          <property>/instrumentation/zkv1000/device[1]/status</property>
161
+          <property>/instrumentation/zkv1000/MFD/status</property>
162 162
         </condition>
163 163
         <command>property-toggle</command>
164 164
         <property>/instrumentation/zkv1000/radios/nav-ident</property>
... ...
@@ -171,7 +171,7 @@
171 171
     <action>
172 172
       <binding>
173 173
         <condition>
174
-          <property>/instrumentation/zkv1000/device[1]/status</property>
174
+          <property>/instrumentation/zkv1000/MFD/status</property>
175 175
         </condition>
176 176
         <command>property-adjust</command>
177 177
         <property>/instrumentation/zkv1000/radios/nav-volume</property>
... ...
@@ -190,10 +190,10 @@
190 190
       <button>0</button>
191 191
       <binding>
192 192
         <condition>
193
-          <property>/instrumentation/zkv1000/device[1]/status</property>
193
+          <property>/instrumentation/zkv1000/MFD/status</property>
194 194
         </condition>
195 195
        <command>nasal</command>
196
-       <script>zkv1000.device[1].buttons.AsSwitchNAV();</script>
196
+       <script>zkv1000.MFD.buttons.AsSwitchNAV();</script>
197 197
       </binding>
198 198
     </action>
199 199
   </animation>
... ...
@@ -205,7 +205,7 @@
205 205
       <button>0</button>
206 206
       <binding>
207 207
         <condition>
208
-          <property>/instrumentation/zkv1000/device[1]/status</property>
208
+          <property>/instrumentation/zkv1000/MFD/status</property>
209 209
         </condition>
210 210
         <command>property-toggle</command>
211 211
         <property>/instrumentation/zkv1000/radios/nav-tune</property>
... ...
@@ -218,7 +218,7 @@
218 218
     <action>
219 219
       <binding>
220 220
         <condition>
221
-          <property>/instrumentation/zkv1000/device[1]/status</property>
221
+          <property>/instrumentation/zkv1000/MFD/status</property>
222 222
         </condition>
223 223
         <command>property-adjust</command>
224 224
         <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
... ...
@@ -229,19 +229,19 @@
229 229
       </binding>
230 230
       <binding>
231 231
         <condition>
232
-          <property>/instrumentation/zkv1000/device[0]/status</property>
232
+          <property>/instrumentation/zkv1000/MFD/status</property>
233 233
         </condition>
234 234
         <command>nasal</command>
235 235
         <script>
236
-          zkv1000.device[0].display.updateNAV({set:1});
237
-          zkv1000.device[1].display.updateNAV({set:1});
236
+          zkv1000.PFD.display.updateNAV({set:1});
237
+          zkv1000.MFD.display.updateNAV({set:1});
238 238
         </script>
239 239
       </binding>
240 240
     </action>
241 241
     <shift-action>
242 242
       <binding>
243 243
         <condition>
244
-          <property>/instrumentation/zkv1000/device[1]/status</property>
244
+          <property>/instrumentation/zkv1000/MFD/status</property>
245 245
         </condition>
246 246
         <command>property-adjust</command>
247 247
         <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
... ...
@@ -249,12 +249,12 @@
249 249
       </binding>
250 250
       <binding>
251 251
         <condition>
252
-          <property>/instrumentation/zkv1000/device[0]/status</property>
252
+          <property>/instrumentation/zkv1000/MFD/status</property>
253 253
         </condition>
254 254
         <command>nasal</command>
255 255
         <script>
256
-          zkv1000.device[0].display.updateNAV({set:1});
257
-          zkv1000.device[1].display.updateNAV({set:1});
256
+          zkv1000.PFD.display.updateNAV({set:1});
257
+          zkv1000.MFD.display.updateNAV({set:1});
258 258
         </script>
259 259
       </binding>
260 260
     </shift-action>
... ...
@@ -267,7 +267,7 @@
267 267
       <button>0</button>
268 268
       <binding>
269 269
         <condition>
270
-          <property>/instrumentation/zkv1000/device[1]/status</property>
270
+          <property>/instrumentation/zkv1000/MFD/status</property>
271 271
         </condition>
272 272
         <command>property-assign</command>
273 273
         <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
... ...
@@ -278,7 +278,7 @@
278 278
   <animation>
279 279
     <type>knob</type>
280 280
     <object-name>HDG</object-name>
281
-    <property>/instrumentation/zkv1000/device[1]/knobs/HDG</property>
281
+    <property>/instrumentation/zkv1000/MFD/knobs/HDG</property>
282 282
     <center>
283 283
       <x-m>0.0025172 </x-m>
284 284
       <y-m>-0.1220634</y-m>
... ...
@@ -292,7 +292,7 @@
292 292
     <action>
293 293
       <binding>
294 294
        <command>property-adjust</command>
295
-       <property>/instrumentation/zkv1000/device[1]/knobs/HDG</property>
295
+       <property>/instrumentation/zkv1000/MFD/knobs/HDG</property>
296 296
        <factor>10</factor>
297 297
        <min>0</min>
298 298
        <max>359</max>
... ...
@@ -300,7 +300,7 @@
300 300
       </binding>
301 301
       <binding>
302 302
         <condition>
303
-          <property>/instrumentation/zkv1000/device[1]/status</property>
303
+          <property>/instrumentation/zkv1000/MFD/status</property>
304 304
         </condition>
305 305
        <command>property-adjust</command>
306 306
        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
... ...
@@ -319,10 +319,10 @@
319 319
       <button>0</button>
320 320
       <binding>
321 321
         <condition>
322
-          <property>/instrumentation/zkv1000/device[1]/status</property>
322
+          <property>/instrumentation/zkv1000/MFD/status</property>
323 323
         </condition>
324 324
         <command>nasal</command>
325
-        <script>zkv1000.device[1].buttons.ALT();</script>
325
+        <script>zkv1000.MFD.buttons.ALT();</script>
326 326
       </binding>
327 327
     </action>
328 328
   </animation>
... ...
@@ -332,7 +332,7 @@
332 332
     <action>
333 333
       <binding>
334 334
         <condition>
335
-          <property>/instrumentation/zkv1000/device[1]/status</property>
335
+          <property>/instrumentation/zkv1000/MFD/status</property>
336 336
         </condition>
337 337
        <command>property-adjust</command>
338 338
        <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
... ...
@@ -345,7 +345,7 @@
345 345
     <shift-action>
346 346
       <binding>
347 347
         <condition>
348
-          <property>/instrumentation/zkv1000/device[1]/status</property>
348
+          <property>/instrumentation/zkv1000/MFD/status</property>
349 349
         </condition>
350 350
        <command>property-adjust</command>
351 351
        <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
... ...
@@ -361,7 +361,7 @@
361 361
       <button>0</button>
362 362
       <binding>
363 363
         <condition>
364
-          <property>/instrumentation/zkv1000/device[1]/status</property>
364
+          <property>/instrumentation/zkv1000/MFD/status</property>
365 365
         </condition>
366 366
         <command>property-toggle</command>
367 367
         <property>/instrumentation/zkv1000/comm-add-noise</property>
... ...
@@ -374,7 +374,7 @@
374 374
     <action>
375 375
       <binding>
376 376
         <condition>
377
-          <property>/instrumentation/zkv1000/device[1]/status</property>
377
+          <property>/instrumentation/zkv1000/MFD/status</property>
378 378
         </condition>
379 379
         <command>property-adjust</command>
380 380
         <property>/instrumentation/zkv1000/radios/comm-volume</property>
... ...
@@ -393,18 +393,18 @@
393 393
       <button>0</button>
394 394
       <binding>
395 395
         <condition>
396
-          <property>/instrumentation/zkv1000/device[1]/status</property>
396
+          <property>/instrumentation/zkv1000/MFD/status</property>
397 397
         </condition>
398 398
        <command>nasal</command>
399
-       <script>zkv1000.device[1].buttons.AsSwitchCOM(1);</script>
399
+       <script>zkv1000.MFD.buttons.AsSwitchCOM(1);</script>
400 400
       </binding>
401 401
       <mod-up>
402 402
         <binding>
403 403
           <condition>
404
-            <property>/instrumentation/zkv1000/device[1]/status</property>
404
+            <property>/instrumentation/zkv1000/MFD/status</property>
405 405
           </condition>
406 406
           <command>nasal</command>
407
-          <script>zkv1000.device[1].buttons.AsSwitchCOM(0);</script>
407
+          <script>zkv1000.MFD.buttons.AsSwitchCOM(0);</script>
408 408
         </binding>
409 409
       </mod-up>
410 410
     </action>
... ...
@@ -417,7 +417,7 @@
417 417
       <button>0</button>
418 418
       <binding>
419 419
         <condition>
420
-          <property>/instrumentation/zkv1000/device[1]/status</property>
420
+          <property>/instrumentation/zkv1000/MFD/status</property>
421 421
         </condition>
422 422
         <command>property-toggle</command>
423 423
         <property>/instrumentation/zkv1000/radios/comm-tune</property>
... ...
@@ -430,7 +430,7 @@
430 430
     <action>
431 431
       <binding>
432 432
         <condition>
433
-          <property>/instrumentation/zkv1000/device[1]/status</property>
433
+          <property>/instrumentation/zkv1000/MFD/status</property>
434 434
         </condition>
435 435
         <command>property-adjust</command>
436 436
         <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
... ...
@@ -443,7 +443,7 @@
443 443
     <shift-action>
444 444
       <binding>
445 445
         <condition>
446
-          <property>/instrumentation/zkv1000/device[1]/status</property>
446
+          <property>/instrumentation/zkv1000/MFD/status</property>
447 447
         </condition>
448 448
         <command>property-adjust</command>
449 449
         <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
... ...
@@ -455,7 +455,7 @@
455 455
   <animation>
456 456
     <type>knob</type>
457 457
     <object-name>CRS</object-name>
458
-    <property>/instrumentation/zkv1000/device[1]/knobs/CRS</property>
458
+    <property>/instrumentation/zkv1000/MFD/knobs/CRS</property>
459 459
     <center>
460 460
       <x-m>0.0038567</x-m>
461 461
       <y-m>0.1222390</y-m>
... ...
@@ -469,7 +469,7 @@
469 469
     <action>
470 470
       <binding>
471 471
         <command>property-adjust</command>
472
-        <property>/instrumentation/zkv1000/device[1]/knobs/CRS</property>
472
+        <property>/instrumentation/zkv1000/MFD/knobs/CRS</property>
473 473
         <factor>10</factor>
474 474
         <min>0</min>
475 475
         <max>359</max>
... ...
@@ -477,7 +477,7 @@
477 477
       </binding>
478 478
       <binding>
479 479
         <condition>
480
-          <property>/instrumentation/zkv1000/device[1]/status</property>
480
+          <property>/instrumentation/zkv1000/MFD/status</property>
481 481
         </condition>
482 482
         <command>property-adjust</command>
483 483
         <property>/instrumentation/zkv1000/cdi/course</property>
... ...
@@ -495,7 +495,7 @@
495 495
     <action>
496 496
       <binding>
497 497
         <condition>
498
-          <property>/instrumentation/zkv1000/device[1]/status</property>
498
+          <property>/instrumentation/zkv1000/MFD/status</property>
499 499
         </condition>
500 500
        <command>property-adjust</command>
501 501
        <property>/instrumentation/altimeter/setting-inhg</property>
... ...
@@ -508,7 +508,7 @@
508 508
     <shift-action>
509 509
       <binding>
510 510
         <condition>
511
-          <property>/instrumentation/zkv1000/device[1]/status</property>
511
+          <property>/instrumentation/zkv1000/MFD/status</property>
512 512
         </condition>
513 513
        <command>property-adjust</command>
514 514
        <property>/instrumentation/altimeter/setting-inhg</property>
... ...
@@ -524,18 +524,18 @@
524 524
       <button>0</button>
525 525
       <binding>
526 526
         <condition>
527
-          <property>/instrumentation/zkv1000/device[1]/status</property>
527
+          <property>/instrumentation/zkv1000/MFD/status</property>
528 528
         </condition>
529 529
         <command>nasal</command>
530
-        <script>zkv1000.device[1].buttons.PAN({xdir: 1, ydir: 1});</script>
530
+        <script>zkv1000.MFD.buttons.PAN({xdir: 1, ydir: 1});</script>
531 531
       </binding>
532 532
       <mod-up>
533 533
         <binding>
534 534
           <condition>
535
-            <property>/instrumentation/zkv1000/device[1]/status</property>
535
+            <property>/instrumentation/zkv1000/MFD/status</property>
536 536
           </condition>
537 537
           <command>nasal</command>
538
-          <script>zkv1000.device[1].buttons.PAN();</script>
538
+          <script>zkv1000.MFD.buttons.PAN();</script>
539 539
         </binding>
540 540
       </mod-up>
541 541
     </action>
... ...
@@ -543,20 +543,20 @@
543 543
       <button>3</button>
544 544
       <binding>
545 545
         <condition>
546
-          <property>/instrumentation/zkv1000/device[1]/status</property>
546
+          <property>/instrumentation/zkv1000/MFD/status</property>
547 547
         </condition>
548 548
        <command>nasal</command>
549
-       <script>zkv1000.device[1].knobs.PAN(1);</script>
549
+       <script>zkv1000.MFD.knobs.PAN(1);</script>
550 550
       </binding>
551 551
     </action>
552 552
     <action>
553 553
       <button>4</button>
554 554
       <binding>
555 555
         <condition>
556
-          <property>/instrumentation/zkv1000/device[1]/status</property>
556
+          <property>/instrumentation/zkv1000/MFD/status</property>
557 557
         </condition>
558 558
        <command>nasal</command>
559
-       <script>zkv1000.device[1].knobs.PAN(-1);</script>
559
+       <script>zkv1000.MFD.knobs.PAN(-1);</script>
560 560
       </binding>
561 561
     </action>
562 562
   </animation>
... ...
@@ -568,18 +568,18 @@
568 568
       <button>0</button>
569 569
       <binding>
570 570
         <condition>
571
-          <property>/instrumentation/zkv1000/device[1]/status</property>
571
+          <property>/instrumentation/zkv1000/MFD/status</property>
572 572
         </condition>
573 573
        <command>nasal</command>
574
-       <script>zkv1000.device[1].buttons.PAN({ydir: 1});</script>
574
+       <script>zkv1000.MFD.buttons.PAN({ydir: 1});</script>
575 575
       </binding>
576 576
       <mod-up>
577 577
         <binding>
578 578
           <condition>
579
-            <property>/instrumentation/zkv1000/device[1]/status</property>
579
+            <property>/instrumentation/zkv1000/MFD/status</property>
580 580
           </condition>
581 581
           <command>nasal</command>
582
-          <script>zkv1000.device[1].buttons.PAN();</script>
582
+          <script>zkv1000.MFD.buttons.PAN();</script>
583 583
         </binding>
584 584
       </mod-up>
585 585
     </action>
... ...
@@ -591,18 +591,18 @@
591 591
       <button>0</button>
592 592
       <binding>
593 593
         <condition>
594
-          <property>/instrumentation/zkv1000/device[1]/status</property>
594
+          <property>/instrumentation/zkv1000/MFD/status</property>
595 595
         </condition>
596 596
        <command>nasal</command>
597
-       <script>zkv1000.device[1].buttons.PAN({xdir: -1});</script>
597
+       <script>zkv1000.MFD.buttons.PAN({xdir: -1});</script>
598 598
       </binding>
599 599
       <mod-up>
600 600
         <binding>
601 601
           <condition>
602
-            <property>/instrumentation/zkv1000/device[1]/status</property>
602
+            <property>/instrumentation/zkv1000/MFD/status</property>
603 603
           </condition>
604 604
           <command>nasal</command>
605
-          <script>zkv1000.device[1].buttons.PAN();</script>
605
+          <script>zkv1000.MFD.buttons.PAN();</script>
606 606
         </binding>
607 607
       </mod-up>
608 608
     </action>
... ...
@@ -614,18 +614,18 @@
614 614
       <button>0</button>
615 615
       <binding>
616 616
         <condition>
617
-          <property>/instrumentation/zkv1000/device[1]/status</property>
617
+          <property>/instrumentation/zkv1000/MFD/status</property>
618 618
         </condition>
619 619
        <command>nasal</command>
620
-       <script>zkv1000.device[1].buttons.PAN({xdir: 1});</script>
620
+       <script>zkv1000.MFD.buttons.PAN({xdir: 1});</script>
621 621
       </binding>
622 622
       <mod-up>
623 623
         <binding>
624 624
           <condition>
625
-            <property>/instrumentation/zkv1000/device[1]/status</property>
625
+            <property>/instrumentation/zkv1000/MFD/status</property>
626 626
           </condition>
627 627
           <command>nasal</command>
628
-          <script>zkv1000.device[1].buttons.PAN();</script>
628
+          <script>zkv1000.MFD.buttons.PAN();</script>
629 629
         </binding>
630 630
       </mod-up>
631 631
     </action>
... ...
@@ -637,18 +637,18 @@
637 637
       <button>0</button>
638 638
       <binding>
639 639
         <condition>
640
-          <property>/instrumentation/zkv1000/device[1]/status</property>
640
+          <property>/instrumentation/zkv1000/MFD/status</property>
641 641
         </condition>
642 642
        <command>nasal</command>
643
-       <script>zkv1000.device[1].buttons.PAN({ydir: -1});</script>
643
+       <script>zkv1000.MFD.buttons.PAN({ydir: -1});</script>
644 644
       </binding>
645 645
       <mod-up>
646 646
         <binding>
647 647
           <condition>
648
-            <property>/instrumentation/zkv1000/device[1]/status</property>
648
+            <property>/instrumentation/zkv1000/MFD/status</property>
649 649
           </condition>
650 650
           <command>nasal</command>
651
-          <script>zkv1000.device[1].buttons.PAN();</script>
651
+          <script>zkv1000.MFD.buttons.PAN();</script>
652 652
         </binding>
653 653
       </mod-up>
654 654
     </action>
... ...
@@ -661,18 +661,18 @@
661 661
       <button>0</button>
662 662
       <binding>
663 663
         <condition>
664
-          <property>/instrumentation/zkv1000/device[1]/status</property>
664
+          <property>/instrumentation/zkv1000/MFD/status</property>
665 665
         </condition>
666 666
        <command>nasal</command>
667
-       <script>zkv1000.device[1].buttons.DirectTo(1);</script>
667
+       <script>zkv1000.MFD.buttons.DirectTo(1);</script>
668 668
       </binding>
669 669
       <mod-up>
670 670
         <binding>
671 671
           <condition>
672
-            <property>/instrumentation/zkv1000/device[1]/status</property>
672
+            <property>/instrumentation/zkv1000/MFD/status</property>
673 673
           </condition>
674 674
           <command>nasal</command>
675
-          <script>zkv1000.device[1].buttons.DirectTo(0);</script>
675
+          <script>zkv1000.MFD.buttons.DirectTo(0);</script>
676 676
         </binding>
677 677
       </mod-up>
678 678
     </action>
... ...
@@ -685,18 +685,18 @@
685 685
       <button>0</button>
686 686
       <binding>
687 687
         <condition>
688
-          <property>/instrumentation/zkv1000/device[1]/status</property>
688
+          <property>/instrumentation/zkv1000/MFD/status</property>
689 689
         </condition>
690 690
        <command>nasal</command>
691
-       <script>zkv1000.device[1].buttons.MENU(1);</script>
691
+       <script>zkv1000.MFD.buttons.MENU(1);</script>
692 692
       </binding>
693 693
       <mod-up>
694 694
         <binding>
695 695
           <condition>
696
-            <property>/instrumentation/zkv1000/device[1]/status</property>
696
+            <property>/instrumentation/zkv1000/MFD/status</property>
697 697
           </condition>
698 698
           <command>nasal</command>
699
-          <script>zkv1000.device[1].buttons.MENU(0);</script>
699
+          <script>zkv1000.MFD.buttons.MENU(0);</script>
700 700
         </binding>
701 701
       </mod-up>
702 702
     </action>
... ...
@@ -709,18 +709,18 @@
709 709
       <button>0</button>
710 710
       <binding>
711 711
         <condition>
712
-          <property>/instrumentation/zkv1000/device[1]/status</property>
712
+          <property>/instrumentation/zkv1000/MFD/status</property>
713 713
         </condition>
714 714
        <command>nasal</command>
715
-       <script>zkv1000.device[1].buttons.FPL(1);</script>
715
+       <script>zkv1000.MFD.buttons.FPL(1);</script>
716 716
       </binding>
717 717
       <mod-up>
718 718
         <binding>
719 719
           <condition>
720
-            <property>/instrumentation/zkv1000/device[1]/status</property>
720
+            <property>/instrumentation/zkv1000/MFD/status</property>
721 721
           </condition>
722 722
           <command>nasal</command>
723
-          <script>zkv1000.device[1].buttons.FPL(0);</script>
723
+          <script>zkv1000.MFD.buttons.FPL(0);</script>
724 724
         </binding>
725 725
       </mod-up>
726 726
     </action>
... ...
@@ -733,18 +733,18 @@
733 733
       <button>0</button>
734 734
       <binding>
735 735
         <condition>
736
-          <property>/instrumentation/zkv1000/device[1]/status</property>
736
+          <property>/instrumentation/zkv1000/MFD/status</property>
737 737
         </condition>
738 738
        <command>nasal</command>
739
-       <script>zkv1000.device[1].buttons.PROC(1);</script>
739
+       <script>zkv1000.MFD.buttons.PROC(1);</script>
740 740
       </binding>
741 741
       <mod-up>
742 742
         <binding>
743 743
           <condition>
744
-            <property>/instrumentation/zkv1000/device[1]/status</property>
744
+            <property>/instrumentation/zkv1000/MFD/status</property>
745 745
           </condition>
746 746
           <command>nasal</command>
747
-          <script>zkv1000.device[1].buttons.PROC(0);</script>
747
+          <script>zkv1000.MFD.buttons.PROC(0);</script>
748 748
         </binding>
749 749
       </mod-up>
750 750
     </action>
... ...
@@ -757,18 +757,18 @@
757 757
       <button>0</button>
758 758
       <binding>
759 759
         <condition>
760
-          <property>/instrumentation/zkv1000/device[1]/status</property>
760
+          <property>/instrumentation/zkv1000/MFD/status</property>
761 761
         </condition>
762 762
        <command>nasal</command>
763
-       <script>zkv1000.device[1].buttons.CLR(1);</script>
763
+       <script>zkv1000.MFD.buttons.CLR(1);</script>
764 764
       </binding>
765 765
       <mod-up>
766 766
         <binding>
767 767
           <condition>
768
-            <property>/instrumentation/zkv1000/device[1]/status</property>
768
+            <property>/instrumentation/zkv1000/MFD/status</property>
769 769
           </condition>
770 770
           <command>nasal</command>
771
-          <script>zkv1000.device[1].buttons.CLR(0);</script>
771
+          <script>zkv1000.MFD.buttons.CLR(0);</script>
772 772
         </binding>
773 773
       </mod-up>
774 774
     </action>
... ...
@@ -781,18 +781,18 @@
781 781
       <button>0</button>
782 782
       <binding>
783 783
         <condition>
784
-          <property>/instrumentation/zkv1000/device[1]/status</property>
784
+          <property>/instrumentation/zkv1000/MFD/status</property>
785 785
         </condition>
786 786
         <command>nasal</command>
787
-        <script>zkv1000.device[1].buttons.ENT(1);</script>
787
+        <script>zkv1000.MFD.buttons.ENT(1);</script>
788 788
       </binding>
789 789
       <mod-up>
790 790
         <binding>
791 791
           <condition>
792
-            <property>/instrumentation/zkv1000/device[1]/status</property>
792
+            <property>/instrumentation/zkv1000/MFD/status</property>
793 793
           </condition>
794 794
           <command>nasal</command>
795
-          <script>zkv1000.device[1].buttons.ENT(0);</script>
795
+          <script>zkv1000.MFD.buttons.ENT(0);</script>
796 796
         </binding>
797 797
       </mod-up>
798 798
     </action>
... ...
@@ -804,10 +804,10 @@
804 804
     <action>
805 805
       <binding>
806 806
         <condition>
807
-          <property>/instrumentation/zkv1000/device[1]/status</property>
807
+          <property>/instrumentation/zkv1000/MFD/status</property>
808 808
         </condition>
809 809
         <command>nasal</command>
810
-        <script>zkv1000.device[1].knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
810
+        <script>zkv1000.MFD.knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
811 811
       </binding>
812 812
     </action>
813 813
   </animation>
... ...
@@ -819,18 +819,18 @@
819 819
       <button>0</button>
820 820
       <binding>
821 821
         <condition>
822
-          <property>/instrumentation/zkv1000/device[1]/status</property>
822
+          <property>/instrumentation/zkv1000/MFD/status</property>
823 823
         </condition>
824 824
          <command>nasal</command>
825
-         <script>zkv1000.device[1].buttons.FMS(1);</script>
825
+         <script>zkv1000.MFD.buttons.FMS(1);</script>
826 826
       </binding>
827 827
       <mod-up>
828 828
         <binding>
829 829
           <condition>
830
-            <property>/instrumentation/zkv1000/device[1]/status</property>
830
+            <property>/instrumentation/zkv1000/MFD/status</property>
831 831
           </condition>
832 832
           <command>nasal</command>
833
-          <script>zkv1000.device[1].buttons.FMS(0);</script>
833
+          <script>zkv1000.MFD.buttons.FMS(0);</script>
834 834
         </binding>
835 835
       </mod-up>
836 836
     </action>
... ...
@@ -841,10 +841,10 @@
841 841
     <action>
842 842
       <binding>
843 843
         <condition>
844
-          <property>/instrumentation/zkv1000/device[1]/status</property>
844
+          <property>/instrumentation/zkv1000/MFD/status</property>
845 845
         </condition>
846 846
         <command>nasal</command>
847
-        <script>zkv1000.device[1].knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
847
+        <script>zkv1000.MFD.knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
848 848
       </binding>
849 849
     </action>
850 850
   </animation>
... ...
@@ -856,18 +856,18 @@
856 856
       <button>0</button>
857 857
       <binding>
858 858
         <condition>
859
-          <property>/instrumentation/zkv1000/device[1]/status</property>
859
+          <property>/instrumentation/zkv1000/MFD/status</property>
860 860
         </condition>
861 861
         <command>nasal</command>
862
-        <script>zkv1000.device[1].softkeys.SoftKey(0, 1);</script>
862
+        <script>zkv1000.MFD.softkeys.SoftKey(0, 1);</script>
863 863
       </binding>
864 864
       <mod-up>
865 865
         <binding>
866 866
           <condition>
867
-            <property>/instrumentation/zkv1000/device[1]/status</property>
867
+            <property>/instrumentation/zkv1000/MFD/status</property>
868 868
           </condition>
869 869
           <command>nasal</command>
870
-          <script>zkv1000.device[1].softkeys.SoftKey(0, 0);</script>
870
+          <script>zkv1000.MFD.softkeys.SoftKey(0, 0);</script>
871 871
         </binding>
872 872
       </mod-up>
873 873
     </action>
... ...
@@ -880,18 +880,18 @@
880 880
       <button>0</button>
881 881
       <binding>
882 882
         <condition>
883
-          <property>/instrumentation/zkv1000/device[1]/status</property>
883
+          <property>/instrumentation/zkv1000/MFD/status</property>
884 884
         </condition>
885 885
        <command>nasal</command>
886
-       <script>zkv1000.device[1].softkeys.SoftKey(1, 1);</script>
886
+       <script>zkv1000.MFD.softkeys.SoftKey(1, 1);</script>
887 887
       </binding>
888 888
       <mod-up>
889 889
         <binding>
890 890
           <condition>
891
-            <property>/instrumentation/zkv1000/device[1]/status</property>
891
+            <property>/instrumentation/zkv1000/MFD/status</property>
892 892
           </condition>
893 893
           <command>nasal</command>
894
-          <script>zkv1000.device[1].softkeys.SoftKey(1, 0);</script>
894
+          <script>zkv1000.MFD.softkeys.SoftKey(1, 0);</script>
895 895
         </binding>
896 896
       </mod-up>
897 897
     </action>
... ...
@@ -904,18 +904,18 @@
904 904
       <button>0</button>
905 905
       <binding>
906 906
         <condition>
907
-          <property>/instrumentation/zkv1000/device[1]/status</property>
907
+          <property>/instrumentation/zkv1000/MFD/status</property>
908 908
         </condition>
909 909
        <command>nasal</command>
910
-       <script>zkv1000.device[1].softkeys.SoftKey(2, 1);</script>
910
+       <script>zkv1000.MFD.softkeys.SoftKey(2, 1);</script>
911 911
       </binding>
912 912
       <mod-up>
913 913
         <binding>
914 914
           <condition>
915
-            <property>/instrumentation/zkv1000/device[1]/status</property>
915
+            <property>/instrumentation/zkv1000/MFD/status</property>
916 916
           </condition>
917 917
           <command>nasal</command>
918
-          <script>zkv1000.device[1].softkeys.SoftKey(2, 0);</script>
918
+          <script>zkv1000.MFD.softkeys.SoftKey(2, 0);</script>
919 919
         </binding>
920 920
       </mod-up>
921 921
     </action>
... ...
@@ -928,18 +928,18 @@
928 928
       <button>0</button>
929 929
       <binding>
930 930
         <condition>
931
-          <property>/instrumentation/zkv1000/device[1]/status</property>
931
+          <property>/instrumentation/zkv1000/MFD/status</property>
932 932
         </condition>
933 933
        <command>nasal</command>
934
-       <script>zkv1000.device[1].softkeys.SoftKey(3, 1);</script>
934
+       <script>zkv1000.MFD.softkeys.SoftKey(3, 1);</script>
935 935
       </binding>
936 936
       <mod-up>
937 937
         <binding>
938 938
           <condition>
939
-            <property>/instrumentation/zkv1000/device[1]/status</property>
939
+            <property>/instrumentation/zkv1000/MFD/status</property>
940 940
           </condition>
941 941
           <command>nasal</command>
942
-          <script>zkv1000.device[1].softkeys.SoftKey(3, 0);</script>
942
+          <script>zkv1000.MFD.softkeys.SoftKey(3, 0);</script>
943 943
         </binding>
944 944
       </mod-up>
945 945
     </action>
... ...
@@ -952,18 +952,18 @@
952 952
       <button>0</button>
953 953
       <binding>
954 954
         <condition>
955
-          <property>/instrumentation/zkv1000/device[1]/status</property>
955
+          <property>/instrumentation/zkv1000/MFD/status</property>
956 956
         </condition>
957 957
        <command>nasal</command>
958
-       <script>zkv1000.device[1].softkeys.SoftKey(4, 1);</script>
958
+       <script>zkv1000.MFD.softkeys.SoftKey(4, 1);</script>
959 959
       </binding>
960 960
       <mod-up>
961 961
         <binding>
962 962
           <condition>
963
-            <property>/instrumentation/zkv1000/device[1]/status</property>
963
+            <property>/instrumentation/zkv1000/MFD/status</property>
964 964
           </condition>
965 965
           <command>nasal</command>
966
-          <script>zkv1000.device[1].softkeys.SoftKey(4, 0);</script>
966
+          <script>zkv1000.MFD.softkeys.SoftKey(4, 0);</script>
967 967
         </binding>
968 968
       </mod-up>
969 969
     </action>
... ...
@@ -976,18 +976,18 @@
976 976
       <button>0</button>
977 977
       <binding>
978 978
         <condition>
979
-          <property>/instrumentation/zkv1000/device[1]/status</property>
979
+          <property>/instrumentation/zkv1000/MFD/status</property>
980 980
         </condition>
981 981
        <command>nasal</command>
982
-       <script>zkv1000.device[1].softkeys.SoftKey(5, 1);</script>
982
+       <script>zkv1000.MFD.softkeys.SoftKey(5, 1);</script>
983 983
       </binding>
984 984
       <mod-up>
985 985
         <binding>
986 986
           <condition>
987
-            <property>/instrumentation/zkv1000/device[1]/status</property>
987
+            <property>/instrumentation/zkv1000/MFD/status</property>
988 988
           </condition>
989 989
           <command>nasal</command>
990
-          <script>zkv1000.device[1].softkeys.SoftKey(5, 0);</script>
990
+          <script>zkv1000.MFD.softkeys.SoftKey(5, 0);</script>
991 991
         </binding>
992 992
       </mod-up>
993 993
     </action>
... ...
@@ -1000,18 +1000,18 @@
1000 1000
       <button>0</button>
1001 1001
       <binding>
1002 1002
         <condition>
1003
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1003
+          <property>/instrumentation/zkv1000/MFD/status</property>
1004 1004
         </condition>
1005 1005
        <command>nasal</command>
1006
-       <script>zkv1000.device[1].softkeys.SoftKey(6, 1);</script>
1006
+       <script>zkv1000.MFD.softkeys.SoftKey(6, 1);</script>
1007 1007
       </binding>
1008 1008
       <mod-up>
1009 1009
         <binding>
1010 1010
           <condition>
1011
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1011
+            <property>/instrumentation/zkv1000/MFD/status</property>
1012 1012
           </condition>
1013 1013
           <command>nasal</command>
1014
-          <script>zkv1000.device[1].softkeys.SoftKey(6, 0);</script>
1014
+          <script>zkv1000.MFD.softkeys.SoftKey(6, 0);</script>
1015 1015
         </binding>
1016 1016
       </mod-up>
1017 1017
     </action>
... ...
@@ -1024,18 +1024,18 @@
1024 1024
       <button>0</button>
1025 1025
       <binding>
1026 1026
         <condition>
1027
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1027
+          <property>/instrumentation/zkv1000/MFD/status</property>
1028 1028
         </condition>
1029 1029
        <command>nasal</command>
1030
-       <script>zkv1000.device[1].softkeys.SoftKey(7, 1);</script>
1030
+       <script>zkv1000.MFD.softkeys.SoftKey(7, 1);</script>
1031 1031
       </binding>
1032 1032
       <mod-up>
1033 1033
         <binding>
1034 1034
           <condition>
1035
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1035
+            <property>/instrumentation/zkv1000/MFD/status</property>
1036 1036
           </condition>
1037 1037
           <command>nasal</command>
1038
-          <script>zkv1000.device[1].softkeys.SoftKey(7, 0);</script>
1038
+          <script>zkv1000.MFD.softkeys.SoftKey(7, 0);</script>
1039 1039
         </binding>
1040 1040
       </mod-up>
1041 1041
     </action>
... ...
@@ -1048,18 +1048,18 @@
1048 1048
       <button>0</button>
1049 1049
       <binding>
1050 1050
         <condition>
1051
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1051
+          <property>/instrumentation/zkv1000/MFD/status</property>
1052 1052
         </condition>
1053 1053
        <command>nasal</command>
1054
-       <script>zkv1000.device[1].softkeys.SoftKey(8, 1);</script>
1054
+       <script>zkv1000.MFD.softkeys.SoftKey(8, 1);</script>
1055 1055
       </binding>
1056 1056
       <mod-up>
1057 1057
         <binding>
1058 1058
           <condition>
1059
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1059
+            <property>/instrumentation/zkv1000/MFD/status</property>
1060 1060
           </condition>
1061 1061
           <command>nasal</command>
1062
-          <script>zkv1000.device[1].softkeys.SoftKey(8, 0);</script>
1062
+          <script>zkv1000.MFD.softkeys.SoftKey(8, 0);</script>
1063 1063
         </binding>
1064 1064
       </mod-up>
1065 1065
     </action>
... ...
@@ -1072,18 +1072,18 @@
1072 1072
       <button>0</button>
1073 1073
       <binding>
1074 1074
         <condition>
1075
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1075
+          <property>/instrumentation/zkv1000/MFD/status</property>
1076 1076
         </condition>
1077 1077
        <command>nasal</command>
1078
-       <script>zkv1000.device[1].softkeys.SoftKey(9, 1);</script>
1078
+       <script>zkv1000.MFD.softkeys.SoftKey(9, 1);</script>
1079 1079
       </binding>
1080 1080
       <mod-up>
1081 1081
         <binding>
1082 1082
           <condition>
1083
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1083
+            <property>/instrumentation/zkv1000/MFD/status</property>
1084 1084
           </condition>
1085 1085
           <command>nasal</command>
1086
-          <script>zkv1000.device[1].softkeys.SoftKey(9, 0);</script>
1086
+          <script>zkv1000.MFD.softkeys.SoftKey(9, 0);</script>
1087 1087
         </binding>
1088 1088
       </mod-up>
1089 1089
     </action>
... ...
@@ -1096,18 +1096,18 @@
1096 1096
       <button>0</button>
1097 1097
       <binding>
1098 1098
         <condition>
1099
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1099
+          <property>/instrumentation/zkv1000/MFD/status</property>
1100 1100
         </condition>
1101 1101
        <command>nasal</command>
1102
-       <script>zkv1000.device[1].softkeys.SoftKey(10, 1);</script>
1102
+       <script>zkv1000.MFD.softkeys.SoftKey(10, 1);</script>
1103 1103
       </binding>
1104 1104
       <mod-up>
1105 1105
         <binding>
1106 1106
           <condition>
1107
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1107
+            <property>/instrumentation/zkv1000/MFD/status</property>
1108 1108
           </condition>
1109 1109
           <command>nasal</command>
1110
-          <script>zkv1000.device[1].softkeys.SoftKey(10, 0);</script>
1110
+          <script>zkv1000.MFD.softkeys.SoftKey(10, 0);</script>
1111 1111
         </binding>
1112 1112
       </mod-up>
1113 1113
     </action>
... ...
@@ -1120,18 +1120,18 @@
1120 1120
       <button>0</button>
1121 1121
       <binding>
1122 1122
         <condition>
1123
-          <property>/instrumentation/zkv1000/device[1]/status</property>
1123
+          <property>/instrumentation/zkv1000/MFD/status</property>
1124 1124
         </condition>
1125 1125
        <command>nasal</command>
1126
-       <script>zkv1000.device[1].softkeys.SoftKey(11, 1);</script>
1126
+       <script>zkv1000.MFD.softkeys.SoftKey(11, 1);</script>
1127 1127
       </binding>
1128 1128
       <mod-up>
1129 1129
         <binding>
1130 1130
           <condition>
1131
-            <property>/instrumentation/zkv1000/device[1]/status</property>
1131
+            <property>/instrumentation/zkv1000/MFD/status</property>
1132 1132
           </condition>
1133 1133
           <command>nasal</command>
1134
-          <script>zkv1000.device[1].softkeys.SoftKey(11, 0);</script>
1134
+          <script>zkv1000.MFD.softkeys.SoftKey(11, 0);</script>
1135 1135
         </binding>
1136 1136
       </mod-up>
1137 1137
     </action>
+139 -139
pfd.xml
... ...
@@ -169,7 +169,7 @@
169 169
       <button>0</button>
170 170
       <binding>
171 171
         <condition>
172
-          <property>/instrumentation/zkv1000/device[0]/status</property>
172
+          <property>/instrumentation/zkv1000/PFD/status</property>
173 173
         </condition>
174 174
         <command>property-toggle</command>
175 175
         <property>/instrumentation/zkv1000/radios/nav-ident</property>
... ...
@@ -182,7 +182,7 @@
182 182
     <action>
183 183
       <binding>
184 184
         <condition>
185
-          <property>/instrumentation/zkv1000/device[0]/status</property>
185
+          <property>/instrumentation/zkv1000/PFD/status</property>
186 186
         </condition>
187 187
         <command>property-adjust</command>
188 188
         <property>/instrumentation/zkv1000/radios/nav-volume</property>
... ...
@@ -201,10 +201,10 @@
201 201
       <button>0</button>
202 202
       <binding>
203 203
         <condition>
204
-          <property>/instrumentation/zkv1000/device[0]/status</property>
204
+          <property>/instrumentation/zkv1000/PFD/status</property>
205 205
         </condition>
206 206
        <command>nasal</command>
207
-       <script>zkv1000.device[0].buttons.AsSwitchNAV();</script>
207
+       <script>zkv1000.PFD.buttons.AsSwitchNAV();</script>
208 208
       </binding>
209 209
     </action>
210 210
   </animation>
... ...
@@ -216,7 +216,7 @@
216 216
       <button>0</button>
217 217
       <binding>
218 218
         <condition>
219
-          <property>/instrumentation/zkv1000/device[0]/status</property>
219
+          <property>/instrumentation/zkv1000/PFD/status</property>
220 220
         </condition>
221 221
         <command>property-toggle</command>
222 222
         <property>/instrumentation/zkv1000/radios/nav-tune</property>
... ...
@@ -229,7 +229,7 @@
229 229
     <action>
230 230
       <binding>
231 231
         <condition>
232
-          <property>/instrumentation/zkv1000/device[0]/status</property>
232
+          <property>/instrumentation/zkv1000/PFD/status</property>
233 233
         </condition>
234 234
         <command>property-adjust</command>
235 235
         <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
... ...
@@ -240,19 +240,19 @@
240 240
       </binding>
241 241
       <binding>
242 242
         <condition>
243
-          <property>/instrumentation/zkv1000/device[0]/status</property>
243
+          <property>/instrumentation/zkv1000/PFD/status</property>
244 244
         </condition>
245 245
         <command>nasal</command>
246 246
         <script>
247
-          zkv1000.device[0].display.updateNAV({set:1});
248
-          zkv1000.device[1].display.updateNAV({set:1});
247
+          zkv1000.PFD.display.updateNAV({set:1});
248
+          zkv1000.MFD.display.updateNAV({set:1});
249 249
         </script>
250 250
       </binding>
251 251
     </action>
252 252
     <shift-action>
253 253
       <binding>
254 254
         <condition>
255
-          <property>/instrumentation/zkv1000/device[0]/status</property>
255
+          <property>/instrumentation/zkv1000/PFD/status</property>
256 256
         </condition>
257 257
         <command>property-adjust</command>
258 258
         <property>/instrumentation/zkv1000/radios/nav-freq-mhz</property>
... ...
@@ -260,12 +260,12 @@
260 260
       </binding>
261 261
       <binding>
262 262
         <condition>
263
-          <property>/instrumentation/zkv1000/device[0]/status</property>
263
+          <property>/instrumentation/zkv1000/PFD/status</property>
264 264
         </condition>
265 265
         <command>nasal</command>
266 266
         <script>
267
-          zkv1000.device[0].display.updateNAV({set:1});
268
-          zkv1000.device[1].display.updateNAV({set:1});
267
+          zkv1000.PFD.display.updateNAV({set:1});
268
+          zkv1000.MFD.display.updateNAV({set:1});
269 269
         </script>
270 270
       </binding>
271 271
     </shift-action>
... ...
@@ -278,7 +278,7 @@
278 278
       <button>0</button>
279 279
       <binding>
280 280
         <condition>
281
-          <property>/instrumentation/zkv1000/device[0]/status</property>
281
+          <property>/instrumentation/zkv1000/PFD/status</property>
282 282
         </condition>
283 283
         <command>property-assign</command>
284 284
         <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
... ...
@@ -289,7 +289,7 @@
289 289
   <animation>
290 290
     <type>knob</type>
291 291
     <object-name>HDG</object-name>
292
-    <property>/instrumentation/zkv1000/device[0]/knobs/HDG</property>
292
+    <property>/instrumentation/zkv1000/PFD/knobs/HDG</property>
293 293
     <center>
294 294
       <x-m>0.0025172 </x-m>
295 295
       <y-m>-0.1220634</y-m>
... ...
@@ -303,7 +303,7 @@
303 303
     <action>
304 304
       <binding>
305 305
        <command>property-adjust</command>
306
-       <property>/instrumentation/zkv1000/device[0]/knobs/HDG</property>
306
+       <property>/instrumentation/zkv1000/PFD/knobs/HDG</property>
307 307
        <factor>10</factor>
308 308
        <min>0</min>
309 309
        <max>359</max>
... ...
@@ -311,7 +311,7 @@
311 311
       </binding>
312 312
       <binding>
313 313
         <condition>
314
-          <property>/instrumentation/zkv1000/device[0]/status</property>
314
+          <property>/instrumentation/zkv1000/PFD/status</property>
315 315
         </condition>
316 316
        <command>property-adjust</command>
317 317
        <property>/instrumentation/zkv1000/afcs/heading-bug-deg</property>
... ...
@@ -330,10 +330,10 @@
330 330
       <button>0</button>
331 331
       <binding>
332 332
         <condition>
333
-          <property>/instrumentation/zkv1000/device[0]/status</property>
333
+          <property>/instrumentation/zkv1000/PFD/status</property>
334 334
         </condition>
335 335
         <command>nasal</command>
336
-        <script>zkv1000.device[0].buttons.ALT();</script>
336
+        <script>zkv1000.PFD.buttons.ALT();</script>
337 337
       </binding>
338 338
     </action>
339 339
   </animation>
... ...
@@ -343,7 +343,7 @@
343 343
     <action>
344 344
       <binding>
345 345
         <condition>
346
-          <property>/instrumentation/zkv1000/device[0]/status</property>
346
+          <property>/instrumentation/zkv1000/PFD/status</property>
347 347
         </condition>
348 348
        <command>property-adjust</command>
349 349
        <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
... ...
@@ -356,7 +356,7 @@
356 356
     <shift-action>
357 357
       <binding>
358 358
         <condition>
359
-          <property>/instrumentation/zkv1000/device[0]/status</property>
359
+          <property>/instrumentation/zkv1000/PFD/status</property>
360 360
         </condition>
361 361
        <command>property-adjust</command>
362 362
        <property>/instrumentation/zkv1000/afcs/selected-alt-ft</property>
... ...
@@ -372,7 +372,7 @@
372 372
       <button>0</button>
373 373
       <binding>
374 374
         <condition>
375
-          <property>/instrumentation/zkv1000/device[0]/status</property>
375
+          <property>/instrumentation/zkv1000/PFD/status</property>
376 376
         </condition>
377 377
         <command>property-toggle</command>
378 378
         <property>/instrumentation/zkv1000/comm-add-noise</property>
... ...
@@ -385,7 +385,7 @@
385 385
     <action>
386 386
       <binding>
387 387
         <condition>
388
-          <property>/instrumentation/zkv1000/device[0]/status</property>
388
+          <property>/instrumentation/zkv1000/PFD/status</property>
389 389
         </condition>
390 390
         <command>property-adjust</command>
391 391
         <property>/instrumentation/zkv1000/radios/comm-volume</property>
... ...
@@ -404,18 +404,18 @@
404 404
       <button>0</button>
405 405
       <binding>
406 406
         <condition>
407
-          <property>/instrumentation/zkv1000/device[0]/status</property>
407
+          <property>/instrumentation/zkv1000/PFD/status</property>
408 408
         </condition>
409 409
        <command>nasal</command>
410
-       <script>zkv1000.device[0].buttons.AsSwitchCOM(1);</script>
410
+       <script>zkv1000.PFD.buttons.AsSwitchCOM(1);</script>
411 411
       </binding>
412 412
       <mod-up>
413 413
         <binding>
414 414
           <condition>
415
-            <property>/instrumentation/zkv1000/device[0]/status</property>
415
+            <property>/instrumentation/zkv1000/PFD/status</property>
416 416
           </condition>
417 417
           <command>nasal</command>
418
-          <script>zkv1000.device[0].buttons.AsSwitchCOM(0);</script>
418
+          <script>zkv1000.PFD.buttons.AsSwitchCOM(0);</script>
419 419
         </binding>
420 420
       </mod-up>
421 421
     </action>
... ...
@@ -428,7 +428,7 @@
428 428
       <button>0</button>
429 429
       <binding>
430 430
         <condition>
431
-          <property>/instrumentation/zkv1000/device[0]/status</property>
431
+          <property>/instrumentation/zkv1000/PFD/status</property>
432 432
         </condition>
433 433
         <command>property-toggle</command>
434 434
         <property>/instrumentation/zkv1000/radios/comm-tune</property>
... ...
@@ -441,7 +441,7 @@
441 441
     <action>
442 442
       <binding>
443 443
         <condition>
444
-          <property>/instrumentation/zkv1000/device[0]/status</property>
444
+          <property>/instrumentation/zkv1000/PFD/status</property>
445 445
         </condition>
446 446
         <command>property-adjust</command>
447 447
         <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
... ...
@@ -454,7 +454,7 @@
454 454
     <shift-action>
455 455
       <binding>
456 456
         <condition>
457
-          <property>/instrumentation/zkv1000/device[0]/status</property>
457
+          <property>/instrumentation/zkv1000/PFD/status</property>
458 458
         </condition>
459 459
         <command>property-adjust</command>
460 460
         <property>/instrumentation/zkv1000/radios/comm-freq-mhz</property>
... ...
@@ -466,7 +466,7 @@
466 466
   <animation>
467 467
     <type>knob</type>
468 468
     <object-name>CRS</object-name>
469
-    <property>/instrumentation/zkv1000/device[0]/knobs/CRS</property>
469
+    <property>/instrumentation/zkv1000/PFD/knobs/CRS</property>
470 470
     <center>
471 471
       <x-m>0.0038567</x-m>
472 472
       <y-m>0.1222390</y-m>
... ...
@@ -480,7 +480,7 @@
480 480
     <action>
481 481
       <binding>
482 482
         <command>property-adjust</command>
483
-        <property>/instrumentation/zkv1000/device[0]/knobs/CRS</property>
483
+        <property>/instrumentation/zkv1000/PFD/knobs/CRS</property>
484 484
         <factor>10</factor>
485 485
         <min>0</min>
486 486
         <max>359</max>
... ...
@@ -488,7 +488,7 @@
488 488
       </binding>
489 489
       <binding>
490 490
         <condition>
491
-          <property>/instrumentation/zkv1000/device[0]/status</property>
491
+          <property>/instrumentation/zkv1000/PFD/status</property>
492 492
         </condition>
493 493
         <command>property-adjust</command>
494 494
         <property>/instrumentation/zkv1000/cdi/course</property>
... ...
@@ -506,7 +506,7 @@
506 506
     <action>
507 507
       <binding>
508 508
         <condition>
509
-          <property>/instrumentation/zkv1000/device[0]/status</property>
509
+          <property>/instrumentation/zkv1000/PFD/status</property>
510 510
         </condition>
511 511
        <command>property-adjust</command>
512 512
        <property>/instrumentation/altimeter/setting-inhg</property>
... ...
@@ -519,7 +519,7 @@
519 519
     <shift-action>
520 520
       <binding>
521 521
         <condition>
522
-          <property>/instrumentation/zkv1000/device[0]/status</property>
522
+          <property>/instrumentation/zkv1000/PFD/status</property>
523 523
         </condition>
524 524
        <command>property-adjust</command>
525 525
        <property>/instrumentation/altimeter/setting-inhg</property>
... ...
@@ -535,18 +535,18 @@
535 535
       <button>0</button>
536 536
       <binding>
537 537
         <condition>
538
-          <property>/instrumentation/zkv1000/device[0]/status</property>
538
+          <property>/instrumentation/zkv1000/PFD/status</property>
539 539
         </condition>
540 540
         <command>nasal</command>
541
-        <script>zkv1000.device[0].buttons.PAN({xdir: 1, ydir: 1});</script>
541
+        <script>zkv1000.PFD.buttons.PAN({xdir: 1, ydir: 1});</script>
542 542
       </binding>
543 543
       <mod-up>
544 544
         <binding>
545 545
           <condition>
546
-            <property>/instrumentation/zkv1000/device[0]/status</property>
546
+            <property>/instrumentation/zkv1000/PFD/status</property>
547 547
           </condition>
548 548
           <command>nasal</command>
549
-          <script>zkv1000.device[0].buttons.PAN();</script>
549
+          <script>zkv1000.PFD.buttons.PAN();</script>
550 550
         </binding>
551 551
       </mod-up>
552 552
     </action>
... ...
@@ -554,20 +554,20 @@
554 554
       <button>3</button>
555 555
       <binding>
556 556
         <condition>
557
-          <property>/instrumentation/zkv1000/device[0]/status</property>
557
+          <property>/instrumentation/zkv1000/PFD/status</property>
558 558
         </condition>
559 559
        <command>nasal</command>
560
-       <script>zkv1000.device[0].knobs.PAN(1);</script>
560
+       <script>zkv1000.PFD.knobs.PAN(1);</script>
561 561
       </binding>
562 562
     </action>
563 563
     <action>
564 564
       <button>4</button>
565 565
       <binding>
566 566
         <condition>
567
-          <property>/instrumentation/zkv1000/device[0]/status</property>
567
+          <property>/instrumentation/zkv1000/PFD/status</property>
568 568
         </condition>
569 569
        <command>nasal</command>
570
-       <script>zkv1000.device[0].knobs.PAN(-1);</script>
570
+       <script>zkv1000.PFD.knobs.PAN(-1);</script>
571 571
       </binding>
572 572
     </action>
573 573
   </animation>
... ...
@@ -579,18 +579,18 @@
579 579
       <button>0</button>
580 580
       <binding>
581 581
         <condition>
582
-          <property>/instrumentation/zkv1000/device[0]/status</property>
582
+          <property>/instrumentation/zkv1000/PFD/status</property>
583 583
         </condition>
584 584
        <command>nasal</command>
585
-       <script>zkv1000.device[0].buttons.PAN({ydir: 1});</script>
585
+       <script>zkv1000.PFD.buttons.PAN({ydir: 1});</script>
586 586
       </binding>
587 587
       <mod-up>
588 588
         <binding>
589 589
           <condition>
590
-            <property>/instrumentation/zkv1000/device[0]/status</property>
590
+            <property>/instrumentation/zkv1000/PFD/status</property>
591 591
           </condition>
592 592
           <command>nasal</command>
593
-          <script>zkv1000.device[0].buttons.PAN();</script>
593
+          <script>zkv1000.PFD.buttons.PAN();</script>
594 594
         </binding>
595 595
       </mod-up>
596 596
     </action>
... ...
@@ -602,18 +602,18 @@
602 602
       <button>0</button>
603 603
       <binding>
604 604
         <condition>
605
-          <property>/instrumentation/zkv1000/device[0]/status</property>
605
+          <property>/instrumentation/zkv1000/PFD/status</property>
606 606
         </condition>
607 607
        <command>nasal</command>
608
-       <script>zkv1000.device[0].buttons.PAN({xdir: -1});</script>
608
+       <script>zkv1000.PFD.buttons.PAN({xdir: -1});</script>
609 609
       </binding>
610 610
       <mod-up>
611 611
         <binding>
612 612
           <condition>
613
-            <property>/instrumentation/zkv1000/device[0]/status</property>
613
+            <property>/instrumentation/zkv1000/PFD/status</property>
614 614
           </condition>
615 615
           <command>nasal</command>
616
-          <script>zkv1000.device[0].buttons.PAN();</script>
616
+          <script>zkv1000.PFD.buttons.PAN();</script>
617 617
         </binding>
618 618
       </mod-up>
619 619
     </action>
... ...
@@ -625,18 +625,18 @@
625 625
       <button>0</button>
626 626
       <binding>
627 627
         <condition>
628
-          <property>/instrumentation/zkv1000/device[0]/status</property>
628
+          <property>/instrumentation/zkv1000/PFD/status</property>
629 629
         </condition>
630 630
        <command>nasal</command>
631
-       <script>zkv1000.device[0].buttons.PAN({xdir: 1});</script>
631
+       <script>zkv1000.PFD.buttons.PAN({xdir: 1});</script>
632 632
       </binding>
633 633
       <mod-up>
634 634
         <binding>
635 635
           <condition>
636
-            <property>/instrumentation/zkv1000/device[0]/status</property>
636
+            <property>/instrumentation/zkv1000/PFD/status</property>
637 637
           </condition>
638 638
           <command>nasal</command>
639
-          <script>zkv1000.device[0].buttons.PAN();</script>
639
+          <script>zkv1000.PFD.buttons.PAN();</script>
640 640
         </binding>
641 641
       </mod-up>
642 642
     </action>
... ...
@@ -648,18 +648,18 @@
648 648
       <button>0</button>
649 649
       <binding>
650 650
         <condition>
651
-          <property>/instrumentation/zkv1000/device[0]/status</property>
651
+          <property>/instrumentation/zkv1000/PFD/status</property>
652 652
         </condition>
653 653
        <command>nasal</command>
654
-       <script>zkv1000.device[0].buttons.PAN({ydir: -1});</script>
654
+       <script>zkv1000.PFD.buttons.PAN({ydir: -1});</script>
655 655
       </binding>
656 656
       <mod-up>
657 657
         <binding>
658 658
           <condition>
659
-            <property>/instrumentation/zkv1000/device[0]/status</property>
659
+            <property>/instrumentation/zkv1000/PFD/status</property>
660 660
           </condition>
661 661
           <command>nasal</command>
662
-          <script>zkv1000.device[0].buttons.PAN();</script>
662
+          <script>zkv1000.PFD.buttons.PAN();</script>
663 663
         </binding>
664 664
       </mod-up>
665 665
     </action>
... ...
@@ -672,18 +672,18 @@
672 672
       <button>0</button>
673 673
       <binding>
674 674
         <condition>
675
-          <property>/instrumentation/zkv1000/device[0]/status</property>
675
+          <property>/instrumentation/zkv1000/PFD/status</property>
676 676
         </condition>
677 677
        <command>nasal</command>
678
-       <script>zkv1000.device[0].buttons.DirectTo(1);</script>
678
+       <script>zkv1000.PFD.buttons.DirectTo(1);</script>
679 679
       </binding>
680 680
       <mod-up>
681 681
         <binding>
682 682
           <condition>
683
-            <property>/instrumentation/zkv1000/device[0]/status</property>
683
+            <property>/instrumentation/zkv1000/PFD/status</property>
684 684
           </condition>
685 685
           <command>nasal</command>
686
-          <script>zkv1000.device[0].buttons.DirectTo(0);</script>
686
+          <script>zkv1000.PFD.buttons.DirectTo(0);</script>
687 687
         </binding>
688 688
       </mod-up>
689 689
     </action>
... ...
@@ -696,18 +696,18 @@
696 696
       <button>0</button>
697 697
       <binding>
698 698
         <condition>
699
-          <property>/instrumentation/zkv1000/device[0]/status</property>
699
+          <property>/instrumentation/zkv1000/PFD/status</property>
700 700
         </condition>
701 701
        <command>nasal</command>
702
-       <script>zkv1000.device[0].buttons.MENU(1);</script>
702
+       <script>zkv1000.PFD.buttons.MENU(1);</script>
703 703
       </binding>
704 704
       <mod-up>
705 705
         <binding>
706 706
           <condition>
707
-            <property>/instrumentation/zkv1000/device[0]/status</property>
707
+            <property>/instrumentation/zkv1000/PFD/status</property>
708 708
           </condition>
709 709
           <command>nasal</command>
710
-          <script>zkv1000.device[0].buttons.MENU(0);</script>
710
+          <script>zkv1000.PFD.buttons.MENU(0);</script>
711 711
         </binding>
712 712
       </mod-up>
713 713
     </action>
... ...
@@ -720,18 +720,18 @@
720 720
       <button>0</button>
721 721
       <binding>
722 722
         <condition>
723
-          <property>/instrumentation/zkv1000/device[0]/status</property>
723
+          <property>/instrumentation/zkv1000/PFD/status</property>
724 724
         </condition>
725 725
        <command>nasal</command>
726
-       <script>zkv1000.device[0].buttons.FPL(1);</script>
726
+       <script>zkv1000.PFD.buttons.FPL(1);</script>
727 727
       </binding>
728 728
       <mod-up>
729 729
         <binding>
730 730
           <condition>
731
-            <property>/instrumentation/zkv1000/device[0]/status</property>
731
+            <property>/instrumentation/zkv1000/PFD/status</property>
732 732
           </condition>
733 733
           <command>nasal</command>
734
-          <script>zkv1000.device[0].buttons.FPL(0);</script>
734
+          <script>zkv1000.PFD.buttons.FPL(0);</script>
735 735
         </binding>
736 736
       </mod-up>
737 737
     </action>
... ...
@@ -744,18 +744,18 @@
744 744
       <button>0</button>
745 745
       <binding>
746 746
         <condition>
747
-          <property>/instrumentation/zkv1000/device[0]/status</property>
747
+          <property>/instrumentation/zkv1000/PFD/status</property>
748 748
         </condition>
749 749
        <command>nasal</command>
750
-       <script>zkv1000.device[0].buttons.PROC(1);</script>
750
+       <script>zkv1000.PFD.buttons.PROC(1);</script>
751 751
       </binding>
752 752
       <mod-up>
753 753
         <binding>
754 754
           <condition>
755
-            <property>/instrumentation/zkv1000/device[0]/status</property>
755
+            <property>/instrumentation/zkv1000/PFD/status</property>
756 756
           </condition>
757 757
           <command>nasal</command>
758
-          <script>zkv1000.device[0].buttons.PROC(0);</script>
758
+          <script>zkv1000.PFD.buttons.PROC(0);</script>
759 759
         </binding>
760 760
       </mod-up>
761 761
     </action>
... ...
@@ -768,18 +768,18 @@
768 768
       <button>0</button>
769 769
       <binding>
770 770
         <condition>
771
-          <property>/instrumentation/zkv1000/device[0]/status</property>
771
+          <property>/instrumentation/zkv1000/PFD/status</property>
772 772
         </condition>
773 773
        <command>nasal</command>
774
-       <script>zkv1000.device[0].buttons.CLR(1);</script>
774
+       <script>zkv1000.PFD.buttons.CLR(1);</script>
775 775
       </binding>
776 776
       <mod-up>
777 777
         <binding>
778 778
           <condition>
779
-            <property>/instrumentation/zkv1000/device[0]/status</property>
779
+            <property>/instrumentation/zkv1000/PFD/status</property>
780 780
           </condition>
781 781
           <command>nasal</command>
782
-          <script>zkv1000.device[0].buttons.CLR(0);</script>
782
+          <script>zkv1000.PFD.buttons.CLR(0);</script>
783 783
         </binding>
784 784
       </mod-up>
785 785
     </action>
... ...
@@ -792,18 +792,18 @@
792 792
       <button>0</button>
793 793
       <binding>
794 794
         <condition>
795
-          <property>/instrumentation/zkv1000/device[0]/status</property>
795
+          <property>/instrumentation/zkv1000/PFD/status</property>
796 796
         </condition>
797 797
         <command>nasal</command>
798
-        <script>zkv1000.device[0].buttons.ENT(1);</script>
798
+        <script>zkv1000.PFD.buttons.ENT(1);</script>
799 799
       </binding>
800 800
       <mod-up>
801 801
         <binding>
802 802
           <condition>
803
-            <property>/instrumentation/zkv1000/device[0]/status</property>
803
+            <property>/instrumentation/zkv1000/PFD/status</property>
804 804
           </condition>
805 805
           <command>nasal</command>
806
-          <script>zkv1000.device[0].buttons.ENT(0);</script>
806
+          <script>zkv1000.PFD.buttons.ENT(0);</script>
807 807
         </binding>
808 808
       </mod-up>
809 809
     </action>
... ...
@@ -815,10 +815,10 @@
815 815
     <action>
816 816
       <binding>
817 817
         <condition>
818
-          <property>/instrumentation/zkv1000/device[0]/status</property>
818
+          <property>/instrumentation/zkv1000/PFD/status</property>
819 819
         </condition>
820 820
         <command>nasal</command>
821
-        <script>zkv1000.device[0].knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
821
+        <script>zkv1000.PFD.knobs.FmsOuter(cmdarg().getNode('offset').getValue());</script>
822 822
       </binding>
823 823
     </action>
824 824
   </animation>
... ...
@@ -830,18 +830,18 @@
830 830
       <button>0</button>
831 831
       <binding>
832 832
         <condition>
833
-          <property>/instrumentation/zkv1000/device[0]/status</property>
833
+          <property>/instrumentation/zkv1000/PFD/status</property>
834 834
         </condition>
835 835
          <command>nasal</command>
836
-         <script>zkv1000.device[0].buttons.FMS(1);</script>
836
+         <script>zkv1000.PFD.buttons.FMS(1);</script>
837 837
       </binding>
838 838
       <mod-up>
839 839
         <binding>
840 840
           <condition>
841
-            <property>/instrumentation/zkv1000/device[0]/status</property>
841
+            <property>/instrumentation/zkv1000/PFD/status</property>
842 842
           </condition>
843 843
           <command>nasal</command>
844
-          <script>zkv1000.device[0].buttons.FMS(0);</script>
844
+          <script>zkv1000.PFD.buttons.FMS(0);</script>
845 845
         </binding>
846 846
       </mod-up>
847 847
     </action>
... ...
@@ -852,10 +852,10 @@
852 852
     <action>
853 853
       <binding>
854 854
         <condition>
855
-          <property>/instrumentation/zkv1000/device[0]/status</property>
855
+          <property>/instrumentation/zkv1000/PFD/status</property>
856 856
         </condition>
857 857
         <command>nasal</command>
858
-        <script>zkv1000.device[0].knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
858
+        <script>zkv1000.PFD.knobs.FmsInner(cmdarg().getNode('offset').getValue());</script>
859 859
       </binding>
860 860
     </action>
861 861
   </animation>
... ...
@@ -867,18 +867,18 @@
867 867
       <button>0</button>
868 868
       <binding>
869 869
         <condition>
870
-          <property>/instrumentation/zkv1000/device[0]/status</property>
870
+          <property>/instrumentation/zkv1000/PFD/status</property>
871 871
         </condition>
872 872
         <command>nasal</command>
873
-        <script>zkv1000.device[0].softkeys.SoftKey(0, 1);</script>
873
+        <script>zkv1000.PFD.softkeys.SoftKey(0, 1);</script>
874 874
       </binding>
875 875
       <mod-up>
876 876
         <binding>
877 877
           <condition>
878
-            <property>/instrumentation/zkv1000/device[0]/status</property>
878
+            <property>/instrumentation/zkv1000/PFD/status</property>
879 879
           </condition>
880 880
           <command>nasal</command>
881
-          <script>zkv1000.device[0].softkeys.SoftKey(0, 0);</script>
881
+          <script>zkv1000.PFD.softkeys.SoftKey(0, 0);</script>
882 882
         </binding>
883 883
       </mod-up>
884 884
     </action>
... ...
@@ -891,18 +891,18 @@
891 891
       <button>0</button>
892 892
       <binding>
893 893
         <condition>
894
-          <property>/instrumentation/zkv1000/device[0]/status</property>
894
+          <property>/instrumentation/zkv1000/PFD/status</property>
895 895
         </condition>
896 896
        <command>nasal</command>
897
-       <script>zkv1000.device[0].softkeys.SoftKey(1, 1);</script>
897
+       <script>zkv1000.PFD.softkeys.SoftKey(1, 1);</script>
898 898
       </binding>
899 899
       <mod-up>
900 900
         <binding>
901 901
           <condition>
902
-            <property>/instrumentation/zkv1000/device[0]/status</property>
902
+            <property>/instrumentation/zkv1000/PFD/status</property>
903 903
           </condition>
904 904
           <command>nasal</command>
905
-          <script>zkv1000.device[0].softkeys.SoftKey(1, 0);</script>
905
+          <script>zkv1000.PFD.softkeys.SoftKey(1, 0);</script>
906 906
         </binding>
907 907
       </mod-up>
908 908
     </action>
... ...
@@ -915,18 +915,18 @@
915 915
       <button>0</button>
916 916
       <binding>
917 917
         <condition>
918
-          <property>/instrumentation/zkv1000/device[0]/status</property>
918
+          <property>/instrumentation/zkv1000/PFD/status</property>
919 919
         </condition>
920 920
        <command>nasal</command>
921
-       <script>zkv1000.device[0].softkeys.SoftKey(2, 1);</script>
921
+       <script>zkv1000.PFD.softkeys.SoftKey(2, 1);</script>
922 922
       </binding>
923 923
       <mod-up>
924 924
         <binding>
925 925
           <condition>
926
-            <property>/instrumentation/zkv1000/device[0]/status</property>
926
+            <property>/instrumentation/zkv1000/PFD/status</property>
927 927
           </condition>
928 928
           <command>nasal</command>
929
-          <script>zkv1000.device[0].softkeys.SoftKey(2, 0);</script>
929
+          <script>zkv1000.PFD.softkeys.SoftKey(2, 0);</script>
930 930
         </binding>
931 931
       </mod-up>
932 932
     </action>
... ...
@@ -939,18 +939,18 @@
939 939
       <button>0</button>
940 940
       <binding>
941 941
         <condition>
942
-          <property>/instrumentation/zkv1000/device[0]/status</property>
942
+          <property>/instrumentation/zkv1000/PFD/status</property>
943 943
         </condition>
944 944
        <command>nasal</command>
945
-       <script>zkv1000.device[0].softkeys.SoftKey(3, 1);</script>
945
+       <script>zkv1000.PFD.softkeys.SoftKey(3, 1);</script>
946 946
       </binding>
947 947
       <mod-up>
948 948
         <binding>
949 949
           <condition>
950
-            <property>/instrumentation/zkv1000/device[0]/status</property>
950
+            <property>/instrumentation/zkv1000/PFD/status</property>
951 951
           </condition>
952 952
           <command>nasal</command>
953
-          <script>zkv1000.device[0].softkeys.SoftKey(3, 0);</script>
953
+          <script>zkv1000.PFD.softkeys.SoftKey(3, 0);</script>
954 954
         </binding>
955 955
       </mod-up>
956 956
     </action>
... ...
@@ -963,18 +963,18 @@
963 963
       <button>0</button>
964 964
       <binding>
965 965
         <condition>
966
-          <property>/instrumentation/zkv1000/device[0]/status</property>
966
+          <property>/instrumentation/zkv1000/PFD/status</property>
967 967
         </condition>
968 968
        <command>nasal</command>
969
-       <script>zkv1000.device[0].softkeys.SoftKey(4, 1);</script>
969
+       <script>zkv1000.PFD.softkeys.SoftKey(4, 1);</script>
970 970
       </binding>
971 971
       <mod-up>
972 972
         <binding>
973 973
           <condition>
974
-            <property>/instrumentation/zkv1000/device[0]/status</property>
974
+            <property>/instrumentation/zkv1000/PFD/status</property>
975 975
           </condition>
976 976
           <command>nasal</command>
977
-          <script>zkv1000.device[0].softkeys.SoftKey(4, 0);</script>
977
+          <script>zkv1000.PFD.softkeys.SoftKey(4, 0);</script>
978 978
         </binding>
979 979
       </mod-up>
980 980
     </action>
... ...
@@ -987,18 +987,18 @@
987 987
       <button>0</button>
988 988
       <binding>
989 989
         <condition>
990
-          <property>/instrumentation/zkv1000/device[0]/status</property>
990
+          <property>/instrumentation/zkv1000/PFD/status</property>
991 991
         </condition>
992 992
        <command>nasal</command>
993
-       <script>zkv1000.device[0].softkeys.SoftKey(5, 1);</script>
993
+       <script>zkv1000.PFD.softkeys.SoftKey(5, 1);</script>
994 994
       </binding>
995 995
       <mod-up>
996 996
         <binding>
997 997
           <condition>
998
-            <property>/instrumentation/zkv1000/device[0]/status</property>
998
+            <property>/instrumentation/zkv1000/PFD/status</property>
999 999
           </condition>
1000 1000
           <command>nasal</command>
1001
-          <script>zkv1000.device[0].softkeys.SoftKey(5, 0);</script>
1001
+          <script>zkv1000.PFD.softkeys.SoftKey(5, 0);</script>
1002 1002
         </binding>
1003 1003
       </mod-up>
1004 1004
     </action>
... ...
@@ -1011,18 +1011,18 @@
1011 1011
       <button>0</button>
1012 1012
       <binding>
1013 1013
         <condition>
1014
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1014
+          <property>/instrumentation/zkv1000/PFD/status</property>
1015 1015
         </condition>
1016 1016
        <command>nasal</command>
1017
-       <script>zkv1000.device[0].softkeys.SoftKey(6, 1);</script>
1017
+       <script>zkv1000.PFD.softkeys.SoftKey(6, 1);</script>
1018 1018
       </binding>
1019 1019
       <mod-up>
1020 1020
         <binding>
1021 1021
           <condition>
1022
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1022
+            <property>/instrumentation/zkv1000/PFD/status</property>
1023 1023
           </condition>
1024 1024
           <command>nasal</command>
1025
-          <script>zkv1000.device[0].softkeys.SoftKey(6, 0);</script>
1025
+          <script>zkv1000.PFD.softkeys.SoftKey(6, 0);</script>
1026 1026
         </binding>
1027 1027
       </mod-up>
1028 1028
     </action>
... ...
@@ -1035,18 +1035,18 @@
1035 1035
       <button>0</button>
1036 1036
       <binding>
1037 1037
         <condition>
1038
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1038
+          <property>/instrumentation/zkv1000/PFD/status</property>
1039 1039
         </condition>
1040 1040
        <command>nasal</command>
1041
-       <script>zkv1000.device[0].softkeys.SoftKey(7, 1);</script>
1041
+       <script>zkv1000.PFD.softkeys.SoftKey(7, 1);</script>
1042 1042
       </binding>
1043 1043
       <mod-up>
1044 1044
         <binding>
1045 1045
           <condition>
1046
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1046
+            <property>/instrumentation/zkv1000/PFD/status</property>
1047 1047
           </condition>
1048 1048
           <command>nasal</command>
1049
-          <script>zkv1000.device[0].softkeys.SoftKey(7, 0);</script>
1049
+          <script>zkv1000.PFD.softkeys.SoftKey(7, 0);</script>
1050 1050
         </binding>
1051 1051
       </mod-up>
1052 1052
     </action>
... ...
@@ -1059,18 +1059,18 @@
1059 1059
       <button>0</button>
1060 1060
       <binding>
1061 1061
         <condition>
1062
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1062
+          <property>/instrumentation/zkv1000/PFD/status</property>
1063 1063
         </condition>
1064 1064
        <command>nasal</command>
1065
-       <script>zkv1000.device[0].softkeys.SoftKey(8, 1);</script>
1065
+       <script>zkv1000.PFD.softkeys.SoftKey(8, 1);</script>
1066 1066
       </binding>
1067 1067
       <mod-up>
1068 1068
         <binding>
1069 1069
           <condition>
1070
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1070
+            <property>/instrumentation/zkv1000/PFD/status</property>
1071 1071
           </condition>
1072 1072
           <command>nasal</command>
1073
-          <script>zkv1000.device[0].softkeys.SoftKey(8, 0);</script>
1073
+          <script>zkv1000.PFD.softkeys.SoftKey(8, 0);</script>
1074 1074
         </binding>
1075 1075
       </mod-up>
1076 1076
     </action>
... ...
@@ -1083,18 +1083,18 @@
1083 1083
       <button>0</button>
1084 1084
       <binding>
1085 1085
         <condition>
1086
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1086
+          <property>/instrumentation/zkv1000/PFD/status</property>
1087 1087
         </condition>
1088 1088
        <command>nasal</command>
1089
-       <script>zkv1000.device[0].softkeys.SoftKey(9, 1);</script>
1089
+       <script>zkv1000.PFD.softkeys.SoftKey(9, 1);</script>
1090 1090
       </binding>
1091 1091
       <mod-up>
1092 1092
         <binding>
1093 1093
           <condition>
1094
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1094
+            <property>/instrumentation/zkv1000/PFD/status</property>
1095 1095
           </condition>
1096 1096
           <command>nasal</command>
1097
-          <script>zkv1000.device[0].softkeys.SoftKey(9, 0);</script>
1097
+          <script>zkv1000.PFD.softkeys.SoftKey(9, 0);</script>
1098 1098
         </binding>
1099 1099
       </mod-up>
1100 1100
     </action>
... ...
@@ -1107,18 +1107,18 @@
1107 1107
       <button>0</button>
1108 1108
       <binding>
1109 1109
         <condition>
1110
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1110
+          <property>/instrumentation/zkv1000/PFD/status</property>
1111 1111
         </condition>
1112 1112
        <command>nasal</command>
1113
-       <script>zkv1000.device[0].softkeys.SoftKey(10, 1);</script>
1113
+       <script>zkv1000.PFD.softkeys.SoftKey(10, 1);</script>
1114 1114
       </binding>
1115 1115
       <mod-up>
1116 1116
         <binding>
1117 1117
           <condition>
1118
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1118
+            <property>/instrumentation/zkv1000/PFD/status</property>
1119 1119
           </condition>
1120 1120
           <command>nasal</command>
1121
-          <script>zkv1000.device[0].softkeys.SoftKey(10, 0);</script>
1121
+          <script>zkv1000.PFD.softkeys.SoftKey(10, 0);</script>
1122 1122
         </binding>
1123 1123
       </mod-up>
1124 1124
     </action>
... ...
@@ -1131,18 +1131,18 @@
1131 1131
       <button>0</button>
1132 1132
       <binding>
1133 1133
         <condition>
1134
-          <property>/instrumentation/zkv1000/device[0]/status</property>
1134
+          <property>/instrumentation/zkv1000/PFD/status</property>
1135 1135
         </condition>
1136 1136
        <command>nasal</command>
1137
-       <script>zkv1000.device[0].softkeys.SoftKey(11, 1);</script>
1137
+       <script>zkv1000.PFD.softkeys.SoftKey(11, 1);</script>
1138 1138
       </binding>
1139 1139
       <mod-up>
1140 1140
         <binding>
1141 1141
           <condition>
1142
-            <property>/instrumentation/zkv1000/device[0]/status</property>
1142
+            <property>/instrumentation/zkv1000/PFD/status</property>
1143 1143
           </condition>
1144 1144
           <command>nasal</command>
1145
-          <script>zkv1000.device[0].softkeys.SoftKey(11, 0);</script>
1145
+          <script>zkv1000.PFD.softkeys.SoftKey(11, 0);</script>
1146 1146
         </binding>
1147 1147
       </mod-up>
1148 1148
     </action>