From f92ced58df69fe0a8530489a90070c764dffda37 Mon Sep 17 00:00:00 2001 From: "DESKTOP-T3S0O41\\iris_lj" Date: Tue, 18 Aug 2026 13:34:21 +0800 Subject: [PATCH] v2.1.3 --- .../esp32-s3-devkitc-1/ArduinoJson/.piopm | 2 +- .../ArduinoJson/ArduinoJson.h | 2 +- .../ArduinoJson/LICENSE.txt | 2 +- .../esp32-s3-devkitc-1/ArduinoJson/README.md | 84 ++- .../JsonConfigFile/JsonConfigFile.ino | 30 +- .../JsonFilterExample/JsonFilterExample.ino | 11 +- .../JsonGeneratorExample.ino | 30 +- .../JsonHttpClient/JsonHttpClient.ino | 13 +- .../JsonParserExample/JsonParserExample.ino | 33 +- .../examples/JsonServer/JsonServer.ino | 19 +- .../examples/JsonUdpBeacon/JsonUdpBeacon.ino | 16 +- .../examples/MsgPackParser/MsgPackParser.ino | 34 +- .../ProgmemExample/ProgmemExample.ino | 6 +- .../examples/StringExample/StringExample.ino | 7 +- .../ArduinoJson/library.json | 4 +- .../ArduinoJson/library.properties | 4 +- .../ArduinoJson/src/ArduinoJson.h | 2 +- .../ArduinoJson/src/ArduinoJson.hpp | 23 +- .../src/ArduinoJson/Array/ArrayData.hpp | 66 -- .../src/ArduinoJson/Array/ArrayImpl.hpp | 79 -- .../src/ArduinoJson/Array/ElementProxy.hpp | 43 +- .../src/ArduinoJson/Array/JsonArray.hpp | 224 +++--- .../src/ArduinoJson/Array/JsonArrayConst.hpp | 138 ++-- .../src/ArduinoJson/Array/JsonArrayImpl.hpp | 36 + .../ArduinoJson/Array/JsonArrayIterator.hpp | 93 ++- .../src/ArduinoJson/Array/Utilities.hpp | 56 +- .../ArduinoJson/Collection/CollectionData.hpp | 131 ++-- .../ArduinoJson/Collection/CollectionImpl.hpp | 262 ++++--- .../src/ArduinoJson/Configuration.hpp | 114 +-- .../Deserialization/DeserializationError.hpp | 2 +- .../DeserializationOptions.hpp | 2 +- .../ArduinoJson/Deserialization/Filter.hpp | 13 +- .../Deserialization/NestingLimit.hpp | 2 +- .../ArduinoJson/Deserialization/Reader.hpp | 11 +- .../Readers/ArduinoStreamReader.hpp | 7 +- .../Readers/ArduinoStringReader.hpp | 5 +- .../Deserialization/Readers/FlashReader.hpp | 2 +- .../Readers/IteratorReader.hpp | 11 +- .../Deserialization/Readers/RamReader.hpp | 8 +- .../Readers/StdStreamReader.hpp | 5 +- .../Deserialization/Readers/VariantReader.hpp | 4 +- .../Deserialization/deserialize.hpp | 81 +- .../Document/BasicJsonDocument.hpp | 171 +++++ .../Document/DynamicJsonDocument.hpp | 32 + .../src/ArduinoJson/Document/JsonDocument.hpp | 483 +++++------- .../Document/StaticJsonDocument.hpp | 61 ++ .../src/ArduinoJson/Json/EscapeSequence.hpp | 6 +- .../src/ArduinoJson/Json/JsonDeserializer.hpp | 133 ++-- .../src/ArduinoJson/Json/JsonSerializer.hpp | 90 +-- .../src/ArduinoJson/Json/Latch.hpp | 2 +- .../ArduinoJson/Json/PrettyJsonSerializer.hpp | 61 +- .../src/ArduinoJson/Json/TextFormatter.hpp | 14 +- .../src/ArduinoJson/Json/Utf16.hpp | 2 +- .../ArduinoJson/src/ArduinoJson/Json/Utf8.hpp | 2 +- .../src/ArduinoJson/Memory/Alignment.hpp | 2 +- .../src/ArduinoJson/Memory/Allocator.hpp | 49 -- .../src/ArduinoJson/Memory/MemoryPool.hpp | 293 ++++++-- .../src/ArduinoJson/Memory/MemoryPoolList.hpp | 214 ------ .../ArduinoJson/Memory/ResourceManager.hpp | 131 ---- .../Memory/ResourceManagerImpl.hpp | 52 -- .../src/ArduinoJson/Memory/StringBuffer.hpp | 79 -- .../src/ArduinoJson/Memory/StringBuilder.hpp | 88 --- .../src/ArduinoJson/Memory/StringNode.hpp | 75 -- .../src/ArduinoJson/Memory/StringPool.hpp | 102 --- .../src/ArduinoJson/Misc/SerializedValue.hpp | 4 +- .../src/ArduinoJson/MsgPack/MsgPackBinary.hpp | 97 --- .../MsgPack/MsgPackDeserializer.hpp | 498 ++++++++----- .../ArduinoJson/MsgPack/MsgPackExtension.hpp | 120 --- .../ArduinoJson/MsgPack/MsgPackSerializer.hpp | 81 +- .../src/ArduinoJson/MsgPack/endianness.hpp | 2 +- .../src/ArduinoJson/MsgPack/ieee754.hpp | 2 +- .../ArduinoJson/src/ArduinoJson/Namespace.hpp | 22 +- .../src/ArduinoJson/Numbers/FloatParts.hpp | 145 ++-- .../src/ArduinoJson/Numbers/FloatTraits.hpp | 54 +- .../src/ArduinoJson/Numbers/JsonFloat.hpp | 6 +- .../src/ArduinoJson/Numbers/JsonInteger.hpp | 12 +- .../ArduinoJson/Numbers/arithmeticCompare.hpp | 44 +- .../src/ArduinoJson/Numbers/convertNumber.hpp | 72 +- .../src/ArduinoJson/Numbers/parseNumber.hpp | 144 +--- .../src/ArduinoJson/Object/JsonObject.hpp | 282 +++---- .../ArduinoJson/Object/JsonObjectConst.hpp | 180 +++-- .../src/ArduinoJson/Object/JsonObjectImpl.hpp | 85 +++ .../ArduinoJson/Object/JsonObjectIterator.hpp | 94 ++- .../src/ArduinoJson/Object/JsonPair.hpp | 30 +- .../src/ArduinoJson/Object/MemberProxy.hpp | 59 +- .../src/ArduinoJson/Object/ObjectData.hpp | 70 -- .../src/ArduinoJson/Object/ObjectImpl.hpp | 92 --- .../src/ArduinoJson/Polyfills/alias_cast.hpp | 2 +- .../src/ArduinoJson/Polyfills/assert.hpp | 2 +- .../src/ArduinoJson/Polyfills/attributes.hpp | 21 +- .../src/ArduinoJson/Polyfills/ctype.hpp | 2 +- .../src/ArduinoJson/Polyfills/integer.hpp | 19 +- .../src/ArduinoJson/Polyfills/limits.hpp | 14 +- .../src/ArduinoJson/Polyfills/math.hpp | 2 +- .../src/ArduinoJson/Polyfills/mpl/max.hpp | 2 +- .../src/ArduinoJson/Polyfills/pgmspace.hpp | 2 +- .../Polyfills/pgmspace_generic.hpp | 2 +- .../ArduinoJson/Polyfills/preprocessor.hpp | 8 +- .../src/ArduinoJson/Polyfills/type_traits.hpp | 6 +- .../Polyfills/type_traits/conditional.hpp | 10 +- .../Polyfills/type_traits/decay.hpp | 33 - .../Polyfills/type_traits/declval.hpp | 2 +- .../Polyfills/type_traits/enable_if.hpp | 7 +- .../Polyfills/type_traits/function_traits.hpp | 27 - .../type_traits/integral_constant.hpp | 9 +- .../Polyfills/type_traits/is_array.hpp | 2 +- .../Polyfills/type_traits/is_base_of.hpp | 6 +- .../Polyfills/type_traits/is_class.hpp | 2 +- .../Polyfills/type_traits/is_const.hpp | 2 +- .../Polyfills/type_traits/is_convertible.hpp | 4 +- .../Polyfills/type_traits/is_enum.hpp | 4 +- .../type_traits/is_floating_point.hpp | 9 +- .../Polyfills/type_traits/is_integral.hpp | 26 +- .../Polyfills/type_traits/is_pointer.hpp | 2 +- .../Polyfills/type_traits/is_same.hpp | 2 +- .../Polyfills/type_traits/is_signed.hpp | 18 +- .../Polyfills/type_traits/is_unsigned.hpp | 14 +- .../Polyfills/type_traits/make_unsigned.hpp | 5 +- .../Polyfills/type_traits/make_void.hpp | 14 + .../Polyfills/type_traits/remove_const.hpp | 9 +- .../Polyfills/type_traits/remove_cv.hpp | 13 +- .../type_traits/remove_reference.hpp | 9 +- .../Polyfills/type_traits/type_identity.hpp | 4 +- .../Polyfills/type_traits/void_t.hpp | 20 - .../src/ArduinoJson/Polyfills/utility.hpp | 21 +- .../Serialization/CountingDecorator.hpp | 2 +- .../src/ArduinoJson/Serialization/Writer.hpp | 4 +- .../Writers/ArduinoStringWriter.hpp | 8 +- .../Serialization/Writers/DummyWriter.hpp | 2 +- .../Serialization/Writers/PrintWriter.hpp | 7 +- .../Writers/StaticStringWriter.hpp | 2 +- .../Serialization/Writers/StdStreamWriter.hpp | 7 +- .../Serialization/Writers/StdStringWriter.hpp | 17 +- .../src/ArduinoJson/Serialization/measure.hpp | 9 +- .../ArduinoJson/Serialization/serialize.hpp | 21 +- .../StringStorage/StringCopier.hpp | 72 ++ .../ArduinoJson/StringStorage/StringMover.hpp | 48 ++ .../StringStorage/StringStorage.hpp | 24 + .../Strings/Adapters/FlashString.hpp | 18 +- .../Strings/Adapters/JsonString.hpp | 36 + .../Strings/Adapters/RamString.hpp | 152 ++-- .../Strings/Adapters/StringObject.hpp | 23 +- .../src/ArduinoJson/Strings/IsString.hpp | 5 +- .../src/ArduinoJson/Strings/JsonString.hpp | 62 +- .../src/ArduinoJson/Strings/StoragePolicy.hpp | 18 + .../src/ArduinoJson/Strings/StringAdapter.hpp | 30 +- .../ArduinoJson/Strings/StringAdapters.hpp | 15 +- .../src/ArduinoJson/Strings/StringTraits.hpp | 21 +- .../src/ArduinoJson/Variant/Converter.hpp | 7 +- .../src/ArduinoJson/Variant/ConverterImpl.hpp | 266 +++---- .../src/ArduinoJson/Variant/JsonVariant.hpp | 39 +- .../ArduinoJson/Variant/JsonVariantConst.hpp | 181 ++--- .../ArduinoJson/Variant/JsonVariantCopier.hpp | 34 - .../Variant/JsonVariantVisitor.hpp | 61 -- .../src/ArduinoJson/Variant/SlotFunctions.hpp | 45 ++ .../ArduinoJson/Variant/VariantAttorney.hpp | 27 +- .../ArduinoJson/Variant/VariantCompare.hpp | 142 ++-- .../ArduinoJson/Variant/VariantContent.hpp | 96 +-- .../src/ArduinoJson/Variant/VariantData.hpp | 693 +++++------------- .../Variant/VariantDataVisitor.hpp | 24 - .../ArduinoJson/Variant/VariantFunctions.hpp | 113 +++ .../src/ArduinoJson/Variant/VariantImpl.hpp | 279 ++++--- .../ArduinoJson/Variant/VariantOperators.hpp | 91 +-- .../ArduinoJson/Variant/VariantRefBase.hpp | 348 ++++----- .../Variant/VariantRefBaseImpl.hpp | 175 ----- .../src/ArduinoJson/Variant/VariantSlot.hpp | 112 +++ .../src/ArduinoJson/Variant/VariantTag.hpp | 2 +- .../src/ArduinoJson/Variant/VariantTo.hpp | 8 +- .../src/ArduinoJson/Variant/Visitor.hpp | 54 ++ .../src/ArduinoJson/compatibility.hpp | 123 +--- .../ArduinoJson/src/ArduinoJson/version.hpp | 12 +- .../ArduinoJson/src/CMakeLists.txt | 2 +- .pio/libdeps/esp32-s3-devkitc-1/integrity.dat | 4 +- code_review_report.md | 213 ++++++ platformio.ini | 2 +- src/SensorIS11.cpp | 3 + src/gsmm_mqtt.cpp | 14 +- src/main.cpp | 246 +++++-- src/my74hc595.cpp | 2 +- 179 files changed, 4707 insertions(+), 5724 deletions(-) delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayImpl.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Document/BasicJsonDocument.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Document/DynamicJsonDocument.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Document/StaticJsonDocument.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/MemoryPoolList.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/ResourceManagerImpl.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/StringBuffer.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackBinary.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackExtension.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Object/JsonObjectImpl.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/decay.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/function_traits.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/make_void.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/void_t.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/StringStorage/StringCopier.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/StringStorage/StringMover.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/StringStorage/StringStorage.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Strings/Adapters/JsonString.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Strings/StoragePolicy.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/JsonVariantCopier.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/JsonVariantVisitor.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/SlotFunctions.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/VariantDataVisitor.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/VariantFunctions.hpp delete mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/VariantSlot.hpp create mode 100644 .pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Variant/Visitor.hpp create mode 100644 code_review_report.md diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/.piopm b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/.piopm index 307e2c1..03bd770 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/.piopm +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/.piopm @@ -1 +1 @@ -{"type": "library", "name": "ArduinoJson", "version": "7.4.2", "spec": {"owner": "bblanchon", "id": 64, "name": "ArduinoJson", "requirements": null, "uri": null}} \ No newline at end of file +{"type": "library", "name": "ArduinoJson", "version": "6.21.6", "spec": {"owner": "bblanchon", "id": 64, "name": "ArduinoJson", "requirements": null, "uri": null}} \ No newline at end of file diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/ArduinoJson.h b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/ArduinoJson.h index a0caed7..fb900d7 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/ArduinoJson.h +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/ArduinoJson.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #include "src/ArduinoJson.h" diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/LICENSE.txt b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/LICENSE.txt index 782b05d..d54407d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/LICENSE.txt +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/LICENSE.txt @@ -1,7 +1,7 @@ The MIT License (MIT) --------------------- -Copyright © 2014-2025, Benoit BLANCHON +Copyright © 2014-2026, Benoit BLANCHON Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/README.md b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/README.md index e44171c..edffd71 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/README.md +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/README.md @@ -4,10 +4,13 @@ --- -[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bblanchon/ArduinoJson/ci.yml?branch=7.x&logo=github)](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A7.x) -[![Continuous Integration](https://ci.appveyor.com/api/projects/status/m7s53wav1l0abssg/branch/7.x?svg=true)](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/7.x) +[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bblanchon/ArduinoJson/ci.yml?branch=6.x&logo=github)](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A6.x) +[![Continuous Integration](https://ci.appveyor.com/api/projects/status/m7s53wav1l0abssg/branch/6.x?svg=true)](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/arduinojson.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson) -[![Coveralls branch](https://img.shields.io/coveralls/github/bblanchon/ArduinoJson/7.x?logo=coveralls)](https://coveralls.io/github/bblanchon/ArduinoJson?branch=7.x) +[![Coveralls branch](https://img.shields.io/coveralls/github/bblanchon/ArduinoJson/6.x?logo=coveralls)](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x) +[![Arduino Library Manager](https://img.shields.io/static/v1?label=Arduino&message=v6.21.6&logo=arduino&logoColor=white&color=blue)](https://www.ardu-badge.com/ArduinoJson/6.21.6) +[![PlatformIO Registry](https://badges.registry.platformio.org/packages/bblanchon/library/ArduinoJson.svg?version=6.21.6)](https://registry.platformio.org/packages/libraries/bblanchon/ArduinoJson?version=6.21.6) +[![ESP IDF](https://img.shields.io/static/v1?label=ESP+IDF&message=v6.21.6&logo=cpu&logoColor=white&color=blue)](https://components.espressif.com/components/bblanchon/arduinojson) [![GitHub stars](https://img.shields.io/github/stars/bblanchon/ArduinoJson?style=flat&logo=github&color=orange)](https://github.com/bblanchon/ArduinoJson/stargazers) [![GitHub Sponsors](https://img.shields.io/github/sponsors/bblanchon?logo=github&color=orange)](https://github.com/sponsors/bblanchon) @@ -15,28 +18,31 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things). ## Features -* [JSON deserialization](https://arduinojson.org/v7/api/json/deserializejson/) - * [Optionally decodes UTF-16 escape sequences to UTF-8](https://arduinojson.org/v7/api/config/decode_unicode/) - * [Optionally supports comments in the input](https://arduinojson.org/v7/api/config/enable_comments/) - * [Optionally filters the input to keep only desired values](https://arduinojson.org/v7/api/json/deserializejson/#filtering) +* [JSON deserialization](https://arduinojson.org/v6/api/json/deserializejson/) + * [Optionally decodes UTF-16 escape sequences to UTF-8](https://arduinojson.org/v6/api/config/decode_unicode/) + * [Optionally stores links to the input buffer (zero-copy)](https://arduinojson.org/v6/api/json/deserializejson/) + * [Optionally supports comments in the input](https://arduinojson.org/v6/api/config/enable_comments/) + * [Optionally filters the input to keep only desired values](https://arduinojson.org/v6/api/json/deserializejson/#filtering) * Supports single quotes as a string delimiter * Compatible with [NDJSON](http://ndjson.org/) and [JSON Lines](https://jsonlines.org/) -* [JSON serialization](https://arduinojson.org/v7/api/json/serializejson/) - * [Can write to a buffer or a stream](https://arduinojson.org/v7/api/json/serializejson/) - * [Optionally indents the document (prettified JSON)](https://arduinojson.org/v7/api/json/serializejsonpretty/) -* [MessagePack serialization](https://arduinojson.org/v7/api/msgpack/serializemsgpack/) -* [MessagePack deserialization](https://arduinojson.org/v7/api/msgpack/deserializemsgpack/) +* [JSON serialization](https://arduinojson.org/v6/api/json/serializejson/) + * [Can write to a buffer or a stream](https://arduinojson.org/v6/api/json/serializejson/) + * [Optionally indents the document (prettified JSON)](https://arduinojson.org/v6/api/json/serializejsonpretty/) +* [MessagePack serialization](https://arduinojson.org/v6/api/msgpack/serializemsgpack/) +* [MessagePack deserialization](https://arduinojson.org/v6/api/msgpack/deserializemsgpack/) * Efficient * [Twice smaller than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/) * [Almost 10% faster than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/) * [Consumes roughly 10% less RAM than the "official" Arduino_JSON library](https://arduinojson.org/2019/11/19/arduinojson-vs-arduino_json/) + * [Fixed memory allocation, no heap fragmentation](https://arduinojson.org/v6/api/jsondocument/) + * [Optionally works without heap memory (zero malloc)](https://arduinojson.org/v6/api/staticjsondocument/) * [Deduplicates strings](https://arduinojson.org/news/2020/08/01/version-6-16-0/) * Versatile - * Supports [custom allocators (to use external RAM chip, for example)](https://arduinojson.org/v7/how-to/use-external-ram-on-esp32/) - * Supports [`String`](https://arduinojson.org/v7/api/config/enable_arduino_string/), [`std::string`](https://arduinojson.org/v7/api/config/enable_std_string/), and [`std::string_view`](https://arduinojson.org/v7/api/config/enable_string_view/) - * Supports [`Stream`](https://arduinojson.org/v7/api/config/enable_arduino_stream/) and [`std::istream`/`std::ostream`](https://arduinojson.org/v7/api/config/enable_std_stream/) - * Supports [Flash strings](https://arduinojson.org/v7/api/config/enable_progmem/) - * Supports [custom readers](https://arduinojson.org/v7/api/json/deserializejson/#custom-reader) and [custom writers](https://arduinojson.org/v7/api/json/serializejson/#custom-writer) + * Supports [custom allocators (to use external RAM chip, for example)](https://arduinojson.org/v6/how-to/use-external-ram-on-esp32/) + * Supports [`String`](https://arduinojson.org/v6/api/config/enable_arduino_string/), [`std::string`](https://arduinojson.org/v6/api/config/enable_std_string/), and [`std::string_view`](https://arduinojson.org/v6/api/config/enable_string_view/) + * Supports [`Stream`](https://arduinojson.org/v6/api/config/enable_arduino_stream/) and [`std::istream`/`std::ostream`](https://arduinojson.org/v6/api/config/enable_std_stream/) + * Supports [Flash strings](https://arduinojson.org/v6/api/config/enable_progmem/) + * Supports [custom readers](https://arduinojson.org/v6/api/json/deserializejson/#custom-reader) and [custom writers](https://arduinojson.org/v6/api/json/serializejson/#custom-writer) * Supports [custom converters](https://arduinojson.org/news/2021/05/04/version-6-18-0/) * Portable * Usable on any C++ project (not limited to Arduino) @@ -66,29 +72,29 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things). * [Visual Micro](http://www.visualmicro.com/) * [Visual Studio](https://www.visualstudio.com/) * [Even works with online compilers like wandbox.org](https://wandbox.org/permlink/RlZSKy17DjJ6HcdN) - * [CMake friendly](https://arduinojson.org/v7/how-to/use-arduinojson-with-cmake/) + * [CMake friendly](https://arduinojson.org/v6/how-to/use-arduinojson-with-cmake/) * Well designed - * [Elegant API](http://arduinojson.org/v7/example/) + * [Elegant API](http://arduinojson.org/v6/example/) * [Thread-safe](https://en.wikipedia.org/wiki/Thread_safety) * Self-contained (no external dependency) * `const` friendly - * [`for` friendly](https://arduinojson.org/v7/api/jsonobject/begin_end/) + * [`for` friendly](https://arduinojson.org/v6/api/jsonobject/begin_end/) * [TMP friendly](https://en.wikipedia.org/wiki/Template_metaprogramming) - * Handles [integer overflows](https://arduinojson.org/v7/api/jsonvariant/as/#integer-overflows) + * Handles [integer overflows](https://arduinojson.org/v6/api/jsonvariant/as/#integer-overflows) * Well tested - * [Unit test coverage close to 100%](https://coveralls.io/github/bblanchon/ArduinoJson?branch=7.x) + * [Unit test coverage close to 100%](https://coveralls.io/github/bblanchon/ArduinoJson?branch=6.x) * Continuously tested on - * [Visual Studio 2017, 2019, 2022](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/7.x) - * [GCC 4.8, 5, 6, 7, 8, 9, 10, 11, 12](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22) - * [Clang 7 to 19](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22) + * [Visual Studio 2017, 2019, 2022](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/6.x) + * [GCC 5, 6, 7, 8, 9, 10, 11](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22) + * [Clang 3.8, 3.9, 4.0, 5.0, 6.0, 7, 8, 9, 10](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22) * [Continuously fuzzed with Google OSS Fuzz](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson) * Passes all default checks of [clang-tidy](https://releases.llvm.org/10.0.0/tools/clang/tools/extra/docs/clang-tidy/) * Well documented - * [Tutorials](https://arduinojson.org/v7/doc/deserialization/) - * [Examples](https://arduinojson.org/v7/example/) - * [How-tos](https://arduinojson.org/v7/example/) - * [FAQ](https://arduinojson.org/v7/faq/) - * [Troubleshooter](https://arduinojson.org/v7/troubleshooter/) + * [Tutorials](https://arduinojson.org/v6/doc/deserialization/) + * [Examples](https://arduinojson.org/v6/example/) + * [How-tos](https://arduinojson.org/v6/example/) + * [FAQ](https://arduinojson.org/v6/faq/) + * [Troubleshooter](https://arduinojson.org/v6/troubleshooter/) * [Book](https://arduinojson.org/book/) * [Changelog](CHANGELOG.md) * Vibrant user community @@ -103,9 +109,9 @@ ArduinoJson is a C++ JSON library for Arduino and IoT (Internet Of Things). Here is a program that parses a JSON document with ArduinoJson. ```c++ -const char* json = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; +char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; -JsonDocument doc; +DynamicJsonDocument doc(1024); deserializeJson(doc, json); const char* sensor = doc["sensor"]; @@ -114,14 +120,14 @@ double latitude = doc["data"][0]; double longitude = doc["data"][1]; ``` -See the [tutorial on arduinojson.org](https://arduinojson.org/v7/doc/deserialization/) +See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/deserialization/) ### Serialization Here is a program that generates a JSON document with ArduinoJson: ```c++ -JsonDocument doc; +DynamicJsonDocument doc(1024); doc["sensor"] = "gps"; doc["time"] = 1351824120; @@ -133,19 +139,21 @@ serializeJson(doc, Serial); // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} ``` -See the [tutorial on arduinojson.org](https://arduinojson.org/v7/doc/serialization/) +See the [tutorial on arduinojson.org](https://arduinojson.org/v6/doc/serialization/) ## Sponsors ArduinoJson is thankful to its sponsors. Please give them a visit; they deserve it! +

