... | ... |
@@ -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 |
}, |
... | ... |
@@ -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 { |
... | ... |
@@ -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) |
... | ... |
@@ -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" |
... | ... |
@@ -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); |