Fixed Python Interface

This commit is contained in:
AlexanderHD27
2025-01-07 17:10:28 +01:00
parent 1f5148dcdd
commit 2a038367a8
36 changed files with 404 additions and 237 deletions

BIN
i2c-hub/asd Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.3 Chrome/130.0.6723.137 Electron/33.2.1 Safari/537.36" version="26.0.3"> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.4 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.4">
<diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg"> <diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg">
<mxGraphModel dx="2390" dy="1397" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <mxGraphModel dx="797" dy="483" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
@@ -530,7 +530,7 @@
<mxGeometry x="58.58" y="1386.41" width="79.74" height="30" as="geometry" /> <mxGeometry x="58.58" y="1386.41" width="79.74" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-162" value="Every One" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-162" value="Every One" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1">
<mxGeometry x="-21.55" y="546.28" width="240.01" height="30" as="geometry" /> <mxGeometry x="-42.32" y="525.51" width="281.55" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-163" value="Data" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-163" value="Data" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1720.98" y="170" width="240" height="40" as="geometry" /> <mxGeometry x="1720.98" y="170" width="240" height="40" as="geometry" />
@@ -575,19 +575,19 @@
<mxGeometry x="2240" y="230" width="40" height="10" as="geometry" /> <mxGeometry x="2240" y="230" width="40" height="10" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-182" value="ERROR" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-182" value="ERROR" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.44999999999999" y="440" width="79.5" height="40" as="geometry" /> <mxGeometry x="119.99999999999999" y="400" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-183" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-183" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="197.56" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="195.11" y="400" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-184" value="Error" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-184" value="Error" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.45" y="440" width="81" height="40" as="geometry" /> <mxGeometry x="239" y="400" width="81" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-185" value="Error Code" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-185" value="Error Code" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="460" width="119.43" height="20" as="geometry" /> <mxGeometry x="317.55" y="420" width="119.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-186" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-186" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="319.42999999999995" y="440" width="120" height="20" as="geometry" /> <mxGeometry x="316.97999999999996" y="400" width="120" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-187" value="00 Transmission Failed (Invalid CRC)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-187" value="00 Transmission Failed (Invalid CRC)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="480" y="420" width="240" height="80" as="geometry" /> <mxGeometry x="480" y="420" width="240" height="80" as="geometry" />
@@ -742,19 +742,19 @@
<mxGeometry x="1540" y="760" width="80" height="40" as="geometry" /> <mxGeometry x="1540" y="760" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-232" value="&lt;b&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;GoRPC Ctrl Protocol&lt;/font&gt;&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-232" value="&lt;b&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;GoRPC Ctrl Protocol&lt;/font&gt;&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1200.51" y="1000" width="600" height="40" as="geometry" /> <mxGeometry x="1200.14" y="920" width="600" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-233" value="Msg Type" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-233" value="Msg Type" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1200.85" y="1100" width="79.66" height="20" as="geometry" /> <mxGeometry x="1200.48" y="1020" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-234" value="Data (max 255b )" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-234" value="Data (max 255b )" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1361.86" y="1101" width="439.02" height="20" as="geometry" /> <mxGeometry x="1361.49" y="1021" width="439.02" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-235" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-235" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1200.85" y="1080" width="79.66" height="20" as="geometry" /> <mxGeometry x="1200.48" y="1000" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-236" value="0-255" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-236" value="0-255" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1360.8799999999999" y="1081" width="440" height="20" as="geometry" /> <mxGeometry x="1360.51" y="1001" width="440" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-237" value="TX Package" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-237" value="TX Package" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1120.51" y="1160" width="80" height="21" as="geometry" /> <mxGeometry x="1120.51" y="1160" width="80" height="21" as="geometry" />
@@ -871,7 +871,7 @@
<mxGeometry x="1359.2199999999998" y="1142" width="79.66" height="20" as="geometry" /> <mxGeometry x="1359.2199999999998" y="1142" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-322" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-322" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1280.6" y="1100" width="80.95" height="20" as="geometry" /> <mxGeometry x="1280.23" y="1020" width="80.95" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-323" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-323" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1281.79" y="1161" width="80.95" height="20" as="geometry" /> <mxGeometry x="1281.79" y="1161" width="80.95" height="20" as="geometry" />
@@ -913,10 +913,10 @@
<mxGeometry x="1201.4800000000002" y="1341" width="79.66" height="20" as="geometry" /> <mxGeometry x="1201.4800000000002" y="1341" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-336" value="Counted to sizes" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-336" value="Counted to sizes" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1199.9" y="1060" width="600.61" height="20" as="geometry" /> <mxGeometry x="1199.5300000000002" y="980" width="600.61" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-337" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-337" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1280.1699999999998" y="1081" width="79.66" height="20" as="geometry" /> <mxGeometry x="1279.8" y="1001" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="weFQkCekfF49Ojb9-c9R-338" target="weFQkCekfF49Ojb9-c9R-344" edge="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="weFQkCekfF49Ojb9-c9R-338" target="weFQkCekfF49Ojb9-c9R-344" edge="1">
<mxGeometry relative="1" as="geometry" /> <mxGeometry relative="1" as="geometry" />
@@ -1531,21 +1531,6 @@
<mxCell id="XcvvJTe7fp8kAcVMuZUQ-18" value="&lt;b&gt;RX Handler&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fillColor=none;" parent="1" vertex="1"> <mxCell id="XcvvJTe7fp8kAcVMuZUQ-18" value="&lt;b&gt;RX Handler&lt;/b&gt;" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;labelPosition=center;verticalLabelPosition=top;align=center;verticalAlign=bottom;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="4350" y="1801" width="200" height="247" as="geometry" /> <mxGeometry x="4350" y="1801" width="200" height="247" as="geometry" />
</mxCell> </mxCell>
<mxCell id="XcvvJTe7fp8kAcVMuZUQ-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="XcvvJTe7fp8kAcVMuZUQ-48" target="weFQkCekfF49Ojb9-c9R-485" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="4510" y="2140" />
<mxPoint x="4400" y="2140" />
<mxPoint x="4400" y="2235" />
</Array>
<mxPoint x="4360" y="2172.499999999999" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="XcvvJTe7fp8kAcVMuZUQ-28" value="SET" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="XcvvJTe7fp8kAcVMuZUQ-27" vertex="1" connectable="0">
<mxGeometry x="0.6182" y="-1" relative="1" as="geometry">
<mxPoint x="223" y="5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XcvvJTe7fp8kAcVMuZUQ-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="XcvvJTe7fp8kAcVMuZUQ-30" target="XcvvJTe7fp8kAcVMuZUQ-46" edge="1"> <mxCell id="XcvvJTe7fp8kAcVMuZUQ-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="XcvvJTe7fp8kAcVMuZUQ-30" target="XcvvJTe7fp8kAcVMuZUQ-46" edge="1">
<mxGeometry relative="1" as="geometry" /> <mxGeometry relative="1" as="geometry" />
</mxCell> </mxCell>
@@ -1614,6 +1599,60 @@
<mxPoint x="3988.8199999999997" y="1700.5" as="targetPoint" /> <mxPoint x="3988.8199999999997" y="1700.5" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="JG_RBEpKgD0n8DC-nJ9m-1" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;fillColor=#2D9C5E;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;shape=mxgraph.gcp2.check" parent="1" vertex="1">
<mxGeometry x="1920" y="528" width="40" height="32" as="geometry" />
</mxCell>
<mxCell id="JG_RBEpKgD0n8DC-nJ9m-2" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;fillColor=#2D9C5E;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;shape=mxgraph.gcp2.check" parent="1" vertex="1">
<mxGeometry x="1893.71" y="720" width="40" height="32" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-1" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1119.53" y="1119" width="80" height="21" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-2" value="0xcc" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1199.53" y="1119.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-3" value="size" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1279.56" y="1119.5" width="80.95" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-4" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1279.9700000000003" y="1098.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-5" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1199.5300000000002" y="1099" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-6" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="120.27999999999999" y="440" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-7" value="0xc" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="202.22" y="440" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-8" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="240.64999999999998" y="440" width="81" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-9" value="Info Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1121.47" y="1078" width="80" height="21" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-10" value="0xcd" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1201.47" y="1078.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-11" value="size" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1281.5" y="1078.5" width="80.95" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-12" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1281.9100000000003" y="1057.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-13" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="1201.4700000000003" y="1058" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-14" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="120.27999999999997" y="480" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-15" value="0xc" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="199.5" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-16" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="240.64999999999998" y="480" width="81" height="40" as="geometry" />
</mxCell>
</root> </root>
</mxGraphModel> </mxGraphModel>
</diagram> </diagram>

