Showing 5 changed files with 58 additions and 20 deletions
+5 -1
Nasal/display.nas
... ...
@@ -152,7 +152,7 @@ var displayClass = {
152 152
                     'PFD-Map',
153 153
                     'PFD-Multilines',
154 154
                     'WindData', 'WindData-OPTN1', 'WindData-OPTN2', 'WindData-OPTN1-HDG', 'WindData-OPTN2-symbol', 'WindData-OPTN2-headwind', 'WindData-OPTN2-crosswind', 'WindData-NODATA',
155
-                    'AOA', 'AOA-needle',
155
+                    'AOA', 'AOA-needle', 'AOA-text', 'AOA-approach',
156 156
                 );
157 157
                 append(groups.clip,
158 158
                     'SpeedLint1',
... ...
@@ -1155,6 +1155,8 @@ var displayClass = {
1155 1155
             return;
1156 1156
         var color = [1,1,1];
1157 1157
         var norm = data.aoa / data['stall-aoa'];
1158
+        me.screenElements['AOA-text']
1159
+            .setText(sprintf('% .1f', norm));
1158 1160
         if (norm > 1) norm = 1;
1159 1161
         if (norm > 0.9)
1160 1162
             color = [1,0,0];
... ...
@@ -1166,6 +1168,8 @@ var displayClass = {
1166 1168
         }
1167 1169
         me.screenElements['AOA-needle']
1168 1170
             .setRotation(-norm * math.pi)
1171
+            .setColorFill(color);
1172
+        me.screenElements['AOA-text']
1169 1173
             .setColor(color);
1170 1174
         settimer(func me.updateAOA(), 0.1);
1171 1175
     },
+15 -8
Nasal/softkeys.nas
... ...
@@ -68,10 +68,11 @@ var softkeysClass = {
68 68
                             if (me.device.data['aoa-auto'])
69 69
                                 return;
70 70
                             me.device.data.aoa = ! me.device.data.aoa;
71
-                            me.device.display.screenElements['AOA']
72
-                                .setVisible(me.device.data.aoa);
73
-                            me.device.display.screenElements['AOA-needle']
74
-                                .setVisible(me.device.data.aoa);
71
+                            foreach (var e; ['AOA', 'AOA-needle', 'AOA-text'])
72
+                                me.device.display.screenElements[e]
73
+                                    .setVisible(me.device.data.aoa);
74
+                            me.device.display.screenElements['AOA-approach']
75
+                                .setVisible(me.device.data.aoa and contains(data, 'approach-aoa'));
75 76
                             me.device.display.updateAOA();
76 77
                             me.device.display.setSoftKeyColor(5 ,me.device.data.aoa);
77 78
                             if (me.device.data.aoa)
... ...
@@ -91,10 +92,11 @@ var softkeysClass = {
91 92
                                             func {
92 93
                                                 var v = getprop('/gear/gear/position-norm') == 1
93 94
                                                     and getprop('/surfaces-positions/flap-pos-norm') != 0;
94
-                                                me.device.display.screenElements['AOA']
95
-                                                    .setVisible(v);
96
-                                                me.device.display.screenElements['AOA-needle']
97
-                                                    .setVisible(v);
95
+                                                foreach (var e; ['AOA', 'AOA-needle', 'AOA-text'])
96
+                                                    me.device.display.screenElements[e]
97
+                                                        .setVisible(v);
98
+                                                me.device.display.screenElements['AOA-approach']
99
+                                                    .setVisible(v and contains(data, 'approach-aoa'));
98 100
                                             }, me);
99 101
                                 me.device.timers.aoa.start();
100 102
                             }
... ...
@@ -106,6 +108,11 @@ var softkeysClass = {
106 108
                                     .hide();
107 109
                             }
108 110
                         },
111
+                        hook : func {
112
+                            if (contains(data,'approach-aoa'))
113
+                                me.device.display.screenElements['AOA-approach']
114
+                                    .setRotation(-data['approach-aoa']/data['stall-aoa']*math.pi);
115
+                        },
109 116
                     },
