Showing 6 changed files with 209 additions and 40 deletions
+3 -3
Nasal/core.nas
... ...
@@ -66,12 +66,12 @@ var setListeners = func {
66 66
                     device[1].display.updateHDG(val);
67 67
                 }
68 68
             }, 0, 2);
69
-    setlistener('/instrumentation/zkv1000/cdi/course',
69
+    setlistener('/instrumentation/zkv1000/device[0]/knobs/CRS',
70 70
             func (n) {
71 71
                 var val = n.getValue();
72 72
                 if (val != nil) {
73
-                    device[0].display.updateCRS(val);
74
-                    device[1].display.updateCRS(val);
73
+                    device[0].display.updateCRS();
74
+                    device[1].display.updateCRS();
75 75
                 }
76 76
             }, 0, 2);
77 77
     setlistener('/instrumentation/zkv1000/afcs/selected-alt-ft',
+77 -6
Nasal/display.nas
... ...
@@ -105,9 +105,9 @@ var displayClass = {
105 105
                 append(groups.hide,
106 106
                     'EIS',
107 107
                     'CDI',
108
-                    'NAV1-pointer',
109
-                    'NAV2-pointer',
110
-                    'GPS-pointer',
108
+                    'NAV1-pointer', 'NAV1-CDI', 'NAV1-FROM', 'NAV1-TO',
109
+                    'NAV2-pointer', 'NAV2-CDI', 'NAV2-FROM', 'NAV2-TO',
110
+                    'GPS-pointer', 'GPS-CDI', 'GPS-CTI', 'GPS-CTI-diamond', 'GPS-FROM', 'GPS-TO',
111 111
                     'BRG1-pointer',
112 112
                     'BRG2-pointer',
113 113
                     'SelectedHDG-bg',
... ...
@@ -147,6 +147,7 @@ var displayClass = {
147 147
                     'Speed110',
148 148
                     'Alt11100',
149 149
                     'HDG-text',
150
+                    'CDI-SRC-text', 'CDI-GPS-ANN-text', 'CDI-GPS-XTK-text',
150 151
                     'BRG1-pointer', 'BRG1-SRC-text', 'BRG1-DST-text', 'BRG1-WPID-text',
151 152
                     'BRG2-pointer', 'BRG2-SRC-text', 'BRG2-DST-text', 'BRG2-WPID-text',
152 153
                     'WindData-OPTN1-HDG-text', 'WindData-OPTN1-SPD-text',
... ...
@@ -227,6 +228,7 @@ var displayClass = {
227 228
         lightblue : [0, 1, 1],
228 229
         darkblue : [0, 0, 1],
229 230
         red : [1, 0, 0],
231
+        magenta : [1, 0, 1],
230 232
     },
231 233
 #}}}
232 234
 
... ...
@@ -262,6 +264,8 @@ var displayClass = {
262 264
                         me.screenElements[e].setText(me.texts[e].default);
263 265
                     if (contains(me.texts[e], 'color'))
264 266
                         me.screenElements[e].setColor(me.texts[e].color);
267
+                    if (contains(me.texts[e], 'visible'))
268
+                        me.screenElements[e].setVisible(me.texts[e].visible);
265 269
                 }
266 270
 #                else
267 271
 #                    print('no text format for ' ~ e);
... ...
@@ -319,6 +323,15 @@ var displayClass = {
319 323
         'nav2-id' : {
320 324
             default: ''
321 325
         },
326
+        'CDI-GPS-ANN-text' : {
327
+            visible : 0
328
+        },
329
+        'CDI-GPS-XTK-text' : {
330
+            visible : 0
331
+        },
332
+        'CDI-SRC-text' : {
333
+            visible : 0
334
+        },
322 335
 #        'TAS-text' : {
323 336
 #            alignment : 'right-bottom',
324 337
 #        },
... ...
@@ -660,16 +673,23 @@ var displayClass = {
660 673
     },
661 674
 #}}}
662 675
 
663
-    updateCRS : func (crs) {
676
+    updateCRS : func () {
664 677
 # TODO: update display for NAV/GPS/BRG courses {{{
665 678
         if (me.role == 'MFD')
666 679
             return;
680
+        var source = getprop('/instrumentation/zkv1000/cdi/source');
681
+        if (source == 'OFF')
682
+            return;
683
+        var crs = getprop('/instrumentation/zkv1000/cdi/course');
684
+        if (crs == nil)
685
+            return;
667 686
         me.screenElements['SelectedCRS-bg']
668 687
             .show();
669 688
         me.screenElements['SelectedCRS-bgtext']
670 689
             .show();
671 690
         me.screenElements['SelectedCRS-text']
672 691
             .setText(sprintf('%03d°%s', crs, ''))
692
+            .setColor(source == 'GPS' ? me.colors.magenta : me.colors.green)
673 693
             .show();
674 694
         me.addTimer(3, ['SelectedCRS-text', 'SelectedCRS-bgtext', 'SelectedCRS-bg']);
675 695
     },
... ...
@@ -695,6 +715,58 @@ var displayClass = {
695 715
     },
696 716
 #}}}
697 717
 
718
+    updateCDI : func {
719
+# animation for CDI {{{
720
+        var source = getprop('/instrumentation/zkv1000/cdi/source');
721
+        if (source == 'OFF') {
722
+            foreach (var s; ['GPS', 'NAV1', 'NAV2'])
723
+                foreach (var t; ['pointer', 'CDI'])
724
+                    me.screenElements[s ~ '-' ~ t].hide();
725
+            me.screenElements['CDI-GPS-ANN-text'].hide();
726
+            me.screenElements['CDI-GPS-XTK-text'].hide();
727
+            me.screenElements['CDI-SRC-text'].hide();
728
+            me.screenElements['CDI'].hide();
729
+        }
730
+        else {
731
+            var course = getprop('/instrumentation/zkv1000/cdi/course');
732
+            me.screenElements['CDI']
733
+                .show();
734
+            me.screenElements['GPS-CTI']
735
+                .setVisible(source == 'GPS');
736
+            me.screenElements['GPS-CTI-diamond']
737
+                .setVisible(source == 'GPS');
738
+            foreach (var s; ['GPS', 'NAV1', 'NAV2']) {
739
+                var rot = (course - me._updated_hdg) * D2R;
740
+                me.screenElements[s ~ '-pointer']
741
+                    .setRotation(rot)
742
+                    .setVisible(source == s);
743
+                me.screenElements[s ~ '-CDI']
744
+                    .setVisible(source == s);
745
+                foreach (var f; ['FROM', 'TO'])
746
+                    me.screenElements[s ~ '-' ~ f]
747
+                        .setVisible(s == source and getprop('/instrumentation/zkv1000/cdi/', f, '-flag'));
748
+                me.screenElements['CDI-SRC-text']
749
+                    .setText(source)
750
+                    .setColor(source == 'GPS' ? me.colors.magenta : me.colors.green)
751
+                    .show();
752
+                var deflection = getprop('/instrumentation/zkv1000/cdi/course-deflection');
753
+                if (left(source, 3) == 'NAV') {
754
+                    var scale = deflection / 4;
755
+                    scale = (abs(scale) > 1.2) ? 1.2 : scale;
756
+                }
757
+                else {
758
+                    me.screenElements['CDI-SRC-text']
759
+                        .setText('GPS')
760
+                        .setColor(1,0,1);
761
+                }
762
+                me.screenElements[source ~ '-CDI']
763
+                    .setTranslation(65 * scale, 0);
764
+            }
765
+            settimer(func me.updateCDI(), 0.5);
766
+        }
767
+    },
768
+#}}}
769
+
698 770
     _updateRadio: func {
699 771
 # common parts for NAV/LOC/COMM radios{{{
700 772
         # arg[0]._r = <comm|nav>
... ...
@@ -753,8 +825,8 @@ var displayClass = {
753 825
 # update NAV/LOC rodios display upper left (PFD/MFD){{{
754 826
         # made active via menu
755 827
         if (contains(arg[0], "active")) {
828
+            arg[0]._r = 'nav';
756 829
             if (arg[0]['active'] == 'none') {
757
-                arg[0]._r = 'nav';
758 830
                 me._updateRadio(arg[0]);
759 831
                 me.screenElements['nav1-id']
760 832
                     .setColor(1,1,1);
... ...
@@ -766,7 +838,6 @@ var displayClass = {
766 838
                     .hide();
767 839
             }
768 840
             else {
769
-                arg[0]._r = 'nav';
770 841
                 arg[0].inactive = (arg[0]['active'] == 1) + 1;
771 842
                 me._updateRadio(arg[0]);
772 843
                 me.screenElements['nav' ~ arg[0]['active'] ~ '-id']
+30 -9
Nasal/radios.nas
... ...
@@ -25,15 +25,36 @@ var setCommTune = func {
25 25
     freq.alias(radios_list[getprop('/instrumentation/zkv1000/radios/comm-tune') + 4]);
26 26
 }
27 27
 
28
-var CDIfromNAV = func (n) {
29
-    nav = '/instrumentation/nav[' ~ n ~ ']/';
30
-    cdi.getNode('visible').setBoolValue(1);
31
-    cdi.getNode('in-range').alias(nav ~ 'in-range');
32
-    cdi.getNode('course').alias(nav ~ 'radials/selected-deg');
33
-    cdi.getNode('course-deflection').alias(nav ~ 'heading-needle-deflection');
34
-    cdi.getNode('pointer-type').setIntValue(n * 2);
35
-    cdi.getNode('from-flag').alias(nav ~ 'from-flag');
36
-    cdi.getNode('radial').alias(nav ~ 'radials/reciprocal-radial-deg');
28
+var aliases = {
29
+    NAV : {
30
+        'in-range' : 'in-range',
31
+        'course'   : 'radials/selected-deg',
32
+        'course-deflection' : 'heading-needle-deflection',
33
+        'FROM-flag' : 'from-flag',
34
+        'TO-flag' : 'to-flag',
35
+        'radial' : 'radials/reciprocal-radial-deg',
36
+    },
37
+    GPS : {
38
+        'course' : 'desired-course-deg',
39
+        'course-deflection' : 'wp/wp[1]/course-error-nm',
40
+        'FROM-flag': 'wp/wp[1]/from-flag',
41
+        'TO-flag': 'wp/wp[1]/to-flag',
42
+    }
43
+};
44
+
45
+var CDIfromSOURCE = func (source) {
46
+    if (source == 'OFF') {
47
+# all the aliases of GPS are included in NAV too
48
+        foreach (var a; keys(aliases['NAV']))
49
+            cdi.getNode(a).unalias();
50
+    }
51
+    else {
52
+        var s = (source == 'GPS') ? 'gps' : 'nav[' ~ (right(source, 1) - 1) ~ ']';
53
+        foreach (var a; keys(aliases[left(source, 3)])) {
54
+            cdi.getNode(a).unalias();
55
+            cdi.getNode(a).alias('/instrumentation/' ~ s ~ '/' ~ aliases[left(source, 3)][a]);
56
+        }
57
+    }
37 58
 }
38 59
 
39 60
 var XPDR_change_cursor_position = func (dir) {
+16
Nasal/softkeys.nas
... ...
@@ -232,6 +232,22 @@ var softkeysClass = {
232 232
                 me.bindings.PFD.XPDR.ident.start();
233 233
                 call(me.bindings.PFD.XPDR.CODE.exit, [[]], me);
234 234
             },
235
+            CDI : func {
236
+                var list = ['OFF'];
237
+                if (getprop('/instrumentation/gps/route-distance-nm') != nil)
238
+                    append(list, 'GPS');
239
+                if (getprop('/instrumentation/nav/in-range') != nil)
240
+                    append(list, 'NAV1');
241
+                if (getprop('/instrumentation/nav[1]/in-range') != nil)
242
+                    append(list, 'NAV2');
243
+                var index = std.Vector
244
+                               .new(list)
245
+                               .index(cdi.getNode('source').getValue());
246
+                var next = (index == size(list) -1) ?  0 : index + 1;
247
+                cdi.getNode('source').setValue(list[next]);
248
+                CDIfromSOURCE(list[next]);
249
+                me.device.display.updateCDI();
250
+            },
235 251
         },
236 252
         MFD : {
237 253
             ENGINE: {
+73 -22
Systems/screen.svg
... ...
@@ -5109,7 +5109,7 @@
5109 5109
          style="display:none;fill:none;stroke:none;stroke-width:1.00699997;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
5110 5110
     </g>
5111 5111
     <g
5112
-       id="layer19"
5112
+       id="Compass"
5113 5113
        inkscape:label="Compass"
5114 5114
        style="display:inline">
5115 5115
       <g
... ...
@@ -5953,37 +5953,33 @@
5953 5953
       </g>
5954 5954
       <g
5955 5955
          id="CDI"
5956
-         inkscape:label="HDI"
5956
+         inkscape:label="CDI"
5957 5957
          style="display:inline">
5958
-        <circle
5959
-           r="5.0375657"
5960
-           cy="586.5"
5961
-           cx="394.5"
5958
+        <path
5959
+           style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
5960
+           d="m 394.5,581 c -3.03209,0 -5.5,2.46791 -5.5,5.5 0,3.03209 2.46791,5.5 5.5,5.5 3.03209,0 5.5,-2.46791 5.5,-5.5 0,-3.03209 -2.46791,-5.5 -5.5,-5.5 z m 0,0.92578 c 2.53226,0 4.57422,2.04196 4.57422,4.57422 0,2.53226 -2.04196,4.57422 -4.57422,4.57422 -2.53226,0 -4.57422,-2.04196 -4.57422,-4.57422 0,-2.53226 2.04196,-4.57422 4.57422,-4.57422 z"
5962 5961
            id="path4535"
5963
-           style="fill:#3e3e3e;fill-opacity:0.56226412;stroke:#ffffff;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
5964
-        <circle
5965
-           r="5.0375657"
5966
-           cy="586.5"
5967
-           cx="427"
5962
+           inkscape:connector-curvature="0" />
5963
+        <path
5964
+           style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
5965
+           d="m 427,581 c -3.03209,0 -5.5,2.46791 -5.5,5.5 0,3.03209 2.46791,5.5 5.5,5.5 3.03209,0 5.5,-2.46791 5.5,-5.5 0,-3.03209 -2.46791,-5.5 -5.5,-5.5 z m 0,0.92578 c 2.53225,0 4.57422,2.04197 4.57422,4.57422 0,2.53225 -2.04197,4.57422 -4.57422,4.57422 -2.53225,0 -4.57422,-2.04197 -4.57422,-4.57422 0,-2.53225 2.04197,-4.57422 4.57422,-4.57422 z"
5968 5966
            id="path4535-5"
5969
-           style="display:inline;fill:#3e3e3e;fill-opacity:0.56226412;stroke:#ffffff;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
5967
+           inkscape:connector-curvature="0" />
5970 5968
         <path
5971 5969
            inkscape:connector-curvature="0"
5972 5970
            id="path5729"
5973 5971
            d="m 459.5,503 c -46.10392,0 -83.5,37.39608 -83.5,83.5 0,46.10392 37.39608,83.5 83.5,83.5 46.10392,0 83.5,-37.39608 83.5,-83.5 0,-46.10392 -37.39608,-83.5 -83.5,-83.5 z m 0,2.00195 c 45.02197,0 81.49805,36.47608 81.49805,81.49805 0,45.02197 -36.47608,81.49805 -81.49805,81.49805 -45.02197,0 -81.49805,-36.47608 -81.49805,-81.49805 0,-45.02197 36.47608,-81.49805 81.49805,-81.49805 z"
5974 5972
            style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;baseline-shift:baseline;text-anchor:start;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:accumulate" />
5975
-        <circle
5976
-           r="5.0375657"
5977
-           cy="586.5"
5978
-           cx="492"
5973
+        <path
5974
+           style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
5975
+           d="m 492,581 c -3.03209,0 -5.5,2.46791 -5.5,5.5 0,3.03209 2.46791,5.5 5.5,5.5 3.03209,0 5.5,-2.46791 5.5,-5.5 0,-3.03209 -2.46791,-5.5 -5.5,-5.5 z m 0,0.92578 c 2.53225,0 4.57422,2.04197 4.57422,4.57422 0,2.53225 -2.04197,4.57422 -4.57422,4.57422 -2.53225,0 -4.57422,-2.04197 -4.57422,-4.57422 0,-2.53225 2.04197,-4.57422 4.57422,-4.57422 z"
5979 5976
            id="path4535-2"
5980
-           style="display:inline;fill:#3e3e3e;fill-opacity:0.56226412;stroke:#ffffff;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
5981
-        <circle
5982
-           r="5.0375657"
5983
-           cy="586.5"
5984
-           cx="524.5"
5977
+           inkscape:connector-curvature="0" />
5978
+        <path
5979
+           style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
5980
+           d="m 524.5,581 c -3.03209,0 -5.5,2.46791 -5.5,5.5 0,3.03209 2.46791,5.5 5.5,5.5 3.03209,0 5.5,-2.46791 5.5,-5.5 0,-3.03209 -2.46791,-5.5 -5.5,-5.5 z m 0,0.92578 c 2.53225,0 4.57422,2.04197 4.57422,4.57422 0,2.53225 -2.04197,4.57422 -4.57422,4.57422 -2.53225,0 -4.57422,-2.04197 -4.57422,-4.57422 0,-2.53225 2.04197,-4.57422 4.57422,-4.57422 z"
5985 5981
            id="path4535-5-5"
5986
-           style="display:inline;fill:#3e3e3e;fill-opacity:0.56226412;stroke:#ffffff;stroke-width:0.92486846;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
5982
+           inkscape:connector-curvature="0" />
5987 5983
       </g>
5988 5984
       <g
5989 5985
          id="BRG1-pointer"
... ...
@@ -6268,6 +6264,61 @@
6268 6264
                sodipodi:role="line">000°</tspan></text>
6269 6265
         </g>
6270 6266
       </g>
6267
+      <rect
6268
+         style="display:inline;opacity:1;fill:#ff35ff;fill-opacity:1;stroke:none;stroke-width:1.22684693;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
6269
+         id="GPS-CTI-diamond"
6270
+         width="11.030201"
6271
+         height="11.030201"
6272
+         x="658.15662"
6273
+         y="-122.52554"
6274
+         transform="matrix(0.58861055,0.80841673,-0.58861055,0.80841673,0,0)"
6275
+         inkscape:label="GPS-CTI-diamond"
6276
+         inkscape:transform-center-x="0.19014603"
6277
+         inkscape:transform-center-y="-143.37035" />
6278
+      <path
6279
+         style="fill:none;fill-rule:evenodd;stroke:#c9c9c9;stroke-width:0.88917625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.55670503, 3.55670503;stroke-dashoffset:0;stroke-opacity:1"
6280
+         d="M 459.29409,559.07115 459.5,455.375"
6281
+         id="GPS-CTI"
6282
+         inkscape:connector-curvature="0"
6283
+         inkscape:label="GPS-CTI"
6284
+         inkscape:transform-center-x="0.19014635"
6285
+         inkscape:transform-center-y="-77.960004" />
6286
+      <text
6287
+         xml:space="preserve"
6288
+         style="font-style:normal;font-weight:normal;font-size:21.33333397px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
6289
+         x="459.19482"
6290
+         y="634.20343"
6291
+         id="CDI-GPS-XTK-text"
6292
+         inkscape:label="CDI-GPS-XTK-text"><tspan
6293
+           sodipodi:role="line"
6294
+           id="tspan5945"
6295
+           x="459.19482"
6296
+           y="634.20343"
6297
+           style="text-align:center;text-anchor:middle;fill:#ff00ff">XTK 99NM</tspan></text>
6298
+      <text
6299
+         xml:space="preserve"
6300
+         style="font-style:normal;font-weight:normal;font-size:21.33333397px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff00ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
6301
+         x="473.81512"
6302
+         y="561.22241"
6303
+         id="CDI-GPS-ANN-text"
6304
+         inkscape:label="CDI-GPS-ANN-text"><tspan
6305
+           sodipodi:role="line"
6306
+           id="tspan5941"
6307
+           x="473.81512"
6308
+           y="561.22241"
6309
+           style="fill:#ff00ff">ANN.</tspan></text>
6310
+      <text
6311
+         xml:space="preserve"
6312
+         style="font-style:normal;font-weight:normal;font-size:21.33333397px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
6313
+         x="393.14282"
6314
+         y="561.22241"
6315
+         id="CDI-SRC-text"
6316
+         inkscape:label="CDI-SRC-text"><tspan
6317
+           sodipodi:role="line"
6318
+           id="tspan5937"
6319
+           x="393.14282"
6320
+           y="561.22241"
6321
+           style="fill:#ffffff">SRC</tspan></text>
6271 6322
     </g>
6272 6323
     <g
6273 6324
        id="OMI"
+10
zkv1000.nas
... ...
@@ -42,6 +42,16 @@ var init_props = func {
42 42
     radios.getNode('brg1-source',1).setValue('OFF');
43 43
     radios.getNode('brg2-source',1).setValue('OFF');
44 44
 
45
+    cdi = zkv.getNode('cdi', 1);
46
+    cdi.getNode('source', 1).setValue('OFF');
47
+    cdi.getNode('no-flag', 1).setBoolValue(0);
48
+    cdi.getNode('FROM-flag', 1).alias('no-flag');
49
+    cdi.getNode('TO-flag', 1).alias('no-flag');
50
+    cdi.getNode('course', 1);
51
+    cdi.getNode('course-deflection', 1);
52
+    cdi.getNode('radial', 1);
53
+    cdi.getNode('in-range', 1);
54
+
45 55
     alerts = zkv.getNode('alerts',1);
46 56
     alerts.getNode('traffic-proximity',1).setIntValue(0);
47 57
     alerts.getNode('marker-beacon', 1).setIntValue(0);