From 2824bdac6e246cda09092a2c00276741e4def55a Mon Sep 17 00:00:00 2001 From: AlexanderHD27 Date: Thu, 9 Jan 2025 03:10:03 +0100 Subject: [PATCH] Build text base interface --- .../docs/.$NetworkStack.drawio.bkp | 6 ++++++ .../i2c-hub-firmware/docs/NetworkStack.drawio | 2 +- .../transmission_interface/rp2040_i2c_rx.cpp | 7 +++++++ i2c-hub/session3 | Bin 0 -> 53293 bytes .../uart-adapter/cache/boardpos_1736386482.json | 1 + i2c-hub/uart-adapter/cache/scan_result.json | 1 + .../src/common/calibrate_boardpos.py | 3 +++ i2c-hub/uart-adapter/src/common/i2c_scan.py | 3 +++ i2c-hub/uart-adapter/src/gobot.py | 3 +++ .../gobotrpc/packages/corexy/packages_goto.py | 4 ++-- i2c-hub/uart-adapter/src/main.py | 4 ++-- .../src/uart_interface/ci_packages.py | 4 ++-- .../uart-adapter/src/uart_interface/serial.py | 4 ++-- .../core-xy-firmware/include/CoreXY.hpp | 9 ++++++--- .../src/corexy/motorFunctions.cpp | 4 ++-- .../core-xy-firmware/src/corexy/position.cpp | 12 ++++++++++-- motor-control/core-xy-firmware/src/main.cpp | 4 ++-- 17 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 i2c-hub/session3 create mode 100644 i2c-hub/uart-adapter/cache/boardpos_1736386482.json create mode 100644 i2c-hub/uart-adapter/cache/scan_result.json create mode 100644 i2c-hub/uart-adapter/src/common/calibrate_boardpos.py create mode 100644 i2c-hub/uart-adapter/src/common/i2c_scan.py create mode 100644 i2c-hub/uart-adapter/src/gobot.py 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 0000000000000000000000000000000000000000..d06647ffcf82a60296561b1028bc610e02021d0c GIT binary patch literal 53293 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 PTnuX)401&6y5Ro-bq`qI literal 0 HcmV?d00001 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; }