110 117
                     WIND : {
111 118
                         OPTN1 : func {
+4 -1
README.md
... ...
@@ -151,9 +151,12 @@ You can specify the stall AoA in order to display it in the dedicated display.
151 151
 
152 152
         <alerts>
153 153
           <stall-aoa>15</stall-aoa>
154
+          <approach-aoa>4</approach-aoa>
154 155
         </alerts>
155 156
 
156
-If not specified or equals to 0 (zero) the AOA display won't be accessible.
157
+Values are in degrees.
158
+If `<stall-aoa>` is not specified or equals to 0 (zero) the AOA display won't be accessible.
159
+The `<approach-aoa>` is optionnal, if present a blue marker is visible on AOA display (not in real GarminP1000)
157 160
 
158 161
 ## 3D models
159 162
 In the definition of your flightdeck (here are the values for the installation in the Lancair 235 in which I develop the device)
+31 -10
Systems/screen.svg
... ...
@@ -7118,8 +7118,8 @@
7118 7118
          y="325.3782"
7119 7119
          inkscape:label="AOA-bg" />
7120 7120
       <text
7121
-         inkscape:label="AOA-text"
7122
-         id="AOA-text"
7121
+         inkscape:label="AOA-title"
7122
+         id="AOA-title"
7123 7123
          y="345.68497"
7124 7124
          x="159.34264"
7125 7125
          style="font-style:normal;font-weight:normal;font-size:16px;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"
... ...
@@ -7129,19 +7129,40 @@
7129 7129
            x="159.34264"
7130 7130
            id="tspan5885"
7131 7131
            sodipodi:role="line">AOA</tspan></text>
7132
-      <path
7133
-         inkscape:label="AOA-needle"
7134
-         inkscape:transform-center-y="17.435497"
7135
-         inkscape:transform-center-x="-0.303765"
7136
-         inkscape:connector-curvature="0"
7137
-         id="AOA-needle"
7138
-         d="m 191.3807,360.58563 0.63375,34.70574 v 0 0"
7139
-         style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.97909927;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
7140 7132
       <path
7141 7133
          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:1;stroke-linecap:butt;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"
7142 7134
          d="m 192.45312,325.95312 v 1 c 12.21842,0 23.48918,6.57015 29.51172,17.20118 6.02255,10.63103 5.86335,23.67799 -0.41796,34.1582 -6.28132,10.48021 -17.71104,16.77019 -29.92579,16.4707 l -0.0254,1 c 12.57316,0.30828 24.34297,-6.1693 30.8086,-16.95703 6.46562,-10.78773 6.6309,-24.22109 0.43164,-35.16406 -6.19926,-10.94297 -17.80588,-17.70899 -30.38282,-17.70899 z"
7143 7135
          id="AOA-circle"
7144 7136
          inkscape:connector-curvature="0" />
7137
+      <path
7138
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
7139
+         d="m 187.104,361.46712 4.51709,33.31608 4.22964,-33.31608 -4.18322,-7.796 z"
7140
+         id="AOA-needle"
7141
+         inkscape:connector-curvature="0"
7142
+         sodipodi:nodetypes="ccccc"
7143
+         inkscape:transform-center-y="13.310244"
7144
+         inkscape:label="AOA-needle" />
7145
+      <text
7146
+         xml:space="preserve"
7147
+         style="font-style:normal;font-weight:normal;font-size:16px;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"
7148
+         x="158.58206"
7149
+         y="394.55258"
7150
+         id="AOA-text"
7151
+         inkscape:label="AOA-text"><tspan
7152
+           sodipodi:role="line"
7153
+           id="tspan5861"
7154
+           x="158.58206"
7155
+           y="394.55258"
7156
+           style="fill:#ffffff;fill-opacity:1">-1.9</tspan></text>
7157
+      <path
7158
+         style="fill:none;fill-rule:evenodd;stroke:#00ffff;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
7159
+         d="m 191.59589,395.7832 -8e-5,-13.97042"
7160
+         id="AOA-approach"
7161
+         inkscape:connector-curvature="0"
7162
+         sodipodi:nodetypes="cc"
7163
+         inkscape:label="AOA-approach"
7164
+         inkscape:transform-center-y="27.761367"
7165
+         inkscape:transform-center-x="0.189987" />
7145 7166
     </g>
7146 7167
     <g
7147 7168
        id="Reversionnary"
+3
zkv1000.nas
... ...
@@ -104,6 +104,9 @@ var init_props = func {
104 104
     }
105 105
     var aoa = getprop('/instrumentation/zkv1000/alerts/stall-aoa');
106 106
     data['stall-aoa'] = (aoa == nil or aoa == 0) ? 9999 : aoa;
107
+    aoa = getprop('/instrumentation/zkv1000/alerts/approach-aoa');
108
+    if (aoa != nil)
109
+        data['approach-aoa'] = aoa;
107 110
 
108 111
     afcs = zkv.getNode('afcs',1);
109 112
     afcs.getNode('fd-bars-visible',1).setBoolValue(0);