176 lines
5.1 KiB
XML
176 lines
5.1 KiB
XML
|
<PropertyList>
|
||
|
|
||
|
<name>GoFlight GF-46</name>
|
||
|
<debug-events type="bool">false</debug-events>
|
||
|
|
||
|
<nasal>
|
||
|
<open>
|
||
|
<![CDATA[
|
||
|
|
||
|
var transponderNode = props.globals.getNode("/instrumentation/transponder/id-code", 1);
|
||
|
var modeNode = props.globals.getNode("/instrumentation/transponder/inputs/knob-mode", 1);
|
||
|
var identNode = props.globals.getNode("/instrumentation/transponder/inputs/ident-btn", 1);
|
||
|
var brightnessNode = props.globals.getNode("/input/goflight/gf46/brightness", 8);
|
||
|
|
||
|
var formatTransponder = func(squawk)
|
||
|
{
|
||
|
var s = sprintf("%04d ", squawk);
|
||
|
return goflight.reverseBytes(goflight.bytesForString(s, 6));
|
||
|
}
|
||
|
|
||
|
var displaySevenSegment = func() {
|
||
|
if (modeNode.getValue() == 0) {
|
||
|
# OFF, blank display
|
||
|
return goflight.bytesForString(" ", 6);
|
||
|
}
|
||
|
return formatTransponder(transponderNode.getValue());
|
||
|
}
|
||
|
|
||
|
var modeNames = ['OFF ', 'STBY', 'TEST', 'XPDR', ' TA ', 'TARA'];
|
||
|
var displayFourteenSegment = func() {
|
||
|
var mode = modeNode.getValue();
|
||
|
return goflight.formatFourteenSegment(modeNames[mode], 4);
|
||
|
}
|
||
|
|
||
|
var powerOfTen = [1, 10, 100, 1000];
|
||
|
var powerOfEight = [1, 8, 64, 512];
|
||
|
|
||
|
# adapted from gui/dialogs/radios.xml
|
||
|
var extractDigit = func(code, index) {
|
||
|
return math.mod(code / powerOfTen[index], 10);
|
||
|
}
|
||
|
|
||
|
var extractOctal = func(code, index) {
|
||
|
return math.mod(code / powerOfEight[index], 8);
|
||
|
}
|
||
|
|
||
|
var adjustIdCode = func(offset) {
|
||
|
var code = transponderNode.getValue();
|
||
|
|
||
|
# convert ID code to decimal
|
||
|
var decCode = 0;
|
||
|
for (var i=0; i<3; i +=1) {
|
||
|
decCode += extractDigit(code, i) * powerOfEight[i];
|
||
|
}
|
||
|
|
||
|
# apply offset and clamp
|
||
|
decCode = math.clamp(decCode + offset, 0, 4095);
|
||
|
|
||
|
# convert back to octal-as-decimal
|
||
|
code = 0;
|
||
|
for (var i=0; i<3; i +=1) {
|
||
|
code += extractOctal(decCode, i) * powerOfTen[i];
|
||
|
}
|
||
|
|
||
|
transponderNode.setIntValue(code);
|
||
|
}
|
||
|
|
||
|
]]>
|
||
|
</open>
|
||
|
</nasal>
|
||
|
|
||
|
|
||
|
<!--
|
||
|
adding item:rel-dial, bits: 0:8, report=1
|
||
|
adding item:rel-dial-1, bits: 8:8, report=1
|
||
|
adding item:button-1, bits: 16:1, report=1
|
||
|
adding item:undefined-0, bits: 17:1, report=1
|
||
|
adding item:undefined-0-1, bits: 18:1, report=1
|
||
|
adding item:undefined-0-2, bits: 19:1, report=1
|
||
|
adding item:undefined-0-3, bits: 20:1, report=1
|
||
|
adding item:undefined-0-4, bits: 21:1, report=1
|
||
|
adding item:undefined-0-5, bits: 22:1, report=1
|
||
|
adding item:undefined-0-6, bits: 23:1, report=1
|
||
|
|
||
|
|
||
|
adding item:undefined-0-5, bits: 22:1, report=1
|
||
|
adding item:undefined-0-6, bits: 23:1, report=1
|
||
|
Unhandled HID alphanumeric usage:54
|
||
|
adding item:unknown, bits: 0:4, report=2
|
||
|
Unhandled HID alphanumeric usage:53
|
||
|
adding item:unknown-1, bits: 4:4, report=2
|
||
|
Unhandled HID alphanumeric usage:69
|
||
|
adding item:unknown-2, bits: 8:1, report=2
|
||
|
adding item:undefined-0-7, bits: 9:1, report=2
|
||
|
adding item:undefined-0-8, bits: 10:1, report=2
|
||
|
adding item:undefined-0-9, bits: 11:1, report=2
|
||
|
adding item:undefined-0-10, bits: 12:1, report=2
|
||
|
adding item:undefined-0-11, bits: 13:1, report=2
|
||
|
adding item:undefined-0-12, bits: 14:1, report=2
|
||
|
adding item:undefined-0-13, bits: 15:1, report=2
|
||
|
adding item:display-data, bits: 0:16, report=3
|
||
|
adding item:display-data-1, bits: 16:16, report=3
|
||
|
adding item:display-data-2, bits: 32:16, report=3
|
||
|
adding item:display-data-3, bits: 48:16, report=3
|
||
|
Unhandled HID alphanumeric usage:54
|
||
|
adding item:unknown-3, bits: 0:4, report=4
|
||
|
Unhandled HID alphanumeric usage:53
|
||
|
adding item:unknown-4, bits: 4:4, report=4
|
||
|
Unhandled HID alphanumeric usage:67
|
||
|
adding item:unknown-5, bits: 8:1, report=4
|
||
|
|
||
|
-->
|
||
|
<event>
|
||
|
<name>rel-dial-0</name>
|
||
|
<binding>
|
||
|
<command>nasal</command>
|
||
|
<script>adjustIdCode(cmdarg().getNode("setting").getValue())</script>
|
||
|
</binding>
|
||
|
|
||
|
<interpolater>
|
||
|
<mirrored type="bool">true</mirrored>
|
||
|
<entry><ind>0</ind><dep>0</dep></entry>
|
||
|
<entry><ind>1</ind><dep>1</dep></entry>
|
||
|
<entry><ind>2</ind><dep>10</dep></entry>
|
||
|
<entry><ind>3</ind><dep>100</dep></entry>
|
||
|
<entry><ind>4</ind><dep>1000</dep></entry>
|
||
|
</interpolater>
|
||
|
</event>
|
||
|
|
||
|
<event>
|
||
|
<name>rel-dial-1</name>
|
||
|
<binding>
|
||
|
<command>property-adjust</command>
|
||
|
<property>/instrumentation/transponder/inputs/knob-mode</property>
|
||
|
<min>0</min>
|
||
|
<max>5</max>
|
||
|
</binding>
|
||
|
</event>
|
||
|
|
||
|
<report>
|
||
|
<report-id type="int">3</report-id>
|
||
|
<watch>/instrumentation/transponder/inputs/knob-mode</watch>
|
||
|
<nasal-function>displayFourteenSegment</nasal-function>
|
||
|
</report>
|
||
|
|
||
|
<report>
|
||
|
<report-id type="int">5</report-id>
|
||
|
<watch>/instrumentation/transponder/id-code</watch>
|
||
|
<watch>/instrumentation/transponder/inputs/knob-mode</watch>
|
||
|
<nasal-function>displaySevenSegment</nasal-function>
|
||
|
</report>
|
||
|
|
||
|
<event>
|
||
|
<name>display-brightness</name>
|
||
|
<setting>
|
||
|
<property>/input/goflight/gf46/brightness</property>
|
||
|
</setting>
|
||
|
</event>
|
||
|
|
||
|
<event>
|
||
|
<desc>Ident</desc>
|
||
|
<name>button-1</name>
|
||
|
<binding>
|
||
|
<command>nasal</command>
|
||
|
<script>identNode.setBoolValue(1);</script>
|
||
|
</binding>
|
||
|
<mod-up>
|
||
|
<binding>
|
||
|
<command>nasal</command>
|
||
|
<script>identNode.setBoolValue(0);</script>
|
||
|
</binding>
|
||
|
</mod-up>
|
||
|
</event>
|
||
|
|
||
|
</PropertyList>
|