View File

@@ -1,6 +1,6 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.3 Chrome/130.0.6723.137 Electron/33.2.1 Safari/537.36" version="26.0.3"> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.4 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="26.0.4">
<diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg"> <diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg">
<mxGraphModel dx="1195" dy="725" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <mxGraphModel dx="819" dy="497" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
@@ -155,28 +155,28 @@
<mxGeometry x="243.45" y="520" width="81" height="40" as="geometry" /> <mxGeometry x="243.45" y="520" width="81" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-19" value="0x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-19" value="0x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="202.45" y="720" width="40" height="40" as="geometry" /> <mxGeometry x="202.45" y="840" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-20" value="0x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-20" value="0x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="202.45" y="760" width="40" height="40" as="geometry" /> <mxGeometry x="202.45" y="880" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-22" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-22" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.44999999999999" y="720" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.44999999999999" y="840" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-23" value="Home" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-23" value="Home" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.01999999999998" y="720" width="81.43" height="40" as="geometry" /> <mxGeometry x="241.01999999999998" y="840" width="81.43" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-24" value="Corner: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-24" value="Corner: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="322.45" y="740" width="82" height="20" as="geometry" /> <mxGeometry x="322.45" y="860" width="82" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-25" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-25" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="321.02" y="720" width="80" height="20" as="geometry" /> <mxGeometry x="321.02" y="840" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-26" value="Home" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-26" value="Home" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="760" width="81.43" height="40" as="geometry" /> <mxGeometry x="242.45" y="880" width="81.43" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-27" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-27" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="123.94999999999999" y="760" width="79.5" height="40" as="geometry" /> <mxGeometry x="123.94999999999999" y="880" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-28" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-28" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="520" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.94999999999999" y="520" width="79.5" height="40" as="geometry" />
@@ -185,181 +185,181 @@
<mxGeometry x="122.44999999999999" y="560" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.44999999999999" y="560" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-31" value="X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-31" value="X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="321.95" y="780" width="160.5" height="20" as="geometry" /> <mxGeometry x="321.95" y="900" width="160.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-32" value="Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-32" value="Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="483.15999999999997" y="780" width="159.29" height="20" as="geometry" /> <mxGeometry x="483.15999999999997" y="900" width="159.29" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-33" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-33" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="322.45" y="760" width="160" height="20" as="geometry" /> <mxGeometry x="322.45" y="880" width="160" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-34" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-34" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="481.72999999999996" y="760" width="160.72" height="20" as="geometry" /> <mxGeometry x="481.72999999999996" y="880" width="160.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-35" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-35" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="800" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-36" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="840" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-37" value="0x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.95" y="800" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-38" value="0x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.95" y="840" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-39" value="Move" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="800" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-40" value="Move" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="840" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-42" value="X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="322.95" y="820" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-43" value="Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="402.45" y="820" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-44" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="323.45" y="800" width="79" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-45" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="402.45" y="800" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-46" value="Offset: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="481.72999999999996" y="820" width="80.72" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-47" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="482.45" y="800" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-48" value="&lt;font&gt;00 TOP_LEFT&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 TOP_RIGHT&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 BOTTOM_LEFT&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;01 BOTTOM_RIGHT&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="412.45" y="720" width="130" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-49" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="880" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-50" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="920" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.94999999999999" y="920" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-51" value="0x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-36" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="201.95" y="880" width="40" height="40" as="geometry" /> <mxGeometry x="122.94999999999999" y="960" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-52" value="0x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-37" value="0x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.95" y="920" width="40" height="40" as="geometry" /> <mxGeometry x="201.95" y="920" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-53" value="Set Padding" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-38" value="0x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="880" width="80" height="40" as="geometry" /> <mxGeometry x="201.95" y="960" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-54" value="Set Padding" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-39" value="Move" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="920" width="80" height="40" as="geometry" /> <mxGeometry x="242.45" y="920" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-40" value="Move" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="960" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-42" value="X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="322.95" y="940" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-43" value="Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="402.45" y="940" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-44" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="323.45" y="920" width="79" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-45" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="402.45" y="920" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-46" value="Offset: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="481.72999999999996" y="940" width="80.72" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-47" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="482.45" y="920" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-48" value="&lt;font&gt;00 TOP_LEFT&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 TOP_RIGHT&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 BOTTOM_LEFT&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;01 BOTTOM_RIGHT&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="412.45" y="840" width="130" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-49" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="1000" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-50" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="1040" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-51" value="0x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.95" y="1000" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-52" value="0x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.95" y="1040" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-53" value="Set Padding" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="1000" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-54" value="Set Padding" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="1040" width="80" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-55" value="P&lt;sub&gt;0&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-55" value="P&lt;sub&gt;0&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="322.45" y="900" width="79.5" height="20" as="geometry" /> <mxGeometry x="322.45" y="1020" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-56" value="P&lt;sub&gt;0&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-56" value="P&lt;sub&gt;0&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="401.02" y="900" width="81.43" height="20" as="geometry" /> <mxGeometry x="401.02" y="1020" width="81.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-65" value="P&lt;sub&gt;1&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-65" value="P&lt;sub&gt;1&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="483.16" y="900" width="79.5" height="20" as="geometry" /> <mxGeometry x="483.16" y="1020" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-66" value="P&lt;sub&gt;1&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-66" value="P&lt;sub&gt;1&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="561.2299999999999" y="900" width="78.29" height="20" as="geometry" /> <mxGeometry x="561.2299999999999" y="1020" width="78.29" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-67" value="P&lt;sub&gt;Off&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-67" value="P&lt;sub&gt;Off&lt;/sub&gt; X: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="639.5200000000001" y="900" width="79.5" height="20" as="geometry" /> <mxGeometry x="639.5200000000001" y="1020" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-68" value="P&lt;sub&gt;Off&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-68" value="P&lt;sub&gt;Off&lt;/sub&gt; Y: uint" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="717.59" y="900" width="78.29" height="20" as="geometry" /> <mxGeometry x="717.59" y="1020" width="78.29" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-69" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-69" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="321.73" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="321.73" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-70" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-70" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="401.01" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="401.01" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-71" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-71" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="480.51" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="480.51" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-72" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-72" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="561.2299999999999" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="561.2299999999999" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-73" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-73" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="641.7299999999999" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="641.7299999999999" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-74" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-74" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="715.16" y="880" width="80.72" height="20" as="geometry" /> <mxGeometry x="715.16" y="1000" width="80.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-75" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-75" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.44999999999999" y="960" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.44999999999999" y="1080" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-76" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-76" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.44999999999999" y="1000" width="79.5" height="40" as="geometry" /> <mxGeometry x="122.44999999999999" y="1120" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-77" value="0x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-77" value="0x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.45" y="960" width="40" height="40" as="geometry" /> <mxGeometry x="201.45" y="1080" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-78" value="0x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-78" value="0x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="201.45" y="1000" width="40" height="40" as="geometry" /> <mxGeometry x="201.45" y="1120" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-79" value="Release Motors" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-79" value="Release Motors" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.95" y="960" width="80" height="40" as="geometry" /> <mxGeometry x="241.95" y="1080" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-80" value="Release Motors" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-80" value="Release Motors" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.95" y="1000" width="80" height="40" as="geometry" /> <mxGeometry x="241.95" y="1120" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-81" value="enable: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-81" value="enable: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="980" width="79.5" height="20" as="geometry" /> <mxGeometry x="324.95" y="1100" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-82" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-82" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="323.88" y="960" width="80" height="20" as="geometry" /> <mxGeometry x="323.88" y="1080" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-83" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-83" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="125.38" y="1080" width="79.5" height="40" as="geometry" /> <mxGeometry x="125.38" y="1200" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-84" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-84" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="125.38" y="1120" width="79.5" height="40" as="geometry" /> <mxGeometry x="125.38" y="1240" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-85" value="0x5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-85" value="0x5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.88" y="1080" width="40" height="40" as="geometry" /> <mxGeometry x="204.88" y="1200" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-86" value="0x5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-86" value="0x5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.88" y="1120" width="40" height="40" as="geometry" /> <mxGeometry x="204.88" y="1240" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-87" value="Drop Stone" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-87" value="Drop Stone" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="1080" width="79" height="40" as="geometry" /> <mxGeometry x="242.45" y="1200" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-89" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-89" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="124.88" y="1160" width="79.5" height="40" as="geometry" /> <mxGeometry x="124.88" y="1280" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-90" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-90" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="124.88" y="1200" width="79.5" height="40" as="geometry" /> <mxGeometry x="124.88" y="1320" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-91" value="0x6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-91" value="0x6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.38" y="1160" width="40" height="40" as="geometry" /> <mxGeometry x="204.38" y="1280" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-92" value="0x6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-92" value="0x6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.38" y="1200" width="40" height="40" as="geometry" /> <mxGeometry x="204.38" y="1320" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-93" value="Stone Status" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-93" value="Stone Status" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.95" y="1160" width="79" height="40" as="geometry" /> <mxGeometry x="241.95" y="1280" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-94" value="Stone Status" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-94" value="Stone Status" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.95" y="1200" width="79" height="40" as="geometry" /> <mxGeometry x="242.95" y="1320" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-95" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-95" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.94999999999999" y="640" width="79.5" height="40" as="geometry" /> <mxGeometry x="119.99999999999999" y="680" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-96" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-96" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="203.45" y="640" width="40" height="40" as="geometry" /> <mxGeometry x="200.5" y="680" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-97" value="Status Update" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-97" value="Status Update" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="243.38" y="640" width="81" height="40" as="geometry" /> <mxGeometry x="240.43" y="680" width="81" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-98" value="Status: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-98" value="Status: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="323.88" y="660" width="119.43" height="20" as="geometry" /> <mxGeometry x="320.93" y="700" width="119.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-99" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-99" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="323.30999999999995" y="640" width="120" height="20" as="geometry" /> <mxGeometry x="320.35999999999996" y="680" width="120" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-100" value="00 UNKNOW&lt;div&gt;01 INTILIZING&lt;/div&gt;&lt;div&gt;02 IDLE&lt;/div&gt;&lt;div&gt;03 WORKING&lt;/div&gt;&lt;div&gt;04 BUSY&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-100" value="00 UNKNOW&lt;div&gt;01 INTILIZING&lt;/div&gt;&lt;div&gt;02 IDLE&lt;/div&gt;&lt;div&gt;03 WORKING&lt;/div&gt;&lt;div&gt;04 BUSY&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="722.4499999999999" y="580" width="97.83" height="120" as="geometry" /> <mxGeometry x="722.4499999999999" y="580" width="97.83" height="120" as="geometry" />
@@ -368,61 +368,61 @@
<mxGeometry x="722.4499999999999" y="560" width="97.83" height="20" as="geometry" /> <mxGeometry x="722.4499999999999" y="560" width="97.83" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-102" value="Drop Stone" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-102" value="Drop Stone" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="245.45" y="1120" width="79" height="40" as="geometry" /> <mxGeometry x="245.45" y="1240" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-103" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-103" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="124.66" y="1240" width="79.5" height="40" as="geometry" /> <mxGeometry x="124.66" y="1360" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-104" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-104" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="124.66" y="1280" width="79.5" height="40" as="geometry" /> <mxGeometry x="124.66" y="1400" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-105" value="0x7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-105" value="0x7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.16" y="1240" width="40" height="40" as="geometry" /> <mxGeometry x="204.16" y="1360" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-106" value="0x7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-106" value="0x7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.16" y="1280" width="40" height="40" as="geometry" /> <mxGeometry x="204.16" y="1400" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-107" value="Move Z-Axis" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-107" value="Move Z-Axis" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.73" y="1240" width="79" height="40" as="geometry" /> <mxGeometry x="241.73" y="1360" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-108" value="Move Z-Axis" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-108" value="Move Z-Axis" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.73" y="1280" width="79" height="40" as="geometry" /> <mxGeometry x="242.73" y="1400" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-109" value="state: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-109" value="state: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1140" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-110" value="&lt;font&gt;00 EMPTY&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 LOW&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 FULL&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="413.88" y="1120" width="50" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-111" value="state: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1220" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-112" value="&lt;font&gt;00 EMPTY&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 LOW&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 FULL&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="413.88" y="1200" width="50" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-114" value="pos: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1260" width="79.5" height="20" as="geometry" /> <mxGeometry x="324.95" y="1260" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-115" value="&lt;font&gt;0 DOWN&lt;/font&gt;&lt;div&gt;1 UP&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-110" value="&lt;font&gt;00 EMPTY&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 LOW&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 FULL&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="413.88" y="1240" width="50" height="40" as="geometry" /> <mxGeometry x="413.88" y="1240" width="50" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-111" value="state: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1340" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-112" value="&lt;font&gt;00 EMPTY&lt;/font&gt;&lt;div&gt;&lt;font&gt;01 LOW&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font&gt;10 FULL&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="413.88" y="1320" width="50" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-114" value="pos: enum" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1380" width="79.5" height="20" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-115" value="&lt;font&gt;0 DOWN&lt;/font&gt;&lt;div&gt;1 UP&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=8;" parent="1" vertex="1">
<mxGeometry x="413.88" y="1360" width="50" height="40" as="geometry" />
</mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-116" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-116" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="323.88" y="1000" width="480" height="40" as="geometry" /> <mxGeometry x="323.88" y="1120" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-117" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-117" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="324.95" y="920" width="480" height="40" as="geometry" /> <mxGeometry x="324.95" y="1040" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-118" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-118" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="323.17" y="840" width="481.78" height="40" as="geometry" /> <mxGeometry x="323.17" y="960" width="481.78" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-119" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-119" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="324.95" y="1280" width="480" height="40" as="geometry" /> <mxGeometry x="324.95" y="1400" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-121" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-121" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="324.95" y="1160" width="480" height="40" as="geometry" /> <mxGeometry x="324.95" y="1280" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-122" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-122" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="324.95" y="1080" width="480" height="40" as="geometry" /> <mxGeometry x="324.95" y="1200" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-123" value="I2C message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-123" value="I2C message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1280.97" y="120" width="839.03" height="30" as="geometry" /> <mxGeometry x="1280.97" y="120" width="839.03" height="30" as="geometry" />
@@ -485,52 +485,52 @@
<mxGeometry x="780" y="30" width="120" height="20" as="geometry" /> <mxGeometry x="780" y="30" width="120" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-144" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-144" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="125.38" y="1361" width="79.5" height="40" as="geometry" /> <mxGeometry x="125.38" y="1481" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-145" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-145" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="125.38" y="1401" width="79.5" height="40" as="geometry" /> <mxGeometry x="125.38" y="1521" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-146" value="0x8" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-146" value="0x8" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.88" y="1361" width="40" height="40" as="geometry" /> <mxGeometry x="204.88" y="1481" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-147" value="0x8" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-147" value="0x8" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="204.88" y="1401" width="40" height="40" as="geometry" /> <mxGeometry x="204.88" y="1521" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-148" value="Set Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-148" value="Set Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="242.45" y="1361" width="79" height="40" as="geometry" /> <mxGeometry x="242.45" y="1481" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-149" value="Set Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-149" value="Set Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="243.45" y="1401" width="79" height="40" as="geometry" /> <mxGeometry x="243.45" y="1521" width="79" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-150" value="enable: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-150" value="enable: bool" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="325.67" y="1381" width="79.5" height="20" as="geometry" /> <mxGeometry x="325.67" y="1501" width="79.5" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-152" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-152" value="&amp;lt;Nothing&amp;gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="325.67" y="1401" width="480" height="40" as="geometry" /> <mxGeometry x="325.67" y="1521" width="480" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-153" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-153" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="323.88" y="1120" width="80" height="20" as="geometry" /> <mxGeometry x="323.88" y="1240" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-154" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-154" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="324.95" y="1240" width="80" height="20" as="geometry" /> <mxGeometry x="324.95" y="1360" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-155" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-155" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="324.38" y="1200" width="80" height="20" as="geometry" /> <mxGeometry x="324.38" y="1320" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-156" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-156" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="324.38" y="1361" width="80" height="20" as="geometry" /> <mxGeometry x="324.38" y="1481" width="80" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-157" value="Core XY" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-157" value="Core XY" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1">
<mxGeometry x="-62.19" y="865.64" width="321.28" height="30" as="geometry" /> <mxGeometry x="-62.19" y="985.64" width="321.28" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-158" value="Head" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-158" value="Head" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1">
<mxGeometry x="-25.009999999999998" y="1182.82" width="246.92" height="30" as="geometry" /> <mxGeometry x="-25.009999999999998" y="1302.82" width="246.92" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-159" value="Vacum" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-159" value="Vacum" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1">
<mxGeometry x="58.58" y="1386.41" width="79.74" height="30" as="geometry" /> <mxGeometry x="58.58" y="1506.41" width="79.74" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-162" value="Every One" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-162" value="Every One" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1;rotation=-90;" parent="1" vertex="1">
<mxGeometry x="-21.55" y="546.28" width="240.01" height="30" as="geometry" /> <mxGeometry x="-28.88" y="622.56" width="246.44" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-163" value="Data" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-163" value="Data" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1720.98" y="170" width="240" height="40" as="geometry" /> <mxGeometry x="1720.98" y="170" width="240" height="40" as="geometry" />
@@ -575,19 +575,19 @@
<mxGeometry x="2240" y="230" width="40" height="10" as="geometry" /> <mxGeometry x="2240" y="230" width="40" height="10" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-182" value="ERROR" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-182" value="ERROR" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="122.44999999999999" y="440" width="79.5" height="40" as="geometry" /> <mxGeometry x="119.99999999999999" y="720" width="79.5" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-183" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-183" value="0xff" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="197.56" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="195.11" y="720" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-184" value="Error" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-184" value="Error" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.45" y="440" width="81" height="40" as="geometry" /> <mxGeometry x="239" y="720" width="81" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-185" value="Error Code" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-185" value="Error Code" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="320" y="460" width="119.43" height="20" as="geometry" /> <mxGeometry x="317.55" y="740" width="119.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-186" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-186" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="319.42999999999995" y="440" width="120" height="20" as="geometry" /> <mxGeometry x="316.97999999999996" y="720" width="120" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-187" value="00 Transmission Failed (Invalid CRC)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-187" value="00 Transmission Failed (Invalid CRC)" style="text;html=1;align=left;verticalAlign=top;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="480" y="420" width="240" height="80" as="geometry" /> <mxGeometry x="480" y="420" width="240" height="80" as="geometry" />
@@ -742,19 +742,19 @@
<mxGeometry x="1540" y="760" width="80" height="40" as="geometry" /> <mxGeometry x="1540" y="760" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-232" value="&lt;b&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;GoRPC Ctrl Protocol&lt;/font&gt;&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-232" value="&lt;b&gt;&lt;font style=&quot;font-size: 20px;&quot;&gt;GoRPC Ctrl Protocol&lt;/font&gt;&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1200.51" y="1000" width="600" height="40" as="geometry" /> <mxGeometry x="1200.14" y="920" width="600" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-233" value="Msg Type" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-233" value="Msg Type" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1200.85" y="1100" width="79.66" height="20" as="geometry" /> <mxGeometry x="1200.48" y="1020" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-234" value="Data (max 255b )" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-234" value="Data (max 255b )" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1361.86" y="1101" width="439.02" height="20" as="geometry" /> <mxGeometry x="1361.49" y="1021" width="439.02" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-235" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-235" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1200.85" y="1080" width="79.66" height="20" as="geometry" /> <mxGeometry x="1200.48" y="1000" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-236" value="0-255" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-236" value="0-255" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1360.8799999999999" y="1081" width="440" height="20" as="geometry" /> <mxGeometry x="1360.51" y="1001" width="440" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-237" value="TX Package" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-237" value="TX Package" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1120.51" y="1160" width="80" height="21" as="geometry" /> <mxGeometry x="1120.51" y="1160" width="80" height="21" as="geometry" />
@@ -811,7 +811,7 @@
<mxGeometry x="1641.4899999999998" y="1280" width="81.95" height="20" as="geometry" /> <mxGeometry x="1641.4899999999998" y="1280" width="81.95" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-258" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-258" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="491.72999999999996" y="770" width="160.72" height="20" as="geometry" /> <mxGeometry x="491.72999999999996" y="890" width="160.72" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-259" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-259" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1362.1599999999999" y="1261" width="160" height="20" as="geometry" /> <mxGeometry x="1362.1599999999999" y="1261" width="160" height="20" as="geometry" />
@@ -871,7 +871,7 @@
<mxGeometry x="1359.2199999999998" y="1142" width="79.66" height="20" as="geometry" /> <mxGeometry x="1359.2199999999998" y="1142" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-322" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-322" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1280.6" y="1100" width="80.95" height="20" as="geometry" /> <mxGeometry x="1280.23" y="1020" width="80.95" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-323" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-323" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1281.79" y="1161" width="80.95" height="20" as="geometry" /> <mxGeometry x="1281.79" y="1161" width="80.95" height="20" as="geometry" />
@@ -913,10 +913,10 @@
<mxGeometry x="1201.4800000000002" y="1341" width="79.66" height="20" as="geometry" /> <mxGeometry x="1201.4800000000002" y="1341" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-336" value="Counted to sizes" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-336" value="Counted to sizes" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1199.9" y="1060" width="600.61" height="20" as="geometry" /> <mxGeometry x="1199.5300000000002" y="980" width="600.61" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-337" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-337" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1280.1699999999998" y="1081" width="79.66" height="20" as="geometry" /> <mxGeometry x="1279.8" y="1001" width="79.66" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="weFQkCekfF49Ojb9-c9R-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="weFQkCekfF49Ojb9-c9R-338" target="weFQkCekfF49Ojb9-c9R-344" edge="1"> <mxCell id="weFQkCekfF49Ojb9-c9R-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="weFQkCekfF49Ojb9-c9R-338" target="weFQkCekfF49Ojb9-c9R-344" edge="1">
<mxGeometry relative="1" as="geometry" /> <mxGeometry relative="1" as="geometry" />
@@ -1599,6 +1599,60 @@
<mxPoint x="3988.8199999999997" y="1700.5" as="targetPoint" /> <mxPoint x="3988.8199999999997" y="1700.5" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="JG_RBEpKgD0n8DC-nJ9m-1" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;fillColor=#2D9C5E;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;shape=mxgraph.gcp2.check" parent="1" vertex="1">
<mxGeometry x="1920" y="528" width="40" height="32" as="geometry" />
</mxCell>
<mxCell id="JG_RBEpKgD0n8DC-nJ9m-2" value="" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;fillColor=#2D9C5E;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;shape=mxgraph.gcp2.check" parent="1" vertex="1">
<mxGeometry x="1893.71" y="720" width="40" height="32" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-1" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1119.53" y="1119" width="80" height="21" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-2" value="0xcc" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1199.53" y="1119.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-3" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1279.56" y="1119.5" width="80.95" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-4" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1279.9700000000003" y="1098.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-5" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1199.5300000000002" y="1099" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-6" value="REQUEST" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="121.57999999999998" y="600" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-7" value="0xc" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="203.52" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-8" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.95" y="600" width="81" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-9" value="Info Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1121.47" y="1078" width="80" height="21" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-10" value="0xcd" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1201.47" y="1078.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-11" value="size" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1281.5" y="1078.5" width="80.95" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-12" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1281.9100000000003" y="1057.5" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-13" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1201.4700000000003" y="1058" width="79.66" height="20" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-14" value="RESPONSE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="121.57999999999997" y="640" width="79.5" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-15" value="0xc" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="200.8" y="640" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="xHqxyqidxHPQPkM2u2fy-16" value="Reset" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="241.95" y="640" width="81" height="40" as="geometry" />
</mxCell>
</root> </root>
</mxGraphModel> </mxGraphModel>
</diagram> </diagram>

