From 6047d9de9a8107f2ce99aaa158d385ec06e18ebc Mon Sep 17 00:00:00 2001 From: "Earle F. Philhower, III" Date: Thu, 12 Jan 2023 09:53:42 -0800 Subject: [PATCH] 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