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
224 changed files with 37415 additions and 3002 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 (Stored with Git LFS) vendored

Binary file not shown.

BIN
.gitmodules (Stored with Git LFS) vendored

Binary file not shown.

Binary file not shown.

BIN
3d-print/slicers/BoardPositionMarker.3mf (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1 +0,0 @@
test/data/images filter=lfs diff=lfs merge=lfs -text

BIN
board-vision/.gitignore (Stored with Git LFS) vendored

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
}

BIN
board-vision/main.py (Stored with Git LFS)

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

BIN
board-vision/src/api/streaming/encoder.py (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
board-vision/src/main.py (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

BIN
board-vision/src/main_video_stream_test.py (Stored with Git LFS)

Binary file not shown.

BIN
board-vision/src/vision/board_sizes.py (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
board-vision/src/vision/preproc.py (Stored with Git LFS)

Binary file not shown.

BIN
board-vision/src/vision/preproc_fsm.py (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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 (Stored with Git 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 (Stored with Git LFS) Executable file

Binary file not shown.

Binary file not shown.

Binary file not shown.

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>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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.

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