View File

@@ -1,6 +1,11 @@
#include "ci/base.hpp" #include "ci/base.hpp"
#include "pinConfig.hpp" #include "pinConfig.hpp"
#include "protocol.hpp"
#include "pico/stdlib.h"
#include "hardware/watchdog.h"
#include "FreeRTOSConfig.h" #include "FreeRTOSConfig.h"
#include "FreeRTOS.h" #include "FreeRTOS.h"
#include "task.h" #include "task.h"
@@ -32,6 +37,10 @@ void GobotRPC_CI::onRxData(char *data, size_t len) {
this->cb_TxPacket(this->cb_TxPacket_args, data+6, len-6, addr); this->cb_TxPacket(this->cb_TxPacket_args, data+6, len-6, addr);
} }
break; break;
case RESET_CI_PACKET:
// Register Reset Magic
softwareReset();
break;
default: default:
break; break;
} }

View File

@@ -23,11 +23,19 @@ void GobotRPC_CI::txCIInstructionTask() {
send_ErrorTransmission(rx, addr); send_ErrorTransmission(rx, addr);
break; break;
} }
case CI_INSTRUCTION_SEND_TRANMISSION_SUCCESS: { case CI_INSTRUCTION_SEND_TRANMISSION_SUCCESS: {
uint32_t addr = ciInstruction.data[1] | (ciInstruction.data[2] << 8) | (ciInstruction.data[3] << 16) | (ciInstruction.data[4] << 24); uint32_t addr = ciInstruction.data[0] \
| (ciInstruction.data[1] << 8) \
| (ciInstruction.data[2] << 16) \
| (ciInstruction.data[3] << 24);
send_SuccessTransmission(addr); send_SuccessTransmission(addr);
break; break;
} }
case CI_INSTRUCTION_SEND_INFO_RESET:
send_InfoReset();
break;
} }
} }
} }
@@ -58,3 +66,12 @@ void GobotRPC_CI::send_SuccessTransmission(uint64_t addr) {
this->hardware->send(successPacket, 6); this->hardware->send(successPacket, 6);
} }
void GobotRPC_CI::send_InfoReset() {
char resetPacket[2];
resetPacket[0] = RESET_INFO_CI_PACKET;
resetPacket[1] = 2;
this->hardware->send(resetPacket, 2);
}

