14 Commits

Author SHA1 Message Date
AlexanderHD27
bdec2db94d Gobot RPC Stack 2024-11-27 23:29:05 +01:00
AlexanderHD27
c1dc89eb58 Implement Multi-Bus CAN Interfaces 2024-11-23 01:25:29 +01:00
AlexanderHD27
f26cc07558 Create Spec for CAN-Protocol Stack and Doc of CAN-Interface Circuit 2024-11-12 00:20:48 +01:00
AlexanderHD27
c6fd825e39 Moved CAN Interface code to comment libary folder with symlink 2024-11-06 23:14:14 +01:00
AlexanderHD27
e7a0035041 Got MCP2521 to work 2024-11-06 22:01:28 +01:00
AlexanderHD27
4bfb1f533e Did something to YGantryMount. It works. trust me 2024-10-16 21:29:35 +02:00
AlexanderHD27
5683168a47 Implemented Command-Level Interaction with CAN Interface 2024-10-16 21:28:36 +02:00
AlexanderHD27
9c0c676be8 Added Vscode Profile file 2024-10-14 09:20:37 +02:00
AlexanderHD27
b150a905a3 Implemented Low Level Compunications 2024-10-14 09:19:00 +02:00
AlexanderHD27
7eebf619ae Created Head Pipe Mount 2024-10-07 14:46:15 +02:00
AlexanderHD27
93c40e1805 First Revision of YGantryMount 2024-10-07 14:44:11 +02:00
AlexanderHD27
91c2125458 Added Kicad Backups 2 gitignore 2024-10-03 19:53:11 +02:00
AlexanderHD27
096a6c18d6 Created ESP-IDF for can-interface 2024-10-03 19:49:21 +02:00
AlexanderHD27
48fded7981 Added files from Pico sdk to gitignore 2024-09-28 19:54:29 +02:00
145 changed files with 37498 additions and 203 deletions

2
.gitattributes vendored
View File

