diff --git a/i2c-hub/firmware/i2c-hub-firmware/docs/.$NetworkStack.drawio.bkp b/i2c-hub/firmware/i2c-hub-firmware/docs/.$NetworkStack.drawio.bkp
index 59a231e..ab075f9 100644
--- a/i2c-hub/firmware/i2c-hub-firmware/docs/.$NetworkStack.drawio.bkp
+++ b/i2c-hub/firmware/i2c-hub-firmware/docs/.$NetworkStack.drawio.bkp
@@ -1696,6 +1696,12 @@
+
+
+
+
+
+
diff --git a/i2c-hub/firmware/i2c-hub-firmware/docs/NetworkStack.drawio b/i2c-hub/firmware/i2c-hub-firmware/docs/NetworkStack.drawio
index ab075f9..e9db096 100644
--- a/i2c-hub/firmware/i2c-hub-firmware/docs/NetworkStack.drawio
+++ b/i2c-hub/firmware/i2c-hub-firmware/docs/NetworkStack.drawio
@@ -1,6 +1,6 @@
-
+
diff --git a/i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/transmission_interface/rp2040_i2c_rx.cpp b/i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/transmission_interface/rp2040_i2c_rx.cpp
index 9793309..369c123 100644
--- a/i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/transmission_interface/rp2040_i2c_rx.cpp
+++ b/i2c-hub/firmware/i2c-hub-firmware/src/gobotrpc/transmission_interface/rp2040_i2c_rx.cpp
@@ -31,6 +31,9 @@ void GobotRPC_TI_Hardware_RP2040_I2C::i2cRxTask() {
bool read_res = readI2C(&pkg, addr);
xSemaphoreGive(i2cMutex);
+ if(!read_res)
+ continue;
+
pkg.addr |= (i) << 8;
if(pushPackageCB != NULL)
@@ -54,6 +57,10 @@ bool GobotRPC_TI_Hardware_RP2040_I2C::readI2C(GoRPCPackage_Transport * pkg, uint
size_t len = pkg->data[CI_RX_PACKAGE_DATA_OFFSET + 1];
+ if(len > 64) {
+ return false;
+ }
+
res = i2c_read_blocking(i2c, addr, ((uint8_t *)pkg->data) + CI_RX_PACKAGE_DATA_OFFSET, len, false);
pkg->len = len;
pkg->addr = addr;
diff --git a/i2c-hub/session3 b/i2c-hub/session3
new file mode 100644
index 0000000..d06647f
Binary files /dev/null and b/i2c-hub/session3 differ
diff --git a/i2c-hub/uart-adapter/cache/boardpos_1736386482.json b/i2c-hub/uart-adapter/cache/boardpos_1736386482.json
new file mode 100644
index 0000000..422db17
--- /dev/null
+++ b/i2c-hub/uart-adapter/cache/boardpos_1736386482.json
@@ -0,0 +1 @@
+{"pos1": {"x": 1026, "y": 2096}, "pos2": {"x": 16651, "y": 18856}, "pos3": {"x": 1901, "y": 131}}
\ No newline at end of file
diff --git a/i2c-hub/uart-adapter/cache/scan_result.json b/i2c-hub/uart-adapter/cache/scan_result.json
new file mode 100644
index 0000000..72b19e4
--- /dev/null
+++ b/i2c-hub/uart-adapter/cache/scan_result.json
@@ -0,0 +1 @@
+{"corexy_available": true, "head_available": true, "vacuum_available": true, "corexy_port": 0, "head_port": 2, "vacuum_port": 1}
\ No newline at end of file
diff --git a/i2c-hub/uart-adapter/src/common/calibrate_boardpos.py b/i2c-hub/uart-adapter/src/common/calibrate_boardpos.py
new file mode 100644
index 0000000..596894d
--- /dev/null
+++ b/i2c-hub/uart-adapter/src/common/calibrate_boardpos.py
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ba1b5ebc31e1c9e2f43a3324d8479aee389b68090ea75f161272a6274797044
+size 2769
diff --git a/i2c-hub/uart-adapter/src/common/i2c_scan.py b/i2c-hub/uart-adapter/src/common/i2c_scan.py
new file mode 100644
index 0000000..94ef16a
--- /dev/null
+++ b/i2c-hub/uart-adapter/src/common/i2c_scan.py
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d475a2d88885b4b2f0349eef679d99336ebad1f9227ad934a2fbde21754dd3e
+size 4462
diff --git a/i2c-hub/uart-adapter/src/gobot.py b/i2c-hub/uart-adapter/src/gobot.py
new file mode 100644
index 0000000..646332d
--- /dev/null
+++ b/i2c-hub/uart-adapter/src/gobot.py
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aa583588324987f6777eea51cf9809931635a07b61c378d91f267643cf4cf1d0
+size 5848
diff --git a/i2c-hub/uart-adapter/src/gobotrpc/packages/corexy/packages_goto.py b/i2c-hub/uart-adapter/src/gobotrpc/packages/corexy/packages_goto.py
index eb2b0f4..d61183d 100644
--- a/i2c-hub/uart-adapter/src/gobotrpc/packages/corexy/packages_goto.py
+++ b/i2c-hub/uart-adapter/src/gobotrpc/packages/corexy/packages_goto.py
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:153b52bb66cd7c7ae875dfa860030f8686d4a3d1931376d1e371a8524b98ea1f
-size 3602
+oid sha256:8085c3d0041b5adb53000177e5cc69e7ea51d747197c91b0ed9d3244436a6e72
+size 3643
diff --git a/i2c-hub/uart-adapter/src/main.py b/i2c-hub/uart-adapter/src/main.py
index 4146658..21b5bb0 100644
--- a/i2c-hub/uart-adapter/src/main.py
+++ b/i2c-hub/uart-adapter/src/main.py
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:78c351a82c131a1e75d346a030011d83d8ed17d267bcb0153f7aa87815c8491d
-size 2205
+oid sha256:74ba8dd4515684cb8eb80e403d54dc06fa4fc442b952f91c7f170f40aac3adf3
+size 3116
diff --git a/i2c-hub/uart-adapter/src/uart_interface/ci_packages.py b/i2c-hub/uart-adapter/src/uart_interface/ci_packages.py
index 95a7335..8695263 100644
--- a/i2c-hub/uart-adapter/src/uart_interface/ci_packages.py
+++ b/i2c-hub/uart-adapter/src/uart_interface/ci_packages.py
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:71d0dcc953e97e63dabd219e0b17e1de1ce772f0bbe7e535b38e136cfa0d4337
-size 7453
+oid sha256:4e85fc01d9e4dfe3a77e7326cc89804d95c44af5ac8face6e6b14832f615b4c5
+size 7464
diff --git a/i2c-hub/uart-adapter/src/uart_interface/serial.py b/i2c-hub/uart-adapter/src/uart_interface/serial.py
index d4366fe..6297189 100644
--- a/i2c-hub/uart-adapter/src/uart_interface/serial.py
+++ b/i2c-hub/uart-adapter/src/uart_interface/serial.py
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9cc8d52890dcc77a7ea6720dffe13fd3f5584a10fea1134cb3579683dd1f3cd5
-size 2613
+oid sha256:44a474da8996a2040b815fbe05b2ab1421c02e1d79b2ccdbf74a405a6c9ff3ac
+size 2747
diff --git a/motor-control/core-xy-firmware/include/CoreXY.hpp b/motor-control/core-xy-firmware/include/CoreXY.hpp
index 10395a4..8e4e5cd 100644
--- a/motor-control/core-xy-firmware/include/CoreXY.hpp
+++ b/motor-control/core-xy-firmware/include/CoreXY.hpp
@@ -52,12 +52,15 @@ struct BoardMessurements {
int x_num;
int y_num;
+ int x_offset;
+ int y_offset;
+
int cell_x;
int cell_y;
};
-BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int grid_x, int grid_y);
-MotorPosition calcPosition(BoardMessurements * messurements, int x, int y);
+BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int grid_x, int grid_y, MotorPosition offset);
+MotorPosition calcPosition(BoardMessurements * messurements, int x, int y, bool offset);
void vTaskInitMotorHome(void *pvParameters);
@@ -94,7 +97,7 @@ public:
bool getMotorEnabled();
void setBoardMessurements(BoardMessurements messurements);
- void gotoPosition(int x, int y);
+ void gotoPosition(int x, int y, bool offset);
};
void homeXY(TMC2209_step_dual * driver, HOME_AXIS_DIRECTION direction, unsigned int speed, unsigned int backupSpace, MotorPosition * last_pos);
diff --git a/motor-control/core-xy-firmware/src/corexy/motorFunctions.cpp b/motor-control/core-xy-firmware/src/corexy/motorFunctions.cpp
index 43a5f13..d3e4182 100644
--- a/motor-control/core-xy-firmware/src/corexy/motorFunctions.cpp
+++ b/motor-control/core-xy-firmware/src/corexy/motorFunctions.cpp
@@ -41,9 +41,9 @@ void CoreXYMaschine::setBoardMessurements(BoardMessurements messurements) {
this->boardMessurements = messurements;
}
-void CoreXYMaschine::gotoPosition(int x, int y) {
+void CoreXYMaschine::gotoPosition(int x, int y, bool offset) {
xSemaphoreTake(xMoveMutex, portMAX_DELAY);
- MotorPosition pos = calcPosition(&this->boardMessurements, x, y);
+ MotorPosition pos = calcPosition(&this->boardMessurements, x, y, offset);
if(posUnknow || untilNextHome == 0) {
homeFast(¤t_pos, true);
diff --git a/motor-control/core-xy-firmware/src/corexy/position.cpp b/motor-control/core-xy-firmware/src/corexy/position.cpp
index 1242763..19741ae 100644
--- a/motor-control/core-xy-firmware/src/corexy/position.cpp
+++ b/motor-control/core-xy-firmware/src/corexy/position.cpp
@@ -2,7 +2,7 @@
#include
-BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int grid_x, int grid_y) {
+BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int grid_x, int grid_y, MotorPosition offset) {
BoardMessurements res;
MotorPosition * smaller;
@@ -16,6 +16,9 @@ BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int
bigger = &p0;
}
+ res.x_offset = smaller->x - offset.x;
+ res.y_offset = smaller->y - offset.y;
+
res.x_num = grid_x;
res.y_num = grid_y;
@@ -31,11 +34,16 @@ BoardMessurements calcBoardMessurements(MotorPosition p0, MotorPosition p1, int
return res;
}
-MotorPosition calcPosition(BoardMessurements * messurements, int x, int y) {
+MotorPosition calcPosition(BoardMessurements * messurements, int x, int y, bool offset) {
MotorPosition res;
res.x = messurements->x_padding + (x * messurements->cell_x);
res.y = messurements->y_padding + (y * messurements->cell_y);
+ if(offset) {
+ res.x -= messurements->x_offset;
+ res.y -= messurements->y_offset;
+ }
+
return res;
}
\ No newline at end of file
diff --git a/motor-control/core-xy-firmware/src/main.cpp b/motor-control/core-xy-firmware/src/main.cpp
index 9303983..2cb0ab0 100755
--- a/motor-control/core-xy-firmware/src/main.cpp
+++ b/motor-control/core-xy-firmware/src/main.cpp
@@ -155,7 +155,7 @@ void onRxPackage(void * args, char *data, uint16_t len, GobotRPCTypes type, Gobo
uint8_t cellX = data[24];
uint8_t cellY = data[25];
- BoardMessurements messurements = calcBoardMessurements(p1, p2, cellX, cellY);
+ BoardMessurements messurements = calcBoardMessurements(p1, p2, cellX, cellY, p3);
appData->machine->setBoardMessurements(messurements);
g_appData.gobotrpc_ni->sendPackage(txBuffer, 0, GobotRPCTypes::RESPONSE, GobotRPCNumber::SET_PADDING);
break;
@@ -165,7 +165,7 @@ void onRxPackage(void * args, char *data, uint16_t len, GobotRPCTypes type, Gobo
int x = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3];
int y = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
bool offset = data[8] > 0;
- appData->machine->gotoPosition(x, y);
+ appData->machine->gotoPosition(x, y, offset);
g_appData.gobotrpc_ni->sendPackage(txBuffer, 0, GobotRPCTypes::RESPONSE, GobotRPCNumber::GOTO);
break;
}