Build RPC Parsers
This commit is contained in:
@@ -38,6 +38,50 @@
|
|||||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja",
|
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"uart.h": "c",
|
"uart.h": "c",
|
||||||
"freertos.h": "c"
|
"freertos.h": "c",
|
||||||
|
"array": "cpp",
|
||||||
|
"atomic": "cpp",
|
||||||
|
"bit": "cpp",
|
||||||
|
"*.tcc": "cpp",
|
||||||
|
"cctype": "cpp",
|
||||||
|
"clocale": "cpp",
|
||||||
|
"cmath": "cpp",
|
||||||
|
"compare": "cpp",
|
||||||
|
"concepts": "cpp",
|
||||||
|
"cstdarg": "cpp",
|
||||||
|
"cstddef": "cpp",
|
||||||
|
"cstdint": "cpp",
|
||||||
|
"cstdio": "cpp",
|
||||||
|
"cstdlib": "cpp",
|
||||||
|
"cwchar": "cpp",
|
||||||
|
"cwctype": "cpp",
|
||||||
|
"deque": "cpp",
|
||||||
|
"map": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"unordered_map": "cpp",
|
||||||
|
"vector": "cpp",
|
||||||
|
"exception": "cpp",
|
||||||
|
"algorithm": "cpp",
|
||||||
|
"functional": "cpp",
|
||||||
|
"iterator": "cpp",
|
||||||
|
"memory": "cpp",
|
||||||
|
"memory_resource": "cpp",
|
||||||
|
"numeric": "cpp",
|
||||||
|
"optional": "cpp",
|
||||||
|
"random": "cpp",
|
||||||
|
"string_view": "cpp",
|
||||||
|
"system_error": "cpp",
|
||||||
|
"tuple": "cpp",
|
||||||
|
"type_traits": "cpp",
|
||||||
|
"utility": "cpp",
|
||||||
|
"initializer_list": "cpp",
|
||||||
|
"iosfwd": "cpp",
|
||||||
|
"limits": "cpp",
|
||||||
|
"new": "cpp",
|
||||||
|
"numbers": "cpp",
|
||||||
|
"ostream": "cpp",
|
||||||
|
"stdexcept": "cpp",
|
||||||
|
"streambuf": "cpp",
|
||||||
|
"typeinfo": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,7 @@
|
|||||||
"showReuseMessage": true,
|
"showReuseMessage": true,
|
||||||
"clear": true
|
"clear": true
|
||||||
},
|
},
|
||||||
|
"dependsOn": ["Compile Project"],
|
||||||
"problemMatcher": [],
|
"problemMatcher": [],
|
||||||
"windows": {
|
"windows": {
|
||||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ include(pico_sdk_import.cmake)
|
|||||||
# Adding FreeRTOS
|
# Adding FreeRTOS
|
||||||
set(FREERTOS_KERNEL_PATH ../lib/FreeRTOS-Kernel)
|
set(FREERTOS_KERNEL_PATH ../lib/FreeRTOS-Kernel)
|
||||||
include(cmake/FreeRTOS_Kernel_import.cmake)
|
include(cmake/FreeRTOS_Kernel_import.cmake)
|
||||||
#include(cmake/freeRTOS.cmake)
|
include(src/gobotrpc/cmake/CMakeLists.txt)
|
||||||
|
|
||||||
project(i2c-hub-firmware C CXX ASM)
|
project(i2c-hub-firmware C CXX ASM)
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ pico_enable_stdio_usb(i2c-hub-firmware 0)
|
|||||||
# Add the standard library to the build
|
# Add the standard library to the build
|
||||||
target_link_libraries(i2c-hub-firmware
|
target_link_libraries(i2c-hub-firmware
|
||||||
FreeRTOS-Kernel-Heap4
|
FreeRTOS-Kernel-Heap4
|
||||||
#FreeRTOS
|
GobotRPC
|
||||||
pico_stdlib
|
pico_stdlib
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
SET(FreeRTOS_DIR ${CMAKE_CURRENT_LIST_DIR}/../lib/FreeRTOS-Kernel)
|
|
||||||
FILE(GLOB FreeRTOS_src ${FreeRTOS_DIR}/*.c)
|
|
||||||
|
|
||||||
add_library(FreeRTOS STATIC
|
|
||||||
${FreeRTOS_src}
|
|
||||||
${FreeRTOS_DIR}/portable/GCC/ARM_CM0/port.c
|
|
||||||
${FreeRTOS_DIR}/portable/MemMang/heap_4.c
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(FreeRTOS PUBLIC
|
|
||||||
${FreeRTOS_DIR}/portable/GCC/ARM_CM0/
|
|
||||||
${FreeRTOS_DIR}/include/
|
|
||||||
${CMAKE_CURRENT_LIST_DIR}/..
|
|
||||||
)
|
|
||||||
@@ -0,0 +1,700 @@
|
|||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.1 Chrome/128.0.6613.186 Electron/32.2.6 Safari/537.36" version="25.0.1">
|
||||||
|
<diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg">
|
||||||
|
<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>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-1" value="GoBot RPC Protocol" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="60" width="120" height="120" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-2" value="CAN" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="180" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-3" value="CAN" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="220" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-4" value="Physical" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="220" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-6" value="Data Link" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="180" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-7" value="Network" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="140" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-8" value="Transport" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="100" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-10" value="Application" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="60" width="80" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-11" value="1" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="440" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-12" value="2" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="520" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-13" value="3" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="600" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-15" value="4" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="680" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-16" value="5" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="760" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-17" value="6" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="840" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-19" value="7" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="920" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-20" value="0" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="360" y="220" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-22" value="Bit" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="320" y="220" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-23" value="RPC Number" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="360" y="240" width="320" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-25" value="RPC Segment Number" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="840" y="240" width="160" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-27" value="0" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="360" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-28" value="1" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="400" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-29" value="2" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="440" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-30" value="3" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="480" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-35" value="4" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="520" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-36" value="5" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="560" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-37" value="6" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="600" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-38" value="7" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="640" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-39" value="Parameter Data" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="400" y="80" width="280" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-40" value="Header" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="360" y="80" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-41" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;dashed=1;dashPattern=8 8;" parent="1" source="VN9_mGhUesFHwJ--pmr3-22" target="VN9_mGhUesFHwJ--pmr3-40" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="320" y="190" as="sourcePoint" />
|
||||||
|
<mxPoint x="370" y="140" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-42" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;dashed=1;dashPattern=8 8;" parent="1" source="VN9_mGhUesFHwJ--pmr3-19" target="VN9_mGhUesFHwJ--pmr3-39" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="370" y="190" as="sourcePoint" />
|
||||||
|
<mxPoint x="370" y="130" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-43" value="Byte" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="320" y="60" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-44" value="CAN Package" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="360" y="30" width="320" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-46" value="Response(00)/<div>Request(01)/ Error(11)</div>" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="680" y="240" width="160" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-63" value="RPC Number" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="900" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-64" value="Description" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="158.57" y="900" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-65" value="Request Segments" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="161" y="870" width="599" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-67" value="0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="280" y="900" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-68" value="1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="400" y="900" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-69" value="2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="520.77" y="900" width="119.23" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-70" value="3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="641" y="900" width="119" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-76" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="160" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="160" y="880" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-77" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="280" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="280.23" y="880" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-78" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="399.74" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="399.74" y="900" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-79" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="520.77" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="520" y="900" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-80" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="640" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="640.23" y="900" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-81" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="760.23" y="900" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-86" value="RPC Number" style="text;html=1;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="1040" y="70" width="80" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-87" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="920" as="sourcePoint" />
|
||||||
|
<mxPoint x="40" y="920" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-89" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1000" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="999.86" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-90" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="960" as="sourcePoint" />
|
||||||
|
<mxPoint x="40" y="960" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-91" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1040" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1040" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-92" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1080" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1080" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-93" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;fontStyle=1" parent="1" target="VN9_mGhUesFHwJ--pmr3-255" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1160" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1160" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-94" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1120" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1120" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-95" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1200" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1200" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-96" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1240" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1240" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-97" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" target="VN9_mGhUesFHwJ--pmr3-294" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1280" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1280" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-98" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" target="VN9_mGhUesFHwJ--pmr3-295" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1320" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1320" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-99" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1360" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1360" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-100" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1400" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1400" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-101" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1440" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1440" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-102" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1480" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1480" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-103" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1520" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1520" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-104" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1560" as="sourcePoint" />
|
||||||
|
<mxPoint x="78.57" y="1559.9999999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-176" value="0xC" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1400" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-177" value="0xD" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1440" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-178" value="0xE" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1480" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-180" value="0xF" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1520" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-183" value="0x0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="920" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-184" value="0x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="960" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-185" value="0x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1000" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-186" value="0x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1040" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-187" value="0x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1080" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-188" value="0x5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1120" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-189" value="0x6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1160" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-190" value="0x7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1200" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-191" value="0x8" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1240" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-192" value="0x9" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1280" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-193" value="0xA" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1320" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-194" value="0xB" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="78.57" y="1360" width="40" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-195" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="920" width="38.57" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-196" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="940" width="38.57" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-197" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="960" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-198" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="980" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-199" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1000" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-200" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1020" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-201" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1040" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-202" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1060" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-203" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1080" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-204" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1100" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-205" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1120" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-206" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1140" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-207" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1160" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-208" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1180" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-209" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1200" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-210" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1220" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-211" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1241" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-212" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1261" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-213" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1280" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-214" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1300" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-215" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1320" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-216" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1340" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-217" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1360" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-218" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1380" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-219" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1400" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-220" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1420" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-221" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1440" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-222" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1460" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-223" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1480" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-224" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1500" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-225" value="REQ" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1520" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-226" value="RES" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="120" y="1540" width="40" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-227" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1540" as="sourcePoint" />
|
||||||
|
<mxPoint x="118.57" y="1539.9999999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-228" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1500" as="sourcePoint" />
|
||||||
|
<mxPoint x="119.28999999999999" y="1499.6499999999999" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-229" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1460" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1460" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-230" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1420" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1420" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-231" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1380" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1380" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-232" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1340" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1340" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-233" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1299" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1299" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-234" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1260" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1260" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-235" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1220" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1220" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-236" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1180" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1180" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-237" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1140" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1140" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-238" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1100" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="1100" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-239" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="VN9_mGhUesFHwJ--pmr3-245" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1060" as="sourcePoint" />
|
||||||
|
<mxPoint x="120" y="1059.7499999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-240" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" target="VN9_mGhUesFHwJ--pmr3-247" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="1020" as="sourcePoint" />
|
||||||
|
<mxPoint x="122" y="1019.7599999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-241" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" parent="1" target="VN9_mGhUesFHwJ--pmr3-246" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="980" as="sourcePoint" />
|
||||||
|
<mxPoint x="120" y="979.7499999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-242" value="" style="endArrow=none;html=1;rounded=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="760" y="940" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="940" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-243" value="Home" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="160" y="960" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-244" value="Mov Step" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="160" y="1000" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-245" value="Mov XY" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="161" y="1040" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-246" value="Corner: 00, 01, 10, 11" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="281" y="960" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-247" value="X:3b, Y: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="281" y="1000" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-249" value="X: 3b,Y: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="282" y="1040" width="118.57" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-250" value="Set Padding" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="161" y="1080" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-251" value="C<sub>1X</sub>: 3b, C<sub>1Y</sub>: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="282" y="1080" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-253" value="C<sub>2X</sub>: 3b, C<sub>2Y</sub>: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="402" y="1080" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-254" value="N<sub>X</sub>: 1b, N<sub>Y</sub>: 1b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="522" y="1080" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-255" value="CORE-XY" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=-90;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="-41.4" y="1039.99" width="200" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-256" value="X:3b, Y: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="281" y="980" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-259" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" source="VN9_mGhUesFHwJ--pmr3-198" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="110" y="1030" as="sourcePoint" />
|
||||||
|
<mxPoint x="160" y="980" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-260" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="118.57" y="940" as="sourcePoint" />
|
||||||
|
<mxPoint x="158.57" y="940" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-261" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="121" y="1019.79" as="sourcePoint" />
|
||||||
|
<mxPoint x="161" y="1019.79" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-262" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="121" y="1060" as="sourcePoint" />
|
||||||
|
<mxPoint x="161" y="1060" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-263" value="Release Motors" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="160" y="1120" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-264" value="Drop Stone" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="158.57" y="1160" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-266" value="Get Stone Status" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="161" y="1200" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-267" value="Mov Z-Axis" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="160" y="1240" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-269" value="Set Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="160" y="1280" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-270" value="Up (0) / Down (1)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="281" y="1240" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-271" value="Off (0) / On (1)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="281.29" y="1281" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-273" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="119.28" y="1099.71" as="sourcePoint" />
|
||||||
|
<mxPoint x="159.28" y="1099.71" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-274" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="119.28" y="1139.71" as="sourcePoint" />
|
||||||
|
<mxPoint x="159.28" y="1139.71" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-275" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="118.57" y="1220" as="sourcePoint" />
|
||||||
|
<mxPoint x="158.57" y="1220" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-276" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="119.28" y="1180" as="sourcePoint" />
|
||||||
|
<mxPoint x="159.28" y="1180" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-277" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="118.57" y="1300" as="sourcePoint" />
|
||||||
|
<mxPoint x="158.57" y="1300" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-278" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="181" y="1120" as="sourcePoint" />
|
||||||
|
<mxPoint x="221" y="1120" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-279" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="119.28999999999999" y="1259.86" as="sourcePoint" />
|
||||||
|
<mxPoint x="159.29" y="1259.86" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-282" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="120" y="1340" as="sourcePoint" />
|
||||||
|
<mxPoint x="160" y="1340" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-283" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="121" y="1379.6699999999998" as="sourcePoint" />
|
||||||
|
<mxPoint x="161" y="1379.6699999999998" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-284" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="120" y="1420" as="sourcePoint" />
|
||||||
|
<mxPoint x="160" y="1420" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-285" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="120" y="1499.83" as="sourcePoint" />
|
||||||
|
<mxPoint x="160" y="1499.83" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-286" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="118.57" y="1459.76" as="sourcePoint" />
|
||||||
|
<mxPoint x="158.57" y="1459.76" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-288" value="Get Info" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="158.57" y="920" width="120" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-289" value="CAN-Address" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="280" y="940" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-290" value="Node Type" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="400" y="940" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-292" value="Status Bits" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="520" y="940" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-293" value="Error Code" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="640" y="940" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-294" value="Head" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=-90;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="-0.71" y="1200.29" width="118.57" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-295" value="Vacum" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=-90;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40.5" y="1280.5" width="41" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="VN9_mGhUesFHwJ--pmr3-296" value="ALL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;rotation=0;" parent="1" vertex="1">
|
||||||
|
<mxGeometry x="40" y="920" width="36.36" height="40" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="6zxd1XRsNtNYRLnBrsP0-1" value="Yes (1) / No (0)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="280" y="1120" width="120" height="20" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
add_library(GobotRPC STATIC
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../rx.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../init.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../protocol.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../error_msg.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(GobotRPC PUBLIC
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../include
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/../../..
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(GobotRPC
|
||||||
|
FreeRTOS-Kernel-Heap4
|
||||||
|
)
|
||||||
43
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/error_msg.cpp
Normal file
43
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/error_msg.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include "gobotrpc.hpp"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
const char * TEST_MSG_RPC_RESULT_GOOD = "Good";
|
||||||
|
const char * TEST_MSG_RPC_RESULT_PACKAGE_READY = "Package Ready";
|
||||||
|
const char * TEST_MSG_RPC_RESULT_ERROR_INVALID_FRAMESUBMITIONRESULT = "Invalid FrameSubmitionResult";
|
||||||
|
const char * TEST_MSG_RPC_RESULT_ERROR_INVALID_RPC_TYPE = "Invalid RPC Type (0b10)";
|
||||||
|
const char * TEST_MSG_RPC_RESULT_ERROR_INVALID_RPC_NUMBER = "Invalid RPC Number";
|
||||||
|
const char * TEST_MSG_RPC_RESULT_ERROR_NO_EMPTY_OR_FITTING_SLOT = "No empty or fitting slot for submitted frame";
|
||||||
|
|
||||||
|
char * mapFrameSubmitionResult2String(FrameSubmitionResult res) {
|
||||||
|
|
||||||
|
switch (res) {
|
||||||
|
case PENDING: return (char *)(TEST_MSG_RPC_RESULT_GOOD);
|
||||||
|
case COMPLEATE: return (char *) TEST_MSG_RPC_RESULT_PACKAGE_READY;
|
||||||
|
|
||||||
|
case ERROR_INVALID_RPC_TYPE: return (char *) TEST_MSG_RPC_RESULT_ERROR_INVALID_RPC_TYPE;
|
||||||
|
case ERROR_INVALID_RPC_NUMBER: return (char *) TEST_MSG_RPC_RESULT_ERROR_INVALID_RPC_NUMBER;
|
||||||
|
case ERROR_NO_EMPTY_OR_FITTING_SLOT: return (char *) TEST_MSG_RPC_RESULT_ERROR_INVALID_FRAMESUBMITIONRESULT;
|
||||||
|
}
|
||||||
|
return (char *) TEST_MSG_RPC_RESULT_ERROR_INVALID_FRAMESUBMITIONRESULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCParser::print_out_slots() {
|
||||||
|
for(int i = 0; i < NUM_SLOTS; i++) {
|
||||||
|
printf("[%d] %d%d (%x-%d) %d T%08x ", i,
|
||||||
|
buffer[i].is_complete, buffer[i].is_in_use, buffer[i].sender_address,
|
||||||
|
buffer[i].rpcNum, buffer[i].type, buffer[i].timestamp
|
||||||
|
);
|
||||||
|
|
||||||
|
for(int j = 0; j < MAX_PAGE_SIZES; j++) {
|
||||||
|
printf("%02x", buffer[i].buffer[j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf(" ");
|
||||||
|
|
||||||
|
for(int j = 0; j < 32; j++) {
|
||||||
|
printf("%d", (buffer[i].used_bit_masked >> (31-j)) & 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
|
#include "protocol.hpp"
|
||||||
|
|
||||||
|
#define MAX_PAGE_SIZES 4*7
|
||||||
|
|
||||||
|
enum FrameSubmitionResult {
|
||||||
|
PENDING,
|
||||||
|
COMPLEATE,
|
||||||
|
ERROR_INVALID_RPC_TYPE,
|
||||||
|
ERROR_INVALID_RPC_NUMBER,
|
||||||
|
ERROR_NO_EMPTY_OR_FITTING_SLOT,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_RX_PackageSlot {
|
||||||
|
char buffer[MAX_PAGE_SIZES];
|
||||||
|
|
||||||
|
bool is_complete;
|
||||||
|
bool is_in_use;
|
||||||
|
|
||||||
|
uint32_t sender_address;
|
||||||
|
enum RPCNumber rpcNum;
|
||||||
|
enum RPCType type;
|
||||||
|
uint32_t used_bit_masked;
|
||||||
|
uint32_t timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPCPackage {
|
||||||
|
char buffer[MAX_PAGE_SIZES];
|
||||||
|
size_t length;
|
||||||
|
uint32_t addr;
|
||||||
|
RPCNumber rpcNum;
|
||||||
|
RPCType type;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define NUM_SLOTS 8
|
||||||
|
|
||||||
|
class GobotRPCParser {
|
||||||
|
private:
|
||||||
|
RPC_RX_PackageSlot buffer[NUM_SLOTS];
|
||||||
|
uint32_t masked [NUM_SLOTS];
|
||||||
|
uint32_t address_mask;
|
||||||
|
|
||||||
|
size_t finishedScanIndex;
|
||||||
|
|
||||||
|
void find_fitting_slot(RPCHeader header, uint32_t addr, int * fitting_slot, int * empty_slot);
|
||||||
|
static void insertFrameInPackageSlot(RPC_RX_PackageSlot * package, char * data, size_t segment, size_t length);
|
||||||
|
void freePackageSlot(size_t index);
|
||||||
|
|
||||||
|
public:
|
||||||
|
GobotRPCParser();
|
||||||
|
|
||||||
|
void print_out_slots();
|
||||||
|
enum FrameSubmitionResult submit_frame(char * data, size_t length, uint32_t addr, uint32_t timestamp);
|
||||||
|
|
||||||
|
int getFinishedIndexPackages();
|
||||||
|
void retrivePackage(RPCPackage * dest, int index);
|
||||||
|
};
|
||||||
|
|
||||||
|
char * mapFrameSubmitionResult2String(FrameSubmitionResult res);
|
||||||
|
|
||||||
|
FrameSubmitionResult getPackageStatus(RPC_RX_PackageSlot * package);
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <map>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum RPCNumber {
|
||||||
|
Get_Info = 0x0,
|
||||||
|
Home = 0x01,
|
||||||
|
Move_Step = 0x2,
|
||||||
|
Move_XY = 0x3,
|
||||||
|
Set_Padding = 0x4,
|
||||||
|
Release_Motors = 0x5,
|
||||||
|
Drop_Stone = 0x6,
|
||||||
|
Get_Stone_Status = 0x7,
|
||||||
|
Move_Z_Axis = 0x8,
|
||||||
|
Set_Vacum = 0x9,
|
||||||
|
Invalid = 0xf
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint32_t RPC_NUMBER_MAX = 0x9;
|
||||||
|
|
||||||
|
enum RPCType {
|
||||||
|
REQUEST = 0b00,
|
||||||
|
RESPONSE_RPC = 0b01,
|
||||||
|
INVALID = 0b10,
|
||||||
|
ERROR = 0b11
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPCHeader {
|
||||||
|
RPCNumber rpcNum : 4;
|
||||||
|
RPCType type : 2;
|
||||||
|
unsigned char segment: 2;
|
||||||
|
};
|
||||||
19
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/init.cpp
Normal file
19
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/init.cpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#include "gobotrpc.hpp"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
GobotRPCParser::GobotRPCParser() {
|
||||||
|
for(int i = 0; i < NUM_SLOTS; i++) {
|
||||||
|
buffer[i].timestamp = 0;
|
||||||
|
buffer[i].is_complete = false;
|
||||||
|
buffer[i].is_in_use = false;
|
||||||
|
buffer[i].used_bit_masked = 0;
|
||||||
|
buffer[i].sender_address = 0;
|
||||||
|
buffer[i].rpcNum = Invalid;
|
||||||
|
buffer[i].type = INVALID;
|
||||||
|
|
||||||
|
memset(buffer[i].buffer, 0, MAX_PAGE_SIZES);
|
||||||
|
}
|
||||||
|
|
||||||
|
finishedScanIndex = 0;
|
||||||
|
address_mask = 0xFFFFFFFF;
|
||||||
|
}
|
||||||
64
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/protocol.cpp
Normal file
64
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/protocol.cpp
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#include "protocol.hpp"
|
||||||
|
#include "gobotrpc.hpp"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
uint32_t getRpcRequestCompleteMask(RPCNumber rpcNum) {
|
||||||
|
switch (rpcNum) {
|
||||||
|
case Get_Info: return 0b00000000000000000000000000000000;
|
||||||
|
case Home: return 0b00000000000000000000000000000011;
|
||||||
|
case Move_Step: return 0b00000000000000000000000000111111;
|
||||||
|
case Move_XY: return 0b00000000000000000000000000111111;
|
||||||
|
case Set_Padding: return 0b00000000000000001101111110111111;
|
||||||
|
case Release_Motors: return 0b00000000000000000000000001111111;
|
||||||
|
case Drop_Stone: return 0b00000000000000000000000000000000;
|
||||||
|
case Get_Stone_Status: return 0b00000000000000000000000000000000;
|
||||||
|
case Move_Z_Axis: return 0b00000000000000000000000000000001;
|
||||||
|
case Set_Vacum: return 0b00000000000000000000000000000001;
|
||||||
|
default: return 0b00000000000000000000000000000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t getRpcResponseCompleteMask(RPCNumber rpcNum) {
|
||||||
|
switch (rpcNum) {
|
||||||
|
case Get_Info: return 0b00001111111111111111111111111111;
|
||||||
|
case Home: return 0b00000000000000000000000000111111;
|
||||||
|
case Move_Step: return 0b00000000000000000000000000000000;
|
||||||
|
case Move_XY: return 0b00000000000000000000000000000000;
|
||||||
|
case Set_Padding: return 0b00000000000000000000000000000000;
|
||||||
|
case Release_Motors: return 0b00000000000000000000000000000000;
|
||||||
|
case Drop_Stone: return 0b00000000000000000000000000000000;
|
||||||
|
case Get_Stone_Status: return 0b00000000000000000000000000000000;
|
||||||
|
case Move_Z_Axis: return 0b00000000000000000000000000000000;
|
||||||
|
case Set_Vacum: return 0b00000000000000000000000000000000;
|
||||||
|
default: return 0b00000000000000000000000000000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ERROR_MASK = 0b00000000000000000000000000000000;
|
||||||
|
|
||||||
|
FrameSubmitionResult getPackageStatus(RPC_RX_PackageSlot * package) {
|
||||||
|
|
||||||
|
uint32_t mask;
|
||||||
|
|
||||||
|
switch (package->type) {
|
||||||
|
case REQUEST:
|
||||||
|
mask = getRpcRequestCompleteMask(package->rpcNum);
|
||||||
|
break;
|
||||||
|
case RESPONSE_RPC:
|
||||||
|
mask = getRpcResponseCompleteMask(package->rpcNum);
|
||||||
|
break;
|
||||||
|
case ERROR:
|
||||||
|
mask = ERROR_MASK;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return ERROR_INVALID_RPC_TYPE;
|
||||||
|
};
|
||||||
|
|
||||||
|
uint32_t masked_bits = package->used_bit_masked & mask;
|
||||||
|
|
||||||
|
if(masked_bits == mask) {
|
||||||
|
return COMPLEATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PENDING;
|
||||||
|
}
|
||||||
127
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/rx.cpp
Normal file
127
i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/rx.cpp
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
#include "gobotrpc.hpp"
|
||||||
|
#include "protocol.hpp"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
RPCHeader parseRPCHeader(char data)
|
||||||
|
{
|
||||||
|
RPCHeader header;
|
||||||
|
header.rpcNum = (RPCNumber)(data & 0b00001111);
|
||||||
|
header.type = (RPCType)((data & 0b00110000) >> 4);
|
||||||
|
header.segment = (data & 0b11000000) >> 6;
|
||||||
|
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
FrameSubmitionResult GobotRPCParser::submit_frame(char *data, size_t length, uint32_t addr, uint32_t timestamp)
|
||||||
|
{
|
||||||
|
RPCHeader header = parseRPCHeader(data[0]);
|
||||||
|
|
||||||
|
if (header.type == INVALID) {
|
||||||
|
return ERROR_INVALID_RPC_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (header.rpcNum > RPC_NUMBER_MAX) {
|
||||||
|
return ERROR_INVALID_RPC_NUMBER;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fitting_slot;
|
||||||
|
int empty_slot;
|
||||||
|
find_fitting_slot(header, addr, &fitting_slot, &empty_slot);
|
||||||
|
|
||||||
|
int slotNum;
|
||||||
|
|
||||||
|
// Check if packageSlot is complete
|
||||||
|
|
||||||
|
if (fitting_slot != -1) {
|
||||||
|
slotNum = fitting_slot;
|
||||||
|
}
|
||||||
|
else if (empty_slot != -1) {
|
||||||
|
slotNum = empty_slot;
|
||||||
|
|
||||||
|
this->buffer[slotNum].is_in_use = true;
|
||||||
|
this->buffer[slotNum].is_complete = false;
|
||||||
|
this->buffer[slotNum].sender_address = addr;
|
||||||
|
this->buffer[slotNum].rpcNum = header.rpcNum;
|
||||||
|
this->buffer[slotNum].type = header.type;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ERROR_NO_EMPTY_OR_FITTING_SLOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
insertFrameInPackageSlot(&this->buffer[slotNum], data, header.segment, length);
|
||||||
|
this->buffer[slotNum].timestamp = timestamp;
|
||||||
|
volatile FrameSubmitionResult res = getPackageStatus(&(this->buffer[slotNum]));
|
||||||
|
|
||||||
|
if (res == COMPLEATE) {
|
||||||
|
this->buffer[slotNum].is_complete = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCParser::insertFrameInPackageSlot(RPC_RX_PackageSlot *packageSlot, char *data, size_t segment, size_t length)
|
||||||
|
{
|
||||||
|
size_t offset = segment * 7;
|
||||||
|
|
||||||
|
for (int i = 0; i < length - 1; i++) {
|
||||||
|
packageSlot->buffer[offset + i] = data[i + 1];
|
||||||
|
packageSlot->used_bit_masked |= 1 << (offset + i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCParser::find_fitting_slot(RPCHeader header, uint32_t addr, int *fitting_slot, int *empty_slot)
|
||||||
|
{
|
||||||
|
uint32_t masked_addr = addr & this->address_mask;
|
||||||
|
|
||||||
|
*fitting_slot = -1;
|
||||||
|
*empty_slot = -1;
|
||||||
|
|
||||||
|
for (int i = 0; i < NUM_SLOTS; i++) {
|
||||||
|
if (this->buffer[i].is_complete) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t masked_slot_addr = this->buffer[i].sender_address & this->address_mask;
|
||||||
|
|
||||||
|
if (masked_slot_addr == masked_addr && header.rpcNum == this->buffer[i].rpcNum) {
|
||||||
|
*fitting_slot = i;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*empty_slot == -1 && !buffer[i].is_in_use) {
|
||||||
|
*empty_slot = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GobotRPCParser::getFinishedIndexPackages() {
|
||||||
|
|
||||||
|
for (int i = 0; i < NUM_SLOTS; i++) {
|
||||||
|
size_t index = (i + this->finishedScanIndex) % NUM_SLOTS;
|
||||||
|
if (this->buffer[i].is_complete) {
|
||||||
|
this->finishedScanIndex = (index + 1) % NUM_SLOTS;
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCParser::retrivePackage(RPCPackage *dest, int index) {
|
||||||
|
memcpy(dest->buffer, buffer[index].buffer, MAX_PAGE_SIZES);
|
||||||
|
dest->addr = buffer[index].sender_address;
|
||||||
|
dest->rpcNum = buffer[index].rpcNum;
|
||||||
|
dest->type = buffer[index].type;
|
||||||
|
|
||||||
|
freePackageSlot(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCParser::freePackageSlot(size_t index) {
|
||||||
|
this->buffer[index].timestamp = 0;
|
||||||
|
this->buffer[index].is_complete = false;
|
||||||
|
this->buffer[index].is_in_use = false;
|
||||||
|
this->buffer[index].used_bit_masked = 0;
|
||||||
|
this->buffer[index].sender_address = 0;
|
||||||
|
this->buffer[index].rpcNum = Invalid;
|
||||||
|
this->buffer[index].type = INVALID;
|
||||||
|
}
|
||||||
@@ -7,8 +7,53 @@
|
|||||||
|
|
||||||
#define LED_PIN 25
|
#define LED_PIN 25
|
||||||
|
|
||||||
|
#include "gobotrpc/include/gobotrpc.hpp"
|
||||||
|
|
||||||
void TaskFn(void * args) {
|
void TaskFn(void * args) {
|
||||||
|
printf("\n\n\n\n");
|
||||||
|
|
||||||
|
|
||||||
|
GobotRPCParser rpcRXParser;
|
||||||
|
|
||||||
|
char data0[] = "\x04\x01\x02\x03\x04\x05\x06";
|
||||||
|
char data1[] = "\x44\x11\x12\x13\x14\x15\x16";
|
||||||
|
char data3[] = "\x11\xaa\xbb\xcc\xdd\xee\xff";
|
||||||
|
char data2[] = "\x84\xaa\xbb";
|
||||||
|
|
||||||
|
|
||||||
|
rpcRXParser.submit_frame(data0, 7, 0x42, xTaskGetTickCount());
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
rpcRXParser.submit_frame(data3, 7, 0x43, xTaskGetTickCount());
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
rpcRXParser.submit_frame(data1, 7, 0x42, xTaskGetTickCount());
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
|
rpcRXParser.submit_frame(data3, 7, 0x43, xTaskGetTickCount());
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
rpcRXParser.submit_frame(data2, 3, 0x42, xTaskGetTickCount());
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
size_t index = rpcRXParser.getFinishedIndexPackages();
|
||||||
|
printf("Index: %d\n", index);
|
||||||
|
RPCPackage package;
|
||||||
|
rpcRXParser.retrivePackage(&package, index);
|
||||||
|
|
||||||
|
for(int i=0; i<MAX_PAGE_SIZES; i++) {
|
||||||
|
printf("%02x", package.buffer[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
rpcRXParser.print_out_slots();
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
gpio_put(LED_PIN, false);
|
gpio_put(LED_PIN, false);
|
||||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
vTaskDelay(500 / portTICK_PERIOD_MS);
|
||||||
@@ -18,19 +63,19 @@ void TaskFn(void * args) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
int main() {
|
||||||
stdio_init_all();
|
stdio_init_all();
|
||||||
|
|
||||||
|
|
||||||
gpio_init(LED_PIN);
|
gpio_init(LED_PIN);
|
||||||
gpio_set_dir(LED_PIN, true);
|
gpio_set_dir(LED_PIN, true);
|
||||||
|
|
||||||
stdio_init_all();
|
|
||||||
printf("HelloWorld!\n");
|
printf("HelloWorld!\n");
|
||||||
|
|
||||||
TaskHandle_t taskHandle;
|
TaskHandle_t taskHandle;
|
||||||
BaseType_t res = xTaskCreate(TaskFn, "UART Task", 128, NULL, 1, &taskHandle);
|
xTaskCreate(TaskFn, "UART Task", 1024, NULL, 1, &taskHandle);
|
||||||
printf("%d\n");
|
|
||||||
|
|
||||||
vTaskStartScheduler();
|
vTaskStartScheduler();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user