From 5881a99a300672a7f6de61de76ba68f10a69ae96 Mon Sep 17 00:00:00 2001 From: Links Date: Tue, 5 Apr 2022 20:07:59 +0200 Subject: [PATCH 01/18] bump version to 2.3.7 --- library.json | 2 +- library.properties | 2 +- src/WebSocketsVersion.h | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/library.json b/library.json index 2f7aec6..8675831 100644 --- a/library.json +++ b/library.json @@ -21,5 +21,5 @@ "type": "git", "url": "https://github.com/Links2004/arduinoWebSockets.git" }, - "version": "2.3.6" + "version": "2.3.7" } \ No newline at end of file diff --git a/library.properties b/library.properties index b9899d0..aab19e8 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WebSockets -version=2.3.6 +version=2.3.7 author=Markus Sattler maintainer=Markus Sattler sentence=WebSockets for Arduino (Server + Client) diff --git a/src/WebSocketsVersion.h b/src/WebSocketsVersion.h index e0ab39c..bf2526c 100644 --- a/src/WebSocketsVersion.h +++ b/src/WebSocketsVersion.h @@ -1,6 +1,6 @@ /** * @file WebSocketsVersion.h - * @date 08.03.2021 + * @date 05.04.2022 * @author Markus Sattler * * Copyright (c) 2015 Markus Sattler. All rights reserved. @@ -25,12 +25,12 @@ #ifndef WEBSOCKETSVERSION_H_ #define WEBSOCKETSVERSION_H_ -#define WEBSOCKETS_VERSION "2.3.6" +#define WEBSOCKETS_VERSION "2.3.7" #define WEBSOCKETS_VERSION_MAJOR 2 #define WEBSOCKETS_VERSION_MINOR 3 -#define WEBSOCKETS_VERSION_PATCH 6 +#define WEBSOCKETS_VERSION_PATCH 7 -#define WEBSOCKETS_VERSION_INT 2003006 +#define WEBSOCKETS_VERSION_INT 2003007 #endif /* WEBSOCKETSVERSION_H_ */ From 3073c156b12d15849d0f651554cade465c401103 Mon Sep 17 00:00:00 2001 From: sivar2311 Date: Mon, 16 May 2022 15:05:37 +0200 Subject: [PATCH 02/18] Fix compiler warning "function may return address of local variable" --- src/WebSocketsServer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index c2f533b..af95023 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -627,6 +627,7 @@ WSclient_t * WebSocketsServerCore::handleNewClient(WEBSOCKETS_NETWORK_CLASS * tc client = &dummy; client->tcp = tcpClient; dropNativeClient(client); + return nullptr; } WEBSOCKETS_YIELD(); From 1fb67c88688cea79cc9d344ec27ca7bc02b9d74a Mon Sep 17 00:00:00 2001 From: Links Date: Fri, 24 Jun 2022 10:23:50 +0200 Subject: [PATCH 03/18] esp8266 build, change config options --- .github/workflows/main.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d7bea65..de0561b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,10 +36,10 @@ jobs: echo -en "::set-output name=matrix::" echo -en "[" - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,dbg=Serial1 + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 echo -en "," - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,eesz=1M,FlashMode=qio,FlashFreq=80 + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 echo -en "," get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 @@ -161,11 +161,12 @@ jobs: - name: config IDE run: | + set +x export DISPLAY=:1.0 export PATH="$HOME/arduino_ide:$PATH" arduino --board $BOARD --save-prefs arduino --get-pref sketchbook.path - arduino --pref update.check=false + - name: build example timeout-minutes: 20 From 04249a9b62fc03773f08b8c51d52bb2748dc7ef1 Mon Sep 17 00:00:00 2001 From: Links Date: Fri, 24 Jun 2022 10:35:37 +0200 Subject: [PATCH 04/18] more debug --- .github/workflows/main.yml | 2 +- travis/common.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index de0561b..22c523b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -166,7 +166,7 @@ jobs: export PATH="$HOME/arduino_ide:$PATH" arduino --board $BOARD --save-prefs arduino --get-pref sketchbook.path - + arduino --get-pref - name: build example timeout-minutes: 20 diff --git a/travis/common.sh b/travis/common.sh index c1c2328..135021d 100644 --- a/travis/common.sh +++ b/travis/common.sh @@ -31,6 +31,7 @@ function build_sketches() function build_sketch() { + set -e +x local arduino=$1 local sketch=$2 $arduino --verify $sketch; From 2110ad0a10e1620646448b06effbe2946b5f2269 Mon Sep 17 00:00:00 2001 From: Links Date: Fri, 24 Jun 2022 10:48:51 +0200 Subject: [PATCH 05/18] more debug --- .github/workflows/main.yml | 1 + travis/common.sh | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 22c523b..810563e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -165,6 +165,7 @@ jobs: export DISPLAY=:1.0 export PATH="$HOME/arduino_ide:$PATH" arduino --board $BOARD --save-prefs + arduino --pref update.check=false --pref build.verbose=false --pref cache.enable=true --pref compiler.cache_core=true --pref compiler.warning_level=default --save-prefs arduino --get-pref sketchbook.path arduino --get-pref diff --git a/travis/common.sh b/travis/common.sh index 135021d..2754bdc 100644 --- a/travis/common.sh +++ b/travis/common.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -ex +set -x function build_sketches() { @@ -31,10 +31,9 @@ function build_sketches() function build_sketch() { - set -e +x local arduino=$1 local sketch=$2 - $arduino --verify $sketch; + $arduino --verify --verbose $sketch; local result=$? if [ $result -ne 0 ]; then echo "Build failed ($sketch) build verbose..." From dd8675c6a920301c0311af591a5bf4122b006b66 Mon Sep 17 00:00:00 2001 From: skwad77 <64254158+skwad77@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:15:49 +0200 Subject: [PATCH 06/18] don't update cSessionId on unwanted Set-Cookie --- src/WebSocketsClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 2be6f32..4ff62f0 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -733,7 +733,7 @@ void WebSocketsClient::handleHeader(WSclient_t * client, String * headerLine) { client->cExtensions = headerValue; } else if(headerName.equalsIgnoreCase(WEBSOCKETS_STRING("Sec-WebSocket-Version"))) { client->cVersion = headerValue.toInt(); - } else if(headerName.equalsIgnoreCase(WEBSOCKETS_STRING("Set-Cookie"))) { + } else if(headerName.equalsIgnoreCase(WEBSOCKETS_STRING("Set-Cookie")) && headerValue.indexOf(" io=") > -1) { if(headerValue.indexOf(';') > -1) { client->cSessionId = headerValue.substring(headerValue.indexOf('=') + 1, headerValue.indexOf(";")); } else { From 2b0e8f6fe9f9bcfcda3d0ce26a6a9e9906e7e33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=C3=ADn=20Skala?= Date: Mon, 22 Aug 2022 12:22:49 +0200 Subject: [PATCH 07/18] Fix async run --- examples/esp8266/WebSocketClientOTA/python_ota_server/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py index 7e7fba1..174e2d3 100644 --- a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py +++ b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py @@ -90,7 +90,7 @@ def __init__(self, name, message, websocket): def run(self, ): try: - asyncio.run(self.start_) + asyncio.run(self.start_()) except Exception as exception: Logger.exception(exception) finally: From ccdba4ed8a12afa94d237143da82cf6a82345fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=C3=ADn=20Skala?= Date: Mon, 22 Aug 2022 12:28:53 +0200 Subject: [PATCH 08/18] Fix response type prefix (LoadProhibitedCause) --- examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino | 6 +++++- .../esp8266/WebSocketClientOTA/python_ota_server/main.py | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino b/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino index 2c87c25..6a809c0 100644 --- a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino +++ b/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino @@ -117,6 +117,10 @@ void STATE(JsonDocument &msg){ // Do something with message } +// Count of responses handled by RESPONSES_STRUCT +// increase increase if another response handler is added +int nrOfResponses = 2; + RESPONSES_STRUCT responses[] = { {"ota", OTA}, {"state", STATE}, @@ -145,7 +149,7 @@ void text(uint8_t * payload, size_t length){ // Handle each TYPE of message int b = 0; - for( b=0 ; strlen(responses[b].type) ; b++ ) + for( b=0 ; b Date: Mon, 22 Aug 2022 12:33:59 +0200 Subject: [PATCH 09/18] Use async sleep, increase chunk size --- examples/esp8266/WebSocketClientOTA/python_ota_server/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py index 1c1c5b6..5d2750c 100644 --- a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py +++ b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py @@ -55,7 +55,7 @@ async def binary_send(websocket, fw_file): with open(fw_file, "rb") as binaryfile: while True: - chunk = binaryfile.read(2048) + chunk = binaryfile.read(4096) if not chunk: break try: @@ -63,7 +63,7 @@ async def binary_send(websocket, fw_file): except Exception as exception: Logger.exception(exception) return False - time.sleep(0.2) + asyncio.sleep(0.2) def version_checker(name, vdev, vapp): From f1ffaede0b80486652a397c82566146300c44ef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anton=C3=ADn=20Skala?= Date: Mon, 22 Aug 2022 12:50:37 +0200 Subject: [PATCH 10/18] Fix Typo --- .../esp8266/WebSocketClientOTA/WebSocketClientOTA.ino | 2 +- .../esp8266/WebSocketClientOTA/python_ota_server/main.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino b/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino index 6a809c0..6b902d8 100644 --- a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino +++ b/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino @@ -127,7 +127,7 @@ RESPONSES_STRUCT responses[] = { }; void text(uint8_t * payload, size_t length){ - // Convert mesage to something usable + // Convert message to something usable char msgch[length]; for (unsigned int i = 0; i < length; i++) { diff --git a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py index 5d2750c..92acc95 100644 --- a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py +++ b/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py @@ -79,7 +79,7 @@ def version_checker(name, vdev, vapp): class WsOtaHandler (threading.Thread): """Thread handling ota update - Runing ota directly from message would kill WS + Running ota directly from message would kill WS as message bus would timeout. """ def __init__(self, name, message, websocket): @@ -177,7 +177,7 @@ async def _state(websocket, message): await websocket.send(json.dumps(response)) -async def _unhandleld(websocket, msg): +async def _unhandled(websocket, msg): Logger.info("Unhandled message from device: %s", str(msg)) response = {'type': 'response', 'state': 'nok'} await websocket.send(json.dumps(response)) @@ -206,7 +206,7 @@ async def message_received(websocket, message) -> None: type_ = msg_json.get('type') name = msg_json.get('name') - func = switcher.get(type_, _unhandleld) + func = switcher.get(type_, _unhandled) Logger.debug("Client(%s)said: %s", name, type_) try: @@ -225,7 +225,7 @@ async def ws_server(websocket, path) -> None: async def main(): """Server starter - Normal user can bind only port nubers greater than 1024 + Normal user can bind only port numbers greater than 1024 """ async with websockets.serve(ws_server, "10.0.1.5", 8081): await asyncio.Future() # run forever From 323592f622e0ec8f9ce1f995c5777d9bbaaae1ec Mon Sep 17 00:00:00 2001 From: jakubdybczak Date: Sun, 14 Aug 2022 18:03:16 +0200 Subject: [PATCH 11/18] Add possibility to change WEBSOCKETS_TCP_TIMEOUT --- src/WebSockets.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/WebSockets.h b/src/WebSockets.h index 60c13d9..3ee3f3a 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -94,7 +94,9 @@ #define WEBSOCKETS_YIELD_MORE() #endif +#ifndef WEBSOCKETS_TCP_TIMEOUT #define WEBSOCKETS_TCP_TIMEOUT (5000) +#endif #define NETWORK_ESP8266_ASYNC (0) #define NETWORK_ESP8266 (1) From d9a5c629f053fb234877aafd9b61986c25de7825 Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Thu, 12 Jan 2023 09:53:42 -0800 Subject: [PATCH 12/18] Port to Raspberry Pi Pico W core Add support for the onboard WiFi chip on the Raspberry Pi Pico W (RP2040 based ) board using the arduino-pico Arduino core at https://github.com/earlephilhower/arduino-pico The PicoW WiFi stack is a mashup of the ESP8266 and ESP32 cores, so only minimal changes were required. Defines a new NETWORK_TYPE for the PicoW. ESP8266 examples renames to ESP8266_PICO because they all work unmodified (except for OTA which is handled differently on the Pico) --- README.md | 1 + .../WebSocketClient/WebSocketClient.ino | 0 .../WebSocketClientOTA/README.md | 0 .../WebSocketClientOTA/WebSocketClientOTA.ino | 11 +++++---- .../python_ota_server/main.py | 0 .../python_ota_server/requirements.txt | 0 .../WebSocketClientSSL/WebSocketClientSSL.ino | 0 .../WebSocketClientSSLWithCA.ino | 0 .../WebSocketClientSocketIO.ino | 0 .../WebSocketClientSocketIOack.ino | 0 .../WebSocketClientStomp.ino | 0 .../WebSocketClientStompOverSockJs.ino | 0 .../WebSocketServer/WebSocketServer.ino | 0 .../WebSocketServerAllFunctionsDemo.ino | 0 .../WebSocketServerFragmentation.ino | 0 .../WebSocketServerHooked.ino | 0 .../WebSocketServerHooked/emu | 0 .../WebSocketServerHooked/ws-testclient.py | 0 .../WebSocketServerHttpHeaderValidation.ino | 0 .../WebSocketServer_LEDcontrol.ino | 0 src/WebSockets.cpp | 2 +- src/WebSockets.h | 23 +++++++++++++++++++ src/WebSockets4WebServer.h | 17 ++++++++++---- src/WebSocketsClient.cpp | 8 ++++--- src/WebSocketsServer.cpp | 18 ++++++++------- src/WebSocketsServer.h | 2 +- src/libb64/cdecode.c | 2 +- src/libb64/cencode.c | 2 +- 28 files changed, 61 insertions(+), 25 deletions(-) rename examples/{esp8266 => esp8266_pico}/WebSocketClient/WebSocketClient.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientOTA/README.md (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientOTA/WebSocketClientOTA.ino (98%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientOTA/python_ota_server/main.py (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientOTA/python_ota_server/requirements.txt (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientSSL/WebSocketClientSSL.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientSSLWithCA/WebSocketClientSSLWithCA.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientSocketIO/WebSocketClientSocketIO.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientSocketIOack/WebSocketClientSocketIOack.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientStomp/WebSocketClientStomp.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServer/WebSocketServer.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerAllFunctionsDemo/WebSocketServerAllFunctionsDemo.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerFragmentation/WebSocketServerFragmentation.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerHooked/WebSocketServerHooked.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerHooked/emu (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerHooked/ws-testclient.py (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino (100%) rename examples/{esp8266 => esp8266_pico}/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino (100%) diff --git a/README.md b/README.md index 26d124c..83faaab 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ a WebSocket Server and Client for Arduino based on RFC6455. - ESP8266 [Arduino for ESP8266](https://github.com/esp8266/Arduino/) - ESP32 [Arduino for ESP32](https://github.com/espressif/arduino-esp32) - ESP31B + - Raspberry Pi Pico W [Arduino for Pico](https://github.com/earlephilhower/arduino-pico) - Particle with STM32 ARM Cortex M3 - ATmega328 with Ethernet Shield (ATmega branch) - ATmega328 with enc28j60 (ATmega branch) diff --git a/examples/esp8266/WebSocketClient/WebSocketClient.ino b/examples/esp8266_pico/WebSocketClient/WebSocketClient.ino similarity index 100% rename from examples/esp8266/WebSocketClient/WebSocketClient.ino rename to examples/esp8266_pico/WebSocketClient/WebSocketClient.ino diff --git a/examples/esp8266/WebSocketClientOTA/README.md b/examples/esp8266_pico/WebSocketClientOTA/README.md similarity index 100% rename from examples/esp8266/WebSocketClientOTA/README.md rename to examples/esp8266_pico/WebSocketClientOTA/README.md diff --git a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino similarity index 98% rename from examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino rename to examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino index 6b902d8..88e14c4 100644 --- a/examples/esp8266/WebSocketClientOTA/WebSocketClientOTA.ino +++ b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino @@ -8,15 +8,16 @@ #include #include -#ifdef ESP8266 +#if defined(ESP8266) #include #include - #include -#endif -#ifdef ESP32 + #include +#elif defined(ESP32) #include "WiFi.h" #include "ESPmDNS.h" - #include + #include +#else + #error Unsupported device #endif #include diff --git a/examples/esp8266/WebSocketClientOTA/python_ota_server/main.py b/examples/esp8266_pico/WebSocketClientOTA/python_ota_server/main.py similarity index 100% rename from examples/esp8266/WebSocketClientOTA/python_ota_server/main.py rename to examples/esp8266_pico/WebSocketClientOTA/python_ota_server/main.py diff --git a/examples/esp8266/WebSocketClientOTA/python_ota_server/requirements.txt b/examples/esp8266_pico/WebSocketClientOTA/python_ota_server/requirements.txt similarity index 100% rename from examples/esp8266/WebSocketClientOTA/python_ota_server/requirements.txt rename to examples/esp8266_pico/WebSocketClientOTA/python_ota_server/requirements.txt diff --git a/examples/esp8266/WebSocketClientSSL/WebSocketClientSSL.ino b/examples/esp8266_pico/WebSocketClientSSL/WebSocketClientSSL.ino similarity index 100% rename from examples/esp8266/WebSocketClientSSL/WebSocketClientSSL.ino rename to examples/esp8266_pico/WebSocketClientSSL/WebSocketClientSSL.ino diff --git a/examples/esp8266/WebSocketClientSSLWithCA/WebSocketClientSSLWithCA.ino b/examples/esp8266_pico/WebSocketClientSSLWithCA/WebSocketClientSSLWithCA.ino similarity index 100% rename from examples/esp8266/WebSocketClientSSLWithCA/WebSocketClientSSLWithCA.ino rename to examples/esp8266_pico/WebSocketClientSSLWithCA/WebSocketClientSSLWithCA.ino diff --git a/examples/esp8266/WebSocketClientSocketIO/WebSocketClientSocketIO.ino b/examples/esp8266_pico/WebSocketClientSocketIO/WebSocketClientSocketIO.ino similarity index 100% rename from examples/esp8266/WebSocketClientSocketIO/WebSocketClientSocketIO.ino rename to examples/esp8266_pico/WebSocketClientSocketIO/WebSocketClientSocketIO.ino diff --git a/examples/esp8266/WebSocketClientSocketIOack/WebSocketClientSocketIOack.ino b/examples/esp8266_pico/WebSocketClientSocketIOack/WebSocketClientSocketIOack.ino similarity index 100% rename from examples/esp8266/WebSocketClientSocketIOack/WebSocketClientSocketIOack.ino rename to examples/esp8266_pico/WebSocketClientSocketIOack/WebSocketClientSocketIOack.ino diff --git a/examples/esp8266/WebSocketClientStomp/WebSocketClientStomp.ino b/examples/esp8266_pico/WebSocketClientStomp/WebSocketClientStomp.ino similarity index 100% rename from examples/esp8266/WebSocketClientStomp/WebSocketClientStomp.ino rename to examples/esp8266_pico/WebSocketClientStomp/WebSocketClientStomp.ino diff --git a/examples/esp8266/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino b/examples/esp8266_pico/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino similarity index 100% rename from examples/esp8266/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino rename to examples/esp8266_pico/WebSocketClientStompOverSockJs/WebSocketClientStompOverSockJs.ino diff --git a/examples/esp8266/WebSocketServer/WebSocketServer.ino b/examples/esp8266_pico/WebSocketServer/WebSocketServer.ino similarity index 100% rename from examples/esp8266/WebSocketServer/WebSocketServer.ino rename to examples/esp8266_pico/WebSocketServer/WebSocketServer.ino diff --git a/examples/esp8266/WebSocketServerAllFunctionsDemo/WebSocketServerAllFunctionsDemo.ino b/examples/esp8266_pico/WebSocketServerAllFunctionsDemo/WebSocketServerAllFunctionsDemo.ino similarity index 100% rename from examples/esp8266/WebSocketServerAllFunctionsDemo/WebSocketServerAllFunctionsDemo.ino rename to examples/esp8266_pico/WebSocketServerAllFunctionsDemo/WebSocketServerAllFunctionsDemo.ino diff --git a/examples/esp8266/WebSocketServerFragmentation/WebSocketServerFragmentation.ino b/examples/esp8266_pico/WebSocketServerFragmentation/WebSocketServerFragmentation.ino similarity index 100% rename from examples/esp8266/WebSocketServerFragmentation/WebSocketServerFragmentation.ino rename to examples/esp8266_pico/WebSocketServerFragmentation/WebSocketServerFragmentation.ino diff --git a/examples/esp8266/WebSocketServerHooked/WebSocketServerHooked.ino b/examples/esp8266_pico/WebSocketServerHooked/WebSocketServerHooked.ino similarity index 100% rename from examples/esp8266/WebSocketServerHooked/WebSocketServerHooked.ino rename to examples/esp8266_pico/WebSocketServerHooked/WebSocketServerHooked.ino diff --git a/examples/esp8266/WebSocketServerHooked/emu b/examples/esp8266_pico/WebSocketServerHooked/emu similarity index 100% rename from examples/esp8266/WebSocketServerHooked/emu rename to examples/esp8266_pico/WebSocketServerHooked/emu diff --git a/examples/esp8266/WebSocketServerHooked/ws-testclient.py b/examples/esp8266_pico/WebSocketServerHooked/ws-testclient.py similarity index 100% rename from examples/esp8266/WebSocketServerHooked/ws-testclient.py rename to examples/esp8266_pico/WebSocketServerHooked/ws-testclient.py diff --git a/examples/esp8266/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino b/examples/esp8266_pico/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino similarity index 100% rename from examples/esp8266/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino rename to examples/esp8266_pico/WebSocketServerHttpHeaderValidation/WebSocketServerHttpHeaderValidation.ino diff --git a/examples/esp8266/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino b/examples/esp8266_pico/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino similarity index 100% rename from examples/esp8266/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino rename to examples/esp8266_pico/WebSocketServer_LEDcontrol/WebSocketServer_LEDcontrol.ino diff --git a/src/WebSockets.cpp b/src/WebSockets.cpp index 49f5480..260129f 100644 --- a/src/WebSockets.cpp +++ b/src/WebSockets.cpp @@ -482,7 +482,7 @@ void WebSockets::handleWebsocketPayloadCb(WSclient_t * client, bool ok, uint8_t switch(header->opCode) { case WSop_text: DEBUG_WEBSOCKETS("[WS][%d][handleWebsocket] text: %s\n", client->num, payload); - // no break here! + // fallthrough case WSop_binary: case WSop_continuation: messageReceived(client, header->opCode, payload, header->payloadLen, header->fin); diff --git a/src/WebSockets.h b/src/WebSockets.h index 3ee3f3a..f6b6f38 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -84,6 +84,15 @@ #define GET_FREE_HEAP System.freeMemory() #define WEBSOCKETS_YIELD() #define WEBSOCKETS_YIELD_MORE() + +#elif defined(ARDUINO_ARCH_RP2040) + +#define WEBSOCKETS_MAX_DATA_SIZE (15 * 1024) +#define WEBSOCKETS_USE_BIG_MEM +#define GET_FREE_HEAP rp2040.getFreeHeap() +#define WEBSOCKETS_YIELD() yield() +#define WEBSOCKETS_YIELD_MORE() delay(1) + #else // atmega328p has only 2KB ram! @@ -104,6 +113,7 @@ #define NETWORK_ENC28J60 (3) #define NETWORK_ESP32 (4) #define NETWORK_ESP32_ETH (5) +#define NETWORK_RP2040 (6) // max size of the WS Message Header #define WEBSOCKETS_MAX_HEADER_SIZE (14) @@ -118,6 +128,10 @@ #elif defined(ESP32) #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32 //#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32_ETH + +#elif defined(ARDUINO_ARCH_RP2040) +#define WEBSOCKETS_NETWORK_TYPE NETWORK_RP2040 + #else #define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100 @@ -201,6 +215,15 @@ #define WEBSOCKETS_NETWORK_CLASS WiFiClient #define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer +#elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) + +#include +#include +#define SSL_BARESSL +#define WEBSOCKETS_NETWORK_CLASS WiFiClient +#define WEBSOCKETS_NETWORK_SSL_CLASS WiFiClientSecure +#define WEBSOCKETS_NETWORK_SERVER_CLASS WiFiServer + #else #error "no network type selected!" #endif diff --git a/src/WebSockets4WebServer.h b/src/WebSockets4WebServer.h index ba2b020..81db221 100644 --- a/src/WebSockets4WebServer.h +++ b/src/WebSockets4WebServer.h @@ -28,23 +28,30 @@ #include #include -#if WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266 && WEBSERVER_HAS_HOOK + +#if ((WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040)) && WEBSERVER_HAS_HOOK class WebSockets4WebServer : public WebSocketsServerCore { +#if defined(ESP8266) + using WebServerClass = ESP8266WebServer; +#else + using WebServerClass = WebServer; +#endif + public: WebSockets4WebServer(const String & origin = "", const String & protocol = "arduino") : WebSocketsServerCore(origin, protocol) { begin(); } - ESP8266WebServer::HookFunction hookForWebserver(const String & wsRootDir, WebSocketServerEvent event) { + WebServerClass::HookFunction hookForWebserver(const String & wsRootDir, WebSocketServerEvent event) { onEvent(event); - return [&, wsRootDir](const String & method, const String & url, WiFiClient * tcpClient, ESP8266WebServer::ContentTypeFunction contentType) { + return [&, wsRootDir](const String & method, const String & url, WiFiClient * tcpClient, WebServerClass::ContentTypeFunction contentType) { (void)contentType; if(!(method == "GET" && url.indexOf(wsRootDir) == 0)) { - return ESP8266WebServer::CLIENT_REQUEST_CAN_CONTINUE; + return WebServerClass::CLIENT_REQUEST_CAN_CONTINUE; } // allocate a WiFiClient copy (like in WebSocketsServer::handleNewClients()) @@ -63,7 +70,7 @@ class WebSockets4WebServer : public WebSocketsServerCore { } // tell webserver to not close but forget about this client - return ESP8266WebServer::CLIENT_IS_GIVEN; + return WebServerClass::CLIENT_IS_GIVEN; }; } }; diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 4ff62f0..505f1e0 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -76,6 +76,8 @@ void WebSocketsClient::begin(const char * host, uint16_t port, const char * url, #ifdef ESP8266 randomSeed(RANDOM_REG32); +#elif defined(ARDUINO_ARCH_RP2040) + randomSeed(rp2040.hwrand32()); #else // todo find better seed randomSeed(millis()); @@ -224,7 +226,7 @@ void WebSocketsClient::loop(void) { _client.ssl->setCACert(_CA_cert); #elif defined(ESP8266) && defined(SSL_AXTLS) _client.ssl->setCACert((const uint8_t *)_CA_cert, strlen(_CA_cert) + 1); -#elif defined(ESP8266) && defined(SSL_BARESSL) +#elif (defined(ESP8266) || defined(ARDUINO_ARCH_RP2040)) && defined(SSL_BARESSL) _client.ssl->setTrustAnchors(_CA_cert); #else #error setCACert not implemented @@ -473,7 +475,7 @@ void WebSocketsClient::messageReceived(WSclient_t * client, WSopcode_t opcode, u void WebSocketsClient::clientDisconnect(WSclient_t * client) { bool event = false; -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) if(client->isSSL && client->ssl) { if(client->ssl->connected()) { client->ssl->flush(); @@ -864,7 +866,7 @@ void WebSocketsClient::connectedCb() { _client.tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT); #endif -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) _client.tcp->setNoDelay(true); #endif diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index af95023..ea93ecc 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -85,6 +85,8 @@ void WebSocketsServerCore::begin(void) { #elif defined(ESP32) #define DR_REG_RNG_BASE 0x3ff75144 randomSeed(READ_PERI_REG(DR_REG_RNG_BASE)); +#elif defined(ARDUINO_ARCH_RP2040) + randomSeed(rp2040.hwrand32()); #else // TODO find better seed randomSeed(millis()); @@ -394,7 +396,7 @@ bool WebSocketsServerCore::clientIsConnected(uint8_t num) { return clientIsConnected(client); } -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) /** * get an IP for a client * @param num uint8_t client id @@ -439,7 +441,7 @@ WSclient_t * WebSocketsServerCore::newClient(WEBSOCKETS_NETWORK_CLASS * TCPclien client->tcp->setTimeout(WEBSOCKETS_TCP_TIMEOUT); #endif client->status = WSC_HEADER; -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) #ifndef NODEBUG_WEBSOCKETS IPAddress ip = client->tcp->remoteIP(); #endif @@ -521,7 +523,7 @@ void WebSocketsServerCore::dropNativeClient(WSclient_t * client) { } if(client->tcp) { if(client->tcp->connected()) { -#if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) && (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP8266_ASYNC) && (WEBSOCKETS_NETWORK_TYPE != NETWORK_ESP32) && (WEBSOCKETS_NETWORK_TYPE != NETWORK_RP2040) client->tcp->flush(); #endif client->tcp->stop(); @@ -540,7 +542,7 @@ void WebSocketsServerCore::dropNativeClient(WSclient_t * client) { * @param client WSclient_t * ptr to the client struct */ void WebSocketsServerCore::clientDisconnect(WSclient_t * client) { -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) if(client->isSSL && client->ssl) { if(client->ssl->connected()) { client->ssl->flush(); @@ -614,7 +616,7 @@ WSclient_t * WebSocketsServerCore::handleNewClient(WEBSOCKETS_NETWORK_CLASS * tc if(!client) { // no free space to handle client -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) #ifndef NODEBUG_WEBSOCKETS IPAddress ip = tcpClient->remoteIP(); #endif @@ -639,7 +641,7 @@ WSclient_t * WebSocketsServerCore::handleNewClient(WEBSOCKETS_NETWORK_CLASS * tc * Handle incoming Connection Request */ void WebSocketsServer::handleNewClients(void) { -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) while(_server->hasClient()) { #endif @@ -652,7 +654,7 @@ void WebSocketsServer::handleNewClients(void) { handleNewClient(tcpClient); -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) } #endif } @@ -923,7 +925,7 @@ void WebSocketsServer::begin(void) { void WebSocketsServer::close(void) { WebSocketsServerCore::close(); -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) _server->close(); #elif(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) _server->end(); diff --git a/src/WebSocketsServer.h b/src/WebSocketsServer.h index 543cba9..197c37f 100644 --- a/src/WebSocketsServer.h +++ b/src/WebSocketsServer.h @@ -90,7 +90,7 @@ class WebSocketsServerCore : protected WebSockets { void enableHeartbeat(uint32_t pingInterval, uint32_t pongTimeout, uint8_t disconnectTimeoutCount); void disableHeartbeat(); -#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) +#if(WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266_ASYNC) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP32) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040) IPAddress remoteIP(uint8_t num); #endif diff --git a/src/libb64/cdecode.c b/src/libb64/cdecode.c index e135da2..615068a 100644 --- a/src/libb64/cdecode.c +++ b/src/libb64/cdecode.c @@ -9,7 +9,7 @@ For details, see http://sourceforge.net/projects/libb64 #include #endif -#if defined(ESP32) +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) #define CORE_HAS_LIBB64 #endif diff --git a/src/libb64/cencode.c b/src/libb64/cencode.c index afe1463..cdc0f67 100644 --- a/src/libb64/cencode.c +++ b/src/libb64/cencode.c @@ -9,7 +9,7 @@ For details, see http://sourceforge.net/projects/libb64 #include #endif -#if defined(ESP32) +#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040) #define CORE_HAS_LIBB64 #endif From 82c357c036e67b2a733128cbe54a1a2616c39f86 Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 1 May 2023 14:30:20 +0200 Subject: [PATCH 13/18] fix OTA example build and build tests for esp8266 examples --- .github/workflows/main.yml | 4 +-- .../WebSocketClientOTA/WebSocketClientOTA.ino | 34 ++++++++----------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 810563e..6d50afb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -36,10 +36,10 @@ jobs: echo -en "::set-output name=matrix::" echo -en "[" - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 echo -en "," - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266 esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 echo -en "," get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 diff --git a/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino index 88e14c4..c0cbcfb 100644 --- a/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino +++ b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino @@ -10,24 +10,27 @@ #if defined(ESP8266) #include + #include #include #include + #include + + ESP8266WiFiMulti WiFiMulti; #elif defined(ESP32) - #include "WiFi.h" + #include + #include #include "ESPmDNS.h" #include + + WiFiMulti WiFiMulti; #else #error Unsupported device #endif #include -#include - #include -#include -ESP8266WiFiMulti WiFiMulti; WebSocketsClient webSocket; #define USE_SERIAL Serial @@ -49,19 +52,12 @@ uint32_t maxSketchSpace = 0; int SketchSize = 0; bool ws_conn = false; -String IpAddress2String(const IPAddress& ipAddress) -{ - return String(ipAddress[0]) + String(".") + - String(ipAddress[1]) + String(".") + - String(ipAddress[2]) + String(".") + - String(ipAddress[3]); -} void greetings_(){ StaticJsonDocument<200> doc; doc["type"] = "greetings"; doc["mac"] = WiFi.macAddress(); - doc["ip"] = IpAddress2String(WiFi.localIP()); + doc["ip"] = WiFi.localIP().toString(); doc["version"] = version; doc["name"] = name; doc["chip"] = chip; @@ -89,7 +85,7 @@ typedef struct { CALLBACK_FUNCTION func; } RESPONSES_STRUCT; -void OTA(JsonDocument &msg){ +void OTA_RESPONSES(JsonDocument &msg){ USE_SERIAL.print(F("[WSc] OTA mode: ")); const char* go = "go"; const char* ok = "ok"; @@ -114,17 +110,17 @@ void OTA(JsonDocument &msg){ } } -void STATE(JsonDocument &msg){ +void STA_RESPONSES(JsonDocument &msg){ // Do something with message } // Count of responses handled by RESPONSES_STRUCT // increase increase if another response handler is added -int nrOfResponses = 2; +const int nrOfResponses = 2; -RESPONSES_STRUCT responses[] = { - {"ota", OTA}, - {"state", STATE}, +RESPONSES_STRUCT responses[nrOfResponses] = { + {"ota", OTA_RESPONSES}, + {"state", STA_RESPONSES}, }; void text(uint8_t * payload, size_t length){ From 4115a87c16bd65bc124eae57bcb9b1f1cb7c4b8b Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 1 May 2023 14:36:07 +0200 Subject: [PATCH 14/18] `set-output` command is deprecated --- .github/workflows/main.yml | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 6d50afb..4a4a698 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,18 +33,20 @@ jobs: run: | source $GITHUB_WORKSPACE/travis/common.sh cd $GITHUB_WORKSPACE - echo -en "::set-output name=matrix::" - echo -en "[" - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 - echo -en "," + echo -en "matrix=" >> $GITHUB_STATE + echo -en "[" >> $GITHUB_STATE - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 - echo -en "," + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 >> $GITHUB_STATE + echo -en "," >> $GITHUB_STATE - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 >> $GITHUB_STATE + echo -en "," >> $GITHUB_STATE - echo -en "]" + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 >> $GITHUB_STATE + + echo -en "]" >> $GITHUB_STATE + echo >> $GITHUB_STATE outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -63,7 +65,7 @@ jobs: - name: Get Date id: get-date run: | - echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")" + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_STATE shell: bash - uses: actions/cache@v2 @@ -125,7 +127,7 @@ jobs: - name: Get Date id: get-date run: | - echo "::set-output name=date::$(/bin/date -u "+%Y%m%d")" + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_STATE shell: bash - uses: actions/cache@v2 From a4f13a1410ebcbd319ae4a5447c1fa3a1a08ff55 Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 1 May 2023 14:36:26 +0200 Subject: [PATCH 15/18] clang-format --- src/WebSockets.h | 10 +++++----- src/WebSockets4WebServer.h | 7 +++---- src/WebSocketsClient.cpp | 8 ++++---- src/WebSocketsServer.cpp | 6 +++--- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/WebSockets.h b/src/WebSockets.h index f6b6f38..db6c0e8 100644 --- a/src/WebSockets.h +++ b/src/WebSockets.h @@ -50,7 +50,7 @@ DEBUG_ESP_PORT.flush(); \ } #else -//#define DEBUG_WEBSOCKETS(...) os_printf( __VA_ARGS__ ) +// #define DEBUG_WEBSOCKETS(...) os_printf( __VA_ARGS__ ) #endif #endif @@ -67,7 +67,7 @@ #define WEBSOCKETS_USE_BIG_MEM #define GET_FREE_HEAP ESP.getFreeHeap() // moves all Header strings to Flash (~300 Byte) -//#define WEBSOCKETS_SAVE_RAM +// #define WEBSOCKETS_SAVE_RAM #if defined(ESP8266) #define WEBSOCKETS_YIELD() delay(0) @@ -122,12 +122,12 @@ // select Network type based #if defined(ESP8266) || defined(ESP31B) #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266 -//#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266_ASYNC -//#define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100 +// #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP8266_ASYNC +// #define WEBSOCKETS_NETWORK_TYPE NETWORK_W5100 #elif defined(ESP32) #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32 -//#define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32_ETH +// #define WEBSOCKETS_NETWORK_TYPE NETWORK_ESP32_ETH #elif defined(ARDUINO_ARCH_RP2040) #define WEBSOCKETS_NETWORK_TYPE NETWORK_RP2040 diff --git a/src/WebSockets4WebServer.h b/src/WebSockets4WebServer.h index 81db221..595f38b 100644 --- a/src/WebSockets4WebServer.h +++ b/src/WebSockets4WebServer.h @@ -28,14 +28,13 @@ #include #include - -#if ((WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040)) && WEBSERVER_HAS_HOOK +#if((WEBSOCKETS_NETWORK_TYPE == NETWORK_ESP8266) || (WEBSOCKETS_NETWORK_TYPE == NETWORK_RP2040)) && WEBSERVER_HAS_HOOK class WebSockets4WebServer : public WebSocketsServerCore { #if defined(ESP8266) - using WebServerClass = ESP8266WebServer; + using WebServerClass = ESP8266WebServer; #else - using WebServerClass = WebServer; + using WebServerClass = WebServer; #endif public: diff --git a/src/WebSocketsClient.cpp b/src/WebSocketsClient.cpp index 505f1e0..f1155e0 100644 --- a/src/WebSocketsClient.cpp +++ b/src/WebSocketsClient.cpp @@ -226,7 +226,7 @@ void WebSocketsClient::loop(void) { _client.ssl->setCACert(_CA_cert); #elif defined(ESP8266) && defined(SSL_AXTLS) _client.ssl->setCACert((const uint8_t *)_CA_cert, strlen(_CA_cert) + 1); -#elif (defined(ESP8266) || defined(ARDUINO_ARCH_RP2040)) && defined(SSL_BARESSL) +#elif(defined(ESP8266) || defined(ARDUINO_ARCH_RP2040)) && defined(SSL_BARESSL) _client.ssl->setTrustAnchors(_CA_cert); #else #error setCACert not implemented @@ -428,9 +428,9 @@ bool WebSocketsClient::isConnected(void) { return (_client.status == WSC_CONNECTED); } -//################################################################################# -//################################################################################# -//################################################################################# +// ################################################################################# +// ################################################################################# +// ################################################################################# /** * diff --git a/src/WebSocketsServer.cpp b/src/WebSocketsServer.cpp index ea93ecc..79a52ce 100644 --- a/src/WebSocketsServer.cpp +++ b/src/WebSocketsServer.cpp @@ -414,9 +414,9 @@ IPAddress WebSocketsServerCore::remoteIP(uint8_t num) { } #endif -//################################################################################# -//################################################################################# -//################################################################################# +// ################################################################################# +// ################################################################################# +// ################################################################################# /** * handle new client connection From 22dff6598f03f829ce99740054f08698029398c4 Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 1 May 2023 14:48:18 +0200 Subject: [PATCH 16/18] make OTA work with ArduinoJson 6.x --- .../WebSocketClientOTA/WebSocketClientOTA.ino | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino index c0cbcfb..3a988a5 100644 --- a/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino +++ b/examples/esp8266_pico/WebSocketClientOTA/WebSocketClientOTA.ino @@ -56,8 +56,8 @@ bool ws_conn = false; void greetings_(){ StaticJsonDocument<200> doc; doc["type"] = "greetings"; - doc["mac"] = WiFi.macAddress(); - doc["ip"] = WiFi.localIP().toString(); + doc["mac"] = WiFi.macAddress().c_str(); + doc["ip"] = WiFi.localIP().toString().c_str(); doc["version"] = version; doc["name"] = name; doc["chip"] = chip; @@ -70,7 +70,7 @@ void greetings_(){ void register_(){ StaticJsonDocument<200> doc; doc["type"] = "register"; - doc["mac"] = WiFi.macAddress(); + doc["mac"] = WiFi.macAddress().c_str(); char data[200]; serializeJson(doc, data); @@ -87,9 +87,8 @@ typedef struct { void OTA_RESPONSES(JsonDocument &msg){ USE_SERIAL.print(F("[WSc] OTA mode: ")); - const char* go = "go"; - const char* ok = "ok"; - if(strncmp( msg["value"], go, strlen(go)) == 0 ) { + String val = msg["value"]; + if(val == "go") { USE_SERIAL.print(F("go\n")); SketchSize = int(msg["size"]); maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; @@ -100,12 +99,12 @@ void OTA_RESPONSES(JsonDocument &msg){ Update.printError(Serial); ESP.restart(); } - } else if (strncmp( msg["value"], ok, strlen(ok)) == 0) { + } else if (val == "ok") { USE_SERIAL.print(F("OK\n")); register_(); } else { USE_SERIAL.print(F("unknown value : ")); - USE_SERIAL.print(msg["value"].as()); + USE_SERIAL.print(val); USE_SERIAL.print(F("\n")); } } @@ -146,9 +145,10 @@ void text(uint8_t * payload, size_t length){ // Handle each TYPE of message int b = 0; + String t = doc_in["type"]; for( b=0 ; b Date: Mon, 1 May 2023 14:51:36 +0200 Subject: [PATCH 17/18] add RP2040 as supported and bump version --- library.json | 4 ++-- library.properties | 2 +- src/WebSocketsVersion.h | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/library.json b/library.json index 8675831..d29c1a7 100644 --- a/library.json +++ b/library.json @@ -16,10 +16,10 @@ "keywords": "wifi, http, web, server, client, websocket", "license": "LGPL-2.1", "name": "WebSockets", - "platforms": "atmelavr, espressif8266, espressif32", + "platforms": "atmelavr, espressif8266, espressif32, raspberrypi", "repository": { "type": "git", "url": "https://github.com/Links2004/arduinoWebSockets.git" }, - "version": "2.3.7" + "version": "2.4.0" } \ No newline at end of file diff --git a/library.properties b/library.properties index aab19e8..097048e 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=WebSockets -version=2.3.7 +version=2.4.0 author=Markus Sattler maintainer=Markus Sattler sentence=WebSockets for Arduino (Server + Client) diff --git a/src/WebSocketsVersion.h b/src/WebSocketsVersion.h index bf2526c..e349bbf 100644 --- a/src/WebSocketsVersion.h +++ b/src/WebSocketsVersion.h @@ -1,6 +1,6 @@ /** * @file WebSocketsVersion.h - * @date 05.04.2022 + * @date 01.05.2023 * @author Markus Sattler * * Copyright (c) 2015 Markus Sattler. All rights reserved. @@ -25,12 +25,12 @@ #ifndef WEBSOCKETSVERSION_H_ #define WEBSOCKETSVERSION_H_ -#define WEBSOCKETS_VERSION "2.3.7" +#define WEBSOCKETS_VERSION "2.4.0" #define WEBSOCKETS_VERSION_MAJOR 2 -#define WEBSOCKETS_VERSION_MINOR 3 -#define WEBSOCKETS_VERSION_PATCH 7 +#define WEBSOCKETS_VERSION_MINOR 4 +#define WEBSOCKETS_VERSION_PATCH 0 -#define WEBSOCKETS_VERSION_INT 2003007 +#define WEBSOCKETS_VERSION_INT 2004000 #endif /* WEBSOCKETSVERSION_H_ */ From bb900a77b6cc4f448de337d58c57d159e17dc1fb Mon Sep 17 00:00:00 2001 From: Links Date: Mon, 1 May 2023 14:53:30 +0200 Subject: [PATCH 18/18] GITHUB_STATE --> GITHUB_OUTPUT --- .github/workflows/main.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a4a698..279fe85 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,19 +34,19 @@ jobs: source $GITHUB_WORKSPACE/travis/common.sh cd $GITHUB_WORKSPACE - echo -en "matrix=" >> $GITHUB_STATE - echo -en "[" >> $GITHUB_STATE + echo -en "matrix=" >> $GITHUB_OUTPUT + echo -en "[" >> $GITHUB_OUTPUT - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 >> $GITHUB_STATE - echo -en "," >> $GITHUB_STATE + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Serial1,lvl=SSL,wipe=none,baud=115200 >> $GITHUB_OUTPUT + echo -en "," >> $GITHUB_OUTPUT - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 >> $GITHUB_STATE - echo -en "," >> $GITHUB_STATE + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp8266_pico esp8266 1.8.19 esp8266com:esp8266:generic:xtal=80,vt=flash,exception=disabled,stacksmash=disabled,ssl=all,mmu=3232,non32xfer=fast,ResetMethod=nodemcu,CrystalFreq=26,FlashFreq=80,FlashMode=qio,eesz=4M2M,led=2,sdk=nonosdk_190703,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200 >> $GITHUB_OUTPUT + echo -en "," >> $GITHUB_OUTPUT - get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 >> $GITHUB_STATE + get_sketches_json_matrix arduino $GITHUB_WORKSPACE/examples/esp32 esp32 1.8.19 espressif:esp32:esp32:FlashFreq=80 >> $GITHUB_OUTPUT - echo -en "]" >> $GITHUB_STATE - echo >> $GITHUB_STATE + echo -en "]" >> $GITHUB_OUTPUT + echo >> $GITHUB_OUTPUT outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} @@ -65,7 +65,7 @@ jobs: - name: Get Date id: get-date run: | - echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_STATE + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT shell: bash - uses: actions/cache@v2 @@ -127,7 +127,7 @@ jobs: - name: Get Date id: get-date run: | - echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_STATE + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT shell: bash - uses: actions/cache@v2