Did stuff
This commit is contained in:
7
can-interface/.vscode/settings.json
vendored
7
can-interface/.vscode/settings.json
vendored
@@ -10,11 +10,12 @@
|
|||||||
"idf.openOcdConfigs": [
|
"idf.openOcdConfigs": [
|
||||||
"board/esp32-wrover-kit-3.3v.cfg"
|
"board/esp32-wrover-kit-3.3v.cfg"
|
||||||
],
|
],
|
||||||
"idf.port": "/dev/ttyUSB1",
|
"idf.port": "/dev/ttyUSB0",
|
||||||
"idf.pythonBinPath": "/home/alexander/.espressif/python_env/idf5.3_py3.12_env/bin/python",
|
"idf.pythonBinPath": "/home/alexander/.espressif/python_env/idf5.3_py3.12_env/bin/python",
|
||||||
"idf.toolsPath": "/home/alexander/.espressif",
|
"idf.toolsPath": "/home/alexander/.espressif",
|
||||||
"idf.flashType": "JTAG",
|
"idf.flashType": "UART",
|
||||||
"idf.openOcdLaunchArgs": ["-c", "adapter_khz 10000"],
|
"idf.openOcdLaunchArgs": ["-c", "adapter_khz 1000"],
|
||||||
|
"idf.openOcdDebugLevel": 2,
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.tcc": "cpp",
|
"*.tcc": "cpp",
|
||||||
"cstdint": "cpp",
|
"cstdint": "cpp",
|
||||||
|
|||||||
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-11-30_000501.zip
(Stored with Git LFS)
Normal file
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-11-30_000501.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-11-30_140231.zip
(Stored with Git LFS)
Normal file
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-11-30_140231.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-12-22_095043.zip
(Stored with Git LFS)
Normal file
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-12-22_095043.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-12-27_204815.zip
(Stored with Git LFS)
Normal file
BIN
can-interface/circuit/gobot-can-interface/gobot-can-interface-backups/gobot-can-interface-2024-12-27_204815.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
{"hostname":"hal","username":"alexander"}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
idf_component_register(SRCS
|
|
||||||
"canTP.cpp"
|
|
||||||
"gobotRPC.cpp"
|
|
||||||
INCLUDE_DIRS "include"
|
|
||||||
REQUIRES driver
|
|
||||||
REQUIRES mcp2521
|
|
||||||
REQUIRES mcp2521_hardware_interface
|
|
||||||
)
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
#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;
|
|
||||||
}
|
|
||||||
@@ -1,556 +0,0 @@
|
|||||||
<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/<div>Request</div>" 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>
|
|
||||||
@@ -1,697 +0,0 @@
|
|||||||
<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/<div>Request</div>" 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<sub>1X</sub>: 3b, C<sub>1Y</sub>: 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<sub>2X</sub>: 3b, C<sub>2Y</sub>: 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<sub>X</sub>: 1b, N<sub>Y</sub>: 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>
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
#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();
|
|
||||||
}
|
|
||||||
1
can-interface/components/gobot_rpc
Symbolic link
1
can-interface/components/gobot_rpc
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/alexander/Projects/gobot/common-libaries/gobot_rpc
|
||||||
@@ -2,6 +2,6 @@ idf_component_register(SRCS "hello_world_main.cpp"
|
|||||||
REQUIRES driver
|
REQUIRES driver
|
||||||
REQUIRES mcp2521
|
REQUIRES mcp2521
|
||||||
REQUIRES mcp2521_hardware_interface
|
REQUIRES mcp2521_hardware_interface
|
||||||
REQUIRES CAN-Protocol-Stack
|
REQUIRES gobot_rpc
|
||||||
REQUIRES spi_flash
|
REQUIRES spi_flash
|
||||||
INCLUDE_DIRS "")
|
INCLUDE_DIRS "")
|
||||||
|
|||||||
@@ -34,32 +34,32 @@
|
|||||||
#define CAN_INT1_PIN GPIO_NUM_26
|
#define CAN_INT1_PIN GPIO_NUM_26
|
||||||
|
|
||||||
void onRX0(void *arg) {
|
void onRX0(void *arg) {
|
||||||
MCP2521 *mcp2521_0 = (MCP2521 *)arg;
|
MCP2521 *mcp2521 = (MCP2521 *)arg;
|
||||||
|
|
||||||
rx_info info = mcp2521_0->get_rx_id(MCP2521_RX_BUFFER::RXB0);
|
rx_info info = mcp2521->get_rx_id(MCP2521_RX_BUFFER::RXB0);
|
||||||
uint8_t data[8];
|
uint8_t data[8];
|
||||||
|
|
||||||
mcp2521_0->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
|
//mcp2521->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
|
||||||
|
|
||||||
printf("RX0: (%x) ", info.id);
|
printf("RX0: (%x) ", info.id);
|
||||||
for (int i = 0; i < info.length; i++) {
|
//for (int i = 0; i < 8; i++) {
|
||||||
printf("%x ", data[i]);
|
// printf("%x ", data[i]);
|
||||||
}
|
//}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void onRX1(void *arg) {
|
void onRX1(void *arg) {
|
||||||
MCP2521 *mcp2521_0 = (MCP2521 *)arg;
|
MCP2521 *mcp2521 = (MCP2521 *)arg;
|
||||||
|
|
||||||
rx_info info = mcp2521_0->get_rx_id(MCP2521_RX_BUFFER::RXB0);
|
rx_info info = mcp2521->get_rx_id(MCP2521_RX_BUFFER::RXB0);
|
||||||
uint8_t data[8];
|
uint8_t data[8];
|
||||||
|
|
||||||
mcp2521_0->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
|
//mcp2521->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
|
||||||
|
|
||||||
printf("RX1: (%x) ", info.id);
|
printf("RX1: (%x) ", info.id);
|
||||||
for (int i = 0; i < info.length; i++) {
|
//for (int i = 0; i < 8; i++) {
|
||||||
printf("%x ", data[i]);
|
// printf("%x ", data[i]);
|
||||||
}
|
//}
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ extern "C" void app_main() {
|
|||||||
MCP2521 mcp2521_0(&hardware_mcp2521_0);
|
MCP2521 mcp2521_0(&hardware_mcp2521_0);
|
||||||
MCP2521 mcp2521_1(&hardware_mcp2521_1);
|
MCP2521 mcp2521_1(&hardware_mcp2521_1);
|
||||||
|
|
||||||
uint8_t data[4] = {0xf0, 0x42, 0x13, 0x37};
|
uint8_t data[8] = {0x1, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
|
||||||
|
|
||||||
mcp2521_0.reset();
|
mcp2521_0.reset();
|
||||||
mcp2521_1.reset();
|
mcp2521_1.reset();
|
||||||
@@ -98,23 +98,28 @@ extern "C" void app_main() {
|
|||||||
mcp2521_0.register_rx1_handler(onRX0, &mcp2521_0);
|
mcp2521_0.register_rx1_handler(onRX0, &mcp2521_0);
|
||||||
mcp2521_1.register_rx1_handler(onRX1, &mcp2521_1);
|
mcp2521_1.register_rx1_handler(onRX1, &mcp2521_1);
|
||||||
|
|
||||||
mcp2521_0.set_mode_of_operation(MCP2521_OPERATION_MODE::NORMAL, true);
|
mcp2521_0.set_mode_of_operation(MCP2521_OPERATION_MODE::LOOPBACK, true);
|
||||||
mcp2521_1.set_mode_of_operation(MCP2521_OPERATION_MODE::NORMAL, true);
|
mcp2521_1.set_mode_of_operation(MCP2521_OPERATION_MODE::LOOPBACK, true);
|
||||||
|
|
||||||
printf("CANSTAT0: %x\n", mcp2521_0.read_reg(MCP2521_CANSTAT));
|
//printf("CANSTAT0: %x\n", mcp2521_0.read_reg(MCP2521_CANSTAT));
|
||||||
printf("CANSTAT1: %x\n", mcp2521_1.read_reg(MCP2521_CANSTAT));
|
//printf("CANSTAT1: %x\n", mcp2521_1.read_reg(MCP2521_CANSTAT));
|
||||||
|
|
||||||
vTaskDelay(20 / portTICK_PERIOD_MS);
|
vTaskDelay(20 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
mcp2521_0.prepare_tx(
|
mcp2521_1.prepare_tx(
|
||||||
MCP2521_TX_BUFFER::TXB0, 0x042, data, 4, false, false);
|
MCP2521_TX_BUFFER::TXB0, 0x042, data, 8, false, false);
|
||||||
|
//mcp2521_1.prepare_tx(
|
||||||
|
// MCP2521_TX_BUFFER::TXB0, 0x041, data, 4, false, false);
|
||||||
|
|
||||||
|
|
||||||
vTaskDelay(20 / portTICK_PERIOD_MS);
|
vTaskDelay(20 / portTICK_PERIOD_MS);
|
||||||
mcp2521_0.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
mcp2521_1.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
||||||
//vTaskDelay(10 / portTICK_PERIOD_MS);
|
//vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||||
//mcp2521_1.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
//mcp2521_1.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
||||||
|
|
||||||
//mcp2521_0.set_tx_id(MCP2521_TX_BUFFER::TXB0, 0x041, false);
|
//vTaskDelay(20 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
|
//mcp2521_0.set_tx_id(MCP2521_TX_BUFFER::TXB0, 0x042, false);
|
||||||
//mcp2521_0.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
//mcp2521_0.request_to_send(MCP2521_TX_BUFFER::TXB0);
|
||||||
|
|
||||||
vTaskDelay(20 / portTICK_PERIOD_MS);
|
vTaskDelay(20 / portTICK_PERIOD_MS);
|
||||||
|
|||||||
10
common-libaries/gobot_rpc/CMakeLists.txt
Normal file
10
common-libaries/gobot_rpc/CMakeLists.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
idf_component_register(SRCS
|
||||||
|
"gobot_rpc_sender.cpp"
|
||||||
|
"gobot_rpc_receiver.cpp"
|
||||||
|
"gobot_rpc_statemaschine.cpp"
|
||||||
|
"gobot_rpc_numberMap.cpp"
|
||||||
|
"gobot_rpc_transiver.cpp"
|
||||||
|
REQUIRES mcp2521
|
||||||
|
REQUIRES mcp2521_hardware_interface
|
||||||
|
REQUIRES driver
|
||||||
|
INCLUDE_DIRS "include")
|
||||||
19
common-libaries/gobot_rpc/gobot_rpc_numberMap.cpp
Normal file
19
common-libaries/gobot_rpc/gobot_rpc_numberMap.cpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#include "gobot_rpc.hpp"
|
||||||
|
#include "protocol_spec.hpp"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
GobotRPCNumberMap::GobotRPCNumberMap() {
|
||||||
|
memset(rpc_number_map, 0xffffffff, 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
GobotRPCNumberMap::~GobotRPCNumberMap() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCNumberMap::set(RpcNum rpc_num, uint32_t id) {
|
||||||
|
rpc_number_map[(int)rpc_num] = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t GobotRPCNumberMap::get(RpcNum rpc_num) {
|
||||||
|
return rpc_number_map[(int)rpc_num];
|
||||||
|
}
|
||||||
43
common-libaries/gobot_rpc/gobot_rpc_receiver.cpp
Normal file
43
common-libaries/gobot_rpc/gobot_rpc_receiver.cpp
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
#include <string.h>
|
||||||
|
#include "gobot_rpc.hpp"
|
||||||
|
#include "sm.hpp"
|
||||||
|
#include "protocol_spec.hpp"
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
|
||||||
|
GobotRPCReciver::GobotRPCReciver(MCP2521 * can_interface) {
|
||||||
|
this->can_interface = can_interface;
|
||||||
|
this->state_mashine = GobotRPCStateMashine();
|
||||||
|
|
||||||
|
can_interface->register_rx0_handler(onRX0_GoboRPC, can_interface);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void onRX0_GoboRPC(void *arg) {
|
||||||
|
GobotRPCReciver *rpc_socket = (GobotRPCReciver *)arg;
|
||||||
|
rpc_socket->onRX();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCReciver::onRX() {
|
||||||
|
rx_info info = can_interface->get_rx_id(MCP2521_RX_BUFFER::RXB0);
|
||||||
|
uint8_t data[8];
|
||||||
|
|
||||||
|
can_interface->read_rx_buf(MCP2521_RX_BUFFER::RXB0, MCP2521_BUFFER_TYPE::DATA, data, info.length);
|
||||||
|
|
||||||
|
RPCFrame frame;
|
||||||
|
memcpy(((char *)data) + 1, (char *)frame.data, 7);
|
||||||
|
frame.header = (RPCHeader)(data[0]);
|
||||||
|
|
||||||
|
SMResult smResult;
|
||||||
|
state_mashine.submitFrame(&frame, &smResult);
|
||||||
|
|
||||||
|
if(smResult.done) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCReciver::registerOnDoneFrameHandler(GobotRPCHandler_t handler, void * arg) {
|
||||||
|
onDoneFrameHandler = handler;
|
||||||
|
argOnDoneFrameHandler = arg;
|
||||||
|
}
|
||||||
|
|
||||||
74
common-libaries/gobot_rpc/gobot_rpc_statemaschine.cpp
Normal file
74
common-libaries/gobot_rpc/gobot_rpc_statemaschine.cpp
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#include "sm.hpp"
|
||||||
|
#include "protocol_spec.hpp"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
GobotRPCStateMashine::GobotRPCStateMashine() {
|
||||||
|
memset(requestDataBuffer, 0, REQUEST_DATA_BUFFER_SIZE*sizeof(uint8_t)*SLOTS);
|
||||||
|
memset(responseDataBuffer, 0, RESPONSE_DATA_BUFFER_SIZE*sizeof(uint8_t)*SLOTS);
|
||||||
|
memset(errorDataBuffer, 0, RESPONSE_DATA_BUFFER_SIZE*sizeof(uint8_t)*SLOTS);
|
||||||
|
|
||||||
|
memset(requestSegmentArrivedFlags, 0, sizeof(uint8_t)*SLOTS);
|
||||||
|
memset(responseSegmentArrivedFlags, 0, sizeof(uint8_t)*SLOTS);
|
||||||
|
memset(errorSegmentArrivedFlags, 0, sizeof(uint8_t)*SLOTS);
|
||||||
|
|
||||||
|
slotCounter = 0;
|
||||||
|
rpc_number_map = GobotRPCNumberMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCStateMashine::registerRPC(RpcNum rpc_num) {
|
||||||
|
rpc_number_map.set(rpc_num, slotCounter);
|
||||||
|
slotCounter = (slotCounter + 1) % SLOTS;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GobotRPCStateMashine::submitFrame(RPCFrame * frame, SMResult * result) {
|
||||||
|
RpcNum rpcNum = (RpcNum)(frame->header.rpc_num);
|
||||||
|
|
||||||
|
result->done = false;
|
||||||
|
result->rpc_num = rpcNum;
|
||||||
|
|
||||||
|
if(rpcNum == RpcNum::INVALID)
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t slot = rpc_number_map.get(rpcNum);
|
||||||
|
if (slot == 0xffffffff)
|
||||||
|
return;
|
||||||
|
|
||||||
|
uint8_t segNum = frame->header.rpc_segement;
|
||||||
|
|
||||||
|
if(frame->header.error) {
|
||||||
|
memcpy(result->data, frame->data, 7);
|
||||||
|
errorSegmentArrivedFlags[slot] |= (1 << segNum);
|
||||||
|
|
||||||
|
result->done = true;
|
||||||
|
result->type = RPCPackageType::ERROR;
|
||||||
|
|
||||||
|
} else if(frame->header.response) {
|
||||||
|
memcpy(responseDataBuffer[slot] + segNum, frame->data, 7);
|
||||||
|
responseSegmentArrivedFlags[slot] |= (1 << segNum);
|
||||||
|
|
||||||
|
uint8_t mask = SEGMENT_MASK_RESPONSE[(int)rpcNum];
|
||||||
|
|
||||||
|
if(((responseSegmentArrivedFlags[slot] & mask) ^ mask) == 0) {
|
||||||
|
responseSegmentArrivedFlags[slot] = 0;
|
||||||
|
|
||||||
|
result->done = true;
|
||||||
|
memcpy(result->data, responseDataBuffer[slot], 7*4);
|
||||||
|
result->type = RPCPackageType::RESPONSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
memcpy(requestDataBuffer[slot] + segNum, frame->data, 7);
|
||||||
|
requestSegmentArrivedFlags[slot] |= (1 << segNum);
|
||||||
|
|
||||||
|
uint8_t mask = SEGMENT_MASK_RESPONSE[(int)rpcNum];
|
||||||
|
|
||||||
|
if(((requestSegmentArrivedFlags[slot] & mask) ^ mask) == 0) {
|
||||||
|
requestSegmentArrivedFlags[slot] = 0;
|
||||||
|
|
||||||
|
result->done = true;
|
||||||
|
memcpy(result->data, requestDataBuffer[slot], 7*4);
|
||||||
|
result->type = RPCPackageType::REQUEST;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
56
common-libaries/gobot_rpc/include/gobot_rpc.hpp
Normal file
56
common-libaries/gobot_rpc/include/gobot_rpc.hpp
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "protocol_spec.hpp"
|
||||||
|
#include "mcp2521.hpp"
|
||||||
|
#include "sm.hpp"
|
||||||
|
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef void (*GobotRPCHandler_t)(void *);
|
||||||
|
typedef void (*GobotRPCFrameHandler)(void *, RPCFrame *);
|
||||||
|
|
||||||
|
class GobotRPCReciver {
|
||||||
|
protected:
|
||||||
|
MCP2521 * can_interface;
|
||||||
|
GobotRPCStateMashine state_mashine;
|
||||||
|
|
||||||
|
GobotRPCHandler_t onDoneFrameHandler;
|
||||||
|
void * argOnDoneFrameHandler;
|
||||||
|
|
||||||
|
public:
|
||||||
|
GobotRPCReciver(MCP2521 * can_interface);
|
||||||
|
~GobotRPCReciver();
|
||||||
|
|
||||||
|
void onRX();
|
||||||
|
|
||||||
|
void registerOnDoneFrameHandler(GobotRPCHandler_t handler, void * arg);
|
||||||
|
};
|
||||||
|
|
||||||
|
void onRX0_GoboRPC(void *arg);
|
||||||
|
|
||||||
|
class GoboRPCTransiver {
|
||||||
|
private:
|
||||||
|
MCP2521 * can_interface;
|
||||||
|
GobotRPCReciver rx;
|
||||||
|
|
||||||
|
GobotRPCHandler_t onRequestHandler;
|
||||||
|
GobotRPCHandler_t onResponseHandler;
|
||||||
|
GobotRPCHandler_t onResponseErrorHandler;
|
||||||
|
|
||||||
|
void * argOnRequestHandler;
|
||||||
|
void * argOnResponseHandler;
|
||||||
|
void * argOnResponseErrorHandler;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
GoboRPCTransiver(MCP2521 * can_interface);
|
||||||
|
~GoboRPCTransiver();
|
||||||
|
|
||||||
|
void send(RPCFrame * frame);
|
||||||
|
|
||||||
|
void registerOnRequestHandler(GobotRPCHandler_t handler, void * arg);
|
||||||
|
void registerOnResponseHandler(GobotRPCHandler_t handler, void * arg);
|
||||||
|
void registerOnResponseErrorHandler(GobotRPCHandler_t handler, void * arg);
|
||||||
|
};
|
||||||
123
common-libaries/gobot_rpc/include/protocol_spec.hpp
Normal file
123
common-libaries/gobot_rpc/include/protocol_spec.hpp
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
enum RpcNum {
|
||||||
|
Get_Info = 0x0,
|
||||||
|
Home = 0x1,
|
||||||
|
Move_Step = 0x2,
|
||||||
|
Move_XY = 0x3,
|
||||||
|
Set_Padding = 0x4,
|
||||||
|
Release_Motors = 0x5,
|
||||||
|
Drop_Stones = 0x6,
|
||||||
|
Get_Stone_Status = 0x7,
|
||||||
|
Mov_Z_Axis = 0x8,
|
||||||
|
Set_Vacum = 0x9,
|
||||||
|
INVALID = 0xF,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPCHeader {
|
||||||
|
unsigned char rpc_num : 4;
|
||||||
|
unsigned char response : 1;
|
||||||
|
unsigned char error : 1;
|
||||||
|
unsigned char rpc_segement : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPCFrame {
|
||||||
|
RPCHeader header;
|
||||||
|
uint8_t data[7];
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RPC_Node_Type {
|
||||||
|
NODE_ALL = 0x0,
|
||||||
|
NODE_CORE_XY = 0x1,
|
||||||
|
NODE_HEAD = 0x2,
|
||||||
|
NODE_VACUM = 0x3,
|
||||||
|
};
|
||||||
|
|
||||||
|
// RPC Request and Response structures
|
||||||
|
struct RPC_RES_Get_Info {
|
||||||
|
uint32_t can_address;
|
||||||
|
RPC_Node_Type node_type;
|
||||||
|
uint32_t status;
|
||||||
|
uint32_t error;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum RPC_Home_Corner {
|
||||||
|
HOME_CORNER_0 = 0b00,
|
||||||
|
HOME_CORNER_1 = 0b01,
|
||||||
|
HOME_CORNER_2 = 0b10,
|
||||||
|
HOME_CORNER_3 = 0b11,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_REQ_Home {
|
||||||
|
RPC_Home_Corner corner;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_RES_Home {
|
||||||
|
uint32_t x;
|
||||||
|
uint32_t y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_REQ_Move_Step {
|
||||||
|
int32_t x;
|
||||||
|
int32_t y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_RES_Move_Step {
|
||||||
|
uint32_t x;
|
||||||
|
uint32_t y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_REQ_Set_Padding {
|
||||||
|
uint32_t c_1x;
|
||||||
|
uint32_t c_1y;
|
||||||
|
uint32_t c_2x;
|
||||||
|
uint32_t c_2y;
|
||||||
|
uint8_t n_x;
|
||||||
|
uint8_t n_y;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_REQ_Move_Z_Axis {
|
||||||
|
bool up;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct RPC_REQ_Set_Vacum {
|
||||||
|
bool on;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Segment3, Segment2, Segment1, Segment0
|
||||||
|
const uint8_t SEGMENT_MASK_REQUEST[16] = {
|
||||||
|
0b0001, // Get_Info
|
||||||
|
0b0001, // Home
|
||||||
|
0b0001, // Move_Step
|
||||||
|
0b0001, // Move_XY
|
||||||
|
0b0111, // Set_Padding
|
||||||
|
0b0001, // Release_Motors
|
||||||
|
0b0001, // Drop_Stones
|
||||||
|
0b0001, // Get_Stone_Status
|
||||||
|
0b0001, // Mov_Z_Axis
|
||||||
|
0b0001, // Set_Vacum
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t SEGMENT_MASK_RESPONSE[16] = {
|
||||||
|
0b0001, // Get_Info
|
||||||
|
0b0001, // Home
|
||||||
|
0b0001, // Move_Step
|
||||||
|
0b0001, // Move_XY
|
||||||
|
0b0001, // Set_Padding
|
||||||
|
0b0001, // Release_Motors
|
||||||
|
0b0001, // Drop_Stones
|
||||||
|
0b0001, // Get_Stone_Status
|
||||||
|
0b0001, // Mov_Z_Axis
|
||||||
|
0b0001, // Set_Vacum
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
0b0001, //
|
||||||
|
};
|
||||||
58
common-libaries/gobot_rpc/include/sm.hpp
Normal file
58
common-libaries/gobot_rpc/include/sm.hpp
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "protocol_spec.hpp"
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
|
class GobotRPCNumberMap {
|
||||||
|
private:
|
||||||
|
int32_t rpc_number_map[16];
|
||||||
|
public:
|
||||||
|
GobotRPCNumberMap();
|
||||||
|
~GobotRPCNumberMap();
|
||||||
|
|
||||||
|
void set(RpcNum rpc_num, uint32_t id);
|
||||||
|
uint32_t get(RpcNum rpc_num);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum RPCPackageType {
|
||||||
|
REQUEST,
|
||||||
|
RESPONSE,
|
||||||
|
ERROR
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SMResult {
|
||||||
|
bool done;
|
||||||
|
uint8_t data[7*4];
|
||||||
|
RpcNum rpc_num;
|
||||||
|
RPCPackageType type;
|
||||||
|
};
|
||||||
|
|
||||||
|
class GobotRPCStateMashine {
|
||||||
|
private:
|
||||||
|
static const size_t SLOTS = 6;
|
||||||
|
static const size_t REQUEST_DATA_BUFFER_SIZE = 7*4;
|
||||||
|
static const size_t RESPONSE_DATA_BUFFER_SIZE = 7*4;
|
||||||
|
|
||||||
|
|
||||||
|
GobotRPCNumberMap rpc_number_map;
|
||||||
|
size_t slotCounter;
|
||||||
|
|
||||||
|
uint8_t requestDataBuffer[REQUEST_DATA_BUFFER_SIZE][SLOTS];
|
||||||
|
bool requestSegmentArrivedFlags [SLOTS];
|
||||||
|
|
||||||
|
uint8_t responseDataBuffer[RESPONSE_DATA_BUFFER_SIZE][SLOTS];
|
||||||
|
uint8_t responseSegmentArrivedFlags [SLOTS];
|
||||||
|
|
||||||
|
uint8_t errorDataBuffer[RESPONSE_DATA_BUFFER_SIZE][SLOTS];
|
||||||
|
uint8_t errorSegmentArrivedFlags [SLOTS];
|
||||||
|
|
||||||
|
public:
|
||||||
|
GobotRPCStateMashine();
|
||||||
|
~GobotRPCStateMashine();
|
||||||
|
|
||||||
|
void registerRPC(RpcNum rpc_num);
|
||||||
|
|
||||||
|
void submitFrame(RPCFrame * frame, SMResult * result);
|
||||||
|
|
||||||
|
};
|
||||||
@@ -76,7 +76,7 @@ void MCP2521_HardwareHandle_ESP::read(uint8_t cmd, uint8_t *data, size_t length)
|
|||||||
.addr = 0,
|
.addr = 0,
|
||||||
.length = 8*length,
|
.length = 8*length,
|
||||||
.rxlength = 8*length,
|
.rxlength = 8*length,
|
||||||
.tx_buffer = NULL,
|
.tx_buffer = null_buffer,
|
||||||
.rx_buffer = data
|
.rx_buffer = data
|
||||||
},
|
},
|
||||||
.command_bits = 8,
|
.command_bits = 8,
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ void MCP2521_HardwareHandle_ESP::initSPIDevice(
|
|||||||
// Learned this the hard way
|
// Learned this the hard way
|
||||||
.cs_ena_pretrans = 0,
|
.cs_ena_pretrans = 0,
|
||||||
.cs_ena_posttrans = 0,
|
.cs_ena_posttrans = 0,
|
||||||
.clock_speed_hz = 10000,
|
.clock_speed_hz = 2000,
|
||||||
|
|
||||||
.spics_io_num = cs,
|
.spics_io_num = cs,
|
||||||
.flags = SPI_DEVICE_NO_DUMMY,
|
.flags = SPI_DEVICE_NO_DUMMY,
|
||||||
|
|||||||
47
stone-dispencer/.devcontainer/Dockerfile
Normal file
47
stone-dispencer/.devcontainer/Dockerfile
Normal 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"]
|
||||||
36
stone-dispencer/.devcontainer/devcontainer.json
Normal file
36
stone-dispencer/.devcontainer/devcontainer.json
Normal 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
stone-dispencer/.gitignore
(Stored with Git LFS)
vendored
Normal file
BIN
stone-dispencer/.gitignore
(Stored with Git LFS)
vendored
Normal file
Binary file not shown.
23
stone-dispencer/.vscode/c_cpp_properties.json
vendored
Normal file
23
stone-dispencer/.vscode/c_cpp_properties.json
vendored
Normal 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
stone-dispencer/.vscode/launch.json
vendored
Normal file
15
stone-dispencer/.vscode/launch.json
vendored
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
38
stone-dispencer/.vscode/settings.json
vendored
Normal file
38
stone-dispencer/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"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/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.2/esp-idf",
|
||||||
|
"idf.openOcdConfigs": [
|
||||||
|
"board/esp32-wrover-kit-3.3v.cfg"
|
||||||
|
],
|
||||||
|
"idf.port": "/dev/ttyUSB1",
|
||||||
|
"idf.toolsPath": "/home/alexander/.espressif",
|
||||||
|
"idf.flashType": "JTAG",
|
||||||
|
"idf.openOcdLaunchArgs": [
|
||||||
|
"-c",
|
||||||
|
"adapter speed 1000"
|
||||||
|
],
|
||||||
|
"files.associations": {
|
||||||
|
"*.tcc": "c",
|
||||||
|
"charconv": "c",
|
||||||
|
"chrono": "c",
|
||||||
|
"optional": "c",
|
||||||
|
"format": "c",
|
||||||
|
"ratio": "c",
|
||||||
|
"system_error": "c",
|
||||||
|
"array": "c",
|
||||||
|
"functional": "c",
|
||||||
|
"regex": "c",
|
||||||
|
"tuple": "c",
|
||||||
|
"type_traits": "c",
|
||||||
|
"utility": "c",
|
||||||
|
"esp_chip_info.h": "c",
|
||||||
|
"random": "cpp",
|
||||||
|
"future": "cpp"
|
||||||
|
},
|
||||||
|
}
|
||||||
259
stone-dispencer/.vscode/tasks.json
vendored
Normal file
259
stone-dispencer/.vscode/tasks.json
vendored
Normal 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
stone-dispencer/CMakeLists.txt
Executable file
6
stone-dispencer/CMakeLists.txt
Executable 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(stone-dispencer)
|
||||||
BIN
stone-dispencer/README.md
(Stored with Git LFS)
Executable file
BIN
stone-dispencer/README.md
(Stored with Git LFS)
Executable file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_000515.zip
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_000515.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_012246.zip
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_012246.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_162859.zip
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-11-30_162859.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-12-21_233822.zip
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer-backups/stone-dispencer-2024-12-21_233822.zip
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_pcb
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_pcb
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_prl
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_prl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_pro
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_pro
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_sch
(Stored with Git LFS)
Normal file
BIN
stone-dispencer/circuit/stone-dispencer/stone-dispencer.kicad_sch
(Stored with Git LFS)
Normal file
Binary file not shown.
4
stone-dispencer/circuit/stone-dispencer/sym-lib-table
Normal file
4
stone-dispencer/circuit/stone-dispencer/sym-lib-table
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
(sym_lib_table
|
||||||
|
(version 7)
|
||||||
|
(lib (name "ESP32-DEVKIT-V1")(type "KiCad")(uri "/home/alexander/Projects/gobot/can-interface/circuit/gobot-can-interface/external/ESP32-DEVKIT-V1/ESP32-DEVKIT-V1.kicad_sym")(options "")(descr ""))
|
||||||
|
)
|
||||||
1
stone-dispencer/components/gobot_rpc
Symbolic link
1
stone-dispencer/components/gobot_rpc
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/alexander/Projects/gobot/common-libaries/gobot_rpc
|
||||||
1
stone-dispencer/components/mcp2521
Symbolic link
1
stone-dispencer/components/mcp2521
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/alexander/Projects/gobot/common-libaries/mcp2521
|
||||||
1
stone-dispencer/components/mcp2521_hardware_interface
Symbolic link
1
stone-dispencer/components/mcp2521_hardware_interface
Symbolic link
@@ -0,0 +1 @@
|
|||||||
|
/home/alexander/Projects/gobot/common-libaries/mcp2521_hardware_interface
|
||||||
5
stone-dispencer/main/CMakeLists.txt
Executable file
5
stone-dispencer/main/CMakeLists.txt
Executable file
@@ -0,0 +1,5 @@
|
|||||||
|
idf_component_register(SRCS "hello_world_main.cpp"
|
||||||
|
REQUIRES mcp2521
|
||||||
|
REQUIRES mcp2521_hardware_interface
|
||||||
|
REQUIRES driver
|
||||||
|
INCLUDE_DIRS "")
|
||||||
315
stone-dispencer/main/hello_world_main.cpp
Executable file
315
stone-dispencer/main/hello_world_main.cpp
Executable file
@@ -0,0 +1,315 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
|
||||||
|
#include "driver/gpio.h"
|
||||||
|
#include "driver/ledc.h"
|
||||||
|
#include "time.h"
|
||||||
|
|
||||||
|
#include "mcp2521.hpp"
|
||||||
|
#include "mcp2521_hardware_handle.hpp"
|
||||||
|
|
||||||
|
#define MCP2521_PIN_INT GPIO_NUM_5
|
||||||
|
#define MCP2521_PIN_SCLK GPIO_NUM_18
|
||||||
|
#define MCP2521_PIN_MISO GPIO_NUM_26
|
||||||
|
#define MCP2521_PIN_MOSI GPIO_NUM_23
|
||||||
|
#define MCP2521_PIN_CS GPIO_NUM_25
|
||||||
|
|
||||||
|
#define SERVO_0_PIN GPIO_NUM_2
|
||||||
|
#define SERVO_1_PIN GPIO_NUM_4
|
||||||
|
#define SERVO_2_PIN GPIO_NUM_19
|
||||||
|
#define SERVO_3_PIN GPIO_NUM_21
|
||||||
|
|
||||||
|
#define LED_PIN GPIO_NUM_22
|
||||||
|
|
||||||
|
#define DETECTOR_PIN GPIO_NUM_32
|
||||||
|
#define Z_AXIS_DETECT_PIN GPIO_NUM_35
|
||||||
|
#define BUTTON_PIN GPIO_NUM_33
|
||||||
|
|
||||||
|
#define MOTOR_PERIOD_US 20000
|
||||||
|
#define MOTOR_MIN_PULSE_US 500
|
||||||
|
#define MOTOR_MAX_PULSE_US 2500
|
||||||
|
|
||||||
|
#define MOTOR_MG996R_US 20000
|
||||||
|
#define MOTOR_MG996R_MIN_PULSE_US 500
|
||||||
|
#define MOTOR_MG996R_MAX_PULSE_US 2500
|
||||||
|
|
||||||
|
#define PWM_RESOLUTION 18
|
||||||
|
|
||||||
|
#define PWM_MAX_VALUE (1 << PWM_RESOLUTION)
|
||||||
|
#define MOTOR_MAX_VALUE (MOTOR_MAX_PULSE_US * PWM_MAX_VALUE / MOTOR_PERIOD_US)
|
||||||
|
#define MOTOR_MIN_VALUE (MOTOR_MIN_PULSE_US * PWM_MAX_VALUE / MOTOR_PERIOD_US)
|
||||||
|
#define MOTOR_CENTER_VALUE ((MOTOR_MAX_VALUE + MOTOR_MIN_VALUE) / 2)
|
||||||
|
|
||||||
|
#define MOTOR_MG996R_MAX_VALUE (MOTOR_MG996R_MAX_PULSE_US * PWM_MAX_VALUE / MOTOR_MG996R_US)
|
||||||
|
#define MOTOR_MG996R_MIN_VALUE (MOTOR_MG996R_MIN_PULSE_US * PWM_MAX_VALUE / MOTOR_MG996R_US)
|
||||||
|
#define MOTOR_MG996R_CENTER_VALUE ((MOTOR_MG996R_MAX_VALUE + MOTOR_MG996R_MIN_VALUE) / 2)
|
||||||
|
|
||||||
|
#define MOTOR_RANGE (MOTOR_MAX_VALUE - MOTOR_MIN_VALUE)
|
||||||
|
#define MOTOR_HALF_RANGE (MOTOR_RANGE / 2)
|
||||||
|
|
||||||
|
#define MOTOR_MG996R_RANGE (MOTOR_MG996R_MAX_VALUE - MOTOR_MG996R_MIN_VALUE)
|
||||||
|
#define MOTOR_MG996R_HALF_RANGE (MOTOR_MG996R_RANGE / 2)
|
||||||
|
|
||||||
|
#define CHOPPER_0_CLOSED (MOTOR_CENTER_VALUE - 1000)
|
||||||
|
#define CHOPPER_1_CLOSED (MOTOR_CENTER_VALUE + 900)
|
||||||
|
#define CHOPPER_0_OPEN (MOTOR_CENTER_VALUE - MOTOR_HALF_RANGE*0.75)
|
||||||
|
#define CHOPPER_1_OPEN (MOTOR_CENTER_VALUE + MOTOR_HALF_RANGE*0.75)
|
||||||
|
|
||||||
|
#define HEAD_MOVE_UP_TIME 250
|
||||||
|
#define HEAD_MOVE_UP (MOTOR_MG996R_CENTER_VALUE + MOTOR_MG996R_HALF_RANGE*0.5)
|
||||||
|
#define HEAD_MOVE_STOP (MOTOR_MG996R_CENTER_VALUE)
|
||||||
|
#define HEAD_MOVE_DOWN_TIME 750
|
||||||
|
#define HEAD_MOVE_DOWN (MOTOR_MG996R_CENTER_VALUE - MOTOR_MG996R_HALF_RANGE*0.5)
|
||||||
|
|
||||||
|
// Z-Axis Motor
|
||||||
|
bool motor_stop_up_flag = false;
|
||||||
|
SemaphoreHandle_t motor_stop_down_semaphore;
|
||||||
|
SemaphoreHandle_t motor_stop_up_semaphore;
|
||||||
|
|
||||||
|
static void IRAM_ATTR isr_motor_stop_up(void *args) {
|
||||||
|
if(motor_stop_up_flag) {
|
||||||
|
motor_stop_up_flag = false;
|
||||||
|
xSemaphoreGiveFromISR(motor_stop_up_semaphore, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void task_fn_motor_stop_up(void *args) {
|
||||||
|
while(true) {
|
||||||
|
xSemaphoreTake(motor_stop_up_semaphore, portMAX_DELAY);
|
||||||
|
vTaskDelay(HEAD_MOVE_UP_TIME / portTICK_PERIOD_MS);
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, HEAD_MOVE_STOP);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void task_fn_motor_stop_down(void *args) {
|
||||||
|
while(true) {
|
||||||
|
xSemaphoreTake(motor_stop_down_semaphore, portMAX_DELAY);
|
||||||
|
vTaskDelay(HEAD_MOVE_DOWN_TIME / portTICK_PERIOD_MS);
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, HEAD_MOVE_STOP);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lower_head() {
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, HEAD_MOVE_DOWN);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);
|
||||||
|
xSemaphoreGive(motor_stop_down_semaphore);
|
||||||
|
vTaskDelay(500 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
|
||||||
|
void raise_head() {
|
||||||
|
if(!gpio_get_level(Z_AXIS_DETECT_PIN)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, HEAD_MOVE_UP);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);
|
||||||
|
motor_stop_up_flag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dispencing mechanism
|
||||||
|
void set_copper(bool bottom, bool top) {
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1, bottom ? CHOPPER_1_OPEN : CHOPPER_1_CLOSED);
|
||||||
|
ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, top ? CHOPPER_0_OPEN : CHOPPER_0_CLOSED);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_1);
|
||||||
|
ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DISPENSER_RESULT {
|
||||||
|
SUCESS = 0,
|
||||||
|
EMPTY_WARINING = 1,
|
||||||
|
EMPTY = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
bool load_stone() {
|
||||||
|
if(!gpio_get_level(DETECTOR_PIN)) {
|
||||||
|
// No stone loaded
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
set_copper(true, false);
|
||||||
|
vTaskDelay(250 / portTICK_PERIOD_MS);
|
||||||
|
set_copper(false, false);
|
||||||
|
|
||||||
|
if(!gpio_get_level(DETECTOR_PIN)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum DISPENSER_RESULT dispens_stone() {
|
||||||
|
|
||||||
|
if(!gpio_get_level(DETECTOR_PIN)) {
|
||||||
|
// No stone loaded
|
||||||
|
|
||||||
|
set_copper(false, true);
|
||||||
|
vTaskDelay(250 / portTICK_PERIOD_MS);
|
||||||
|
set_copper(false, false);
|
||||||
|
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
|
if(!gpio_get_level(DETECTOR_PIN)) {
|
||||||
|
// No stone loaded again
|
||||||
|
return EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
lower_head();
|
||||||
|
set_copper(true, false);
|
||||||
|
vTaskDelay(250 / portTICK_PERIOD_MS);
|
||||||
|
set_copper(false, false);
|
||||||
|
vTaskDelay(100 / portTICK_PERIOD_MS);
|
||||||
|
set_copper(false, true);
|
||||||
|
vTaskDelay(250 / portTICK_PERIOD_MS);
|
||||||
|
set_copper(false, false);
|
||||||
|
raise_head();
|
||||||
|
|
||||||
|
if(!gpio_get_level(DETECTOR_PIN)) {
|
||||||
|
return SUCESS;
|
||||||
|
} else {
|
||||||
|
return EMPTY_WARINING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void app_main(void)
|
||||||
|
{
|
||||||
|
printf("Hello world!\n");
|
||||||
|
|
||||||
|
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_direction(DETECTOR_PIN, GPIO_MODE_INPUT);
|
||||||
|
gpio_set_direction(Z_AXIS_DETECT_PIN, GPIO_MODE_INPUT);
|
||||||
|
gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT);
|
||||||
|
|
||||||
|
motor_stop_up_semaphore = xSemaphoreCreateBinary();
|
||||||
|
motor_stop_down_semaphore = xSemaphoreCreateBinary();
|
||||||
|
xTaskCreatePinnedToCore(task_fn_motor_stop_up, "motor_stop_up", 2048, NULL, 4, NULL, 0);
|
||||||
|
xTaskCreatePinnedToCore(task_fn_motor_stop_down, "motor_stop_down", 2048, NULL, 4, NULL, 0);
|
||||||
|
|
||||||
|
gpio_set_intr_type(Z_AXIS_DETECT_PIN, GPIO_INTR_ANYEDGE);
|
||||||
|
gpio_install_isr_service(0);
|
||||||
|
gpio_isr_handler_add(Z_AXIS_DETECT_PIN, isr_motor_stop_up, NULL);
|
||||||
|
|
||||||
|
spi_bus_config_t bus_config;
|
||||||
|
MCP2521_HardwareHandle_ESP MCP2521_HardwareHandle_ESP(
|
||||||
|
VSPI_HOST,
|
||||||
|
&bus_config,
|
||||||
|
MCP2521_PIN_MOSI,
|
||||||
|
MCP2521_PIN_MISO,
|
||||||
|
MCP2521_PIN_SCLK,
|
||||||
|
MCP2521_PIN_CS,
|
||||||
|
MCP2521_PIN_INT
|
||||||
|
);
|
||||||
|
|
||||||
|
if(0) {
|
||||||
|
gpio_set_direction(MCP2521_PIN_SCLK, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_direction(MCP2521_PIN_MISO, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_direction(MCP2521_PIN_MOSI, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_direction(MCP2521_PIN_CS, GPIO_MODE_OUTPUT);
|
||||||
|
gpio_set_level(MCP2521_PIN_SCLK, 1);
|
||||||
|
gpio_set_level(MCP2521_PIN_MISO, 1);
|
||||||
|
gpio_set_level(MCP2521_PIN_MOSI, 1);
|
||||||
|
gpio_set_level(MCP2521_PIN_CS, 1);
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
gpio_set_level(MCP2521_PIN_SCLK, 0);
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
gpio_set_level(MCP2521_PIN_MOSI, 0);
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
gpio_set_level(MCP2521_PIN_MISO, 0);
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
gpio_set_level(MCP2521_PIN_CS, 0); // Works
|
||||||
|
}
|
||||||
|
|
||||||
|
MCP2521 mcp2521(&MCP2521_HardwareHandle_ESP);
|
||||||
|
mcp2521.reset();
|
||||||
|
mcp2521.set_mode_of_operation(MCP2521_OPERATION_MODE::NORMAL, true);
|
||||||
|
printf("CANSTAT: %x\n", mcp2521.read_reg(MCP2521_CANCTRL));
|
||||||
|
printf("MCP2521 initialized\n");
|
||||||
|
|
||||||
|
ledc_timer_config_t ledc_timer = {
|
||||||
|
.speed_mode = ledc_mode_t::LEDC_LOW_SPEED_MODE,
|
||||||
|
.duty_resolution = LEDC_TIMER_18_BIT,
|
||||||
|
.timer_num = LEDC_TIMER_0,
|
||||||
|
.freq_hz = 50,
|
||||||
|
.clk_cfg = LEDC_AUTO_CLK
|
||||||
|
};
|
||||||
|
|
||||||
|
ledc_channel_config_t servo0_channel_config = {
|
||||||
|
.gpio_num = SERVO_0_PIN,
|
||||||
|
.speed_mode = ledc_mode_t::LEDC_LOW_SPEED_MODE,
|
||||||
|
.channel = LEDC_CHANNEL_0,
|
||||||
|
.intr_type = LEDC_INTR_DISABLE,
|
||||||
|
.timer_sel = LEDC_TIMER_0,
|
||||||
|
.duty = 0,
|
||||||
|
.hpoint = 0,
|
||||||
|
.flags = {
|
||||||
|
.output_invert = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ledc_channel_config_t servo1_channel_config = {
|
||||||
|
.gpio_num = SERVO_1_PIN,
|
||||||
|
.speed_mode = ledc_mode_t::LEDC_LOW_SPEED_MODE,
|
||||||
|
.channel = LEDC_CHANNEL_1,
|
||||||
|
.intr_type = LEDC_INTR_DISABLE,
|
||||||
|
.timer_sel = LEDC_TIMER_0,
|
||||||
|
.duty = 0,
|
||||||
|
.hpoint = 0,
|
||||||
|
.flags = {
|
||||||
|
.output_invert = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ledc_channel_config_t servo2_channel_config = {
|
||||||
|
.gpio_num = SERVO_2_PIN,
|
||||||
|
.speed_mode = ledc_mode_t::LEDC_LOW_SPEED_MODE,
|
||||||
|
.channel = LEDC_CHANNEL_2,
|
||||||
|
.intr_type = LEDC_INTR_DISABLE,
|
||||||
|
.timer_sel = LEDC_TIMER_0,
|
||||||
|
.duty = 0,
|
||||||
|
.hpoint = 0,
|
||||||
|
.flags = {
|
||||||
|
.output_invert = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ledc_channel_config_t servo3_channel_config = {
|
||||||
|
.gpio_num = SERVO_3_PIN,
|
||||||
|
.speed_mode = ledc_mode_t::LEDC_LOW_SPEED_MODE,
|
||||||
|
.channel = LEDC_CHANNEL_3,
|
||||||
|
.intr_type = LEDC_INTR_DISABLE,
|
||||||
|
.timer_sel = LEDC_TIMER_0,
|
||||||
|
.duty = 0,
|
||||||
|
.hpoint = 0,
|
||||||
|
.flags = {
|
||||||
|
.output_invert = 1
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
ledc_timer_config(&ledc_timer);
|
||||||
|
ledc_channel_config(&servo0_channel_config);
|
||||||
|
ledc_channel_config(&servo1_channel_config);
|
||||||
|
ledc_channel_config(&servo2_channel_config);
|
||||||
|
ledc_channel_config(&servo3_channel_config);
|
||||||
|
|
||||||
|
raise_head();
|
||||||
|
set_copper(false, false);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
while (!gpio_get_level(BUTTON_PIN)) {
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
}
|
||||||
|
printf("Sucess: %d\n", dispens_stone());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
BIN
stone-dispencer/pytest_hello_world.py
(Stored with Git LFS)
Executable file
BIN
stone-dispencer/pytest_hello_world.py
(Stored with Git LFS)
Executable file
Binary file not shown.
2029
stone-dispencer/sdkconfig
Normal file
2029
stone-dispencer/sdkconfig
Normal file
File diff suppressed because it is too large
Load Diff
0
stone-dispencer/sdkconfig.ci
Executable file
0
stone-dispencer/sdkconfig.ci
Executable file
2008
stone-dispencer/sdkconfig.old
Normal file
2008
stone-dispencer/sdkconfig.old
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user