+ + Programming Electronics Academy + +

1technophile - - LArkema -

If you run a commercial project that embeds ArduinoJson, think about [sponsoring the library's development](https://github.com/sponsors/bblanchon): it ensures the code that your products rely on stays actively maintained. It can also give your project some exposure to the makers' community. diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino index 32ad3a5..b251a32 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonConfigFile/JsonConfigFile.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to store your project configuration in a file. @@ -17,28 +17,35 @@ // * CLK <-> pin 13 // * CS <-> pin 4 // -// https://arduinojson.org/v7/example/config/ +// https://arduinojson.org/v6/example/config/ #include #include #include // Our configuration structure. +// +// Never use a JsonDocument to store the configuration! +// A JsonDocument is *not* a permanent storage; it's only a temporary storage +// used during the serialization phase. See: +// https://arduinojson.org/v6/faq/why-must-i-create-a-separate-config-object/ struct Config { char hostname[64]; int port; }; -const char* filename = "/config.txt"; // <- SD library uses 8.3 filenames +const char *filename = "/config.txt"; // <- SD library uses 8.3 filenames Config config; // <- global configuration object // Loads the configuration from a file -void loadConfiguration(const char* filename, Config& config) { +void loadConfiguration(const char *filename, Config &config) { // Open file for reading File file = SD.open(filename); // Allocate a temporary JsonDocument - JsonDocument doc; + // Don't forget to change the capacity to match your requirements. + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<512> doc; // Deserialize the JSON document DeserializationError error = deserializeJson(doc, file); @@ -56,7 +63,7 @@ void loadConfiguration(const char* filename, Config& config) { } // Saves the configuration to a file -void saveConfiguration(const char* filename, const Config& config) { +void saveConfiguration(const char *filename, const Config &config) { // Delete existing file, otherwise the configuration is appended to the file SD.remove(filename); @@ -68,7 +75,9 @@ void saveConfiguration(const char* filename, const Config& config) { } // Allocate a temporary JsonDocument - JsonDocument doc; + // Don't forget to change the capacity to match your requirements. + // Use https://arduinojson.org/assistant to compute the capacity. + StaticJsonDocument<256> doc; // Set the values in the document doc["hostname"] = config.hostname; @@ -84,7 +93,7 @@ void saveConfiguration(const char* filename, const Config& config) { } // Prints the content of a file to the Serial -void printFile(const char* filename) { +void printFile(const char *filename) { // Open file for reading File file = SD.open(filename); if (!file) { @@ -105,8 +114,7 @@ void printFile(const char* filename) { void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Initialize SD library const int chipSelect = 4; @@ -136,7 +144,7 @@ void loop() { // ------------------ // // File is an unbuffered stream, which is not optimal for ArduinoJson. -// See: https://arduinojson.org/v7/how-to/improve-speed/ +// See: https://arduinojson.org/v6/how-to/improve-speed/ // See also // -------- diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino index 16e49dd..f00dd2d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonFilterExample/JsonFilterExample.ino @@ -1,18 +1,17 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to use DeserializationOption::Filter // -// https://arduinojson.org/v7/example/filter/ +// https://arduinojson.org/v6/example/filter/ #include void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // The huge input: an extract from OpenWeatherMap response auto input_json = F( @@ -34,12 +33,12 @@ void setup() { "1000000,\"timezone\":0,\"sunrise\":1581492085,\"sunset\":1581527294}}"); // The filter: it contains "true" for each value we want to keep - JsonDocument filter; + StaticJsonDocument<200> filter; filter["list"][0]["dt"] = true; filter["list"][0]["main"]["temp"] = true; // Deserialize the document - JsonDocument doc; + StaticJsonDocument<400> doc; deserializeJson(doc, input_json, DeserializationOption::Filter(filter)); // Print the result diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino index 55d9a81..457ac5a 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonGeneratorExample/JsonGeneratorExample.ino @@ -1,32 +1,43 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to generate a JSON document with ArduinoJson. // -// https://arduinojson.org/v7/example/generator/ +// https://arduinojson.org/v6/example/generator/ #include void setup() { // Initialize Serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Allocate the JSON document - JsonDocument doc; + // + // Inside the brackets, 200 is the RAM allocated to this document. + // Don't forget to change this value to match your requirement. + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<200> doc; + + // StaticJsonObject allocates memory on the stack, it can be + // replaced by DynamicJsonDocument which allocates in the heap. + // + // DynamicJsonDocument doc(200); // Add values in the document + // doc["sensor"] = "gps"; doc["time"] = 1351824120; - // Add an array - JsonArray data = doc["data"].to(); + // Add an array. + // + JsonArray data = doc.createNestedArray("data"); data.add(48.756080); data.add(2.302038); - // Generate the minified JSON and send it to the Serial port + // Generate the minified JSON and send it to the Serial port. + // serializeJson(doc, Serial); // The above line prints: // {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]} @@ -34,7 +45,8 @@ void setup() { // Start a new line Serial.println(); - // Generate the prettified JSON and send it to the Serial port + // Generate the prettified JSON and send it to the Serial port. + // serializeJsonPretty(doc, Serial); // The above line prints: // { diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino index c2d3846..1e05ada 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonHttpClient/JsonHttpClient.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to parse a JSON document in an HTTP response. @@ -16,7 +16,7 @@ // ] // } // -// https://arduinojson.org/v7/example/http-client/ +// https://arduinojson.org/v6/example/http-client/ #include #include @@ -25,8 +25,7 @@ void setup() { // Initialize Serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Initialize Ethernet library byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; @@ -78,7 +77,9 @@ void setup() { } // Allocate the JSON document - JsonDocument doc; + // Use https://arduinojson.org/v6/assistant to compute the capacity. + const size_t capacity = JSON_OBJECT_SIZE(3) + JSON_ARRAY_SIZE(2) + 60; + DynamicJsonDocument doc(capacity); // Parse JSON object DeserializationError error = deserializeJson(doc, client); @@ -108,7 +109,7 @@ void loop() { // ------------------ // // EthernetClient is an unbuffered stream, which is not optimal for ArduinoJson. -// See: https://arduinojson.org/v7/how-to/improve-speed/ +// See: https://arduinojson.org/v6/how-to/improve-speed/ // See also // -------- diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino index 0c325eb..841a4d6 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonParserExample/JsonParserExample.ino @@ -1,37 +1,52 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to deserialize a JSON document with ArduinoJson. // -// https://arduinojson.org/v7/example/parser/ +// https://arduinojson.org/v6/example/parser/ #include void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Allocate the JSON document - JsonDocument doc; + // + // Inside the brackets, 200 is the capacity of the memory pool in bytes. + // Don't forget to change this value to match your JSON document. + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<200> doc; + + // StaticJsonDocument allocates memory on the stack, it can be + // replaced by DynamicJsonDocument which allocates in the heap. + // + // DynamicJsonDocument doc(200); // JSON input string. - const char* json = + // + // Using a char[], as shown here, enables the "zero-copy" mode. This mode uses + // the minimal amount of memory because the JsonDocument stores pointers to + // the input buffer. + // If you use another type of input, ArduinoJson must copy the strings from + // the input to the JsonDocument, so you need to increase the capacity of the + // JsonDocument. + char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; // Deserialize the JSON document DeserializationError error = deserializeJson(doc, json); - // Test if parsing succeeds + // Test if parsing succeeds. if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); return; } - // Fetch the values + // Fetch values. // // Most of the time, you can rely on the implicit casts. // In other case, you can do doc["time"].as(); @@ -40,7 +55,7 @@ void setup() { double latitude = doc["data"][0]; double longitude = doc["data"][1]; - // Print the values + // Print values. Serial.println(sensor); Serial.println(time); Serial.println(latitude, 6); diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonServer/JsonServer.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonServer/JsonServer.ino index 51fdf3c..896d6aa 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonServer/JsonServer.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonServer/JsonServer.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to implement an HTTP server that sends a JSON document @@ -13,7 +13,7 @@ // "digital": [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0] // } // -// https://arduinojson.org/v7/example/http-server/ +// https://arduinojson.org/v6/example/http-server/ #include #include @@ -25,8 +25,7 @@ EthernetServer server(80); void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Initialize Ethernet libary if (!Ethernet.begin(mac)) { @@ -53,14 +52,14 @@ void loop() { Serial.println(F("New client")); // Read the request (we ignore the content in this example) - while (client.available()) - client.read(); + while (client.available()) client.read(); // Allocate a temporary JsonDocument - JsonDocument doc; + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<500> doc; // Create the "analog" array - JsonArray analogValues = doc["analog"].to(); + JsonArray analogValues = doc.createNestedArray("analog"); for (int pin = 0; pin < 6; pin++) { // Read the analog input int value = analogRead(pin); @@ -70,7 +69,7 @@ void loop() { } // Create the "digital" array - JsonArray digitalValues = doc["digital"].to(); + JsonArray digitalValues = doc.createNestedArray("digital"); for (int pin = 0; pin < 14; pin++) { // Read the digital input int value = digitalRead(pin); @@ -102,7 +101,7 @@ void loop() { // ------------------ // // EthernetClient is an unbuffered stream, which is not optimal for ArduinoJson. -// See: https://arduinojson.org/v7/how-to/improve-speed/ +// See: https://arduinojson.org/v6/how-to/improve-speed/ // See also // -------- diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino index d6ecb55..d32c88c 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/JsonUdpBeacon/JsonUdpBeacon.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to send a JSON document to a UDP socket. @@ -17,7 +17,7 @@ // $ ncat -ulp 8888 // See https://nmap.org/ncat/ // -// https://arduinojson.org/v7/example/udp-beacon/ +// https://arduinojson.org/v6/example/udp-beacon/ #include #include @@ -32,8 +32,7 @@ EthernetUDP udp; void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Initialize Ethernet libary if (!Ethernet.begin(mac)) { @@ -47,10 +46,11 @@ void setup() { void loop() { // Allocate a temporary JsonDocument - JsonDocument doc; + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<500> doc; // Create the "analog" array - JsonArray analogValues = doc["analog"].to(); + JsonArray analogValues = doc.createNestedArray("analog"); for (int pin = 0; pin < 6; pin++) { // Read the analog input int value = analogRead(pin); @@ -60,7 +60,7 @@ void loop() { } // Create the "digital" array - JsonArray digitalValues = doc["digital"].to(); + JsonArray digitalValues = doc.createNestedArray("digital"); for (int pin = 0; pin < 14; pin++) { // Read the digital input int value = digitalRead(pin); @@ -90,7 +90,7 @@ void loop() { // ------------------ // // EthernetUDP is an unbuffered stream, which is not optimal for ArduinoJson. -// See: https://arduinojson.org/v7/how-to/improve-speed/ +// See: https://arduinojson.org/v6/how-to/improve-speed/ // See also // -------- diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino index 3649081..80cbb75 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/MsgPackParser/MsgPackParser.ino @@ -1,24 +1,39 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows how to deserialize a MessagePack document with // ArduinoJson. // -// https://arduinojson.org/v7/example/msgpack-parser/ +// https://arduinojson.org/v6/example/msgpack-parser/ #include void setup() { // Initialize serial port Serial.begin(9600); - while (!Serial) - continue; + while (!Serial) continue; // Allocate the JSON document - JsonDocument doc; + // + // Inside the brackets, 200 is the capacity of the memory pool in bytes. + // Don't forget to change this value to match your JSON document. + // Use https://arduinojson.org/v6/assistant to compute the capacity. + StaticJsonDocument<200> doc; - // The MessagePack input string + // StaticJsonObject allocates memory on the stack, it can be + // replaced by DynamicJsonObject which allocates in the heap. + // + // DynamicJsonObject doc(200); + + // MessagePack input string. + // + // Using a char[], as shown here, enables the "zero-copy" mode. This mode uses + // the minimal amount of memory because the JsonDocument stores pointers to + // the input buffer. + // If you use another type of input, ArduinoJson must copy the strings from + // the input to the JsonDocument, so you need to increase the capacity of the + // JsonDocument. uint8_t input[] = {131, 166, 115, 101, 110, 115, 111, 114, 163, 103, 112, 115, 164, 116, 105, 109, 101, 206, 80, 147, 50, 248, 164, 100, 97, 116, 97, 146, 203, 64, 72, 96, 199, 58, 188, 148, @@ -30,17 +45,16 @@ void setup() { // "data": [48.75608, 2.302038] // } - // Parse the input DeserializationError error = deserializeMsgPack(doc, input); - // Test if parsing succeeded + // Test if parsing succeeded. if (error) { Serial.print("deserializeMsgPack() failed: "); Serial.println(error.f_str()); return; } - // Fetch the values + // Fetch values. // // Most of the time, you can rely on the implicit casts. // In other case, you can do doc["time"].as(); @@ -49,7 +63,7 @@ void setup() { double latitude = doc["data"][0]; double longitude = doc["data"][1]; - // Print the values + // Print values. Serial.println(sensor); Serial.println(time); Serial.println(latitude, 6); diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino index 729cb8b..8f78465 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/ProgmemExample/ProgmemExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows the different ways you can use Flash strings with @@ -9,12 +9,12 @@ // JsonDocument. Prefer plain old char*, as they are more efficient in term of // code size, speed, and memory usage. // -// https://arduinojson.org/v7/example/progmem/ +// https://arduinojson.org/v6/example/progmem/ #include void setup() { - JsonDocument doc; + DynamicJsonDocument doc(1024); // You can use a Flash String as your JSON input. // WARNING: the strings in the input will be duplicated in the JsonDocument. diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/StringExample/StringExample.ino b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/StringExample/StringExample.ino index 845df9d..27bba85 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/StringExample/StringExample.ino +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/examples/StringExample/StringExample.ino @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License // // This example shows the different ways you can use String with ArduinoJson. @@ -8,12 +8,12 @@ // JsonDocument. Prefer plain old char[], as they are more efficient in term of // code size, speed, and memory usage. // -// https://arduinojson.org/v7/example/string/ +// https://arduinojson.org/v6/example/string/ #include void setup() { - JsonDocument doc; + DynamicJsonDocument doc(1024); // You can use a String as your JSON input. // WARNING: the string in the input will be duplicated in the JsonDocument. @@ -55,6 +55,7 @@ void setup() { } // Lastly, you can print the resulting JSON to a String + // WARNING: it doesn't replace the content but appends to it String output; serializeJson(doc, output); } diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.json b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.json index 942a7a7..ebfb67a 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.json +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.json @@ -1,13 +1,13 @@ { "name": "ArduinoJson", "keywords": "json, rest, http, web", - "description": "A simple and efficient JSON library for embedded C++. ⭐ 6953 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.", + "description": "A simple and efficient JSON library for embedded C++. ArduinoJson supports ✔ serialization, ✔ deserialization, ✔ MessagePack, ✔ fixed allocation, ✔ zero-copy, ✔ streams, ✔ filtering, and more. It is the most popular Arduino library on GitHub ❤❤❤❤❤. Check out arduinojson.org for a comprehensive documentation.", "homepage": "https://arduinojson.org/?utm_source=meta&utm_medium=library.json", "repository": { "type": "git", "url": "https://github.com/bblanchon/ArduinoJson.git" }, - "version": "7.4.2", + "version": "6.21.6", "authors": { "name": "Benoit Blanchon", "url": "https://blog.benoitblanchon.fr" diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.properties b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.properties index 9e9e3be..47d607d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.properties +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/library.properties @@ -1,9 +1,9 @@ name=ArduinoJson -version=7.4.2 +version=6.21.6 author=Benoit Blanchon maintainer=Benoit Blanchon sentence=A simple and efficient JSON library for embedded C++. -paragraph=⭐ 6953 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented. +paragraph=ArduinoJson supports ✔ serialization, ✔ deserialization, ✔ MessagePack, ✔ fixed allocation, ✔ zero-copy, ✔ streams, ✔ filtering, and more. It is the most popular Arduino library on GitHub ❤❤❤❤❤. Check out arduinojson.org for a comprehensive documentation. category=Data Processing url=https://arduinojson.org/?utm_source=meta&utm_medium=library.properties architectures=* diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.h b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.h index eb4b94a..9d5927d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.h +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.h @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.hpp index b3e71d3..68897c0 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -26,40 +26,27 @@ # endif #endif -// Remove true and false macros defined by some cores, such as Arduino Due's -// See issues #2181 and arduino/ArduinoCore-sam#50 -#ifdef true -# undef true -#endif -#ifdef false -# undef false -#endif - #include "ArduinoJson/Array/JsonArray.hpp" #include "ArduinoJson/Object/JsonObject.hpp" #include "ArduinoJson/Variant/JsonVariantConst.hpp" -#include "ArduinoJson/Document/JsonDocument.hpp" +#include "ArduinoJson/Document/DynamicJsonDocument.hpp" +#include "ArduinoJson/Document/StaticJsonDocument.hpp" -#include "ArduinoJson/Array/ArrayImpl.hpp" #include "ArduinoJson/Array/ElementProxy.hpp" +#include "ArduinoJson/Array/JsonArrayImpl.hpp" #include "ArduinoJson/Array/Utilities.hpp" #include "ArduinoJson/Collection/CollectionImpl.hpp" -#include "ArduinoJson/Memory/ResourceManagerImpl.hpp" +#include "ArduinoJson/Object/JsonObjectImpl.hpp" #include "ArduinoJson/Object/MemberProxy.hpp" -#include "ArduinoJson/Object/ObjectImpl.hpp" #include "ArduinoJson/Variant/ConverterImpl.hpp" -#include "ArduinoJson/Variant/JsonVariantCopier.hpp" #include "ArduinoJson/Variant/VariantCompare.hpp" #include "ArduinoJson/Variant/VariantImpl.hpp" -#include "ArduinoJson/Variant/VariantRefBaseImpl.hpp" #include "ArduinoJson/Json/JsonDeserializer.hpp" #include "ArduinoJson/Json/JsonSerializer.hpp" #include "ArduinoJson/Json/PrettyJsonSerializer.hpp" -#include "ArduinoJson/MsgPack/MsgPackBinary.hpp" #include "ArduinoJson/MsgPack/MsgPackDeserializer.hpp" -#include "ArduinoJson/MsgPack/MsgPackExtension.hpp" #include "ArduinoJson/MsgPack/MsgPackSerializer.hpp" #include "ArduinoJson/compatibility.hpp" diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp deleted file mode 100644 index 79ade35..0000000 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp +++ /dev/null @@ -1,66 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON -// MIT License - -#pragma once - -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -class ArrayData : public CollectionData { - public: - VariantData* addElement(ResourceManager* resources); - - static VariantData* addElement(ArrayData* array, ResourceManager* resources) { - if (!array) - return nullptr; - return array->addElement(resources); - } - - template - bool addValue(const T& value, ResourceManager* resources); - - template - static bool addValue(ArrayData* array, const T& value, - ResourceManager* resources) { - if (!array) - return false; - return array->addValue(value, resources); - } - - VariantData* getOrAddElement(size_t index, ResourceManager* resources); - - VariantData* getElement(size_t index, const ResourceManager* resources) const; - - static VariantData* getElement(const ArrayData* array, size_t index, - const ResourceManager* resources) { - if (!array) - return nullptr; - return array->getElement(index, resources); - } - - void removeElement(size_t index, ResourceManager* resources); - - static void removeElement(ArrayData* array, size_t index, - ResourceManager* resources) { - if (!array) - return; - array->removeElement(index, resources); - } - - void remove(iterator it, ResourceManager* resources) { - CollectionData::removeOne(it, resources); - } - - static void remove(ArrayData* array, iterator it, - ResourceManager* resources) { - if (array) - return array->remove(it, resources); - } - - private: - iterator at(size_t index, const ResourceManager* resources) const; -}; - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp deleted file mode 100644 index b4fb126..0000000 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp +++ /dev/null @@ -1,79 +0,0 @@ -// ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON -// MIT License - -#pragma once - -#include -#include -#include - -ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE - -inline ArrayData::iterator ArrayData::at( - size_t index, const ResourceManager* resources) const { - auto it = createIterator(resources); - while (!it.done() && index) { - it.next(resources); - --index; - } - return it; -} - -inline VariantData* ArrayData::addElement(ResourceManager* resources) { - auto slot = resources->allocVariant(); - if (!slot) - return nullptr; - CollectionData::appendOne(slot, resources); - return slot.ptr(); -} - -inline VariantData* ArrayData::getOrAddElement(size_t index, - ResourceManager* resources) { - auto it = createIterator(resources); - while (!it.done() && index > 0) { - it.next(resources); - index--; - } - if (it.done()) - index++; - VariantData* element = it.data(); - while (index > 0) { - element = addElement(resources); - if (!element) - return nullptr; - index--; - } - return element; -} - -inline VariantData* ArrayData::getElement( - size_t index, const ResourceManager* resources) const { - return at(index, resources).data(); -} - -inline void ArrayData::removeElement(size_t index, ResourceManager* resources) { - remove(at(index, resources), resources); -} - -template -inline bool ArrayData::addValue(const T& value, ResourceManager* resources) { - ARDUINOJSON_ASSERT(resources != nullptr); - auto slot = resources->allocVariant(); - if (!slot) - return false; - JsonVariant variant(slot.ptr(), resources); - if (!variant.set(value)) { - resources->freeVariant(slot); - return false; - } - CollectionData::appendOne(slot, resources); - return true; -} - -// Returns the size (in bytes) of an array with n elements. -constexpr size_t sizeofArray(size_t n) { - return n * ResourceManager::slotSize; -} - -ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp index ec2ea54..12f8242 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -9,63 +9,48 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE // A proxy class to get or set an element of an array. -// https://arduinojson.org/v7/api/jsonarray/subscript/ +// https://arduinojson.org/v6/api/jsonarray/subscript/ template class ElementProxy : public VariantRefBase>, public VariantOperators> { friend class VariantAttorney; - friend class VariantRefBase>; - - template - friend class MemberProxy; - - template - friend class ElementProxy; - public: ElementProxy(TUpstream upstream, size_t index) : upstream_(upstream), index_(index) {} - ElementProxy& operator=(const ElementProxy& src) { + ElementProxy(const ElementProxy& src) + : upstream_(src.upstream_), index_(src.index_) {} + + FORCE_INLINE ElementProxy& operator=(const ElementProxy& src) { this->set(src); return *this; } template - ElementProxy& operator=(const T& src) { + FORCE_INLINE ElementProxy& operator=(const T& src) { this->set(src); return *this; } template - ElementProxy& operator=(T* src) { + FORCE_INLINE ElementProxy& operator=(T* src) { this->set(src); return *this; } private: - // clang-format off - ElementProxy(const ElementProxy& src) // Error here? See https://arduinojson.org/v7/proxy-non-copyable/ - : upstream_(src.upstream_), index_(src.index_) {} - // clang-format on - - ResourceManager* getResourceManager() const { - return VariantAttorney::getResourceManager(upstream_); + FORCE_INLINE MemoryPool* getPool() const { + return VariantAttorney::getPool(upstream_); } FORCE_INLINE VariantData* getData() const { - return VariantData::getElement( - VariantAttorney::getData(upstream_), index_, - VariantAttorney::getResourceManager(upstream_)); + return variantGetElement(VariantAttorney::getData(upstream_), index_); } - VariantData* getOrCreateData() const { - auto data = VariantAttorney::getOrCreateData(upstream_); - if (!data) - return nullptr; - return data->getOrAddElement( - index_, VariantAttorney::getResourceManager(upstream_)); + FORCE_INLINE VariantData* getOrCreateData() const { + return variantGetOrAddElement(VariantAttorney::getOrCreateData(upstream_), + index_, VariantAttorney::getPool(upstream_)); } TUpstream upstream_; diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp index 436793a..7b4761d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -12,196 +12,163 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE class JsonObject; // A reference to an array in a JsonDocument -// https://arduinojson.org/v7/api/jsonarray/ +// https://arduinojson.org/v6/api/jsonarray/ class JsonArray : public detail::VariantOperators { friend class detail::VariantAttorney; public: - using iterator = JsonArrayIterator; + typedef JsonArrayIterator iterator; // Constructs an unbound reference. - JsonArray() : data_(0), resources_(0) {} + FORCE_INLINE JsonArray() : data_(0), pool_(0) {} // INTERNAL USE ONLY - JsonArray(detail::ArrayData* data, detail::ResourceManager* resources) - : data_(data), resources_(resources) {} + FORCE_INLINE JsonArray(detail::MemoryPool* pool, detail::CollectionData* data) + : data_(data), pool_(pool) {} // Returns a JsonVariant pointing to the array. - // https://arduinojson.org/v7/api/jsonvariant/ + // https://arduinojson.org/v6/api/jsonvariant/ operator JsonVariant() { void* data = data_; // prevent warning cast-align - return JsonVariant(reinterpret_cast(data), - resources_); + return JsonVariant(pool_, reinterpret_cast(data)); } // Returns a read-only reference to the array. - // https://arduinojson.org/v7/api/jsonarrayconst/ + // https://arduinojson.org/v6/api/jsonarrayconst/ operator JsonArrayConst() const { - return JsonArrayConst(data_, resources_); - } - - // Appends a new (empty) element to the array. - // Returns a reference to the new element. - // https://arduinojson.org/v7/api/jsonarray/add/ - template ::value, int> = 0> - T add() const { - return add().to(); + return JsonArrayConst(data_); } // Appends a new (null) element to the array. // Returns a reference to the new element. - // https://arduinojson.org/v7/api/jsonarray/add/ - template ::value, int> = 0> + // https://arduinojson.org/v6/api/jsonarray/add/ JsonVariant add() const { - return JsonVariant(detail::ArrayData::addElement(data_, resources_), - resources_); + if (!data_) + return JsonVariant(); + return JsonVariant(pool_, data_->addElement(pool_)); } // Appends a value to the array. - // https://arduinojson.org/v7/api/jsonarray/add/ + // https://arduinojson.org/v6/api/jsonarray/add/ template - bool add(const T& value) const { - return detail::ArrayData::addValue(data_, value, resources_); + FORCE_INLINE bool add(const T& value) const { + return add().set(value); } // Appends a value to the array. - // https://arduinojson.org/v7/api/jsonarray/add/ - template ::value, int> = 0> - bool add(T* value) const { - return detail::ArrayData::addValue(data_, value, resources_); + // https://arduinojson.org/v6/api/jsonarray/add/ + template + FORCE_INLINE bool add(T* value) const { + return add().set(value); } // Returns an iterator to the first element of the array. - // https://arduinojson.org/v7/api/jsonarray/begin/ - iterator begin() const { + // https://arduinojson.org/v6/api/jsonarray/begin/ + FORCE_INLINE iterator begin() const { if (!data_) return iterator(); - return iterator(data_->createIterator(resources_), resources_); + return iterator(pool_, data_->head()); } // Returns an iterator following the last element of the array. - // https://arduinojson.org/v7/api/jsonarray/end/ - iterator end() const { + // https://arduinojson.org/v6/api/jsonarray/end/ + FORCE_INLINE iterator end() const { return iterator(); } // Copies an array. - // https://arduinojson.org/v7/api/jsonarray/set/ - bool set(JsonArrayConst src) const { - if (!data_) + // https://arduinojson.org/v6/api/jsonarray/set/ + FORCE_INLINE bool set(JsonArrayConst src) const { + if (!data_ || !src.data_) return false; + return data_->copyFrom(*src.data_, pool_); + } - clear(); - for (auto element : src) { - if (!add(element)) - return false; - } - - return true; + // Compares the content of two arrays. + FORCE_INLINE bool operator==(JsonArray rhs) const { + return JsonArrayConst(data_) == JsonArrayConst(rhs.data_); } // Removes the element at the specified iterator. - // https://arduinojson.org/v7/api/jsonarray/remove/ - void remove(iterator it) const { - detail::ArrayData::remove(data_, it.iterator_, resources_); + // ⚠️ Doesn't release the memory associated with the removed element. + // https://arduinojson.org/v6/api/jsonarray/remove/ + FORCE_INLINE void remove(iterator it) const { + if (!data_) + return; + data_->removeSlot(it.slot_); } // Removes the element at the specified index. - // https://arduinojson.org/v7/api/jsonarray/remove/ - void remove(size_t index) const { - detail::ArrayData::removeElement(data_, index, resources_); - } - - // Removes the element at the specified index. - // https://arduinojson.org/v7/api/jsonarray/remove/ - template ::value, int> = 0> - void remove(const TVariant& variant) const { - if (variant.template is()) - remove(variant.template as()); + // ⚠️ Doesn't release the memory associated with the removed element. + // https://arduinojson.org/v6/api/jsonarray/remove/ + FORCE_INLINE void remove(size_t index) const { + if (!data_) + return; + data_->removeElement(index); } // Removes all the elements of the array. - // https://arduinojson.org/v7/api/jsonarray/clear/ + // ⚠️ Doesn't release the memory associated with the removed elements. + // https://arduinojson.org/v6/api/jsonarray/clear/ void clear() const { - detail::ArrayData::clear(data_, resources_); + if (!data_) + return; + data_->clear(); } // Gets or sets the element at the specified index. - // https://arduinojson.org/v7/api/jsonarray/subscript/ - template ::value, int> = 0> - detail::ElementProxy operator[](T index) const { - return {*this, size_t(index)}; + // https://arduinojson.org/v6/api/jsonarray/subscript/ + FORCE_INLINE detail::ElementProxy operator[](size_t index) const { + return {*this, index}; } - // Gets or sets the element at the specified index. - // https://arduinojson.org/v7/api/jsonarray/subscript/ - template ::value, int> = 0> - detail::ElementProxy operator[](const TVariant& variant) const { - if (variant.template is()) - return {*this, variant.template as()}; - else - return {*this, size_t(-1)}; + // Creates an object and appends it to the array. + // https://arduinojson.org/v6/api/jsonarray/createnestedobject/ + FORCE_INLINE JsonObject createNestedObject() const; + + // Creates an array and appends it to the array. + // https://arduinojson.org/v6/api/jsonarray/createnestedarray/ + FORCE_INLINE JsonArray createNestedArray() const { + return add().to(); } operator JsonVariantConst() const { - return JsonVariantConst(collectionToVariant(data_), resources_); + return JsonVariantConst(collectionToVariant(data_)); } // Returns true if the reference is unbound. - // https://arduinojson.org/v7/api/jsonarray/isnull/ - bool isNull() const { + // https://arduinojson.org/v6/api/jsonarray/isnull/ + FORCE_INLINE bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. - // https://arduinojson.org/v7/api/jsonarray/isnull/ - operator bool() const { + // https://arduinojson.org/v6/api/jsonarray/isnull/ + FORCE_INLINE operator bool() const { return data_ != 0; } + // Returns the number of bytes occupied by the array. + // https://arduinojson.org/v6/api/jsonarray/memoryusage/ + FORCE_INLINE size_t memoryUsage() const { + return data_ ? data_->memoryUsage() : 0; + } + // Returns the depth (nesting level) of the array. - // https://arduinojson.org/v7/api/jsonarray/nesting/ - size_t nesting() const { - return detail::VariantData::nesting(collectionToVariant(data_), resources_); + // https://arduinojson.org/v6/api/jsonarray/nesting/ + FORCE_INLINE size_t nesting() const { + return variantNesting(collectionToVariant(data_)); } // Returns the number of elements in the array. - // https://arduinojson.org/v7/api/jsonarray/size/ - size_t size() const { - return data_ ? data_->size(resources_) : 0; - } - - // DEPRECATED: use add() instead - ARDUINOJSON_DEPRECATED("use add() instead") - JsonVariant add() const { - return add(); - } - - // DEPRECATED: use add() instead - ARDUINOJSON_DEPRECATED("use add() instead") - JsonArray createNestedArray() const { - return add(); - } - - // DEPRECATED: use add() instead - ARDUINOJSON_DEPRECATED("use add() instead") - JsonObject createNestedObject() const; - - // DEPRECATED: always returns zero - ARDUINOJSON_DEPRECATED("always returns zero") - size_t memoryUsage() const { - return 0; + // https://arduinojson.org/v6/api/jsonarray/size/ + FORCE_INLINE size_t size() const { + return data_ ? data_->size() : 0; } private: - detail::ResourceManager* getResourceManager() const { - return resources_; + detail::MemoryPool* getPool() const { + return pool_; } detail::VariantData* getData() const { @@ -212,8 +179,33 @@ class JsonArray : public detail::VariantOperators { return collectionToVariant(data_); } - detail::ArrayData* data_; - detail::ResourceManager* resources_; + detail::CollectionData* data_; + detail::MemoryPool* pool_; +}; + +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + variantCopyFrom(getData(dst), getData(src), getPool(dst)); + } + + static JsonArray fromJson(JsonVariant src) { + auto data = getData(src); + auto pool = getPool(src); + return JsonArray(pool, data != 0 ? data->asArray() : 0); + } + + static detail::InvalidConversion fromJson( + JsonVariantConst); + + static bool checkJson(JsonVariantConst) { + return false; + } + + static bool checkJson(JsonVariant src) { + auto data = getData(src); + return data && data->isArray(); + } }; ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp index b4c138a..c983e6f 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -13,89 +13,98 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE class JsonObject; // A read-only reference to an array in a JsonDocument -// https://arduinojson.org/v7/api/jsonarrayconst/ +// https://arduinojson.org/v6/api/jsonarrayconst/ class JsonArrayConst : public detail::VariantOperators { friend class JsonArray; friend class detail::VariantAttorney; public: - using iterator = JsonArrayConstIterator; + typedef JsonArrayConstIterator iterator; // Returns an iterator to the first element of the array. - // https://arduinojson.org/v7/api/jsonarrayconst/begin/ - iterator begin() const { + // https://arduinojson.org/v6/api/jsonarrayconst/begin/ + FORCE_INLINE iterator begin() const { if (!data_) return iterator(); - return iterator(data_->createIterator(resources_), resources_); + return iterator(data_->head()); } // Returns an iterator to the element following the last element of the array. - // https://arduinojson.org/v7/api/jsonarrayconst/end/ - iterator end() const { + // https://arduinojson.org/v6/api/jsonarrayconst/end/ + FORCE_INLINE iterator end() const { return iterator(); } // Creates an unbound reference. - JsonArrayConst() : data_(0), resources_(0) {} + FORCE_INLINE JsonArrayConst() : data_(0) {} // INTERNAL USE ONLY - JsonArrayConst(const detail::ArrayData* data, - const detail::ResourceManager* resources) - : data_(data), resources_(resources) {} + FORCE_INLINE JsonArrayConst(const detail::CollectionData* data) + : data_(data) {} - // Returns the element at the specified index. - // https://arduinojson.org/v7/api/jsonarrayconst/subscript/ - template ::value, int> = 0> - JsonVariantConst operator[](T index) const { - return JsonVariantConst( - detail::ArrayData::getElement(data_, size_t(index), resources_), - resources_); + // Compares the content of two arrays. + // Returns true if the two arrays are equal. + FORCE_INLINE bool operator==(JsonArrayConst rhs) const { + if (data_ == rhs.data_) + return true; + if (!data_ || !rhs.data_) + return false; + + iterator it1 = begin(); + iterator it2 = rhs.begin(); + + for (;;) { + bool end1 = it1 == end(); + bool end2 = it2 == rhs.end(); + if (end1 && end2) + return true; + if (end1 || end2) + return false; + if (*it1 != *it2) + return false; + ++it1; + ++it2; + } } // Returns the element at the specified index. - // https://arduinojson.org/v7/api/jsonarrayconst/subscript/ - template ::value, int> = 0> - JsonVariantConst operator[](const TVariant& variant) const { - if (variant.template is()) - return operator[](variant.template as()); - else - return JsonVariantConst(); + // https://arduinojson.org/v6/api/jsonarrayconst/subscript/ + FORCE_INLINE JsonVariantConst operator[](size_t index) const { + return JsonVariantConst(data_ ? data_->getElement(index) : 0); } operator JsonVariantConst() const { - return JsonVariantConst(getData(), resources_); + return JsonVariantConst(collectionToVariant(data_)); } // Returns true if the reference is unbound. - // https://arduinojson.org/v7/api/jsonarrayconst/isnull/ - bool isNull() const { + // https://arduinojson.org/v6/api/jsonarrayconst/isnull/ + FORCE_INLINE bool isNull() const { return data_ == 0; } // Returns true if the reference is bound. - // https://arduinojson.org/v7/api/jsonarrayconst/isnull/ - operator bool() const { + // https://arduinojson.org/v6/api/jsonarrayconst/isnull/ + FORCE_INLINE operator bool() const { return data_ != 0; } + // Returns the number of bytes occupied by the array. + // https://arduinojson.org/v6/api/jsonarrayconst/memoryusage/ + FORCE_INLINE size_t memoryUsage() const { + return data_ ? data_->memoryUsage() : 0; + } + // Returns the depth (nesting level) of the array. - // https://arduinojson.org/v7/api/jsonarrayconst/nesting/ - size_t nesting() const { - return detail::VariantData::nesting(getData(), resources_); + // https://arduinojson.org/v6/api/jsonarrayconst/nesting/ + FORCE_INLINE size_t nesting() const { + return variantNesting(collectionToVariant(data_)); } // Returns the number of elements in the array. - // https://arduinojson.org/v7/api/jsonarrayconst/size/ - size_t size() const { - return data_ ? data_->size(resources_) : 0; - } - - // DEPRECATED: always returns zero - ARDUINOJSON_DEPRECATED("always returns zero") - size_t memoryUsage() const { - return 0; + // https://arduinojson.org/v6/api/jsonarrayconst/size/ + FORCE_INLINE size_t size() const { + return data_ ? data_->size() : 0; } private: @@ -103,31 +112,24 @@ class JsonArrayConst : public detail::VariantOperators { return collectionToVariant(data_); } - const detail::ArrayData* data_; - const detail::ResourceManager* resources_; + const detail::CollectionData* data_; }; -// Compares the content of two arrays. -// Returns true if the two arrays are equal. -inline bool operator==(JsonArrayConst lhs, JsonArrayConst rhs) { - if (!lhs && !rhs) - return true; - if (!lhs || !rhs) - return false; - - auto a = lhs.begin(); - auto b = rhs.begin(); - - for (;;) { - if (a == b) // same pointer or both null - return true; - if (a == lhs.end() || b == rhs.end()) - return false; - if (*a != *b) - return false; - ++a; - ++b; +template <> +struct Converter : private detail::VariantAttorney { + static void toJson(JsonVariantConst src, JsonVariant dst) { + variantCopyFrom(getData(dst), getData(src), getPool(dst)); } -} + + static JsonArrayConst fromJson(JsonVariantConst src) { + auto data = getData(src); + return data ? data->asArray() : 0; + } + + static bool checkJson(JsonVariantConst src) { + auto data = getData(src); + return data && data->isArray(); + } +}; ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayImpl.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayImpl.hpp new file mode 100644 index 0000000..a3ddb3a --- /dev/null +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayImpl.hpp @@ -0,0 +1,36 @@ +// ArduinoJson - https://arduinojson.org +// Copyright © 2014-2026, Benoit BLANCHON +// MIT License + +#pragma once + +#include +#include + +ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE + +inline JsonObject JsonArray::createNestedObject() const { + return add().to(); +} + +ARDUINOJSON_END_PUBLIC_NAMESPACE + +ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE + +template +inline JsonArray VariantRefBase::createNestedArray() const { + return add().template to(); +} + +template +inline JsonObject VariantRefBase::createNestedObject() const { + return add().template to(); +} + +template +inline ElementProxy VariantRefBase::operator[]( + size_t index) const { + return ElementProxy(derived(), index); +} + +ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp index 39ca45e..72e7963 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp @@ -1,96 +1,121 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once #include +#include ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE -template -class Ptr { +class VariantPtr { public: - Ptr(T value) : value_(value) {} + VariantPtr(detail::MemoryPool* pool, detail::VariantData* data) + : variant_(pool, data) {} - T* operator->() { - return &value_; + JsonVariant* operator->() { + return &variant_; } - T& operator*() { - return value_; + JsonVariant& operator*() { + return variant_; } private: - T value_; + JsonVariant variant_; }; class JsonArrayIterator { friend class JsonArray; public: - JsonArrayIterator() {} - explicit JsonArrayIterator(detail::ArrayData::iterator iterator, - detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + JsonArrayIterator() : slot_(0) {} + explicit JsonArrayIterator(detail::MemoryPool* pool, + detail::VariantSlot* slot) + : pool_(pool), slot_(slot) {} - JsonVariant operator*() { - return JsonVariant(iterator_.data(), resources_); + JsonVariant operator*() const { + return JsonVariant(pool_, slot_->data()); } - Ptr operator->() { - return operator*(); + VariantPtr operator->() { + return VariantPtr(pool_, slot_->data()); } bool operator==(const JsonArrayIterator& other) const { - return iterator_ == other.iterator_; + return slot_ == other.slot_; } bool operator!=(const JsonArrayIterator& other) const { - return iterator_ != other.iterator_; + return slot_ != other.slot_; } JsonArrayIterator& operator++() { - iterator_.next(resources_); + slot_ = slot_->next(); + return *this; + } + + JsonArrayIterator& operator+=(size_t distance) { + slot_ = slot_->next(distance); return *this; } private: - detail::ArrayData::iterator iterator_; - detail::ResourceManager* resources_; + detail::MemoryPool* pool_; + detail::VariantSlot* slot_; +}; + +class VariantConstPtr { + public: + VariantConstPtr(const detail::VariantData* data) : variant_(data) {} + + JsonVariantConst* operator->() { + return &variant_; + } + + JsonVariantConst& operator*() { + return variant_; + } + + private: + JsonVariantConst variant_; }; class JsonArrayConstIterator { friend class JsonArray; public: - JsonArrayConstIterator() {} - explicit JsonArrayConstIterator(detail::ArrayData::iterator iterator, - const detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + JsonArrayConstIterator() : slot_(0) {} + explicit JsonArrayConstIterator(const detail::VariantSlot* slot) + : slot_(slot) {} JsonVariantConst operator*() const { - return JsonVariantConst(iterator_.data(), resources_); + return JsonVariantConst(slot_->data()); } - Ptr operator->() { - return operator*(); + VariantConstPtr operator->() { + return VariantConstPtr(slot_->data()); } bool operator==(const JsonArrayConstIterator& other) const { - return iterator_ == other.iterator_; + return slot_ == other.slot_; } bool operator!=(const JsonArrayConstIterator& other) const { - return iterator_ != other.iterator_; + return slot_ != other.slot_; } JsonArrayConstIterator& operator++() { - iterator_.next(resources_); + slot_ = slot_->next(); + return *this; + } + + JsonArrayConstIterator& operator+=(size_t distance) { + slot_ = slot_->next(distance); return *this; } private: - detail::ArrayData::iterator iterator_; - const detail::ResourceManager* resources_; + const detail::VariantSlot* slot_; }; ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp index d9ba143..4c947aa 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -11,29 +11,30 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE // Copies a value to a JsonVariant. // This is a degenerated form of copyArray() to stop the recursion. -template ::value, int> = 0> -inline bool copyArray(const T& src, JsonVariant dst) { +template +inline typename detail::enable_if::value, bool>::type +copyArray(const T& src, JsonVariant dst) { return dst.set(src); } // Copies values from an array to a JsonArray or a JsonVariant. -// https://arduinojson.org/v7/api/misc/copyarray/ -template ::value, int> = 0> -inline bool copyArray(T (&src)[N], const TDestination& dst) { +// https://arduinojson.org/v6/api/misc/copyarray/ +template +inline typename detail::enable_if< + !detail::is_base_of::value, bool>::type +copyArray(T (&src)[N], const TDestination& dst) { return copyArray(src, N, dst); } // Copies values from an array to a JsonArray or a JsonVariant. -// https://arduinojson.org/v7/api/misc/copyarray/ -template ::value, int> = 0> -inline bool copyArray(const T* src, size_t len, const TDestination& dst) { +// https://arduinojson.org/v6/api/misc/copyarray/ +template +inline typename detail::enable_if< + !detail::is_base_of::value, bool>::type +copyArray(const T* src, size_t len, const TDestination& dst) { bool ok = true; for (size_t i = 0; i < len; i++) { - ok &= copyArray(src[i], dst.template add()); + ok &= copyArray(src[i], dst.add()); } return ok; } @@ -46,14 +47,14 @@ inline bool copyArray(const char* src, size_t, const TDestination& dst) { } // Copies values from an array to a JsonDocument. -// https://arduinojson.org/v7/api/misc/copyarray/ +// https://arduinojson.org/v6/api/misc/copyarray/ template inline bool copyArray(const T& src, JsonDocument& dst) { return copyArray(src, dst.to()); } // Copies an array to a JsonDocument. -// https://arduinojson.org/v7/api/misc/copyarray/ +// https://arduinojson.org/v6/api/misc/copyarray/ template inline bool copyArray(const T* src, size_t len, JsonDocument& dst) { return copyArray(src, len, dst.to()); @@ -61,21 +62,22 @@ inline bool copyArray(const T* src, size_t len, JsonDocument& dst) { // Copies a value from a JsonVariant. // This is a degenerated form of copyArray() to stop the recursion. -template ::value, int> = 0> -inline size_t copyArray(JsonVariantConst src, T& dst) { +template +inline typename detail::enable_if::value, size_t>::type +copyArray(JsonVariantConst src, T& dst) { dst = src.as(); return 1; } // Copies values from a JsonArray or JsonVariant to an array. -// https://arduinojson.org/v7/api/misc/copyarray/ +// https://arduinojson.org/v6/api/misc/copyarray/ template inline size_t copyArray(JsonArrayConst src, T (&dst)[N]) { return copyArray(src, dst, N); } // Copies values from a JsonArray or JsonVariant to an array. -// https://arduinojson.org/v7/api/misc/copyarray/ +// https://arduinojson.org/v6/api/misc/copyarray/ template inline size_t copyArray(JsonArrayConst src, T* dst, size_t len) { size_t i = 0; @@ -99,13 +101,13 @@ inline size_t copyArray(JsonVariantConst src, char (&dst)[N]) { } // Copies values from a JsonDocument to an array. -// https://arduinojson.org/v7/api/misc/copyarray/ -template < - typename TSource, typename T, - detail::enable_if_t::value && - detail::is_base_of::value, - int> = 0> -inline size_t copyArray(const TSource& src, T& dst) { +// https://arduinojson.org/v6/api/misc/copyarray/ +template +inline typename detail::enable_if< + detail::is_array::value && + detail::is_base_of::value, + size_t>::type +copyArray(const TSource& src, T& dst) { return copyArray(src.template as(), dst); } diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp index 937c10c..2cbe7ad 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp @@ -1,10 +1,9 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once -#include #include #include @@ -12,100 +11,74 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE +class MemoryPool; class VariantData; -class ResourceManager; - -class CollectionIterator { - friend class CollectionData; - - public: - CollectionIterator() : slot_(nullptr), currentId_(NULL_SLOT) {} - - void next(const ResourceManager* resources); - - bool done() const { - return slot_ == nullptr; - } - - bool operator==(const CollectionIterator& other) const { - return slot_ == other.slot_; - } - - bool operator!=(const CollectionIterator& other) const { - return slot_ != other.slot_; - } - - VariantData* operator->() { - ARDUINOJSON_ASSERT(slot_ != nullptr); - return data(); - } - - VariantData& operator*() { - ARDUINOJSON_ASSERT(slot_ != nullptr); - return *data(); - } - - const VariantData& operator*() const { - ARDUINOJSON_ASSERT(slot_ != nullptr); - return *data(); - } - - VariantData* data() { - return reinterpret_cast(slot_); - } - - const VariantData* data() const { - return reinterpret_cast(slot_); - } - - private: - CollectionIterator(VariantData* slot, SlotId slotId); - - VariantData* slot_; - SlotId currentId_, nextId_; -}; +class VariantSlot; class CollectionData { - SlotId head_ = NULL_SLOT; - SlotId tail_ = NULL_SLOT; + VariantSlot* head_; + VariantSlot* tail_; public: - // Placement new - static void* operator new(size_t, void* p) noexcept { - return p; + // Must be a POD! + // - no constructor + // - no destructor + // - no virtual + // - no inheritance + + // Array only + + VariantData* addElement(MemoryPool* pool); + + VariantData* getElement(size_t index) const; + + VariantData* getOrAddElement(size_t index, MemoryPool* pool); + + void removeElement(size_t index); + + // Object only + + template + VariantData* addMember(TAdaptedString key, MemoryPool* pool); + + template + VariantData* getMember(TAdaptedString key) const; + + template + VariantData* getOrAddMember(TAdaptedString key, MemoryPool* pool); + + template + void removeMember(TAdaptedString key) { + removeSlot(getSlot(key)); } - static void operator delete(void*, void*) noexcept {} + template + bool containsKey(const TAdaptedString& key) const; - using iterator = CollectionIterator; + // Generic - iterator createIterator(const ResourceManager* resources) const; + void clear(); + size_t memoryUsage() const; + size_t size() const; - size_t size(const ResourceManager*) const; - size_t nesting(const ResourceManager*) const; + VariantSlot* addSlot(MemoryPool*); + void removeSlot(VariantSlot* slot); - void clear(ResourceManager* resources); + bool copyFrom(const CollectionData& src, MemoryPool* pool); - static void clear(CollectionData* collection, ResourceManager* resources) { - if (!collection) - return; - collection->clear(resources); - } - - SlotId head() const { + VariantSlot* head() const { return head_; } - protected: - void appendOne(Slot slot, const ResourceManager* resources); - void appendPair(Slot key, Slot value, - const ResourceManager* resources); - - void removeOne(iterator it, ResourceManager* resources); - void removePair(iterator it, ResourceManager* resources); + void movePointers(ptrdiff_t stringDistance, ptrdiff_t variantDistance); private: - Slot getPreviousSlot(VariantData*, const ResourceManager*) const; + VariantSlot* getSlot(size_t index) const; + + template + VariantSlot* getSlot(TAdaptedString key) const; + + VariantSlot* getPreviousSlot(VariantSlot*) const; }; inline const VariantData* collectionToVariant( diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp index 559c0a5..93785d5 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -1,137 +1,197 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once #include -#include +#include #include -#include #include ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE -inline CollectionIterator::CollectionIterator(VariantData* slot, SlotId slotId) - : slot_(slot), currentId_(slotId) { - nextId_ = slot_ ? slot_->next() : NULL_SLOT; -} +inline VariantSlot* CollectionData::addSlot(MemoryPool* pool) { + VariantSlot* slot = pool->allocVariant(); + if (!slot) + return 0; -inline void CollectionIterator::next(const ResourceManager* resources) { - ARDUINOJSON_ASSERT(currentId_ != NULL_SLOT); - slot_ = resources->getVariant(nextId_); - currentId_ = nextId_; - if (slot_) - nextId_ = slot_->next(); -} - -inline CollectionData::iterator CollectionData::createIterator( - const ResourceManager* resources) const { - return iterator(resources->getVariant(head_), head_); -} - -inline void CollectionData::appendOne(Slot slot, - const ResourceManager* resources) { - if (tail_ != NULL_SLOT) { - auto tail = resources->getVariant(tail_); - tail->setNext(slot.id()); - tail_ = slot.id(); + if (tail_) { + ARDUINOJSON_ASSERT(pool->owns(tail_)); // Can't alter a linked array/object + tail_->setNextNotNull(slot); + tail_ = slot; } else { - head_ = slot.id(); - tail_ = slot.id(); - } -} - -inline void CollectionData::appendPair(Slot key, - Slot value, - const ResourceManager* resources) { - key->setNext(value.id()); - - if (tail_ != NULL_SLOT) { - auto tail = resources->getVariant(tail_); - tail->setNext(key.id()); - tail_ = value.id(); - } else { - head_ = key.id(); - tail_ = value.id(); - } -} - -inline void CollectionData::clear(ResourceManager* resources) { - auto next = head_; - while (next != NULL_SLOT) { - auto currId = next; - auto slot = resources->getVariant(next); - next = slot->next(); - resources->freeVariant({slot, currId}); + head_ = slot; + tail_ = slot; } - head_ = NULL_SLOT; - tail_ = NULL_SLOT; + slot->clear(); + return slot; } -inline Slot CollectionData::getPreviousSlot( - VariantData* target, const ResourceManager* resources) const { - auto prev = Slot(); - auto currentId = head_; - while (currentId != NULL_SLOT) { - auto currentSlot = resources->getVariant(currentId); - if (currentSlot == target) +inline VariantData* CollectionData::addElement(MemoryPool* pool) { + return slotData(addSlot(pool)); +} + +template +inline VariantData* CollectionData::addMember(TAdaptedString key, + MemoryPool* pool) { + VariantSlot* slot = addSlot(pool); + if (!slotSetKey(slot, key, pool)) { + removeSlot(slot); + return 0; + } + return slot->data(); +} + +inline void CollectionData::clear() { + head_ = 0; + tail_ = 0; +} + +template +inline bool CollectionData::containsKey(const TAdaptedString& key) const { + return getSlot(key) != 0; +} + +inline bool CollectionData::copyFrom(const CollectionData& src, + MemoryPool* pool) { + clear(); + for (VariantSlot* s = src.head_; s; s = s->next()) { + VariantData* var; + if (s->key() != 0) { + JsonString key(s->key(), + s->ownsKey() ? JsonString::Copied : JsonString::Linked); + var = addMember(adaptString(key), pool); + } else { + var = addElement(pool); + } + if (!var) + return false; + if (!var->copyFrom(*s->data(), pool)) + return false; + } + return true; +} + +template +inline VariantSlot* CollectionData::getSlot(TAdaptedString key) const { + if (key.isNull()) + return 0; + VariantSlot* slot = head_; + while (slot) { + if (stringEquals(key, adaptString(slot->key()))) break; - prev = Slot(currentSlot, currentId); - currentId = currentSlot->next(); + slot = slot->next(); } - return prev; + return slot; } -inline void CollectionData::removeOne(iterator it, ResourceManager* resources) { - if (it.done()) +inline VariantSlot* CollectionData::getSlot(size_t index) const { + if (!head_) + return 0; + return head_->next(index); +} + +inline VariantSlot* CollectionData::getPreviousSlot(VariantSlot* target) const { + VariantSlot* current = head_; + while (current) { + VariantSlot* next = current->next(); + if (next == target) + return current; + current = next; + } + return 0; +} + +template +inline VariantData* CollectionData::getMember(TAdaptedString key) const { + VariantSlot* slot = getSlot(key); + return slot ? slot->data() : 0; +} + +template +inline VariantData* CollectionData::getOrAddMember(TAdaptedString key, + MemoryPool* pool) { + // ignore null key + if (key.isNull()) + return 0; + + // search a matching key + VariantSlot* slot = getSlot(key); + if (slot) + return slot->data(); + + return addMember(key, pool); +} + +inline VariantData* CollectionData::getElement(size_t index) const { + VariantSlot* slot = getSlot(index); + return slot ? slot->data() : 0; +} + +inline VariantData* CollectionData::getOrAddElement(size_t index, + MemoryPool* pool) { + VariantSlot* slot = head_; + while (slot && index > 0) { + slot = slot->next(); + index--; + } + if (!slot) + index++; + while (index > 0) { + slot = addSlot(pool); + index--; + } + return slotData(slot); +} + +inline void CollectionData::removeSlot(VariantSlot* slot) { + if (!slot) return; - auto curr = it.slot_; - auto prev = getPreviousSlot(curr, resources); - auto next = curr->next(); + VariantSlot* prev = getPreviousSlot(slot); + VariantSlot* next = slot->next(); if (prev) prev->setNext(next); else head_ = next; - if (next == NULL_SLOT) - tail_ = prev.id(); - resources->freeVariant({it.slot_, it.currentId_}); + if (!next) + tail_ = prev; } -inline void CollectionData::removePair(ObjectData::iterator it, - ResourceManager* resources) { - if (it.done()) - return; - - auto keySlot = it.slot_; - - auto valueId = it.nextId_; - auto valueSlot = resources->getVariant(valueId); - - // remove value slot - keySlot->setNext(valueSlot->next()); - resources->freeVariant({valueSlot, valueId}); - - // remove key slot - removeOne(it, resources); +inline void CollectionData::removeElement(size_t index) { + removeSlot(getSlot(index)); } -inline size_t CollectionData::nesting(const ResourceManager* resources) const { - size_t maxChildNesting = 0; - for (auto it = createIterator(resources); !it.done(); it.next(resources)) { - size_t childNesting = it->nesting(resources); - if (childNesting > maxChildNesting) - maxChildNesting = childNesting; +inline size_t CollectionData::memoryUsage() const { + size_t total = 0; + for (VariantSlot* s = head_; s; s = s->next()) { + total += sizeof(VariantSlot) + s->data()->memoryUsage(); + if (s->ownsKey()) + total += strlen(s->key()) + 1; } - return maxChildNesting + 1; + return total; } -inline size_t CollectionData::size(const ResourceManager* resources) const { - size_t count = 0; - for (auto it = createIterator(resources); !it.done(); it.next(resources)) - count++; - return count; +inline size_t CollectionData::size() const { + return slotSize(head_); +} + +template +inline void movePointer(T*& p, ptrdiff_t offset) { + if (!p) + return; + p = reinterpret_cast( + reinterpret_cast(reinterpret_cast(p) + offset)); + ARDUINOJSON_ASSERT(isAligned(p)); +} + +inline void CollectionData::movePointers(ptrdiff_t stringDistance, + ptrdiff_t variantDistance) { + movePointer(head_, variantDistance); + movePointer(tail_, variantDistance); + for (VariantSlot* slot = head_; slot; slot = slot->next()) + slot->movePointers(stringDistance, variantDistance); } ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Configuration.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Configuration.hpp index 696ce4c..991a896 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Configuration.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Configuration.hpp @@ -1,11 +1,10 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once // Support std::istream and std::ostream -// https://arduinojson.org/v7/config/enable_std_stream/ #ifndef ARDUINOJSON_ENABLE_STD_STREAM # ifdef __has_include # if __has_include() && \ @@ -26,7 +25,6 @@ #endif // Support std::string -// https://arduinojson.org/v7/config/enable_std_string/ #ifndef ARDUINOJSON_ENABLE_STD_STRING # ifdef __has_include # if __has_include() && !defined(min) && !defined(max) @@ -56,105 +54,51 @@ # endif #endif -// Pointer size: a heuristic to set sensible defaults -#ifndef ARDUINOJSON_SIZEOF_POINTER -# if defined(__SIZEOF_POINTER__) -# define ARDUINOJSON_SIZEOF_POINTER __SIZEOF_POINTER__ -# elif defined(_WIN64) && _WIN64 -# define ARDUINOJSON_SIZEOF_POINTER 8 // 64 bits -# else -# define ARDUINOJSON_SIZEOF_POINTER 4 // assume 32 bits otherwise -# endif -#endif - // Store floating-point values with float (0) or double (1) -// https://arduinojson.org/v7/config/use_double/ #ifndef ARDUINOJSON_USE_DOUBLE -# if ARDUINOJSON_SIZEOF_POINTER >= 4 // 32 & 64 bits systems -# define ARDUINOJSON_USE_DOUBLE 1 -# else -# define ARDUINOJSON_USE_DOUBLE 0 -# endif +# define ARDUINOJSON_USE_DOUBLE 1 #endif // Store integral values with long (0) or long long (1) -// https://arduinojson.org/v7/config/use_long_long/ #ifndef ARDUINOJSON_USE_LONG_LONG -# if ARDUINOJSON_SIZEOF_POINTER >= 4 // 32 & 64 bits systems +# if defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ >= 4 || \ + defined(_MSC_VER) # define ARDUINOJSON_USE_LONG_LONG 1 -# else -# define ARDUINOJSON_USE_LONG_LONG 0 # endif #endif +#ifndef ARDUINOJSON_USE_LONG_LONG +# define ARDUINOJSON_USE_LONG_LONG 0 +#endif // Limit nesting as the stack is likely to be small -// https://arduinojson.org/v7/config/default_nesting_limit/ #ifndef ARDUINOJSON_DEFAULT_NESTING_LIMIT # define ARDUINOJSON_DEFAULT_NESTING_LIMIT 10 #endif -// Number of bytes to store a slot id -// https://arduinojson.org/v7/config/slot_id_size/ -#ifndef ARDUINOJSON_SLOT_ID_SIZE -# if ARDUINOJSON_SIZEOF_POINTER <= 2 -// 8-bit and 16-bit archs => up to 255 slots -# define ARDUINOJSON_SLOT_ID_SIZE 1 -# elif ARDUINOJSON_SIZEOF_POINTER == 4 -// 32-bit arch => up to 65535 slots -# define ARDUINOJSON_SLOT_ID_SIZE 2 +// Number of bits to store the pointer to next node +// (saves RAM but limits the number of values in a document) +#ifndef ARDUINOJSON_SLOT_OFFSET_SIZE +# if defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ <= 2 +// Address space == 16-bit => max 127 values +# define ARDUINOJSON_SLOT_OFFSET_SIZE 1 +# elif defined(__SIZEOF_POINTER__) && __SIZEOF_POINTER__ >= 8 || \ + defined(_WIN64) && _WIN64 +// Address space == 64-bit => max 2147483647 values +# define ARDUINOJSON_SLOT_OFFSET_SIZE 4 # else -// 64-bit arch => up to 4294967295 slots -# define ARDUINOJSON_SLOT_ID_SIZE 4 -# endif -#endif - -// Capacity of each variant pool (in slots) -#ifndef ARDUINOJSON_POOL_CAPACITY -# if ARDUINOJSON_SLOT_ID_SIZE == 1 -# define ARDUINOJSON_POOL_CAPACITY 16 // 96 bytes -# elif ARDUINOJSON_SLOT_ID_SIZE == 2 -# define ARDUINOJSON_POOL_CAPACITY 128 // 1024 bytes -# else -# define ARDUINOJSON_POOL_CAPACITY 256 // 4096 bytes -# endif -#endif - -// Initial capacity of the pool list -#ifndef ARDUINOJSON_INITIAL_POOL_COUNT -# define ARDUINOJSON_INITIAL_POOL_COUNT 4 -#endif - -// Automatically call shrinkToFit() from deserializeXxx() -// Disabled by default on 8-bit platforms because it's not worth the increase in -// code size -#ifndef ARDUINOJSON_AUTO_SHRINK -# if ARDUINOJSON_SIZEOF_POINTER <= 2 -# define ARDUINOJSON_AUTO_SHRINK 0 -# else -# define ARDUINOJSON_AUTO_SHRINK 1 -# endif -#endif - -// Number of bytes to store the length of a string -// https://arduinojson.org/v7/config/string_length_size/ -#ifndef ARDUINOJSON_STRING_LENGTH_SIZE -# if ARDUINOJSON_SIZEOF_POINTER <= 2 -# define ARDUINOJSON_STRING_LENGTH_SIZE 1 // up to 255 characters -# else -# define ARDUINOJSON_STRING_LENGTH_SIZE 2 // up to 65535 characters +// Address space == 32-bit => max 32767 values +# define ARDUINOJSON_SLOT_OFFSET_SIZE 2 # endif #endif #ifdef ARDUINO // Enable support for Arduino's String class -// https://arduinojson.org/v7/config/enable_arduino_string/ # ifndef ARDUINOJSON_ENABLE_ARDUINO_STRING # define ARDUINOJSON_ENABLE_ARDUINO_STRING 1 # endif // Enable support for Arduino's Stream class -// https://arduinojson.org/v7/config/enable_arduino_stream/ # ifndef ARDUINOJSON_ENABLE_ARDUINO_STREAM # define ARDUINOJSON_ENABLE_ARDUINO_STREAM 1 # endif @@ -165,7 +109,6 @@ # endif // Enable support for PROGMEM -// https://arduinojson.org/v7/config/enable_progmem/ # ifndef ARDUINOJSON_ENABLE_PROGMEM # define ARDUINOJSON_ENABLE_PROGMEM 1 # endif @@ -173,13 +116,11 @@ #else // ARDUINO // Disable support for Arduino's String class -// https://arduinojson.org/v7/config/enable_arduino_string/ # ifndef ARDUINOJSON_ENABLE_ARDUINO_STRING # define ARDUINOJSON_ENABLE_ARDUINO_STRING 0 # endif // Disable support for Arduino's Stream class -// https://arduinojson.org/v7/config/enable_arduino_stream/ # ifndef ARDUINOJSON_ENABLE_ARDUINO_STREAM # define ARDUINOJSON_ENABLE_ARDUINO_STREAM 0 # endif @@ -190,7 +131,6 @@ # endif // Enable PROGMEM support on AVR only -// https://arduinojson.org/v7/config/enable_progmem/ # ifndef ARDUINOJSON_ENABLE_PROGMEM # ifdef __AVR__ # define ARDUINOJSON_ENABLE_PROGMEM 1 @@ -202,38 +142,32 @@ #endif // ARDUINO // Convert unicode escape sequence (\u0123) to UTF-8 -// https://arduinojson.org/v7/config/decode_unicode/ #ifndef ARDUINOJSON_DECODE_UNICODE # define ARDUINOJSON_DECODE_UNICODE 1 #endif // Ignore comments in input -// https://arduinojson.org/v7/config/enable_comments/ #ifndef ARDUINOJSON_ENABLE_COMMENTS # define ARDUINOJSON_ENABLE_COMMENTS 0 #endif // Support NaN in JSON -// https://arduinojson.org/v7/config/enable_nan/ #ifndef ARDUINOJSON_ENABLE_NAN # define ARDUINOJSON_ENABLE_NAN 0 #endif // Support Infinity in JSON -// https://arduinojson.org/v7/config/enable_infinity/ #ifndef ARDUINOJSON_ENABLE_INFINITY # define ARDUINOJSON_ENABLE_INFINITY 0 #endif // Control the exponentiation threshold for big numbers // CAUTION: cannot be more that 1e9 !!!! -// https://arduinojson.org/v7/config/positive_exponentiation_threshold/ #ifndef ARDUINOJSON_POSITIVE_EXPONENTIATION_THRESHOLD # define ARDUINOJSON_POSITIVE_EXPONENTIATION_THRESHOLD 1e7 #endif // Control the exponentiation threshold for small numbers -// https://arduinojson.org/v7/config/negative_exponentiation_threshold/ #ifndef ARDUINOJSON_NEGATIVE_EXPONENTIATION_THRESHOLD # define ARDUINOJSON_NEGATIVE_EXPONENTIATION_THRESHOLD 1e-5 #endif @@ -261,6 +195,10 @@ # define ARDUINOJSON_TAB " " #endif +#ifndef ARDUINOJSON_ENABLE_STRING_DEDUPLICATION +# define ARDUINOJSON_ENABLE_STRING_DEDUPLICATION 1 +#endif + #ifndef ARDUINOJSON_STRING_BUFFER_SIZE # define ARDUINOJSON_STRING_BUFFER_SIZE 32 #endif @@ -273,12 +211,6 @@ # endif #endif -#if ARDUINOJSON_USE_LONG_LONG || ARDUINOJSON_USE_DOUBLE -# define ARDUINOJSON_USE_EXTENSIONS 1 -#else -# define ARDUINOJSON_USE_EXTENSIONS 0 -#endif - #if defined(nullptr) # error nullptr is defined as a macro. Remove the faulty #define or #undef nullptr // See https://github.com/bblanchon/ArduinoJson/issues/1355 diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp index 7ec685f..c498b07 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp index 0d31d2f..b711d71 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp index 4cd5647..6d4e37b 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp @@ -1,24 +1,17 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once -#include -#include +#include ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE namespace DeserializationOption { class Filter { public: -#if ARDUINOJSON_AUTO_SHRINK - explicit Filter(JsonDocument& doc) : variant_(doc) { - doc.shrinkToFit(); - } -#endif - - explicit Filter(JsonVariantConst variant) : variant_(variant) {} + explicit Filter(JsonVariantConst v) : variant_(v) {} bool allow() const { return variant_; diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp index fb46102..11aba7e 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp index b8e896b..bee845a 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -11,7 +11,7 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE -// The default reader is a simple wrapper for Readers that are not copyable +// The default reader is a simple wrapper for Readers that are not copiable template struct Reader { public: @@ -19,7 +19,7 @@ struct Reader { int read() { // clang-format off - return source_->read(); // Error here? See https://arduinojson.org/v7/invalid-input/ + return source_->read(); // Error here? See https://arduinojson.org/v6/invalid-input/ // clang-format on } @@ -62,8 +62,9 @@ ARDUINOJSON_END_PRIVATE_NAMESPACE ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template -Reader> makeReader(TInput&& input) { - return Reader>{detail::forward(input)}; +Reader::type> makeReader(TInput&& input) { + return Reader::type>{ + detail::forward(input)}; } template diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp index afa3696..c0fab0d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -9,12 +9,13 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template -struct Reader::value>> { +struct Reader::value>::type> { public: explicit Reader(Stream& stream) : stream_(&stream) {} int read() { - // don't use stream_->read() as it ignores the timeout + // don't use stream_.read() as it ignores the timeout char c; return stream_->readBytes(&c, 1) ? static_cast(c) : -1; } diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp index da2f173..8483ec9 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -9,7 +9,8 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template -struct Reader::value>> +struct Reader::value>::type> : BoundedReader { explicit Reader(const ::String& s) : BoundedReader(s.c_str(), s.length()) {} diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp index 5b59b0c..80c0da8 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp index 5fc8ba5..f206450 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp @@ -1,11 +1,9 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once -#include - ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template @@ -31,8 +29,13 @@ class IteratorReader { } }; +template +struct void_ { + typedef void type; +}; + template -struct Reader> +struct Reader::type> : IteratorReader { explicit Reader(const TSource& source) : IteratorReader(source.begin(), diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp index b778a24..eedc20d 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -19,7 +19,8 @@ template struct IsCharOrVoid : IsCharOrVoid {}; template -struct Reader::value>> { +struct Reader::value>::type> { const char* ptr_; public: @@ -38,7 +39,8 @@ struct Reader::value>> { }; template -struct BoundedReader::value>> +struct BoundedReader::value>::type> : public IteratorReader { public: explicit BoundedReader(const void* ptr, size_t len) diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp index 5e1233b..1b44745 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -9,7 +9,8 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template -struct Reader::value>> { +struct Reader::value>::type> { public: explicit Reader(std::istream& stream) : stream_(&stream) {} diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp index 23d7260..dcf1230 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -10,7 +10,7 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE template -struct Reader::value>> +struct Reader::value>::type> : Reader { explicit Reader(const TVariant& x) : Reader(x.template as()) {} diff --git a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp index 4c3b229..aa5beeb 100644 --- a/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/.pio/libdeps/esp32-s3-devkitc-1/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp @@ -1,5 +1,5 @@ // ArduinoJson - https://arduinojson.org -// Copyright © 2014-2025, Benoit BLANCHON +// Copyright © 2014-2026, Benoit BLANCHON // MIT License #pragma once @@ -8,6 +8,7 @@ #include #include #include +#include ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE @@ -22,58 +23,44 @@ struct first_or_void { using type = T; }; -// A meta-function that returns true if T is a valid destination type for -// deserialize() -template -using is_deserialize_destination = - bool_constant>::value || - IsVariant::value>; - -template -inline void shrinkJsonDocument(TDestination&) { - // no-op by default +template