From f7b4959994de4bee0e12e86dd17334c47f9b874d Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Thu, 11 Apr 2024 00:55:32 +0200 Subject: [PATCH 1/8] fix(ethernet): move event listener earlier to avoid missing event `ETH_CONNECTED` (#9481) * Ethernet: Move event listener earlier * fix(ethernet): move network listener after initNetif --- libraries/Ethernet/src/ETH.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index 9c699bae751..067ce7f3802 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -287,6 +287,8 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i /* attach to receive events */ initNetif((Network_Interface_ID)(ESP_NETIF_ID_ETH+_eth_index)); + Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED); + ret = esp_eth_start(_eth_handle); if(ret != ESP_OK){ log_e("esp_eth_start failed: %d", ret); @@ -308,8 +310,6 @@ bool ETHClass::begin(eth_phy_type_t type, int32_t phy_addr, int mdc, int mdio, i if(!perimanSetPinBus(_pin_power, ESP32_BUS_TYPE_ETHERNET_PWR, (void *)(this), -1, -1)){ goto err; } } - Network.onSysEvent(onEthConnected, ARDUINO_EVENT_ETH_CONNECTED); - // holds a few milliseconds to let DHCP start and enter into a good state // FIX ME -- adresses issue https://github.com/espressif/arduino-esp32/issues/5733 delay(50); From 93448d7f34402be4a87eac45356a1a52e7d13571 Mon Sep 17 00:00:00 2001 From: Nathan Nau Date: Thu, 11 Apr 2024 13:42:31 +0200 Subject: [PATCH 2/8] Handle large octet-stream (master branch) (#9440) * Handle large octet-stream * Add exemple Upload Huge File * Remove unuse function printDirectory * Fix upload path * Simplify and generalize the body parsing. * Create .skip.esp32h2 --------- Co-authored-by: me-no-dev --- .../examples/UploadHugeFile/.skip.esp32h2 | 0 .../examples/UploadHugeFile/README.md | 13 +++ .../UploadHugeFile/UploadHugeFile.ino | 88 +++++++++++++++++++ libraries/WebServer/src/Parsing.cpp | 25 +++++- libraries/WebServer/src/WebServer.cpp | 1 + libraries/WebServer/src/WebServer.h | 16 ++++ .../WebServer/src/detail/RequestHandler.h | 2 + .../src/detail/RequestHandlersImpl.h | 13 +++ 8 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 libraries/WebServer/examples/UploadHugeFile/.skip.esp32h2 create mode 100644 libraries/WebServer/examples/UploadHugeFile/README.md create mode 100644 libraries/WebServer/examples/UploadHugeFile/UploadHugeFile.ino diff --git a/libraries/WebServer/examples/UploadHugeFile/.skip.esp32h2 b/libraries/WebServer/examples/UploadHugeFile/.skip.esp32h2 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/libraries/WebServer/examples/UploadHugeFile/README.md b/libraries/WebServer/examples/UploadHugeFile/README.md new file mode 100644 index 00000000000..607dc9d71d8 --- /dev/null +++ b/libraries/WebServer/examples/UploadHugeFile/README.md @@ -0,0 +1,13 @@ +# Upload Huge File To SD Over Http + +This project is an example of an HTTP server designed to facilitate the transfer of large files using the PUT method, in accordance with RFC specifications. + +### Example cURL Command + +```bash +curl -X PUT -T ./my-file.mp3 http://esp-ip/upload/my-file.mp3 +``` + +## Resources + +- RFC HTTP/1.0 - Additional Request Methods - PUT : [Link](https://datatracker.ietf.org/doc/html/rfc1945#appendix-D.1.1) diff --git a/libraries/WebServer/examples/UploadHugeFile/UploadHugeFile.ino b/libraries/WebServer/examples/UploadHugeFile/UploadHugeFile.ino new file mode 100644 index 00000000000..c05b234af51 --- /dev/null +++ b/libraries/WebServer/examples/UploadHugeFile/UploadHugeFile.ino @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include + +const char* ssid = "**********"; +const char* password = "**********"; + +WebServer server(80); + +File rawFile; +void handleCreate() { + server.send(200, "text/plain", ""); +} +void handleCreateProcess() { + String path = "/" + server.pathArg(0); + HTTPRaw& raw = server.raw(); + if (raw.status == RAW_START) { + if (SD.exists((char *)path.c_str())) { + SD.remove((char *)path.c_str()); + } + rawFile = SD.open(path.c_str(), FILE_WRITE); + Serial.print("Upload: START, filename: "); + Serial.println(path); + } else if (raw.status == RAW_WRITE) { + if (rawFile) { + rawFile.write(raw.buf, raw.currentSize); + } + Serial.print("Upload: WRITE, Bytes: "); + Serial.println(raw.currentSize); + } else if (raw.status == RAW_END) { + if (rawFile) { + rawFile.close(); + } + Serial.print("Upload: END, Size: "); + Serial.println(raw.totalSize); + } +} + +void returnFail(String msg) { + server.send(500, "text/plain", msg + "\r\n"); +} + +void handleNotFound() { + String message = "File Not Found\n\n"; + message += "URI: "; + message += server.uri(); + message += "\nMethod: "; + message += (server.method() == HTTP_GET) ? "GET" : "POST"; + message += "\nArguments: "; + message += server.args(); + message += "\n"; + for (uint8_t i = 0; i < server.args(); i++) { + message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; + } + server.send(404, "text/plain", message); +} + +void setup(void) { + Serial.begin(115200); + + while (!SD.begin()) delay(1); + Serial.println("SD Card initialized."); + + WiFi.mode(WIFI_STA); + WiFi.begin(ssid, password); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.print("Connected to "); + Serial.println(ssid); + Serial.print("IP address: "); + Serial.println(WiFi.localIP()); + + server.on(UriRegex("/upload/(.*)"), HTTP_PUT, handleCreate, handleCreateProcess); + server.onNotFound(handleNotFound); + server.begin(); + Serial.println("HTTP server started"); + +} + +void loop(void) { + server.handleClient(); + delay(2);//allow the cpu to switch to other tasks +} diff --git a/libraries/WebServer/src/Parsing.cpp b/libraries/WebServer/src/Parsing.cpp index 4ddd034e567..14d632ef3a4 100644 --- a/libraries/WebServer/src/Parsing.cpp +++ b/libraries/WebServer/src/Parsing.cpp @@ -173,7 +173,30 @@ bool WebServer::_parseRequest(NetworkClient& client) { } } - if (!isForm){ + if (!isForm && _currentHandler && _currentHandler->canRaw(_currentUri)){ + log_v("Parse raw"); + _currentRaw.reset(new HTTPRaw()); + _currentRaw->status = RAW_START; + _currentRaw->totalSize = 0; + _currentRaw->currentSize = 0; + log_v("Start Raw"); + _currentHandler->raw(*this, _currentUri, *_currentRaw); + _currentRaw->status = RAW_WRITE; + + while (_currentRaw->totalSize < _clientContentLength) { + _currentRaw->currentSize = client.readBytes(_currentRaw->buf, HTTP_RAW_BUFLEN); + _currentRaw->totalSize += _currentRaw->currentSize; + if (_currentRaw->currentSize == 0) { + _currentRaw->status = RAW_ABORTED; + _currentHandler->raw(*this, _currentUri, *_currentRaw); + return false; + } + _currentHandler->raw(*this, _currentUri, *_currentRaw); + } + _currentRaw->status = RAW_END; + _currentHandler->raw(*this, _currentUri, *_currentRaw); + log_v("Finish Raw"); + } else if (!isForm) { size_t plainLength; char* plainBuf = readBytesWithTimeout(client, _clientContentLength, plainLength, HTTP_MAX_POST_WAIT); if (plainLength < _clientContentLength) { diff --git a/libraries/WebServer/src/WebServer.cpp b/libraries/WebServer/src/WebServer.cpp index 2ded68dce7e..30f604a7e75 100644 --- a/libraries/WebServer/src/WebServer.cpp +++ b/libraries/WebServer/src/WebServer.cpp @@ -438,6 +438,7 @@ void WebServer::handleClient() { _currentClient = NetworkClient(); _currentStatus = HC_NONE; _currentUpload.reset(); + _currentRaw.reset(); } if (callYield) { diff --git a/libraries/WebServer/src/WebServer.h b/libraries/WebServer/src/WebServer.h index 2434855b6eb..2eaaf78344b 100644 --- a/libraries/WebServer/src/WebServer.h +++ b/libraries/WebServer/src/WebServer.h @@ -33,6 +33,7 @@ enum HTTPUploadStatus { UPLOAD_FILE_START, UPLOAD_FILE_WRITE, UPLOAD_FILE_END, UPLOAD_FILE_ABORTED }; +enum HTTPRawStatus { RAW_START, RAW_WRITE, RAW_END, RAW_ABORTED }; enum HTTPClientStatus { HC_NONE, HC_WAIT_READ, HC_WAIT_CLOSE }; enum HTTPAuthMethod { BASIC_AUTH, DIGEST_AUTH, OTHER_AUTH }; @@ -42,6 +43,10 @@ enum HTTPAuthMethod { BASIC_AUTH, DIGEST_AUTH, OTHER_AUTH }; #define HTTP_UPLOAD_BUFLEN 1436 #endif +#ifndef HTTP_RAW_BUFLEN +#define HTTP_RAW_BUFLEN 1436 +#endif + #define HTTP_MAX_DATA_WAIT 5000 //ms to wait for the client to send the request #define HTTP_MAX_POST_WAIT 5000 //ms to wait for POST data to arrive #define HTTP_MAX_SEND_WAIT 5000 //ms to wait for data chunk to be ACKed @@ -63,6 +68,15 @@ typedef struct { uint8_t buf[HTTP_UPLOAD_BUFLEN]; } HTTPUpload; +typedef struct +{ + HTTPRawStatus status; + size_t totalSize; // content size + size_t currentSize; // size of data currently in buf + uint8_t buf[HTTP_UPLOAD_BUFLEN]; + void *data; // additional data +} HTTPRaw; + #include "detail/RequestHandler.h" namespace fs { @@ -128,6 +142,7 @@ class WebServer HTTPMethod method() { return _currentMethod; } virtual NetworkClient & client() { return _currentClient; } HTTPUpload& upload() { return *_currentUpload; } + HTTPRaw& raw() { return *_currentRaw; } String pathArg(unsigned int i); // get request path argument by number String arg(String name); // get request argument value by name @@ -232,6 +247,7 @@ class WebServer RequestArgument* _postArgs; std::unique_ptr _currentUpload; + std::unique_ptr _currentRaw; int _headerKeysCount; RequestArgument* _currentHeaders; diff --git a/libraries/WebServer/src/detail/RequestHandler.h b/libraries/WebServer/src/detail/RequestHandler.h index 871ae5c8b3d..27ca3c9c771 100644 --- a/libraries/WebServer/src/detail/RequestHandler.h +++ b/libraries/WebServer/src/detail/RequestHandler.h @@ -9,8 +9,10 @@ class RequestHandler { virtual ~RequestHandler() { } virtual bool canHandle(HTTPMethod method, String uri) { (void) method; (void) uri; return false; } virtual bool canUpload(String uri) { (void) uri; return false; } + virtual bool canRaw(String uri) { (void) uri; return false; } virtual bool handle(WebServer& server, HTTPMethod requestMethod, String requestUri) { (void) server; (void) requestMethod; (void) requestUri; return false; } virtual void upload(WebServer& server, String requestUri, HTTPUpload& upload) { (void) server; (void) requestUri; (void) upload; } + virtual void raw(WebServer& server, String requestUri, HTTPRaw& raw) { (void) server; (void) requestUri; (void) raw; } RequestHandler* next() { return _next; } void next(RequestHandler* r) { _next = r; } diff --git a/libraries/WebServer/src/detail/RequestHandlersImpl.h b/libraries/WebServer/src/detail/RequestHandlersImpl.h index d10bd19d12b..a990432e005 100644 --- a/libraries/WebServer/src/detail/RequestHandlersImpl.h +++ b/libraries/WebServer/src/detail/RequestHandlersImpl.h @@ -38,6 +38,12 @@ class FunctionRequestHandler : public RequestHandler { return true; } + bool canRaw(String requestUri) override { + if (!_ufn || _method == HTTP_GET) + return false; + + return true; + } bool handle(WebServer& server, HTTPMethod requestMethod, String requestUri) override { (void) server; @@ -55,6 +61,13 @@ class FunctionRequestHandler : public RequestHandler { _ufn(); } + void raw(WebServer& server, String requestUri, HTTPRaw& raw) override { + (void)server; + (void)raw; + if (canRaw(requestUri)) + _ufn(); + } + protected: WebServer::THandlerFunction _fn; WebServer::THandlerFunction _ufn; From 04b70bbf6add47337ef1eadfb987bff6ba2f5d80 Mon Sep 17 00:00:00 2001 From: Rodrigo Garcia Date: Thu, 11 Apr 2024 12:19:11 -0300 Subject: [PATCH 3/8] Change name to HWCDC_Events.ino (From HWSerial_Events.ino) (#9483) * Create HWCDC_Events.ino * Delete libraries/ESP32/examples/HWSerial_Events/.skip.esp32 * Delete libraries/ESP32/examples/HWSerial_Events/.skip.esp32s2 * Delete libraries/ESP32/examples/HWSerial_Events/HWSerial_Events.ino * Create .skip.esp32 * Create .skip.esp32s2 * Fixes HWCDC_Events.ino * Fixes CI for S3 --- .../examples/{HWSerial_Events => HWCDC_Events}/.skip.esp32 | 0 .../{HWSerial_Events => HWCDC_Events}/.skip.esp32s2 | 0 .../HWSerial_Events.ino => HWCDC_Events/HWCDC_Events.ino} | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) rename libraries/ESP32/examples/{HWSerial_Events => HWCDC_Events}/.skip.esp32 (100%) rename libraries/ESP32/examples/{HWSerial_Events => HWCDC_Events}/.skip.esp32s2 (100%) rename libraries/ESP32/examples/{HWSerial_Events/HWSerial_Events.ino => HWCDC_Events/HWCDC_Events.ino} (100%) diff --git a/libraries/ESP32/examples/HWSerial_Events/.skip.esp32 b/libraries/ESP32/examples/HWCDC_Events/.skip.esp32 similarity index 100% rename from libraries/ESP32/examples/HWSerial_Events/.skip.esp32 rename to libraries/ESP32/examples/HWCDC_Events/.skip.esp32 diff --git a/libraries/ESP32/examples/HWSerial_Events/.skip.esp32s2 b/libraries/ESP32/examples/HWCDC_Events/.skip.esp32s2 similarity index 100% rename from libraries/ESP32/examples/HWSerial_Events/.skip.esp32s2 rename to libraries/ESP32/examples/HWCDC_Events/.skip.esp32s2 diff --git a/libraries/ESP32/examples/HWSerial_Events/HWSerial_Events.ino b/libraries/ESP32/examples/HWCDC_Events/HWCDC_Events.ino similarity index 100% rename from libraries/ESP32/examples/HWSerial_Events/HWSerial_Events.ino rename to libraries/ESP32/examples/HWCDC_Events/HWCDC_Events.ino index 9c6de0501fa..3376a7fddc8 100644 --- a/libraries/ESP32/examples/HWSerial_Events/HWSerial_Events.ino +++ b/libraries/ESP32/examples/HWCDC_Events/HWCDC_Events.ino @@ -63,11 +63,11 @@ const char* HWCDC_Status() { } void setup() { + HWCDCSerial.onEvent(usbEventCallback); + HWCDCSerial.begin(); + Serial0.begin(115200); Serial0.setDebugOutput(true); - - HWCDCSerial.begin(); - HWCDCSerial.onEvent(usbEventCallback); Serial0.println("Starting..."); } From 3a0dd1cbe5029c7eaff261c1ab133828de475722 Mon Sep 17 00:00:00 2001 From: Sly Gryphon Date: Fri, 12 Apr 2024 19:28:12 +1000 Subject: [PATCH 4/8] fix(dns): Fix IPv6-only network, by checking IPv6 first if you have public address (#9443) Work around because AF_UNSPEC does not check available addresses when determining result. If you have a global scope IPv6 address, then first check for IPv6 DNS result; if you don't have an IPv6, or there is no IPv6 result, then check IPv4. This allows IPv6-only networks to connect to dual-stack destinations, as they will get the IPv6 address (rather than the unusable IPv4). It also means a dual-stack host to a dual-stack destination will preference IPv6. There is no effect if you are on an IPv4-only network, or it is an IPv4-only destination. --- libraries/Network/src/NetworkManager.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/libraries/Network/src/NetworkManager.cpp b/libraries/Network/src/NetworkManager.cpp index c90136eea60..90e185d5964 100644 --- a/libraries/Network/src/NetworkManager.cpp +++ b/libraries/Network/src/NetworkManager.cpp @@ -88,10 +88,32 @@ int NetworkManager::hostByName(const char* aHostname, IPAddress& aResult) struct addrinfo hints; memset(&hints, 0, sizeof(hints)); - hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; + // **Workaround** + // LWIP AF_UNSPEC always prefers IPv4 and doesn't check what network is + // available. See https://github.com/espressif/esp-idf/issues/13255 + // Until that is fixed, as a work around if we have a global scope IPv6, + // then we check IPv6 only first. + if (hasGlobalV6) { + hints.ai_family = AF_INET6; + err = lwip_getaddrinfo(aHostname, servname, &hints, &res); + + if (err == ERR_OK) + { + struct sockaddr_in6 *ipv6 = (struct sockaddr_in6 *)res->ai_addr; + // As an array of u8_t + aResult = IPAddress(IPv6, ipv6->sin6_addr.s6_addr); + log_d("DNS found IPv6 first %s", aResult.toString().c_str()); + lwip_freeaddrinfo(res); + return 1; + } + } + // **End Workaround** + + hints.ai_family = AF_UNSPEC; err = lwip_getaddrinfo(aHostname, servname, &hints, &res); + if (err == ERR_OK) { if (res->ai_family == AF_INET6) From 49b94644c693df22f0a15ffb9454e2d7c3e6c679 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Fri, 12 Apr 2024 18:21:27 +0300 Subject: [PATCH 5/8] IDF release/v5.1 (#9498) * fix(ble): rename esp_ble_gap_ext_adv_report_t * IDF release/v5.1 d23b7a0361 --- .../BLE5_extended_scan/BLE5_extended_scan.ino | 2 +- .../BLE5_periodic_sync/BLE5_periodic_sync.ino | 2 +- libraries/BLE/src/BLEAdvertisedDevice.h | 2 +- package/package_esp32_index.template.json | 68 +++++++++---------- 4 files changed, 37 insertions(+), 37 deletions(-) diff --git a/libraries/BLE/examples/BLE5_extended_scan/BLE5_extended_scan.ino b/libraries/BLE/examples/BLE5_extended_scan/BLE5_extended_scan.ino index ebba036e812..ec0f3965175 100644 --- a/libraries/BLE/examples/BLE5_extended_scan/BLE5_extended_scan.ino +++ b/libraries/BLE/examples/BLE5_extended_scan/BLE5_extended_scan.ino @@ -20,7 +20,7 @@ uint32_t scanTime = 100; //In 10ms (1000ms) BLEScan* pBLEScan; class MyBLEExtAdvertisingCallbacks: public BLEExtAdvertisingCallbacks { - void onResult(esp_ble_gap_ext_adv_reprot_t report) { + void onResult(esp_ble_gap_ext_adv_report_t report) { if(report.event_type & ESP_BLE_GAP_SET_EXT_ADV_PROP_LEGACY){ // here we can receive regular advertising data from BLE4.x devices Serial.println("BLE4.2"); diff --git a/libraries/BLE/examples/BLE5_periodic_sync/BLE5_periodic_sync.ino b/libraries/BLE/examples/BLE5_periodic_sync/BLE5_periodic_sync.ino index c3d9eb6cd2b..6be284e2480 100644 --- a/libraries/BLE/examples/BLE5_periodic_sync/BLE5_periodic_sync.ino +++ b/libraries/BLE/examples/BLE5_periodic_sync/BLE5_periodic_sync.ino @@ -28,7 +28,7 @@ static esp_ble_gap_periodic_adv_sync_params_t periodic_adv_sync_params = { class MyBLEExtAdvertisingCallbacks : public BLEExtAdvertisingCallbacks { - void onResult(esp_ble_gap_ext_adv_reprot_t params) + void onResult(esp_ble_gap_ext_adv_report_t params) { uint8_t *adv_name = NULL; uint8_t adv_name_len = 0; diff --git a/libraries/BLE/src/BLEAdvertisedDevice.h b/libraries/BLE/src/BLEAdvertisedDevice.h index e449a0c0799..9e24156da29 100644 --- a/libraries/BLE/src/BLEAdvertisedDevice.h +++ b/libraries/BLE/src/BLEAdvertisedDevice.h @@ -145,7 +145,7 @@ class BLEExtAdvertisingCallbacks { * As we are scanning, we will find new devices. When found, this call back is invoked with a reference to the * device that was found. During any individual scan, a device will only be detected one time. */ - virtual void onResult(esp_ble_gap_ext_adv_reprot_t report) = 0; + virtual void onResult(esp_ble_gap_ext_adv_report_t report) = 0; }; #endif // SOC_BLE_50_SUPPORTED diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json index 94bb5c1f75f..c8d48f1261e 100644 --- a/package/package_esp32_index.template.json +++ b/package/package_esp32_index.template.json @@ -42,7 +42,7 @@ { "packager": "esp32", "name": "esp32-arduino-libs", - "version": "idf-release_v5.1-3662303f31" + "version": "idf-release_v5.1-d23b7a0361" }, { "packager": "esp32", @@ -105,63 +105,63 @@ "tools": [ { "name": "esp32-arduino-libs", - "version": "idf-release_v5.1-3662303f31", + "version": "idf-release_v5.1-d23b7a0361", "systems": [ { "host": "i686-mingw32", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "x86_64-mingw32", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "arm64-apple-darwin", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "x86_64-apple-darwin", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "i686-pc-linux-gnu", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "aarch64-linux-gnu", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" }, { "host": "arm-linux-gnueabihf", - "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/2c6907b9e2b6ff8d7d47c93d622827575190b806", - "archiveFileName": "esp32-arduino-libs-2c6907b9e2b6ff8d7d47c93d622827575190b806.zip", - "checksum": "SHA-256:33998f3ba0cf1080ef6a3c70d477b9d535944191a045f9078d427ee5e79afbe1", - "size": "352415499" + "url": "https://codeload.github.com/espressif/esp32-arduino-libs/zip/0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799", + "archiveFileName": "esp32-arduino-libs-0dbfb946a0af0e10f9caa0a22aa1ee4b5bd79799.zip", + "checksum": "SHA-256:dae6b3bc63778977bf08a372630ba57dff217e9674fea85964c95da9f738f6f6", + "size": "359464912" } ] }, From 908ca9f022af7bc19ebdc9ecb2dad608534c6532 Mon Sep 17 00:00:00 2001 From: Lucas Saavedra Vaz <32426024+lucasssvaz@users.noreply.github.com> Date: Mon, 15 Apr 2024 05:07:08 -0300 Subject: [PATCH 6/8] fix(ftm): Fix compilation warning (#9508) --- libraries/WiFi/src/WiFiGeneric.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 68617935d4d..2a90a07358c 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -686,6 +686,7 @@ bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uin .channel = channel, .frm_count = frm_count, .burst_period = burst_period, + .use_get_report_api = true }; if(mac != NULL){ memcpy(ftmi_cfg.resp_mac, mac, 6); From 394ebb673b40a276e5631746d9d110b70f03e958 Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Mon, 15 Apr 2024 18:00:31 +0900 Subject: [PATCH 7/8] Fix typo in Updater.cpp (#9511) arguement -> argument --- libraries/Update/src/Updater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/Update/src/Updater.cpp b/libraries/Update/src/Updater.cpp index e87c24337b1..8017d1d3c1b 100644 --- a/libraries/Update/src/Updater.cpp +++ b/libraries/Update/src/Updater.cpp @@ -228,7 +228,7 @@ bool UpdateClass::setCryptMode(const int cryptMode){ if(cryptMode >= U_AES_DECRYPT_NONE && cryptMode <= U_AES_DECRYPT_ON){ _cryptMode = cryptMode; }else{ - log_e("bad crypt mode arguement %i", cryptMode); + log_e("bad crypt mode argument %i", cryptMode); return false; } return true; From 05967332e5613b7c9d73bc71e2ca305c031acff8 Mon Sep 17 00:00:00 2001 From: Evgeni Melan <97730595+evgenimelan@users.noreply.github.com> Date: Mon, 15 Apr 2024 13:48:02 +0200 Subject: [PATCH 8/8] change(roboheart): Update of LED_ROBOHEART in RoboHeart Hercules pins_arduino.h (#9494) --- variants/roboheart_hercules/pins_arduino.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/variants/roboheart_hercules/pins_arduino.h b/variants/roboheart_hercules/pins_arduino.h index fc98590040f..198967d8839 100644 --- a/variants/roboheart_hercules/pins_arduino.h +++ b/variants/roboheart_hercules/pins_arduino.h @@ -15,7 +15,7 @@ #define SLEEP_MOTOR_ABC 2 // nSLEEP -#define LED_ROBOHEART 14 // Built in LED +#define LED_ROBOHEART 13 // Built in LED #define BUILTIN_LED LED_ROBOHEART // backward compatibility #define LED_BUILTIN LED_ROBOHEART