From 0ecd846183288c33f3de57f11e25d78ccd4db647 Mon Sep 17 00:00:00 2001 From: Gustice Date: Fri, 14 Nov 2025 23:29:44 +0100 Subject: [PATCH] fix: Spit working again also with linux --- .clangd | 2 ++ .vscode/settings.json | 4 ++-- components/spit/CMakeLists.txt | 2 +- components/spit/include/spit_client.hpp | 5 ++++- components/spit/src/spit_client.cpp | 25 ++++++++++++++++------ doc/LiveShowProject/CatasWatchProject.ldv | Bin 11102 -> 11102 bytes doc/LiveShowProject/CatasWatchProject.lsc | Bin 213 -> 213 bytes doc/LiveShowProject/CatasWatchProject.lsd | Bin 170057 -> 170057 bytes doc/LiveShowProject/CatasWatchProject.lsh | Bin 276 -> 253 bytes doc/LiveShowProject/CatasWatchProject.lsp | Bin 661 -> 661 bytes doc/LiveShowProject/CatasWatchProject.spi | Bin 2017 -> 2337 bytes main/watchMain.cpp | 24 ++++++++++----------- 12 files changed, 40 insertions(+), 22 deletions(-) create mode 100644 .clangd diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..437f255 --- /dev/null +++ b/.clangd @@ -0,0 +1,2 @@ +CompileFlags: + Remove: [-f*, -m*] diff --git a/.vscode/settings.json b/.vscode/settings.json index 2543558..47cdca6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -37,7 +37,7 @@ "clangd.arguments": [ "--background-index", "--query-driver=/home/gustice/.espressif/tools/riscv32-esp-elf/esp-14.2.0_20241119/riscv32-esp-elf/bin/riscv32-esp-elf-gcc", - "--compile-commands-dir=/home/gustice/jobs/projects/Proj_Zwickau_waitingRoom/FW_X_WatchController/build_uTest" + "--compile-commands-dir=/home/gustice/jobs/projects/Proj_Zwickau_waitingRoom/FW_X_WatchController/build" ], "cmake.debugConfig": { "setupCommands": [ @@ -55,4 +55,4 @@ } ] } -} \ No newline at end of file +} diff --git a/components/spit/CMakeLists.txt b/components/spit/CMakeLists.txt index c840ae9..8c4e373 100644 --- a/components/spit/CMakeLists.txt +++ b/components/spit/CMakeLists.txt @@ -1,5 +1,5 @@ idf_component_register( SRC_DIRS "src" "src/esp" INCLUDE_DIRS "include" - REQUIRES esp_system esp_netif freeRtosApi + REQUIRES esp_system esp_netif freeRtosApi sockets ) diff --git a/components/spit/include/spit_client.hpp b/components/spit/include/spit_client.hpp index d107a01..8d9f24f 100644 --- a/components/spit/include/spit_client.hpp +++ b/components/spit/include/spit_client.hpp @@ -10,6 +10,7 @@ #include #include #include +#include "syslog.hpp" using namespace std; @@ -86,6 +87,7 @@ class SClient : ISadClient { Callbacks mCallbacks; fos::TaskT *mThreadReceive{}; + fos::TaskT *mThreadProcess{}; bool mStopReceiveMessages{}; Connection mConnectionStatus{Connection::None}; @@ -151,7 +153,8 @@ class SClient : ISadClient { private: bool startReceiveSPITMessages(); void stopReceiveSPITMessages(); - static void receiveSPITMessage(SClient &rM); + static void receiveSpitMessage(SClient &rM); + static void processSpitMessage(SClient &rM); // Reconnect to the server when connection is lost see eventConnectionStatus and eventServerDetected bool _doReconnect{}; // true = on eventServerDetected connect to the server identified by mServerID public: diff --git a/components/spit/src/spit_client.cpp b/components/spit/src/spit_client.cpp index 3a39a8b..3d8d60f 100644 --- a/components/spit/src/spit_client.cpp +++ b/components/spit/src/spit_client.cpp @@ -2,8 +2,12 @@ #include "spit_client.hpp" #include "esp_log.h" +#include "Queue.hpp" + namespace spit { static const char *TAG = "SPIT"; +static fos::Queue> incommingSpit(64); + /** * Create a new SPIT_client instance, should be done once by the user app. @@ -225,7 +229,8 @@ bool SClient::startReceiveSPITMessages() { if (!mSocket.getIsBound()) return false; mStopReceiveMessages = false; - mThreadReceive = new fos::TaskT(receiveSPITMessage, *this, "receiveTask", fos::Task::DefaultStackSize * 4); + mThreadReceive = new fos::TaskT(receiveSpitMessage, *this, "receiveTask", fos::Task::DefaultStackSize, fos::Task::MAX_PRIORITY-3); + mThreadProcess = new fos::TaskT(processSpitMessage, *this, "processTask", fos::Task::DefaultStackSize); return true; } @@ -233,7 +238,7 @@ void SClient::stopReceiveSPITMessages() { mStopReceiveMessages = true; } -void SClient::receiveSPITMessage(SClient &rM) { +void SClient::receiveSpitMessage(SClient &rM) { char buffer[MAXSPITMESSAGEBYTECOUNT + 1]; int rdLen; while (rM.mStopReceiveMessages == false) { @@ -244,13 +249,21 @@ void SClient::receiveSPITMessage(SClient &rM) { } continue; } - auto vec = vector(buffer, buffer + rdLen); - auto spitMsg = make_unique(vec); - rM.parseMessage(move(spitMsg)); - // rM.checkParseMessage(move(spitMsg)); + auto vec = make_unique>(buffer, buffer + rdLen); + + incommingSpit.enqueue(std::move(vec)); } } +void SClient::processSpitMessage(SClient &rM) { + while (true) { + auto data = *incommingSpit.dequeue(); + auto spitMsg = make_unique(data); + rM.parseMessage(move(spitMsg)); + } +} + + void SClient::resetMessageNumberReceived() { mMessageNumberReceived = -1; mOvertakingMessages.clear(); diff --git a/doc/LiveShowProject/CatasWatchProject.ldv b/doc/LiveShowProject/CatasWatchProject.ldv index 262022db7d4519018cf9395d8d916104848a08ed..ecafe1c0a548c0c6b7093e4affe1dcc24ebcdae9 100644 GIT binary patch delta 20 ccmcZ?b}wv0t~#^Z_om5(>hhcW)z32n0A>^j^Z)<= delta 20 ccmcZ?b}wv0t~#@Y#P!LA>hhcW)z32n0ADExTmS$7 diff --git a/doc/LiveShowProject/CatasWatchProject.lsc b/doc/LiveShowProject/CatasWatchProject.lsc index 06f4529fe006ce3a160820e19a83eb2b79b435e8..f22e3ae5617717637cc8cc9c9fb8a57859f17fb7 100644 GIT binary patch literal 213 zcmZ4UmVveWJOcv*D-eUhe<)xC@_2!mlYxOxjDdkg4J6COz`*DQ#1nvc4oC$bQ05&F zUu0llS_E+7tvNdsxdFJKi25#}I> VAY6ng0w@p%=VH;qcnD}{1OWUA9%cCO>47n;gh4J9!?v%H(fMl9Q(hi){{L-px2!i&YXV;lZjh`3I9Y zSYih2CdSFh?DCTZS>-0nGV@LjWfg}@-e5n)IQam##N-8>(wnbxUWRa%aZ7Bz!F_>o a@*+;@$t$?Uns4&9-{fW7ev_A}pbG%dAuyW& delta 147 zcmX@Pf$QW3t_>%cCM&Z_PCmgTH`#z$U@{-G^yD8*Vw0x`i){{L-px2!i&bcHH9OB_ zF;)?At~!igEG^Ug^mzxFt4U<-E)|`7p28 fapn-+1v7@eq vg|4Zou8X;@t0UvY!-@t~DXGb2xd!OK&>+n;F)`H~sFj(46=aGDkO>3;bOIai delta 122 zcmey%IE9IG&07Z6Dh38d?ul&0?9)NK@`)20#5I{11Pv^7jU9C@EObpxbzRJLT^$*L zVkWv~&bp?Sy2hruZce(Uh71$eC>oSxrCS=B7@z|SgVJEruVX_1OgAfO) delta 31 ncmbQrI+b+;D-)yn!~@ck*%_55yD$l{85vs{o0&|GVX_1Og4PG6 diff --git a/doc/LiveShowProject/CatasWatchProject.spi b/doc/LiveShowProject/CatasWatchProject.spi index 7a51c8e21adeb5159c719504d192ecf264ab5ed1..8580eb208f8bbcaa6bd0657a5f2d29f5a21741eb 100644 GIT binary patch literal 2337 zcmZ4UmVvd3fq{hq2$-Ol14uJ6h&U#fWaj4umn0UI1ZR|{rRAi0x-c>@@Ob8xq!u~n z=Xn+9=P?Ljssb5>1{fK5A?ked%Thz~O@YP;IVYAR7KbO6BxisGb5rw5&=jGW0pg;W zV?vBMCWOr~CdM3N!seI}V~!bNbBu^F$B3{whQyd-h}9e{@ruJREGn^>2uf3+^u@}c zW&i@Y86`<3iRtBF4iZsWVUSc>Vp3cIHbW9?`ofwrf$D({1OlN?Yrr&|*rW(&;$YY} z05wB&GcW{x0IOojE6vGa_zwjzjm%}41u!-`jq1Isl$5H(QY4>&nMDN#mZ=7&Mh0Nb zlBg-(5S_g#W;UN2q`Pogd3cUWpVg`Cj#2!`UmUz5mjOry&*#HVA1_sr`bHOx>U|hNg z#>7P5;n!SoWa t5Mbm3wgzZX_8A)Ip!y42#eq!>=5mL1wlF4`X6jgp!pFkF^dZTf0|3j+vLgTh literal 2017 zcmZ4UmVvd3fq{hq2$-Ol9Y`}Wh&U#fWaj4umn0UI1ZR|{rRAi0x-c>@@Ob8xq!u~n z=Xn+9=P?Ljssb5>1{fLmA?ked%Thz~jj7VKyF4!l1XBEIhcb)R8|-ym6n(kSAfls z#2V{Z(+f~NFv$Rc(5E$E8cu9dgfnq4>>GfZA-WkD0zZINvE-HJeTvdjV) z8=WS?dxn;|sNO?Ki-xFa7nttgR*2mP1t0=2%3eosu(MD+Row(uL>o^fS>W-M5vr$v z839-bFkc2b2NK}Y?)y;O&&Xqs!pFiv@mahNSOsl-mYj{pXU3>L0~R$vmw*xh1B3k0 zE-(!v7==AyOk6aIr;;v#mC?piscCpTWrFG{V3`AVunO~cI2*)ZR7^$TW8t89>gXb{ z3fg!oJp+%YOi?`rECfN$2fIe&S~iNi8O`RS@Ud`EJk SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); + // ESP_LOGI(TAG, "NEW SPIT-REMOTE-Object ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); // This is a remote SPITObject which can be used to remote control the server. // If you want you can list this for later use } else if (event == SClient::ObjectEvent::Changed) { - ESP_LOGI(TAG, "SPIT-REMOTE-Object CHANGED ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); + // ESP_LOGI(TAG, "SPIT-REMOTE-Object CHANGED ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); } else if (event == SClient::ObjectEvent::Deleted) { ESP_LOGD(TAG, "SPIT-REMOTE-Object Removed ID: %s Name: %s\n", sObject.getID().data(), sObject.Name.get().data()); // This is a remote SPITObject @@ -746,7 +746,7 @@ void onSpitObject(SClient::ObjectEvent event, bool isRemote, const SType &sType, } } else { if (event == SClient::ObjectEvent::Created) { - ESP_LOGI(TAG, "NEW SPIT-Object ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); + // ESP_LOGI(TAG, "NEW SPIT-Object ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); // check your actions // Whenever you provide an action for this SPITObject take this over in your code. // call _SpitClient.setActionSPITObject(sObject.getID(), true); @@ -757,7 +757,7 @@ void onSpitObject(SClient::ObjectEvent event, bool isRemote, const SType &sType, // SPITObjects with other SPITTypes asscciated will trigger no actions } else if (event == SClient::ObjectEvent::Changed) { - ESP_LOGI(TAG, "SPIT-Object CHANGED ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); + // ESP_LOGI(TAG, "SPIT-Object CHANGED ID: %s Name: %s -> SPITType: %s", sObject.getID().data(), sObject.Name.get().data(), sType.Name.get().data()); } else if (event == SClient::ObjectEvent::Deleted) { ESP_LOGD(TAG, "SPIT-Object Removed ID: %s Name: %s\n", sObject.getID().data(), sObject.Name.get().data()); // Check your actions @@ -805,7 +805,7 @@ void onPlaySpitType(string p_PlayerID, string spitTypeId, bool p_PlayerIsRunning } if (p_Started == true) { auto command = ProvidedSpitActions[spitTypeId]; - ESP_LOGI(TAG, "Player: %s is running: %s Object", p_PlayerID.data(), spitTypeId.c_str()); + // ESP_LOGI(TAG, "Player: %s is running: %s Object", p_PlayerID.data(), spitTypeId.c_str()); commandQueue.enqueue(std::make_unique(command)); Syslog::logv(Syslog::Severity::Informational, "Got SPIT command for move ot : r%d", command.pos); } @@ -923,8 +923,8 @@ void app_main(void) { static int ipVersion = AF_INET; static fos::TaskT telnetSocket(telnetSocketTask, ipVersion, "tcpServer", 4096); static fos::TaskT dmxNode(dmxSocketTask, ipVersion, "dmxNode", 4096); - // static fos::Task spit(SpitClientApp, "SpitClient"); - static fos::Task mqtt(MqttThread, "MqttEndpoint"); + static fos::Task spit(SpitClientApp, "SpitClient"); + // static fos::Task mqtt(MqttThread, "MqttEndpoint"); // static Task otaUpdate(SystemFunctions::OtaTaskEntry, "otaTask", 8192); auto &store = NvsApi::getInstance();