View File

@@ -5,11 +5,13 @@
enum GobotRPC_CI_CMD { enum GobotRPC_CI_CMD {
TX_CI_PACKET = 0x01, TX_CI_PACKET = 0x01,
RX_CI_PACKET = 0x02, RX_CI_PACKET = 0x02,
PERFORM_SCAN_CI_PACKET = 0x03,
SCAN_RESULT_CI_PACKET = 0x04,
SUCESS_TRANMISSION = 0xfc, SUCESS_TRANMISSION = 0xfc,
ERROR_TRANMISSION = 0xfd, ERROR_TRANMISSION = 0xfd,
HEARTBEAT = 0xff HEARTBEAT = 0xff,
RESET_CI_PACKET = 0xcc,
RESET_INFO_CI_PACKET = 0xcd
}; };
#define CI_TX_PACKAGE_DATA_OFFSET 6 #define CI_TX_PACKAGE_DATA_OFFSET 6
@@ -48,4 +50,5 @@ public:
void txCIInstructionTask(); void txCIInstructionTask();
void send_ErrorTransmission(bool rx, uint64_t addr); void send_ErrorTransmission(bool rx, uint64_t addr);
void send_SuccessTransmission(uint64_t addr); void send_SuccessTransmission(uint64_t addr);
void send_InfoReset();
}; };