@@ -32,5 +32,3 @@ board-vision/cnn_model/data/* filter=lfs diff=lfs merge=lfs -text
*.gto filter=lfs diff=lfs merge=lfs -text
*.drl filter=lfs diff=lfs merge=lfs -text
/motor-control/motor-driver-breakout/sym-lib-table filter=lfs diff=lfs merge=lfs -text
*.stl filter=lfs diff=lfs merge=lfs -text
*.3mf filter=lfs diff=lfs merge=lfs -text

BIN
.gitignore LFS vendored

Binary file not shown.

BIN
.gitmodules LFS vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
board-vision/.gitignore LFS vendored Normal file

Binary file not shown.

View File

@@ -1,15 +0,0 @@
{
"python.testing.pytestArgs": [
"--cov-report", "xml:cov.xml",
"--cov-report", "term",
"--cov=src",
"test",
],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true,
"coverage-gutters.coverageFileNames": [
"cov.xml",
],
"coverage-gutters.coverageBaseDir": "**",
"testing.coverageToolbarEnabled": true
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
board-vision/cnn_model/main.py LFS Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
board-vision/cnn_model/util.py LFS Normal file

Binary file not shown.

BIN
board-vision/docs/Markers.odg LFS Normal file

Binary file not shown.

BIN
board-vision/docs/Markers.pdf LFS Normal file

Binary file not shown.

View File

@@ -1,157 +0,0 @@
aioice==0.9.0
aiortc==1.9.0
anyio==4.4.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
arrow==1.3.0
asgiref==3.8.1
asttokens==2.4.1
async-lru==2.0.4
attrs==23.2.0
av==12.3.0
Babel==2.15.0
beautifulsoup4==4.12.3
bleach==6.1.0
blinker==1.8.2
certifi==2024.7.4
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
comm==0.2.2
contourpy==1.2.1
coverage==7.6.1
cramjam==2.8.3
cryptography==43.0.3
cycler==0.12.1
debugpy==1.8.2
decorator==5.1.1
defusedxml==0.7.1
dnspython==2.7.0
executing==2.0.1
fastjsonschema==2.20.0
fastparquet==2024.5.0
filelock==3.15.4
Flask==3.0.3
fonttools==4.53.1
fqdn==1.5.1
fsspec==2024.6.1
google-crc32c==1.6.0
h11==0.14.0
httpcore==1.0.5
httpx==0.27.0
idna==3.7
ifaddr==0.2.0
imageio==2.34.2
iniconfig==2.0.0
ipykernel==6.29.5
ipython==8.26.0
isoduration==20.11.0
itsdangerous==2.2.0
janus==1.0.0
jedi==0.19.1
Jinja2==3.1.4
joblib==1.4.2
json5==0.9.25
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2023.12.1
jupyter-events==0.10.0
jupyter-lsp==2.2.5
jupyter_client==8.6.2
jupyter_core==5.7.2
jupyter_server==2.14.2
jupyter_server_terminals==0.5.3
jupyterlab==4.2.4
jupyterlab_pygments==0.3.0
jupyterlab_server==2.27.3
kiwisolver==1.4.5
lazy_loader==0.4
MarkupSafe==2.1.5
matplotlib==3.9.1
matplotlib-inline==0.1.7
mistune==3.0.2
mpmath==1.3.0
nbclient==0.10.0
nbconvert==7.16.4
nbformat==5.10.4
nest-asyncio==1.6.0
networkx==3.3
notebook_shim==0.2.4
numpy==2.0.1
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==9.1.0.70
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.20.5
nvidia-nvjitlink-cu12==12.6.20
nvidia-nvtx-cu12==12.1.105
opencv-python==4.10.0.84
overrides==7.7.0
packaging==24.1
pandas==2.2.2
pandocfilters==1.5.1
parso==0.8.4
pexpect==4.9.0
pillow==10.4.0
platformdirs==4.2.2
pluggy==1.5.0
prometheus_client==0.20.0
prompt_toolkit==3.0.47
psutil==6.0.0
ptyprocess==0.7.0
pure_eval==0.2.3
pycparser==2.22
pyee==12.0.0
Pygments==2.18.0
pylibsrtp==0.10.0
pyOpenSSL==24.2.1
pyparsing==3.1.2
pytest==8.3.3
pytest-asyncio==0.24.0
pytest-cov==5.0.0
pytest-timeout==2.3.1
python-dateutil==2.9.0.post0
python-json-logger==2.0.7
pytz==2024.1
PyYAML==6.0.1
pyzmq==26.0.3
referencing==0.35.1
requests==2.32.3
rfc3339-validator==0.1.4
rfc3986-validator==0.1.1
rpds-py==0.19.1
scikit-image==0.24.0
scikit-learn==1.5.1
scipy==1.14.0
Send2Trash==1.8.3
setuptools==72.1.0
six==1.16.0
sniffio==1.3.1
soupsieve==2.5
stack-data==0.6.3
sympy==1.13.1
terminado==0.18.1
threadpoolctl==3.5.0
tifffile==2024.7.24
tinycss2==1.3.0
torch==2.4.0
torchaudio==2.4.0
torchvision==0.19.0
tornado==6.4.1
traitlets==5.14.3
triton==3.0.0
types-python-dateutil==2.9.0.20240316
typing_extensions==4.12.2
tzdata==2024.1
uri-template==1.3.0
urllib3==2.2.2
wcwidth==0.2.13
webcolors==24.6.0
webencodings==0.5.1
websocket-client==1.8.0
Werkzeug==3.0.4

Binary file not shown.

View File

@@ -0,0 +1,47 @@
FROM espressif/idf
ARG DEBIAN_FRONTEND=nointeractive
ARG CONTAINER_USER=esp
ARG USER_UID=1050
ARG USER_GID=$USER_UID
RUN apt-get update \
&& apt install -y -q \
cmake \
git \
libglib2.0-0 \
libnuma1 \
libpixman-1-0 \
&& rm -rf /var/lib/apt/lists/*
# QEMU
ENV QEMU_REL=esp_develop_8.2.0_20240122
ENV QEMU_SHA256=e7c72ef5705ad1444d391711088c8717fc89f42e9bf6d1487f9c2a326b8cfa83
ENV QEMU_DIST=qemu-xtensa-softmmu-${QEMU_REL}-x86_64-linux-gnu.tar.xz
ENV QEMU_URL=https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/${QEMU_DIST}
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN wget --no-verbose ${QEMU_URL} \
&& echo "${QEMU_SHA256} *${QEMU_DIST}" | sha256sum --check --strict - \
&& tar -xf $QEMU_DIST -C /opt \
&& rm ${QEMU_DIST}
ENV PATH=/opt/qemu/bin:${PATH}
RUN groupadd --gid $USER_GID $CONTAINER_USER \
&& adduser --uid $USER_UID --gid $USER_GID --disabled-password --gecos "" ${CONTAINER_USER} \
&& usermod -a -G root $CONTAINER_USER && usermod -a -G dialout $CONTAINER_USER
RUN chmod -R 775 /opt/esp/python_env/
USER ${CONTAINER_USER}
ENV USER=${CONTAINER_USER}
WORKDIR /home/${CONTAINER_USER}
RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc
ENTRYPOINT [ "/opt/esp/entrypoint.sh" ]
CMD ["/bin/bash", "-c"]

View File

@@ -0,0 +1,36 @@
{
"name": "ESP-IDF QEMU",
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"idf.espIdfPath": "/opt/esp/idf",
"idf.customExtraPaths": "",
"idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python",
"idf.toolsPath": "/opt/esp",
"idf.gitPath": "/usr/bin/git"
},
"extensions": [
"espressif.esp-idf-extension"
]
},
"codespaces": {
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"idf.espIdfPath": "/opt/esp/idf",
"idf.customExtraPaths": "",
"idf.pythonBinPath": "/opt/esp/python_env/idf5.4_py3.12_env/bin/python",
"idf.toolsPath": "/opt/esp",
"idf.gitPath": "/usr/bin/git"
},
"extensions": [
"espressif.esp-idf-extension",
"espressif.esp-idf-web"
]
}
},
"runArgs": ["--privileged"]
}

BIN
can-interface/.gitignore LFS vendored Normal file

Binary file not shown.

View File

@@ -0,0 +1,23 @@
{
"configurations": [
{
"name": "ESP-IDF",
"compilerPath": "${config:idf.toolsPath}/tools/xtensa-esp-elf/esp-13.2.0_20240530/xtensa-esp-elf/bin/xtensa-esp32-elf-gcc",
"compileCommands": "${config:idf.buildPath}/compile_commands.json",
"includePath": [
"${config:idf.espIdfPath}/components/**",
"${config:idf.espIdfPathWin}/components/**",
"${workspaceFolder}/**"
],
"browse": {
"path": [
"${config:idf.espIdfPath}/components",
"${config:idf.espIdfPathWin}/components",
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true
}
}
],
"version": 4
}

15
can-interface/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "gdbtarget",
"request": "attach",
"name": "Eclipse CDT GDB Adapter"
},
{
"type": "espidf",
"name": "Launch",
"request": "launch"
}
]
}

31
can-interface/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,31 @@
{
"C_Cpp.intelliSenseEngine": "default",
"idf.adapterTargetName": "esp32",
"idf.customExtraPaths": "/home/alexander/.espressif/tools/xtensa-esp-elf-gdb/14.2_20240403/xtensa-esp-elf-gdb/bin:/home/alexander/.espressif/tools/riscv32-esp-elf-gdb/14.2_20240403/riscv32-esp-elf-gdb/bin:/home/alexander/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240530/xtensa-esp-elf/bin:/home/alexander/.espressif/tools/riscv32-esp-elf/esp-13.2.0_20240530/riscv32-esp-elf/bin:/home/alexander/.espressif/tools/esp32ulp-elf/2.38_20240113/esp32ulp-elf/bin:/home/alexander/.espressif/tools/openocd-esp32/v0.12.0-esp32-20240318/openocd-esp32/bin:/home/alexander/.espressif/tools/ninja/1.11.1:/home/alexander/.espressif/tools/esp-rom-elfs/20240305",
"idf.customExtraVars": {
"OPENOCD_SCRIPTS": "/home/alexander/.espressif/tools/openocd-esp32/v0.12.0-esp32-20240318/openocd-esp32/share/openocd/scripts",
"ESP_ROM_ELF_DIR": "/home/alexander/.espressif/tools/esp-rom-elfs/20240305/"
},
"idf.espIdfPath": "/opt/esp/v5.3.1/esp-idf",
"idf.openOcdConfigs": [
"board/esp32-wrover-kit-3.3v.cfg"
],
"idf.port": "/dev/ttyUSB1",
"idf.pythonBinPath": "/home/alexander/.espressif/python_env/idf5.3_py3.12_env/bin/python",
"idf.toolsPath": "/home/alexander/.espressif",
"idf.flashType": "JTAG",
"idf.openOcdLaunchArgs": ["-c", "adapter_khz 10000"],
"files.associations": {
"*.tcc": "cpp",
"cstdint": "cpp",
"random": "cpp",
"future": "cpp",
"bitset": "cpp",
"string_view": "cpp",
"regex": "cpp",
"array": "cpp",
"string": "cpp",
"span": "cpp",
"cstring": "cpp"
}
}

259
can-interface/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,259 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build - Build project",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py build",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Set ESP-IDF Target",
"type": "shell",
"command": "${command:espIdf.setTarget}",
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "Clean - Clean the project",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py fullclean",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
]
},
{
"label": "Flash - Flash the device",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.flashBaudRate} flash",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.flashBaudRate}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
]
},
{
"label": "Monitor: Start the monitor",
"type": "shell",
"command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} monitor",
"windows": {
"command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py -p ${config:idf.portWin} monitor",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": [
{
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
],
"dependsOn": "Flash - Flash the device"
},
{
"label": "OpenOCD: Start openOCD",
"type": "shell",
"presentation": {
"echo": true,
"reveal": "never",
"focus": false,
"panel": "new"
},
"command": "openocd -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
"windows": {
"command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}"
}
}
},
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}"
}
},
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"autoDetect",
"${workspaceFolder}"
],
"pattern": {
"regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
},
{
"label": "adapter",
"type": "shell",
"command": "${config:idf.pythonBinPath}",
"isBackground": true,
"options": {
"env": {
"PATH": "${env:PATH}:${config:idf.customExtraPaths}",
"PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
}
},
"problemMatcher": {
"background": {
"beginsPattern": "\bDEBUG_ADAPTER_STARTED\b",
"endsPattern": "DEBUG_ADAPTER_READY2CONNECT",
"activeOnStart": true
},
"pattern": {
"regexp": "(\\d+)-(\\d+)-(\\d+)\\s(\\d+):(\\d+):(\\d+),(\\d+)\\s-(.+)\\s(ERROR)",
"file": 8,
"line": 2,
"column": 3,
"severity": 4,
"message": 9
}
},
"args": [
"${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter_main.py",
"-e",
"${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
"-s",
"$OPENOCD_SCRIPTS",
"-dn",
"esp32",
"-om",
"connect_to_instance",
"-t",
"xtensa-esp32-elf-"
],
"windows": {
"command": "${config:idf.pythonBinPathWin}",
"options": {
"env": {
"PATH": "${env:PATH};${config:idf.customExtraPaths}",
"PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter"
}
}
}
}
]
}

6
can-interface/CMakeLists.txt Executable file
View File

@@ -0,0 +1,6 @@
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(can-interface)

File diff suppressed because one or more lines are too long

BIN
can-interface/README.md LFS Executable file

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
<!DOCTYPE HTML><html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0; url=https://www.snapeda.com/about/import/#"> <script type="text/javascript">window.location.href="https://www.snapeda.com/about/import/#" </script> <title>Page Redirection</title> </head> <body> If you are not redirected automatically, follow this <a href="https://www.snapeda.com/about/import/#">link to the import guide</a>. </body></html>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
(sym_lib_table
(version 7)
(lib (name "ESP32-DEVKIT-V1")(type "KiCad")(uri "${KIPRJMOD}/external/ESP32-DEVKIT-V1/ESP32-DEVKIT-V1.kicad_sym")(options "")(descr ""))
)

View File

@@ -0,0 +1 @@
{"hostname":"hal","username":"alexander"}

View File

@@ -0,0 +1,8 @@
idf_component_register(SRCS
"canTP.cpp"
"gobotRPC.cpp"
INCLUDE_DIRS "include"
REQUIRES driver
REQUIRES mcp2521
REQUIRES mcp2521_hardware_interface
)

View File

@@ -0,0 +1,75 @@
#include "canTP.hpp"
#include <math.h>
#include <cstring>
void onRxHandlerWrapper(void *arg) {
SocketCANTP *socket = (SocketCANTP *)arg;
socket->onRxHandler();
}
void SocketCANTP::onRxHandler() {
uint8_t tmpBuffer[8];
rx_info info = mcp2521->get_rx_id(MCP2521_RX_BUFFER::RXB0);
mcp2521->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, tmpBuffer, info.length);
CANTP_FRAME_TYPE ft = static_cast<CANTP_FRAME_TYPE>((tmpBuffer[0] & 0xF0) >> 4);
switch (ft) {
case CANTP_FRAME_TYPE::SINGLE_FRAME:
if (userHandler) {
userHandler(tmpBuffer + 1, info.length - 1, userArg);
}
break;
case CANTP_FRAME_TYPE::FIRST_FRAME:
int sizeTotal = ((tmpBuffer[0] & 0x0F) << 8 | tmpBuffer[1]) - 6;
consecitonFrameCounter = ceil(((float)(sizeTotal)) / 7.0);
memcpy(rxBuffer, tmpBuffer + 1, 6);
sendFlowControl(CANTP_FLOW_STATUS::CLEAR_TO_SEND, blockSizes, 0);
break;
case CANTP_FRAME_TYPE::CONSECUTIVE_FRAME:
consecitonFrameCounter--;
if(consecitonFrameCounter == 0) {
if (userHandler) {
userHandler(rxBuffer, rxLength, userArg);
}
}
break;
case CANTP_FRAME_TYPE::FLOW_CONTROL:
break;
}
}
SocketCANTP::SocketCANTP(
MCP2521 *mcp2521,
uint32_t address,
bool is_extended,
uint8_t blockSizes
) {
this->mcp2521 = mcp2521;
this->address = address;
this->is_extended = is_extended;
this->rxLength = 0;
this->consecitonFrameCounter = 0;
this->blockSizes = 0;
mcp2521->register_rx0_handler(onRxHandlerWrapper, this);
}
void SocketCANTP::send(uint8_t *data, uint8_t length) {
mcp2521->prepare_tx(
MCP2521_TX_BUFFER::TXB0, address, data, length, is_extended, false);
mcp2521->request_to_send(MCP2521_TX_BUFFER::TXB0);
}
void SocketCANTP::register_rx_handler(rx_handler handler, void *arg) {
userHandler = handler;
userArg = arg;
}

View File

@@ -0,0 +1,556 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
<diagram name="Page-1" id="VLDBnTalcAr4j7jpmEzg">
<mxGraphModel dx="1024" dy="599" 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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="760" y="240" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-27" value="0" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="1" source="VN9_mGhUesFHwJ--pmr3-22" target="VN9_mGhUesFHwJ--pmr3-40">
<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;" edge="1" parent="1" source="VN9_mGhUesFHwJ--pmr3-19" target="VN9_mGhUesFHwJ--pmr3-39">
<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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="360" y="30" width="320" height="30" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-46" value="Response/&lt;div&gt;Request&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="680" y="240" width="80" 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" vertex="1" parent="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" vertex="1" parent="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" vertex="1" parent="1">
<mxGeometry x="278.57" y="880" width="640" 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" vertex="1" parent="1">
<mxGeometry x="278.57" y="900" width="80" 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" vertex="1" parent="1">
<mxGeometry x="358.57" y="900" width="80" 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" vertex="1" parent="1">
<mxGeometry x="438.57" y="900" width="80" 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" vertex="1" parent="1">
<mxGeometry x="518.57" y="900" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-71" value="4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="598.57" y="900" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-72" value="5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="678.57" y="900" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-73" value="6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="758.57" y="900" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-74" value="7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="838.57" y="900" width="80" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-76" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="277.57" y="1560" as="sourcePoint" />
<mxPoint x="277.8" y="880" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-78" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="358.57" y="1560" as="sourcePoint" />
<mxPoint x="358.57" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-79" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="438.57" y="1560" as="sourcePoint" />
<mxPoint x="437.8" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-80" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="517.57" y="1560" as="sourcePoint" />
<mxPoint x="517.8000000000001" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-81" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="597.57" y="1560" as="sourcePoint" />
<mxPoint x="597.8000000000001" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-82" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="678.57" y="1560" as="sourcePoint" />
<mxPoint x="678.57" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-83" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="758.57" y="1560" as="sourcePoint" />
<mxPoint x="758.57" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-84" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="838.57" y="1560" as="sourcePoint" />
<mxPoint x="838.57" y="900" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-85" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" y="1560" as="sourcePoint" />
<mxPoint x="918.57" y="880" 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" vertex="1" parent="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;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-63">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" y="920" as="sourcePoint" />
<mxPoint x="928.57" y="890" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" y="999.86" 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;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" y="960" as="sourcePoint" />
<mxPoint x="78.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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=1;entryDx=0;entryDy=0;fontStyle=1" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="918.57" y="1559.9999999999998" 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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920.7199999999999" y="1499.65" 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;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1460" as="sourcePoint" />
<mxPoint x="120" y="1459.9999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-230" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1420" as="sourcePoint" />
<mxPoint x="120" y="1419.9999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-231" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1379.8" as="sourcePoint" />
<mxPoint x="120" y="1379.7999999999997" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-232" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1339.8" as="sourcePoint" />
<mxPoint x="120" y="1339.7999999999997" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-233" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1299.5" as="sourcePoint" />
<mxPoint x="120" y="1299.4999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-234" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1259.75" as="sourcePoint" />
<mxPoint x="119.99999999999999" y="1259.7499999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-235" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1219.5" as="sourcePoint" />
<mxPoint x="119.99999999999999" y="1219.4999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-236" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1179.75" as="sourcePoint" />
<mxPoint x="120" y="1179.7499999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-237" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1139.75" as="sourcePoint" />
<mxPoint x="120" y="1139.7499999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-238" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1100" as="sourcePoint" />
<mxPoint x="120" y="1099.9999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-239" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="1059.75" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="923.43" y="1019.76" 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;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="979.75" 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;entryX=0;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="921.43" y="939.75" as="sourcePoint" />
<mxPoint x="120" y="939.7499999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,697 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
<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">
<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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="760" y="240" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-27" value="0" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="1" source="VN9_mGhUesFHwJ--pmr3-22" target="VN9_mGhUesFHwJ--pmr3-40">
<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;" edge="1" parent="1" source="VN9_mGhUesFHwJ--pmr3-19" target="VN9_mGhUesFHwJ--pmr3-39">
<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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="360" y="30" width="320" height="30" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-46" value="Response/&lt;div&gt;Request&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="680" y="240" width="80" 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" vertex="1" parent="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" vertex="1" parent="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" vertex="1" parent="1">
<mxGeometry x="278.57" y="880" width="640" 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" vertex="1" parent="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" vertex="1" parent="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" vertex="1" parent="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" vertex="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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" vertex="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-255">
<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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-294">
<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;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-295">
<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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-245">
<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;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-247">
<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;" edge="1" parent="1" target="VN9_mGhUesFHwJ--pmr3-246">
<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;" edge="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="161" y="1080" width="120" height="40" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-251" value="C&lt;sub&gt;1X&lt;/sub&gt;: 3b, C&lt;sub&gt;1Y&lt;/sub&gt;: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="282" y="1080" width="120" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-253" value="C&lt;sub&gt;2X&lt;/sub&gt;: 3b, C&lt;sub&gt;2Y&lt;/sub&gt;: 3b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="402" y="1080" width="120" height="20" as="geometry" />
</mxCell>
<mxCell id="VN9_mGhUesFHwJ--pmr3-254" value="N&lt;sub&gt;X&lt;/sub&gt;: 1b, N&lt;sub&gt;Y&lt;/sub&gt;: 1b" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="1" source="VN9_mGhUesFHwJ--pmr3-198">
<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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" edge="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="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;" vertex="1" parent="1">
<mxGeometry x="40" y="920" width="36.36" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,51 @@
#pragma once
#include "mcp2521_toplevel.hpp"
typedef void (*rx_handler)(uint8_t *data, uint8_t length, void *arg);
enum CANTP_FRAME_TYPE {
SINGLE_FRAME = 0b00,
FIRST_FRAME = 0b01,
CONSECUTIVE_FRAME = 0b10,
FLOW_CONTROL = 0b11
};
enum CANTP_FLOW_STATUS {
CLEAR_TO_SEND = 0b0000,
WAIT = 0b0001,
OVERLOAD = 0b0010
};
enum CAN_MULTI_FRAME_STATES {
WAITING_FOR_FIRST_FRAME,
WAITING_FOR_CONSECUTIVE_FRAME,
}
class SocketCANTP {
private:
rx_handler userHandler;
void *userArg;
MCP2521 *mcp2521;
uint32_t address;
bool is_extended;
uint8_t rxBuffer[4096];
uint8_t txBuffer[4096];
size_t rxLength;
int consecitonFrameCounter;
uint8_t blockSizes;
protected:
void sendFlowControl(CANTP_FLOW_STATUS status, uint8_t blockSize, uint8_t separationTime);
public:
SocketCANTP(MCP2521 *mcp2521, uint32_t address, bool is_extended, uint8_t blockSizes);
void send(uint8_t *data, uint8_t length);
void register_rx_handler(rx_handler handler, void *arg);
void onRxHandler();
}

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521

View File

@@ -0,0 +1 @@
/home/alexander/Projects/gobot/common-libaries/mcp2521_hardware_interface

2866
can-interface/docs/Doxyfile Normal file

File diff suppressed because it is too large Load Diff

Submodule can-interface/docs/doxygen-awesome-css added at 568f56cde6

View File

@@ -0,0 +1,7 @@
idf_component_register(SRCS "hello_world_main.cpp"
REQUIRES driver
REQUIRES mcp2521
REQUIRES mcp2521_hardware_interface
REQUIRES CAN-Protocol-Stack
REQUIRES spi_flash
INCLUDE_DIRS "")

View File

@@ -0,0 +1,7 @@
{
"folders": [
{
"path": ".."
}
]
}

View File

@@ -0,0 +1,129 @@
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "driver/spi_master.h"
#include "mcp2521.hpp"
#define SPI_PIN_SCLK GPIO_NUM_18
#define SPI_PIN_MISO GPIO_NUM_19
#define SPI_PIN_MOSI GPIO_NUM_23
#define SPI_PIN_CS0 GPIO_NUM_25
#define SPI_PIN_CS1 GPIO_NUM_27
#define CAN_INT0_PIN GPIO_NUM_5
#define CAN_INT1_PIN GPIO_NUM_26
void onRX0(void *arg) {
MCP2521 *mcp2521_0 = (MCP2521 *)arg;
rx_info info = mcp2521_0->get_rx_id(MCP2521_RX_BUFFER::RXB0);
uint8_t data[8];
mcp2521_0->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
printf("RX0: (%x) ", info.id);
for (int i = 0; i < info.length; i++) {
printf("%x ", data[i]);
}
printf("\n");
}
void onRX1(void *arg) {
MCP2521 *mcp2521_0 = (MCP2521 *)arg;
rx_info info = mcp2521_0->get_rx_id(MCP2521_RX_BUFFER::RXB0);
uint8_t data[8];
mcp2521_0->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
printf("RX1: (%x) ", info.id);
for (int i = 0; i < info.length; i++) {
printf("%x ", data[i]);
}
printf("\n");
}
extern "C" void app_main() {
printf("Hello world!\n");
const gpio_num_t LED_PIN = GPIO_NUM_2;
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
vTaskDelay(100 / portTICK_PERIOD_MS);
MCP2521_HardwareHandleFactory_ESPBus mcp2521_hardware_factory(
VSPI_HOST,
SPI_PIN_MOSI,
SPI_PIN_MISO,
SPI_PIN_SCLK
);
MCP2521_HardwareHandle_ESPBus hardware_mcp2521_0 = mcp2521_hardware_factory.create(CAN_INT0_PIN, SPI_PIN_CS0);
MCP2521_HardwareHandle_ESPBus hardware_mcp2521_1 = mcp2521_hardware_factory.create(CAN_INT1_PIN, SPI_PIN_CS1);
vTaskDelay(100 / portTICK_PERIOD_MS);
MCP2521 mcp2521_0(&hardware_mcp2521_0);
MCP2521 mcp2521_1(&hardware_mcp2521_1);
uint8_t data[4] = {0xf0, 0x42, 0x13, 0x37};
mcp2521_0.reset();
mcp2521_1.reset();
mcp2521_0.enable_interrupts(true, true, true, true, true, true, true, true);
mcp2521_1.enable_interrupts(true, true, true, true, true, true, true, true);
mcp2521_0.register_rx0_handler(onRX0, &mcp2521_0);
mcp2521_1.register_rx0_handler(onRX1, &mcp2521_1);
mcp2521_0.register_rx1_handler(onRX0, &mcp2521_0);
mcp2521_1.register_rx1_handler(onRX1, &mcp2521_1);
mcp2521_0.set_mode_of_operation(MCP2521_OPERATION_MODE::NORMAL, true);
mcp2521_1.set_mode_of_operation(MCP2521_OPERATION_MODE::NORMAL, true);
printf("CANSTAT0: %x\n", mcp2521_0.read_reg(MCP2521_CANSTAT));
printf("CANSTAT1: %x\n", mcp2521_1.read_reg(MCP2521_CANSTAT));
vTaskDelay(20 / portTICK_PERIOD_MS);
mcp2521_0.prepare_tx(
MCP2521_TX_BUFFER::TXB0, 0x042, data, 4, false, false);
vTaskDelay(20 / portTICK_PERIOD_MS);
mcp2521_0.request_to_send(MCP2521_TX_BUFFER::TXB0);
//vTaskDelay(10 / portTICK_PERIOD_MS);
//mcp2521_1.request_to_send(MCP2521_TX_BUFFER::TXB0);
//mcp2521_0.set_tx_id(MCP2521_TX_BUFFER::TXB0, 0x041, false);
//mcp2521_0.request_to_send(MCP2521_TX_BUFFER::TXB0);
vTaskDelay(20 / portTICK_PERIOD_MS);
bool flag = true;
while (true) {
gpio_set_level(LED_PIN, flag);
flag = !flag;
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}

Binary file not shown.

Binary file not shown.

BIN
can-interface/pytest_hello_world.py LFS Executable file

Binary file not shown.

2008
can-interface/sdkconfig Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More