Updated descriptor to more Linux friendly 16bit signed for axis
This commit is contained in:
parent
6199c80a0a
commit
915986e152
308
layout.drawio
308
layout.drawio
@ -1,4 +1,4 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.9" pages="4">
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.16 Chrome/132.0.6834.196 Electron/34.2.0 Safari/537.36" version="26.0.16" pages="5">
|
||||
<diagram name="SC" id="1nY57bFw4Lh56mPbXi3G">
|
||||
<mxGraphModel dx="1434" dy="997" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
@ -193,195 +193,389 @@
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="ED" id="xeNRW7ooy2InK-52riux">
|
||||
<mxGraphModel dx="1434" dy="956" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<diagram name="Copy of SC" id="8fwoE9U1Da0tbMgP_bSo">
|
||||
<mxGraphModel dx="2074" dy="1237" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-0" />
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-1" parent="ns4MWv0v55T5SJiDehaR-0" />
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-0" />
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-1" parent="KPQZ-7z9tZGHYBku0gLQ-0" />
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="463" y="480" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="303" y="480" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-4" value="Throttle/Yaw" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-4" value="Throttle/Yaw" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="53" y="630" width="200" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-5" value="Pitch/Roll" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-5" value="Pitch/Roll" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="573" y="630" width="200" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-6" value="Deploy<div>Heatsink</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-6" value="Noice" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="293" y="670" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-7" value="<div style=""><br></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-7" value="<div style=""><font style="color: rgb(255, 255, 255);">L-req</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="293" y="570" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-8" value="Chaff" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-8" value="Decoy" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="453" y="670" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-9" value="" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-9" value="Missile/Gun<div>mode</div><div><span style="color: rgb(109, 135, 100);">Next missile</span></div><div><span style="color: rgb(109, 135, 100);">type</span></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="453" y="570" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-10" value="Flight<div>Assist</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-10" value="<div>Right</div><font style="color: rgb(109, 135, 100);">CPLD</font>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="203" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-11" value="Throttle<div>Hold</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;strokeColor=#FFFFFF;fontColor=#FFFFFF;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-11" value="<div><font style="color: rgb(255, 255, 255);">Left</font></div><font style="color: rgb(109, 135, 100);">Throttle</font><div><font style="color: rgb(109, 135, 100);">Hold</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;strokeColor=#FFFFFF;fontColor=#FFFFFF;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="113" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-12" value="Fire<div>Secondary<br><div><font color="#6d8764">Cycle group</font></div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-12" value="<div>NAV</div><div><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">Q mode</span></div><div><span style="color: rgb(109, 135, 100);">Next mode</span><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));"></span></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="633" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-13" value="Frame<div>Shift</div><div>Drive</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-13" value="SCM<div>Gun mode</div><div><font color="#6d8764">Prev mode</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="543" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-14" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#6D8764;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-14" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#303030;gradientColor=none;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="293" y="780" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-15" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#6D8764;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-15" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="453" y="780" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-16" value="Fire<div>Primary</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-16" value="Ping<div><font color="#6d8764">Target next</font></div><div><font color="#6d8764">hostile</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="697" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-17" value="Boost<div><font color="#6d8764">Brake</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-17" value="Fire<div>Secondary</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="697" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-18" value="<div><font color="#000000">Fn</font></div><div><font color="#76608a">Bootloader</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-18" value="<div><font color="#000000">Fn</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;fontStyle=1" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="48" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-19" value="Up<div><font color="#6d8764">Down</font><br><div><font color="#76608a">Calibrate</font></div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-19" value="Up<div><font color="#6d8764">Down</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="48" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-20" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-20" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="108" y="430" as="sourcePoint" />
|
||||
<mxPoint x="28" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-21" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-21" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="718" y="430" as="sourcePoint" />
|
||||
<mxPoint x="798" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-22" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-22" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="718" y="430" as="sourcePoint" />
|
||||
<mxPoint x="108" y="430" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-23" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-23" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="880" as="sourcePoint" />
|
||||
<mxPoint x="28" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-24" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-24" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="510" as="sourcePoint" />
|
||||
<mxPoint x="28" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-25" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-25" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="510" as="sourcePoint" />
|
||||
<mxPoint x="798" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-26" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-26" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="170" as="sourcePoint" />
|
||||
<mxPoint x="28" y="170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-27" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-27" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="390" as="sourcePoint" />
|
||||
<mxPoint x="28" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-28" value="Flight ready<div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillColor=#76608a;fontColor=#ffffff;strokeColor=#432D57;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-28" value="Reset head tracker<div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="373" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-29" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-29" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="170" as="sourcePoint" />
|
||||
<mxPoint x="28" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-30" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-30" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="170" as="sourcePoint" />
|
||||
<mxPoint x="798" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-31" value="USB-C" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-31" value="USB-C" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="353" y="300" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-32" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-32" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="240" y="170" as="sourcePoint" />
|
||||
<mxPoint x="240" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-33" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-33" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="583" y="170" as="sourcePoint" />
|
||||
<mxPoint x="583" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-34" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-34" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="433" y="910" width="60" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-35" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-35" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="273" y="910" width="55" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-36" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-36" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="313" y="770" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-37" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-37" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="313" y="850" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-38" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-38" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="473" y="770" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-39" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-39" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="353" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-40" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-40" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="273" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-41" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-41" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="433" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-42" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-42" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="513" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-43" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-43" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="473" y="850" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-44" value="<div>HP</div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-44" value="<div>VTOL</div><div>EXT</div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="413" y="470" width="60" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-45" value="<div>Power Engine</div><div>Power Reset</div><div>Power Systems</div><div>Power Weapons</div><div><br></div><div><br></div><div><font color="#6d8764"><br></font><div><font color="#6d8764">Lights On/Off</font></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">&nbsp;</span></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">Open/Close doors</span></div><div><br></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-45" value="<div>Power Engine</div><div>Power Reset</div><div>Power Weapons</div><div>Power Sheilds</div><div>Thrusters On/Off</div><div><br></div><div><font color="#6d8764">Flight ready<br></font><div><font color="#6d8764">Lights On/Off</font></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">&nbsp;</span></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">Open/Close doors</span></div><div><br></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="328" y="910" width="110" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-46" value="<div>Target in sight</div><div>Target closest hostile</div><div>Target next friendly</div><div>Target next hostile</div><div>Clear target</div><div><br></div><div><font color="#6d8764">Camera up</font></div><div><font color="#6d8764">Camera down</font></div><div><font color="#6d8764">Camera left</font></div><div><font color="#6d8764">Camera right<br></font><div><font color="#6d8764">Camera On/Off</font></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-46" value="<div>Target in sight</div><div>Target closest hostile</div><div>Target next friendly</div><div>Target next hostile</div><div>Clear target</div><div><br></div><div><font color="#6d8764">Camera up</font></div><div><font color="#6d8764">Camera down</font></div><div><font color="#6d8764">Camera left</font></div><div><font color="#6d8764">Camera right<br></font><div><font color="#6d8764">Camera On/Off</font></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="493" y="910" width="135" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-47" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxGeometry x="318" y="470" width="30" height="30" as="geometry" />
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-47" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="318" y="495" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxGeometry x="478" y="470" width="30" height="30" as="geometry" />
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="478" y="495" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-49" value="<div>Gear</div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=default;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-49" value="<div>Gear<span style="background-color: transparent; color: light-dark(rgb(109, 135, 100), rgb(109, 135, 100));">&nbsp;</span></div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=default;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="353" y="470" width="67" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-50" value="Right<br><div><font color="#6d8764">Left</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-50" value="Boost<br><div><font color="#6d8764">Brake</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="140" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="ns4MWv0v55T5SJiDehaR-51" value="Ping" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="ns4MWv0v55T5SJiDehaR-1">
|
||||
<mxCell id="KPQZ-7z9tZGHYBku0gLQ-51" value="Fire<div><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">primary</span><div><div>/ QT</div></div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="KPQZ-7z9tZGHYBku0gLQ-1">
|
||||
<mxGeometry x="604" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
<diagram name="ED" id="uRyqbCPVisyCTsGUtqdN">
|
||||
<mxGraphModel dx="2074" dy="1237" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-0" />
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-1" parent="7MdH_5MeTOXURvUWpXqo-0" />
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="463" y="480" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="303" y="480" width="60" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-4" value="Throttle/Yaw" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="53" y="630" width="200" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-5" value="Pitch/Roll" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="573" y="630" width="200" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-6" value="Deploy<div>Heatsink</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="293" y="670" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-7" value="<div style=""><font style="color: rgb(255, 255, 255);">L-req</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="293" y="570" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-8" value="Shaff" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=hatch;fillColor=#8C1C1C;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="453" y="670" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-9" value="-" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="453" y="570" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-10" value="<div>Right</div><font style="color: rgb(109, 135, 100);">Flight assist</font>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="203" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-11" value="<div><font style="color: rgb(255, 255, 255);">Left</font></div><font style="color: rgb(109, 135, 100);">Throttle</font><div><font style="color: rgb(109, 135, 100);">Hold</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;strokeColor=#FFFFFF;fontColor=#FFFFFF;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="113" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-12" value="Frame<div>Shift</div><div>Drive</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="633" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-13" value="HP" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="543" y="470" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-14" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#303030;gradientColor=none;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="293" y="780" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-15" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="453" y="780" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-16" value="Ping<div><font color="#6d8764">Next group</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="697" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-17" value="Fire<div>Secondary</div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="697" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-18" value="<div><font color="#000000">Fn</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;fontStyle=1" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="48" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-19" value="Up<div><font color="#6d8764">Down</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="48" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-20" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="108" y="430" as="sourcePoint" />
|
||||
<mxPoint x="28" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-21" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="718" y="430" as="sourcePoint" />
|
||||
<mxPoint x="798" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-22" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="718" y="430" as="sourcePoint" />
|
||||
<mxPoint x="108" y="430" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-23" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="880" as="sourcePoint" />
|
||||
<mxPoint x="28" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-24" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="510" as="sourcePoint" />
|
||||
<mxPoint x="28" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-25" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="510" as="sourcePoint" />
|
||||
<mxPoint x="798" y="880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-26" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="170" as="sourcePoint" />
|
||||
<mxPoint x="28" y="170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-27" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="390" as="sourcePoint" />
|
||||
<mxPoint x="28" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-28" value="Reset head tracker<div></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="373" y="190" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-29" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="170" as="sourcePoint" />
|
||||
<mxPoint x="28" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-30" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="798" y="170" as="sourcePoint" />
|
||||
<mxPoint x="798" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-31" value="USB-C" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="353" y="300" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-32" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="240" y="170" as="sourcePoint" />
|
||||
<mxPoint x="240" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-33" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="583" y="170" as="sourcePoint" />
|
||||
<mxPoint x="583" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-34" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="433" y="910" width="60" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-35" value="UP:<div>DOWN:</div><div>LEFT:</div><div>RIGHT:</div><div>BUTTON:</div><div><br></div><div><font color="#6d8764">UP:</font><div><font color="#6d8764">DOWN:</font></div><div><font color="#6d8764">LEFT:</font></div><div><font color="#6d8764">RIGHT:</font></div><div><font color="#6d8764">BUTTON:</font></div></div>" style="text;strokeColor=none;align=right;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="273" y="910" width="55" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-36" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="313" y="770" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-37" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="313" y="850" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-38" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="473" y="770" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-39" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="353" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-40" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="273" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-41" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="433" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-42" value="" style="rounded=1;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="513" y="810" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-43" value="" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="473" y="850" width="40" height="20" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-44" value="<div>-</div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="413" y="470" width="60" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-45" value="<div>Power Engine</div><div>Power Reset</div><div>Power Weapons</div><div>Power Sheilds</div><div>Thrusters On/Off</div><div><br></div><div><font color="#6d8764">Flight ready<br></font><div><font color="#6d8764">Lights On/Off</font></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">&nbsp;</span></div><div><span style="color: rgb(109, 135, 100); background-color: transparent;">Open/Close doors</span></div><div><br></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="328" y="910" width="110" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-46" value="<div>UI Up</div><div>UI Down</div><div>UI Left</div><div>UI Right</div><div>UI Select</div><div><br></div><div><font color="#6d8764">Upper panel</font></div><div><font color="#6d8764">Lower panel</font></div><div><font color="#6d8764">Left panel</font></div><div><font color="#6d8764">Right panel<br></font><div><font color="#6d8764">UI Back</font></div></div>" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="493" y="910" width="135" height="160" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-47" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillStyle=auto;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="318" y="495" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="478" y="495" width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-49" value="<div>Gear<span style="background-color: transparent; color: light-dark(rgb(109, 135, 100), rgb(109, 135, 100));">&nbsp;</span></div>" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=default;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="353" y="470" width="67" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-50" value="Boost<br><div><font color="#6d8764">Brake</font></div>" style="whiteSpace=wrap;html=1;aspect=fixed;fillStyle=dots;fillColor=#303030;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="140" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="7MdH_5MeTOXURvUWpXqo-51" value="Fire<div><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">primary</span></div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="7MdH_5MeTOXURvUWpXqo-1">
|
||||
<mxGeometry x="604" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "rp2040"
|
||||
name = "cmdr-joystick-25"
|
||||
version = "0.2.0"
|
||||
edition = "2024"
|
||||
|
||||
@ -9,7 +9,7 @@ cortex-m = "0.7.2"
|
||||
cortex-m-rt = "0.7"
|
||||
cortex-m-rtic = "1.1.4"
|
||||
critical-section = {version = "1.2.0"}
|
||||
defmt = {version = "0.3", optional=true}
|
||||
defmt = "0.3"
|
||||
defmt-rtt = "0.4.0"
|
||||
dht-sensor = "0.2.1"
|
||||
embedded-alloc = "0.5.1"
|
||||
@ -32,31 +32,28 @@ rp2040-hal = {version = "0.11.0", features = ["binary-info", "critical-section-i
|
||||
static_cell = "2.1.0"
|
||||
|
||||
# USB hid dependencies
|
||||
#usbd-human-interface-device = {version = "0.5.1", features = ["defmt"]}
|
||||
usbd-human-interface-device = {version = "0.5.1"}
|
||||
usb-device = "0.3"
|
||||
packed_struct = { version = "0.10", default-features = false }
|
||||
heapless = "0.8"
|
||||
|
||||
# Other dependencies
|
||||
# EEPROM dependencies
|
||||
eeprom24x = "0.7.2"
|
||||
|
||||
# ws2812-pio dependencies
|
||||
ws2812-pio = "0.9.0"
|
||||
dyn-smooth = "0.2.0"
|
||||
libm = "0.2.7"
|
||||
smart-leds = "0.4.0"
|
||||
|
||||
[features]
|
||||
defmt = ["dep:defmt", "usb-device/defmt"]
|
||||
|
||||
# [target.'cfg( target_arch = "arm" )'.dependencies]
|
||||
# embassy-executor = {version = "0.5", features = ["arch-cortex-m", "executor-thread"]}
|
||||
# Analog filter dependencies
|
||||
dyn-smooth = "0.2.0"
|
||||
libm = "0.2.7"
|
||||
|
||||
[lints.clippy]
|
||||
too_long_first_doc_paragraph = "allow"
|
||||
|
||||
[profile.release]
|
||||
codegen-units = 1
|
||||
debug = 2
|
||||
debug = 0
|
||||
debug-assertions = false
|
||||
incremental = false
|
||||
lto = 'fat'
|
||||
@ -64,7 +61,7 @@ opt-level = 3
|
||||
overflow-checks = false
|
||||
|
||||
[[bin]]
|
||||
name = "rp2040"
|
||||
name = "cmdr-joystick-25"
|
||||
test = false
|
||||
bench = false
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//! Project: CMtec CMDR joystick 24
|
||||
//! Date: 2023-08-01
|
||||
//! Date: 2025-03-09
|
||||
//! Author: Christoffer Martinsson
|
||||
//! Email: cm@cmtec.se
|
||||
//! License: Please refer to LICENSE in root directory
|
||||
|
||||
@ -3,63 +3,6 @@
|
||||
//! Author: Christoffer Martinsson
|
||||
//! Email: cm@cmtec.se
|
||||
//! License: Please refer to LICENSE in root directory
|
||||
//
|
||||
// HW Button index map:
|
||||
// ---------------------------------------------------------------
|
||||
// | 0 L| 1 U| 25 U | | 2 | | 26 U | 4 U| 3 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | 5 | 6 | 7 | | 12 | 11 | 10 | |
|
||||
// | |
|
||||
// | | 8 | | 13 | |
|
||||
// | | 9 | | 14 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | 16 | | 21 | |
|
||||
// | | 19 | 15 | 17 | | 24 | 20 | 22 | |
|
||||
// | | 18 | | 23 | |
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// USB HID joystick map :
|
||||
// ---------------------------------------------------------------
|
||||
// | Fn L| B2 U| B26 U| | B3 | | B28 U| B5 U| B4 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | B1 | B6 | B8 | | B13 | B12 | B11 | |
|
||||
// | |
|
||||
// | | B9 | | B14 | |
|
||||
// | | B10 | | B15 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | H1U | | H2U | |
|
||||
// | | H1L | B18 | H1R | | H2L | B19 | H2R | |
|
||||
// | | H1D | | H2D | |
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// USB HID joystick map (Fn):
|
||||
// ---------------------------------------------------------------
|
||||
// | Fn L| B21 U| B27 U| | B3 | | B28 U| B32 U| B22 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | TH | B7 | B16 | | B17 | B24 | B23 | |
|
||||
// | |
|
||||
// | | B29 | | B31 | |
|
||||
// | | B10 | | B15 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | H3U | | H4U | |
|
||||
// | | H3L | B20 | H3R | | H4L | B25 | H4R | |
|
||||
// | | H3D | | H4D | |
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// Config Layer (holding CONFIG button)
|
||||
// ---------------------------------------------------------------
|
||||
// |BOOT L| CAL U| | CONFIG | | - | - |
|
||||
// ---------------------------------------------------------------
|
||||
// | | - | - | - | | - | - | - | |
|
||||
// | |
|
||||
// | | - | | - | |
|
||||
// | | - | | - | |
|
||||
// | -/- -/- |
|
||||
// | | - | | - | |
|
||||
// | | - | - | - | | - | - | - | |
|
||||
// | | - | | - | |
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
#![no_std]
|
||||
#![no_main]
|
||||
|
||||
@ -316,73 +259,146 @@ fn main() -> ! {
|
||||
let mut buttons: [Button; NUMBER_OF_BUTTONS + 2] = [Button::default(); NUMBER_OF_BUTTONS + 2];
|
||||
let mut gimbal_mode: u8;
|
||||
|
||||
// HW Button index map:
|
||||
// ---------------------------------------------------------------
|
||||
// | 0 L| 1 U| 25 U | | 2 | | 26 U | 4 U| 3 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | 5 | 6 | 7 | | 12 | 11 | 10 | |
|
||||
// | |
|
||||
// | | 8 | | 13 | |
|
||||
// | | 9 | | 14 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | 16 | | 21 | |
|
||||
// | | 19 | 15 | 17 | | 24 | 20 | 22 | |
|
||||
// | | 18 | | 23 | |
|
||||
// ---------------------------------------------------------------
|
||||
// Config Layer (holding CONFIG button)
|
||||
// ---------------------------------------------------------------
|
||||
// |BOOT L| CAL U| | CONFIG | | - | - |
|
||||
// ---------------------------------------------------------------
|
||||
// | | - | - | - | | - | - | - | |
|
||||
// | |
|
||||
// | |C M10| | - | |
|
||||
// | |C M7 | | - | |
|
||||
// | -/- -/- |
|
||||
// | | - | | - | |
|
||||
// | | - | - | - | | - |C OK | - | |
|
||||
// | | - | | - | |
|
||||
// ---------------------------------------------------------------
|
||||
pub const CONFIG_BUTTON: usize = 2;
|
||||
pub const BOOT_BUTTON: usize = 0;
|
||||
pub const CAL_BUTTON: usize = 1;
|
||||
pub const CAL_DONE_BUTTON: usize = 20;
|
||||
pub const CAL_M10_GIMBLE_BUTTON: usize = 8;
|
||||
pub const CAL_M7_GIMBLE_BUTTON: usize = 9;
|
||||
// HW Button index map:
|
||||
// ---------------------------------------------------------------
|
||||
// | 0 L| 1 U| 25 U | | 2 | | 26 U | 4 U| 3 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | 5 | 6 | 7 | | 12 | 11 | 10 | |
|
||||
// | |
|
||||
// | | 8 | | 13 | |
|
||||
// | | 9 | | 14 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | 16 | | 21 | |
|
||||
// | | 19 | 15 | 17 | | 24 | 20 | 22 | |
|
||||
// | | 18 | | 23 | |
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// USB HID joystick map :
|
||||
// ---------------------------------------------------------------
|
||||
// | Fn L| B19 U| B7 U| | B32 | | B8 U| B1 U| B2 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | B5 | B14 | B9 | | B10 | B15 | B6 | |
|
||||
// | |
|
||||
// | | B13 | | B17 | |
|
||||
// | | B16 | | B18 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | H1U | | H2U | |
|
||||
// | | H1L | B11 | H1R | | H2L | B12 | H2R | |
|
||||
// | | H1D | | H2D | |
|
||||
// ---------------------------------------------------------------
|
||||
//
|
||||
// USB HID joystick map (Fn):
|
||||
// ---------------------------------------------------------------
|
||||
// | Fn L| B21 U| B27 U| | B32 | | B8 U| B3 U| B4 L|
|
||||
// ---------------------------------------------------------------
|
||||
// | | TH | B22 | B26 | | B28 | B24 | B23 | |
|
||||
// | |
|
||||
// | | B29 | | B31 | |
|
||||
// | | B16 | | B18 | |
|
||||
// | X1/Y1 X2/Y2 |
|
||||
// | | H3U | | H4U | |
|
||||
// | | H3L | B20 | H3R | | H4L | B25 | H4R | |
|
||||
// | | H3D | | H4D | |
|
||||
// ---------------------------------------------------------------
|
||||
// Special button functions
|
||||
// Throttle hold:
|
||||
pub const TH_BUTTON: u8 = 5;
|
||||
pub const TH_BUTTON_TRIGGER: u8 = 0;
|
||||
pub const TH_BUTTON: usize = 5;
|
||||
pub const TH_BUTTON_TRIGGER: usize = 0;
|
||||
|
||||
// Set up usb button layout (button 0 to 15, 20, 25 and 26)
|
||||
buttons[0].usb_button = 0; // Fn. Setting to 0 to disable USB button generation
|
||||
buttons[1].usb_button = 2;
|
||||
buttons[1].usb_button = 19;
|
||||
buttons[1].usb_button_sec_enable = true;
|
||||
buttons[1].usb_button_sec = 21;
|
||||
buttons[1].usb_button_sec_trigger_index = 0;
|
||||
buttons[2].usb_button = 3; // Button used as global config. Do not define secondary USB button!
|
||||
buttons[3].usb_button = 4;
|
||||
buttons[2].usb_button = 32; // Button used as global config. Do not define secondary USB button!
|
||||
buttons[3].usb_button = 2;
|
||||
buttons[3].usb_button_sec_enable = true;
|
||||
buttons[3].usb_button_sec = 22;
|
||||
buttons[3].usb_button_sec = 4;
|
||||
buttons[3].usb_button_sec_trigger_index = 0;
|
||||
buttons[4].usb_button = 5;
|
||||
buttons[4].usb_button = 1;
|
||||
buttons[4].usb_button_sec_enable = true;
|
||||
buttons[4].usb_button_sec = 32;
|
||||
buttons[4].usb_button_sec = 3;
|
||||
buttons[4].usb_button_sec_trigger_index = 0;
|
||||
buttons[5].usb_button = 1;
|
||||
buttons[5].usb_button = 5;
|
||||
buttons[5].usb_button_sec_enable = true; // Set TH_BUTTON to inhibit button press on throttle hold
|
||||
buttons[5].usb_button_sec = 0; // Setting to 0 to disable USB buttton generation
|
||||
buttons[5].usb_button_sec_trigger_index = 0; // Set same as TH_BUTTON_TRIGGER
|
||||
buttons[6].usb_button = 6;
|
||||
buttons[6].usb_button = 14;
|
||||
buttons[6].usb_button_sec_enable = true;
|
||||
buttons[6].usb_button_sec = 7;
|
||||
buttons[6].usb_button_sec = 22;
|
||||
buttons[6].usb_button_sec_trigger_index = 0;
|
||||
buttons[7].usb_button = 8;
|
||||
buttons[7].usb_button = 9;
|
||||
buttons[7].usb_button_sec_enable = true;
|
||||
buttons[7].usb_button_sec = 16;
|
||||
buttons[7].usb_button_sec = 26;
|
||||
buttons[7].usb_button_sec_trigger_index = 0;
|
||||
buttons[8].usb_button = 9;
|
||||
buttons[8].usb_button = 13;
|
||||
buttons[8].usb_button_sec_enable = true;
|
||||
buttons[8].usb_button_sec = 29;
|
||||
buttons[8].usb_button_sec_trigger_index = 0;
|
||||
buttons[9].usb_button = 10;
|
||||
buttons[10].usb_button = 11;
|
||||
buttons[9].usb_button = 16;
|
||||
buttons[10].usb_button = 6;
|
||||
buttons[10].usb_button_sec_enable = true;
|
||||
buttons[10].usb_button_sec = 23;
|
||||
buttons[10].usb_button_sec_trigger_index = 0;
|
||||
buttons[11].usb_button = 12;
|
||||
buttons[11].usb_button = 15;
|
||||
buttons[11].usb_button_sec_enable = true;
|
||||
buttons[11].usb_button_sec = 24;
|
||||
buttons[11].usb_button_sec_trigger_index = 0;
|
||||
buttons[12].usb_button = 13;
|
||||
buttons[12].usb_button = 10;
|
||||
buttons[12].usb_button_sec_enable = true;
|
||||
buttons[12].usb_button_sec = 17;
|
||||
buttons[12].usb_button_sec = 28;
|
||||
buttons[12].usb_button_sec_trigger_index = 0;
|
||||
buttons[13].usb_button = 14;
|
||||
buttons[13].usb_button = 17;
|
||||
buttons[13].usb_button_sec_enable = true;
|
||||
buttons[13].usb_button_sec = 31;
|
||||
buttons[13].usb_button_sec_trigger_index = 0;
|
||||
buttons[14].usb_button = 15;
|
||||
buttons[15].usb_button = 18;
|
||||
buttons[14].usb_button = 18;
|
||||
buttons[15].usb_button = 11;
|
||||
buttons[15].usb_button_sec_enable = true;
|
||||
buttons[15].usb_button_sec = 20;
|
||||
buttons[15].usb_button_sec_trigger_index = 0;
|
||||
buttons[20].usb_button = 19;
|
||||
buttons[20].usb_button = 12;
|
||||
buttons[20].usb_button_sec_enable = true;
|
||||
buttons[20].usb_button_sec = 25;
|
||||
buttons[20].usb_button_sec_trigger_index = 0;
|
||||
buttons[25].usb_button = 26;
|
||||
buttons[25].usb_button = 7;
|
||||
buttons[25].usb_button_sec_enable = true;
|
||||
buttons[25].usb_button_sec = 27;
|
||||
buttons[25].usb_button_sec_trigger_index = 0;
|
||||
buttons[26].usb_button = 28;
|
||||
buttons[26].usb_button = 8;
|
||||
|
||||
// Table for gimbal expo curve lookup insded of doing floating point math for every analog read
|
||||
let expo_lut: [u16; AXIS_MAX as usize + 1] = generate_expo_lut(0.3);
|
||||
@ -437,8 +453,9 @@ fn main() -> ! {
|
||||
}
|
||||
|
||||
if scan_count_down.wait().is_ok() {
|
||||
// Scan button matrix
|
||||
button_matrix.scan_matrix(&mut delay);
|
||||
|
||||
// Read ADC values
|
||||
let mut left_x: u16 = adc.read(&mut adc_pin_left_x).unwrap();
|
||||
let mut left_y: u16 = adc.read(&mut adc_pin_left_y).unwrap();
|
||||
let mut right_x: u16 = adc.read(&mut adc_pin_right_x).unwrap();
|
||||
@ -453,7 +470,7 @@ fn main() -> ! {
|
||||
left_y = AXIS_MAX - left_y;
|
||||
right_x = AXIS_MAX - right_x;
|
||||
}
|
||||
|
||||
// Process anlog filter
|
||||
smoother[GIMBAL_AXIS_LEFT_X].tick(left_x as i32);
|
||||
smoother[GIMBAL_AXIS_LEFT_Y].tick(left_y as i32);
|
||||
smoother[GIMBAL_AXIS_RIGHT_X].tick(right_x as i32);
|
||||
@ -480,7 +497,7 @@ fn main() -> ! {
|
||||
buttons[26].pressed = right_extra_button.is_low().unwrap();
|
||||
|
||||
// Secondary way to enter bootloader (pressing all left hands buttons except the hat
|
||||
if buttons[0].pressed && buttons[2].pressed {
|
||||
if buttons[BOOT_BUTTON].pressed && buttons[CONFIG_BUTTON].pressed {
|
||||
status_led.update(StatusMode::Bootloader);
|
||||
let gpio_activity_pin_mask: u32 = 0;
|
||||
let disable_interface_mask: u32 = 0;
|
||||
@ -490,12 +507,9 @@ fn main() -> ! {
|
||||
);
|
||||
}
|
||||
|
||||
// // ON/OFF switch for Throttle hold mode
|
||||
throttle_hold_enable = axis[GIMBAL_AXIS_LEFT_Y].hold != AXIS_CENTER;
|
||||
|
||||
// Calibration of center position (pressing all right hands buttons except
|
||||
// the hat switch)
|
||||
if buttons[1].pressed && buttons[2].pressed {
|
||||
if buttons[CAL_BUTTON].pressed && buttons[CONFIG_BUTTON].pressed {
|
||||
for (index, item) in axis.iter_mut().enumerate() {
|
||||
item.center = smoother[index].value() as u16;
|
||||
item.min = item.center;
|
||||
@ -515,14 +529,14 @@ fn main() -> ! {
|
||||
}
|
||||
}
|
||||
|
||||
if calibration_active && buttons[8].pressed {
|
||||
if calibration_active && buttons[CAL_M10_GIMBLE_BUTTON].pressed {
|
||||
gimbal_mode = GIMBAL_MODE_M10;
|
||||
for (index, item) in axis.iter_mut().enumerate() {
|
||||
item.center = smoother[index].value() as u16;
|
||||
item.min = item.center;
|
||||
item.max = item.center;
|
||||
}
|
||||
} else if calibration_active && buttons[9].pressed {
|
||||
} else if calibration_active && buttons[CAL_M7_GIMBLE_BUTTON].pressed {
|
||||
gimbal_mode = GIMBAL_MODE_M7;
|
||||
for (index, item) in axis.iter_mut().enumerate() {
|
||||
item.center = smoother[index].value() as u16;
|
||||
@ -531,7 +545,7 @@ fn main() -> ! {
|
||||
}
|
||||
}
|
||||
// Save calibration data to eeprom (pressing right hat switch)
|
||||
else if calibration_active && buttons[20].pressed {
|
||||
else if calibration_active && buttons[CAL_DONE_BUTTON].pressed {
|
||||
let mut eeprom_data: [u8; 25] = [0; 25];
|
||||
for (index, item) in axis.iter_mut().enumerate() {
|
||||
eeprom_data[index * 6] = item.min as u8;
|
||||
@ -546,6 +560,9 @@ fn main() -> ! {
|
||||
calibration_active = false;
|
||||
}
|
||||
|
||||
// // ON/OFF switch for Throttle hold mode
|
||||
throttle_hold_enable = axis[GIMBAL_AXIS_LEFT_Y].hold != AXIS_CENTER;
|
||||
|
||||
// Process axis values
|
||||
for (index, item) in axis.iter_mut().enumerate() {
|
||||
item.value = calculate_axis_value(
|
||||
@ -608,7 +625,7 @@ fn main() -> ! {
|
||||
// Generate led activity when a button is pressed
|
||||
let mut th_trigger_pressed: bool = false;
|
||||
for (index, key) in buttons.iter_mut().enumerate() {
|
||||
if key.pressed && index == TH_BUTTON_TRIGGER.into() {
|
||||
if key.pressed && index == TH_BUTTON_TRIGGER {
|
||||
th_trigger_pressed = true;
|
||||
}
|
||||
}
|
||||
@ -621,7 +638,7 @@ fn main() -> ! {
|
||||
// Set throttle_hold_value
|
||||
if key.pressed != key.previous_pressed
|
||||
&& key.pressed
|
||||
&& index == TH_BUTTON.into()
|
||||
&& index == TH_BUTTON
|
||||
&& th_trigger_pressed
|
||||
&& unprocessed_value != AXIS_CENTER
|
||||
{
|
||||
@ -629,7 +646,7 @@ fn main() -> ! {
|
||||
axis[GIMBAL_AXIS_LEFT_Y].hold_pending = true;
|
||||
} else if key.pressed != key.previous_pressed
|
||||
&& key.pressed
|
||||
&& index == TH_BUTTON.into()
|
||||
&& index == TH_BUTTON
|
||||
&& th_trigger_pressed
|
||||
&& unprocessed_value == AXIS_CENTER
|
||||
{
|
||||
@ -709,12 +726,10 @@ fn get_joystick_report(
|
||||
matrix_keys: &mut [Button; NUMBER_OF_BUTTONS + 2],
|
||||
axis: &mut [GimbalAxis; 4],
|
||||
) -> JoystickReport {
|
||||
let x: u16 = axis[GIMBAL_AXIS_LEFT_X].value;
|
||||
let y: u16 = AXIS_MAX - axis[GIMBAL_AXIS_LEFT_Y].value;
|
||||
let z: u16 = axis[GIMBAL_AXIS_RIGHT_X].value;
|
||||
let rx: u16 = AXIS_MAX - axis[GIMBAL_AXIS_RIGHT_Y].value;
|
||||
let ry: u16 = AXIS_CENTER;
|
||||
let rz: u16 = AXIS_CENTER;
|
||||
let x: i16 = axis_12bit_to_i16(axis[GIMBAL_AXIS_LEFT_X].value);
|
||||
let y: i16 = axis_12bit_to_i16(AXIS_MAX - axis[GIMBAL_AXIS_LEFT_Y].value);
|
||||
let z: i16 = axis_12bit_to_i16(axis[GIMBAL_AXIS_RIGHT_X].value);
|
||||
let rx: i16 = axis_12bit_to_i16(AXIS_MAX - axis[GIMBAL_AXIS_RIGHT_Y].value);
|
||||
let mut hat1: u8 = 0xf;
|
||||
let mut hat2: u8 = 0xf;
|
||||
let mut hat3: u8 = 0xf;
|
||||
@ -849,8 +864,6 @@ fn get_joystick_report(
|
||||
y,
|
||||
z,
|
||||
rx,
|
||||
ry,
|
||||
rz,
|
||||
hat1,
|
||||
hat2,
|
||||
hat3,
|
||||
@ -868,7 +881,7 @@ fn get_joystick_report(
|
||||
/// 0 = not pressed
|
||||
/// 1 = pressed
|
||||
fn format_hat_value(input: u8) -> (u8, u8) {
|
||||
const HAT_CENTER: u8 = 0xf;
|
||||
const HAT_CENTER: u8 = 8; //8 or 15 (OS-dependent; usually 8)
|
||||
const HAT_UP: u8 = 0;
|
||||
const HAT_UP_RIGHT: u8 = 1;
|
||||
const HAT_RIGHT: u8 = 2;
|
||||
@ -1001,3 +1014,17 @@ fn generate_expo_lut(expo: f32) -> [u16; AXIS_MAX as usize + 1] {
|
||||
}
|
||||
lut
|
||||
}
|
||||
|
||||
/// Convert 12bit unsigned values to 16bit signed
|
||||
///
|
||||
/// # Arguments
|
||||
/// * `val` - 12bit unsigned
|
||||
fn axis_12bit_to_i16(val: u16) -> i16 {
|
||||
assert!(val <= 0x0FFF); // Ensure it's 12-bit
|
||||
|
||||
// Map 0..4095 → -32768..32767 using integer math
|
||||
// Formula: ((val * 65535) / 4095) - 32768
|
||||
let scaled = ((val as u32 * 65535) / 4095) as i32 - 32768;
|
||||
|
||||
scaled as i16
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//! Project: CMtec CMDR joystick 24
|
||||
//! Date: 2023-08-01
|
||||
//! Date: 2025-03-09
|
||||
//! Author: Christoffer Martinsson
|
||||
//! Email: cm@cmtec.se
|
||||
//! License: Please refer to LICENSE in root directory
|
||||
|
||||
@ -11,14 +11,6 @@ use usb_device::bus::UsbBus;
|
||||
use usb_device::class_prelude::UsbBusAllocator;
|
||||
use usbd_human_interface_device::usb_class::prelude::*;
|
||||
|
||||
#[cfg(feature = "defmt")]
|
||||
macro_rules! unwrap {
|
||||
($($x:tt)*) => {
|
||||
::defmt::unwrap!($($x)*)
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "defmt"))]
|
||||
macro_rules! unwrap {
|
||||
($arg:expr) => {
|
||||
match $crate::usb_joystick_device::Try::into_result($arg) {
|
||||
@ -71,60 +63,55 @@ impl<T, E> Try for Result<T, E> {
|
||||
// Updated to 6x 12bit axis, 32x buttons and 4x hat switches
|
||||
#[rustfmt::skip]
|
||||
pub const JOYSTICK_DESCRIPTOR: &[u8] = &[
|
||||
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||
0x09, 0x04, // Usage (Joystick)
|
||||
0xa1, 0x01, // Collection (Application)
|
||||
0x09, 0x01, // Usage Page (Pointer)
|
||||
0xa1, 0x00, // Collection (Physical)
|
||||
0x09, 0x30, // Usage (X)
|
||||
0x09, 0x31, // Usage (Y)
|
||||
0x09, 0x32, // Usage (Z)
|
||||
0x09, 0x33, // Usage (RX)
|
||||
0x09, 0x34, // Usage (RY)
|
||||
0x09, 0x35, // Usage (RZ)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x26, 0xFF, 0x0F, // Logical Maximum (4095)
|
||||
0x75, 0x0C, // Report Size (12)
|
||||
0x95, 0x06, // Report count (6)
|
||||
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||
0xc0, // End Collection
|
||||
0x05, 0x09, // Usage Page (Button)
|
||||
0x19, 0x01, // Usage Minimum (1)
|
||||
0x29, 0x20, // Usage Maximum (32)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x25, 0x01, // Logical Maximum (1)
|
||||
0x75, 0x01, // Report Size (1)
|
||||
0x95, 0x20, // Report Count (32)
|
||||
0x81, 0x02, // Input (Data, Variable, Absolute)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x25, 0x07, // Logical Maximum (7)
|
||||
0x35, 0x00, // Physical Minimum (0)
|
||||
0x46, 0x3B, 0x01, // Physical Maximum (315)
|
||||
0x75, 0x04, // Report Size (4)
|
||||
0x95, 0x04, // Report Count (4)
|
||||
0x65, 0x14, // Unit (20)
|
||||
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||
0x09, 0x39, // Usage (Hat switch)
|
||||
0x09, 0x39, // Usage (Hat switch)
|
||||
0x09, 0x39, // Usage (Hat switch)
|
||||
0x09, 0x39, // Usage (Hat switch)
|
||||
0x81, 0x42, // Input (variable,absolute,null_state)
|
||||
0xc0, // End Collection
|
||||
0x05, 0x01, // Usage Page (Generic Desktop)
|
||||
0x09, 0x04, // Usage (Joystick)
|
||||
0xA1, 0x01, // Collection (Application)
|
||||
// 4 signed 16-bit axes: X, Y, Z, Rx
|
||||
0x09, 0x30, // Usage (X)
|
||||
0x09, 0x31, // Usage (Y)
|
||||
0x09, 0x32, // Usage (Z)
|
||||
0x09, 0x33, // Usage (Rx)
|
||||
0x16, 0x00, 0x80,// Logical Minimum (-32768)
|
||||
0x26, 0xFF, 0x7F,// Logical Maximum (32767)
|
||||
0x75, 0x10, // Report Size (16)
|
||||
0x95, 0x04, // Report Count (4)
|
||||
0x81, 0x02, // Input (Data,Var,Abs)
|
||||
// 4 Hat Switches (4-bit)
|
||||
0x09, 0x39, // Usage (Hat switch)
|
||||
0x09, 0x39,
|
||||
0x09, 0x39,
|
||||
0x09, 0x39,
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x25, 0x07, // Logical Maximum (7)
|
||||
0x35, 0x00, // Physical Minimum (0)
|
||||
0x46, 0x3B, 0x01,// Physical Maximum (315)
|
||||
0x65, 0x14, // Unit (Degrees)
|
||||
0x75, 0x04, // Report Size (4)
|
||||
0x95, 0x04, // Report Count (4)
|
||||
0x81, 0x02, // Input (Data,Var,Abs)
|
||||
// 32 Buttons (1-bit each)
|
||||
0x05, 0x09, // Usage Page (Button)
|
||||
0x19, 0x01, // Usage Minimum (1)
|
||||
0x29, 0x20, // Usage Maximum (32)
|
||||
0x15, 0x00, // Logical Minimum (0)
|
||||
0x25, 0x01, // Logical Maximum (1)
|
||||
0x75, 0x01, // Report Size (1)
|
||||
0x95, 0x20, // Report Count (32)
|
||||
0x81, 0x02, // Input (Data,Var,Abs)
|
||||
0xC0 // End Collection
|
||||
];
|
||||
|
||||
#[derive(Clone, Copy, Debug, Eq, PartialEq, Default)]
|
||||
pub struct JoystickReport {
|
||||
pub x: u16, // 12bit
|
||||
pub y: u16, // 12bit
|
||||
pub z: u16, // 12bit
|
||||
pub rx: u16, // 12bit
|
||||
pub ry: u16, // 12bit
|
||||
pub rz: u16, // 12bit
|
||||
pub buttons: u32, // 32bit
|
||||
pub x: i16, // 16bit
|
||||
pub y: i16, // 16bit
|
||||
pub z: i16, // 16bit
|
||||
pub rx: i16, // 16bit
|
||||
pub hat1: u8, // 4bit
|
||||
pub hat2: u8, // 4bit
|
||||
pub hat3: u8, // 4bit
|
||||
pub hat4: u8, // 4bit
|
||||
pub buttons: u32, // 32bit
|
||||
}
|
||||
|
||||
pub struct Joystick<'a, B: UsbBus> {
|
||||
@ -133,24 +120,23 @@ pub struct Joystick<'a, B: UsbBus> {
|
||||
|
||||
impl<B: UsbBus> Joystick<'_, B> {
|
||||
pub fn write_report(&mut self, report: &JoystickReport) -> Result<(), UsbHidError> {
|
||||
let mut data: [u8; 15] = [0; 15];
|
||||
let mut data: [u8; 14] = [0; 14];
|
||||
|
||||
// Did not make the packed struct work, so doing it manually
|
||||
data[0] = report.x as u8;
|
||||
data[1] = ((report.x >> 8) as u8) | ((report.y << 4) as u8);
|
||||
data[2] = (report.y >> 4) as u8;
|
||||
data[3] = report.z as u8;
|
||||
data[4] = ((report.z >> 8) as u8) | ((report.rx << 4) as u8);
|
||||
data[5] = (report.rx >> 4) as u8;
|
||||
data[6] = report.ry as u8;
|
||||
data[7] = ((report.ry >> 8) as u8) | ((report.rz << 4) as u8);
|
||||
data[8] = (report.rz >> 4) as u8;
|
||||
data[9] = report.buttons as u8;
|
||||
data[10] = (report.buttons >> 8) as u8;
|
||||
data[11] = (report.buttons >> 16) as u8;
|
||||
data[12] = (report.buttons >> 24) as u8;
|
||||
data[13] = (report.hat1) | (report.hat2 << 4);
|
||||
data[14] = (report.hat3) | (report.hat4 << 4);
|
||||
data[1] = (report.x >> 8) as u8;
|
||||
data[2] = report.y as u8;
|
||||
data[3] = (report.y >> 8) as u8;
|
||||
data[4] = report.z as u8;
|
||||
data[5] = (report.z >> 8) as u8;
|
||||
data[6] = report.rx as u8;
|
||||
data[7] = (report.rx >> 8) as u8;
|
||||
data[8] = (report.hat3) | (report.hat4 << 4);
|
||||
data[9] = (report.hat1) | (report.hat2 << 4);
|
||||
data[10] = report.buttons as u8;
|
||||
data[11] = (report.buttons >> 8) as u8;
|
||||
data[12] = (report.buttons >> 16) as u8;
|
||||
data[13] = (report.buttons >> 24) as u8;
|
||||
|
||||
self.interface
|
||||
.write_report(&data)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user