View File

@@ -1,6 +1,7 @@
enum CI_Instruction_Type { enum CI_Instruction_Type {
CI_INSTRUCTION_SEND_TRANMISSION_ERROR, CI_INSTRUCTION_SEND_TRANMISSION_ERROR,
CI_INSTRUCTION_SEND_TRANMISSION_SUCCESS CI_INSTRUCTION_SEND_TRANMISSION_SUCCESS,
CI_INSTRUCTION_SEND_INFO_RESET
}; };
struct CI_Instruction_Transport { struct CI_Instruction_Transport {

View File

@@ -30,6 +30,10 @@ public:
virtual void registerPushPackageCB(callback_pushPackage cb, void *args) = 0; virtual void registerPushPackageCB(callback_pushPackage cb, void *args) = 0;
virtual void registerPushCIInstructionCB(callback_pushCIInstruction cb, void *args) = 0; virtual void registerPushCIInstructionCB(callback_pushCIInstruction cb, void *args) = 0;
virtual void setAddrMap(uint32_t addr, int intNum) = 0; virtual void setAddrMap(uint32_t addr, int intNum) = 0;
void raiseTranmissionError(bool rx, uint32_t addr);
void raiseTransmissionSuceess(uint32_t addr);
void raiseInfoReset();
}; };
void i2cRxTaskFn(void * args); void i2cRxTaskFn(void * args);
@@ -78,6 +82,7 @@ public:
void raiseTranmissionError(bool rx, uint32_t addr); void raiseTranmissionError(bool rx, uint32_t addr);
void raiseTransmissionSuceess(uint32_t addr); void raiseTransmissionSuceess(uint32_t addr);
void raiseInfoReset();
}; };

