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; }