1
0
Fork 0
fgdata/Input/Event/GoFlight/MFR.xml

214 lines
5.7 KiB
XML
Raw Normal View History

<PropertyList>
<name>GoFlight MFR</name>
<debug-events type="bool">false</debug-events>
<nasal>
<open>
<![CDATA[
var activeChannel = 0;
var activeNode = props.globals.getNode("/input/goflight/mfr/active", 1);
var standbyNode = props.globals.getNode("/input/goflight/mfr/standby-mhz", 1);
var selectedNode = props.globals.getNode("/input/goflight/mfr/selected-mhz", 1);
var brightnessNode = props.globals.getNode("/input/goflight/mfr/brightness", 8);
var updateActive = func(newActive)
{
activeChannel = newActive;
activeNode.setValue(activeChannel);
printlog("info", "GoFlight MFR: Active channel is now:" ~ activeChannel);
var prefix = "/instrumentation/nav[" ~ activeChannel ~ "]/frequencies/";
standbyNode.unalias();
standbyNode.alias(props.globals.getNode(prefix ~ "standby-mhz"));
selectedNode.unalias();
selectedNode.alias(props.globals.getNode(prefix ~ "selected-mhz"));
}
var cycleActive = func() {
activeChannel = activeChannel + 1;
if (activeChannel >= 2) activeChannel = 0;
updateActive();
}
# map decimal digits 0..9 to standard 7-segment LCD pattern
var translateDigitToSevenSegment = [0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f];
var formatFrequency = func(freqMhz)
{
var s = sprintf("%.3f", freqMhz);
var padCount = 6 - size(s);
var r = "";
while (padCount > 0) {
r ~= chr(0);
padCount -=1;
}
for (var i=0; i < size(s); i += 1) {
if (s[i] == `.`) {
# set the high bit to correspond to the decimal
var lastIndex = size(r) - 1;
r[lastIndex] = r[lastIndex] + 0x80;
} else {
var digitCode = s[i] - `0`;
r ~= chr(translateDigitToSevenSegment[digitCode]);
}
}
return r;
}
var standbyAlphanumeric = func() {
return formatFrequency(standbyNode.getValue());
}
var selectedAlphanumeric = func() {
return formatFrequency(selectedNode.getValue());
}
updateActive(0);
]]>
</open>
</nasal>
<event>
<name>rel-dial-0</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/mfr/standby-mhz</property>
<min type="double">108.0</min>
<max type="double">117.95</max>
<wrap type="bool">true</wrap>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<event>
<name>rel-dial-1</name>
<binding>
<command>property-adjust</command>
<property>/input/goflight/mfr/standby-mhz</property>
<factor type="double">0.025</factor>
<min type="double">108.0</min>
<max type="double">117.95</max>
<wrap type="bool">true</wrap>
</binding>
<interpolater>
<entry><ind>0</ind><dep>0</dep></entry>
<entry><ind>1</ind><dep>1</dep></entry>
<entry><ind>2</ind><dep>2</dep></entry>
<entry><ind>3</ind><dep>4</dep></entry>
<entry><ind>4</ind><dep>8</dep></entry>
</interpolater>
</event>
<report>
<report-id type="int">3</report-id>
<watch>/input/goflight/mfr/active</watch>
<!-- we can't watch the /input/goflight/mfr property, because it's an alias
and value changed notifications don't propogate. Bah. -->
<watch>/instrumentation/nav[0]/frequencies/selected-mhz</watch>
<watch>/instrumentation/nav[1]/frequencies/selected-mhz</watch>
<nasal-function>selectedAlphanumeric</nasal-function>
</report>
<report>
<report-id type="int">5</report-id>
<watch>/input/goflight/mfr/active</watch>
<!-- we can't watch the /input/goflight/mfr property, because it's an alias
and value changed notifications don't propogate. Bah. -->
<watch>/instrumentation/nav[0]/frequencies/standby-mhz</watch>
<watch>/instrumentation/nav[1]/frequencies/standby-mhz</watch>
<nasal-function>standbyAlphanumeric</nasal-function>
</report>
<event>
<name>led-misc-1</name>
<setting>
<value>1</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</equals>
</condition>
</setting>
<setting>
<value>0</value>
<condition>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>0</value>
</not-equals>
</condition>
</setting>
</event>
<event>
<name>led-misc-2</name>
<setting>
<value>1</value>
<condition>
<equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</equals>
</condition>
</setting>
<setting>
<value>0</value>
<condition>
<not-equals>
<property>/input/goflight/mfr/active</property>
<value>1</value>
</not-equals>
</condition>
</setting>
</event>
<event>
<name>display-brightness</name>
<setting>
<property>/input/goflight/mfr/brightness</property>
</setting>
</event>
<event>
<desc>Transfer Button</desc>
<name>button-1</name>
<binding>
<command>property-swap</command>
<property>/input/goflight/mfr/standby-mhz</property>
<property>/input/goflight/mfr/selected-mhz</property>
</binding>
</event>
<event>
<desc>Nav 1 Button</desc>
<name>button-2</name>
<binding>
<command>nasal</command>
<script>updateActive(0)</script>
</binding>
</event>
<event>
<desc>Nav 2 Button</desc>
<name>button-3</name>
<binding>
<command>nasal</command>
<script>updateActive(1)</script>
</binding>
</event>
</PropertyList>