View File

@@ -3,7 +3,8 @@
#include <strings.h> #include <strings.h>
enum GobotRPCNumber { enum GobotRPCNumber {
VACUM = 0x8 VACUM = 0x8,
RESET = 0xc
}; };
enum GobotRPCTypes { enum GobotRPCTypes {
@@ -31,3 +32,5 @@ void assembleCRC(char * buffer, size_t data_len);
bool checkCRC(char * buffer, size_t data_len); bool checkCRC(char * buffer, size_t data_len);
GobotRPCHeaderInfo extractGobotRPCHeader(char * buffer); GobotRPCHeaderInfo extractGobotRPCHeader(char * buffer);
void softwareReset();

View File

@@ -59,6 +59,7 @@ void GobotRPC_NI::rxTask() {
void GobotRPC_NI::sendPackage(char *data, size_t len, GobotRPCTypes type, GobotRPCNumber number) { void GobotRPC_NI::sendPackage(char *data, size_t len, GobotRPCTypes type, GobotRPCNumber number) {
GobotRPC_NI_Package_Transport package; GobotRPC_NI_Package_Transport package;
package.length = len + GobotRPC_Package_DATA_OFFSET + 2;
memcpy(package.data + GobotRPC_Package_DATA_OFFSET, data, len); memcpy(package.data + GobotRPC_Package_DATA_OFFSET, data, len);
assembleGobotRPCHeader(package.data, number, type, len); assembleGobotRPCHeader(package.data, number, type, len);
assembleCRC(package.data, len); assembleCRC(package.data, len);

View File

@@ -71,6 +71,9 @@ GobotRPC_NI_Hardware_RP2040_I2C::GobotRPC_NI_Hardware_RP2040_I2C(
this->core = core; this->core = core;
this->readState = I2C_READ_STAGE_FIRST;
this->writeState = I2C_WRITE_STATE_FIRST;
this->isrRXQueue = RXQueue; this->isrRXQueue = RXQueue;
this->isrPreTxQueue = TXQueue; this->isrPreTxQueue = TXQueue;
this->isrTXQueue = xQueueCreate(3, sizeof(GobotRPC_NI_Package_Transport)); this->isrTXQueue = xQueueCreate(3, sizeof(GobotRPC_NI_Package_Transport));

View File

@@ -40,7 +40,8 @@ void GobotRPC_NI_Hardware_RP2040_I2C::onI2CIRQ(I2C_SLAVE_EVENT event, BaseType_t
break; break;
} }
case I2C_SLAVE_REQUEST: { // I2C Read from Master case I2C_SLAVE_REQUEST: {
// I2C Read from Master
//if(xQueueIsQueueEmptyFromISR(isrTXQueue) == pdTRUE) { //if(xQueueIsQueueEmptyFromISR(isrTXQueue) == pdTRUE) {
// readState = I2C_READ_STAGE_INVALID; // readState = I2C_READ_STAGE_INVALID;
//} //}
@@ -58,15 +59,13 @@ void GobotRPC_NI_Hardware_RP2040_I2C::onI2CIRQ(I2C_SLAVE_EVENT event, BaseType_t
break; break;
case I2C_READ_STAGE_WIP: case I2C_READ_STAGE_WIP:
if(txPackage.index == txPackage.length - 1) {
readState = I2C_READ_STAGE_DONE;
} else {
i2c_write_byte_raw(i2c_inst, txPackage.data[txPackage.index++]); i2c_write_byte_raw(i2c_inst, txPackage.data[txPackage.index++]);
}
break;
case I2C_READ_STAGE_DONE: if(txPackage.index == txPackage.length) {
i2c_write_byte_raw(i2c_inst, 0x00); readState = I2C_READ_STAGE_FIRST;
gpio_put(int_PIN, 0);
}
break; break;
default: default:
@@ -78,8 +77,9 @@ void GobotRPC_NI_Hardware_RP2040_I2C::onI2CIRQ(I2C_SLAVE_EVENT event, BaseType_t
case I2C_SLAVE_FINISH: case I2C_SLAVE_FINISH:
writeState = I2C_WRITE_STATE_FIRST; writeState = I2C_WRITE_STATE_FIRST;
readState = I2C_READ_STAGE_FIRST;
rxPackage.index = 0; rxPackage.index = 0;
txPackage.index = 0;
break; break;
default: default:

View File

@@ -2,6 +2,7 @@
#include <stdint.h> #include <stdint.h>
#include "pico/stdlib.h" #include "pico/stdlib.h"
#include "hardware/watchdog.h"
#include "crc16.hpp" #include "crc16.hpp"
@@ -29,3 +30,8 @@ bool checkCRC(char * buffer, size_t data_len) {
unsigned short crc_received = buffer[data_len - GobotRPC_Package_DATA_OFFSET + 1] | (buffer[data_len - GobotRPC_Package_DATA_OFFSET + 0] << 8); unsigned short crc_received = buffer[data_len - GobotRPC_Package_DATA_OFFSET + 1] | (buffer[data_len - GobotRPC_Package_DATA_OFFSET + 0] << 8);
return crc == crc_received; return crc == crc_received;
} }
void softwareReset() {
watchdog_enable(1, 1);
while(1);
}

View File

@@ -25,3 +25,10 @@ void GobotRPC_TI_Hardware_RP2040_I2C::raiseTransmissionSuceess(uint32_t addr) {
this->pushCIInstructionCB(&ciInstruction, pushCIInstructionCBArgs); this->pushCIInstructionCB(&ciInstruction, pushCIInstructionCBArgs);
} }
void GobotRPC_TI_Hardware_RP2040_I2C::raiseInfoReset() {
CI_Instruction_Transport ciInstruction;
ciInstruction.type = CI_INSTRUCTION_SEND_INFO_RESET;
this->pushCIInstructionCB(&ciInstruction, pushCIInstructionCBArgs);
}

View File

@@ -1,4 +1,5 @@
#include "transmission_interface.hpp" #include "transmission_interface.hpp"
#include "ci/base.hpp"
void i2cRxTaskFn(void * args) { void i2cRxTaskFn(void * args) {
GobotRPC_TI_Hardware_RP2040_I2C * hw = (GobotRPC_TI_Hardware_RP2040_I2C *)args; GobotRPC_TI_Hardware_RP2040_I2C * hw = (GobotRPC_TI_Hardware_RP2040_I2C *)args;
@@ -25,10 +26,10 @@ void GobotRPC_TI_Hardware_RP2040_I2C::i2cRxTask() {
bool read_res = readI2C(&pkg, addr); bool read_res = readI2C(&pkg, addr);
xSemaphoreGive(i2cMutex); xSemaphoreGive(i2cMutex);
if(read_res) { //if(read_res) {
if(pushPackageCB != NULL) if(pushPackageCB != NULL)
pushPackageCB(&pkg, pushPackageCBArgs); pushPackageCB(&pkg, pushPackageCBArgs);
} //}
break; break;
} }
@@ -41,21 +42,16 @@ void GobotRPC_TI_Hardware_RP2040_I2C::i2cRxTask() {
} }
bool GobotRPC_TI_Hardware_RP2040_I2C::readI2C(GoRPCPackage_Transport * pkg, uint32_t addr) { bool GobotRPC_TI_Hardware_RP2040_I2C::readI2C(GoRPCPackage_Transport * pkg, uint32_t addr) {
unsigned int res;
//uint res = i2c_read_blocking(i2c, addr, (uint8_t *)pkg->data, 2, true);
uint res = i2c_read_burst_blocking(i2c, addr, (uint8_t *)pkg->data, 2); i2c_read_blocking(i2c, addr, (uint8_t *)pkg->data + CI_RX_PACKAGE_DATA_OFFSET, 2, true);
if(res == PICO_ERROR_GENERIC)
return false; // I2C error
size_t len = pkg->data[1]; size_t len = pkg->data[CI_RX_PACKAGE_DATA_OFFSET + 1];
size_t remaining = len >= 2 ? len - 2 : 0;
res = i2c_read_burst_blocking(i2c, addr, ((uint8_t *)pkg->data) + 2, len - 2);
if(res == PICO_ERROR_GENERIC)
return false; // I2C error
res = i2c_read_blocking(i2c, addr, ((uint8_t *)pkg->data) + CI_RX_PACKAGE_DATA_OFFSET, len, false);
pkg->len = len;
pkg->addr = addr; pkg->addr = addr;
return true; return true;

View File

@@ -41,6 +41,17 @@ void onTxPacket(void * args, char *data, size_t len, uint32_t addr) {
//gobotRPC_ci->send_RxPacket(pkg.data, CALC_SIZE_GobotRPC_PACKAGE(0), addr); //gobotRPC_ci->send_RxPacket(pkg.data, CALC_SIZE_GobotRPC_PACKAGE(0), addr);
} }
void onRXFromI2CTask(void * pvParameters) {
GobotRPC_CI * gobotRPC_ci = (GobotRPC_CI *)pvParameters;
GoRPCPackage_Transport pkg;
while (true) {
xQueueReceive(appData.rxQueue, &pkg, portMAX_DELAY);
gobotRPC_ci->send_RxPacket(pkg.data, pkg.len, pkg.addr);
}
}
int main() { int main() {
gpio_init(LED_PIN); gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, true); gpio_set_dir(LED_PIN, true);
@@ -57,8 +68,10 @@ int main() {
TaskHandle_t taskHandleCore0; TaskHandle_t taskHandleCore0;
TaskHandle_t taskHandleCore1; TaskHandle_t taskHandleCore1;
TaskHandle_t taskRXFromI2CTask;
xTaskCreateAffinitySet(vTaskMain, "Main Task Core 0", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore0); xTaskCreateAffinitySet(vTaskMain, "Main Task Core 0", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore0);
xTaskCreateAffinitySet(main_core2, "Main Task Core 1", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore1); xTaskCreateAffinitySet(main_core2, "Main Task Core 1", 2048, &gobotRPC_ci, 1, UART_CORE_MASK, &taskHandleCore1);
xTaskCreateAffinitySet(onRXFromI2CTask, "RX From I2C Task", 2048, &gobotRPC_ci, 3, UART_CORE_MASK, &taskRXFromI2CTask);
vTaskStartScheduler(); vTaskStartScheduler();

View File

@@ -28,12 +28,14 @@ void pushCIInstruction(CI_Instruction_Transport * src, void *args) {
void main_core2(void * pvParameters) { void main_core2(void * pvParameters) {
AppData appData = *((AppData *)pvParameters); AppData appData = *((AppData *)pvParameters);
GobotRPC_TI_Hardware_RP2040_I2C gobotrpc_ti_hardware(UART_CORE_MASK, i2c0); GobotRPC_TI_Hardware_RP2040_I2C gobotrpc_ti_hardware(UART_CORE_MASK, i2c0);
gobotrpc_ti_hardware.setAddrMap(0x21, 2); gobotrpc_ti_hardware.setAddrMap(0x21, 0);
gobotrpc_ti_hardware.registerPullPackageCB(pullPackageCB, appData.txQueue); gobotrpc_ti_hardware.registerPullPackageCB(pullPackageCB, appData.txQueue);
gobotrpc_ti_hardware.registerPushPackageCB(pushPackage, appData.rxQueue); gobotrpc_ti_hardware.registerPushPackageCB(pushPackage, appData.rxQueue);
gobotrpc_ti_hardware.registerPushCIInstructionCB(pushCIInstruction, appData.ciInstructionQueue); gobotrpc_ti_hardware.registerPushCIInstructionCB(pushCIInstruction, appData.ciInstructionQueue);
gobotrpc_ti_hardware.raiseInfoReset();
while(1) { while(1) {
vTaskDelay(pdMS_TO_TICKS(10000)); vTaskDelay(pdMS_TO_TICKS(10000));
} }

BIN
i2c-hub/pulseview-session2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
i2c-hub/uart-adapter/src/gobotrpc/util.py (Stored with Git LFS)

Binary file not shown.

BIN
i2c-hub/uart-adapter/src/main.py (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -37,6 +37,11 @@ void onRxPackage(void * args, char *data, uint16_t len, GobotRPCTypes type, Gobo
break; break;
} }
case GobotRPCNumber::RESET: {
softwareReset();
break;
}
default: { default: {
break; break;
} }
@@ -89,6 +94,9 @@ int main() {
core1_main, "Core 1 Main", 2048, &g_appData, 1, CORE_MASK_VACUM, &xCore1TaskHandle core1_main, "Core 1 Main", 2048, &g_appData, 1, CORE_MASK_VACUM, &xCore1TaskHandle
); );
char txBuffer[32];
g_appData.gobotrpc_ni->sendPackage(txBuffer, 0, GobotRPCTypes::RESPONSE, GobotRPCNumber::RESET);
vTaskStartScheduler(); vTaskStartScheduler();
while (true) { while (true) {