Sfoglia il codice sorgente

Allow using PROGMEM outside of Arduino (fixes #1903)

Ported from 40daf56b5a1e4933c7852883c5f7902c3915f7d0
Benoit Blanchon 2 anni fa
parent
commit
461cdaa818

+ 2 - 0
extras/tests/Helpers/Arduino.h

@@ -7,5 +7,7 @@
 #include "api/Print.h"
 #include "api/Stream.h"
 #include "api/String.h"
+#include "avr/pgmspace.h"
 
+#define ARDUINO
 #define ARDUINO_H_INCLUDED 1

+ 2 - 0
extras/tests/Helpers/progmem_emulation.hpp → extras/tests/Helpers/avr/pgmspace.h

@@ -2,6 +2,8 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
+#pragma once
+
 #include <stdint.h>  // uint8_t
 
 #define PROGMEM

+ 0 - 2
extras/tests/JsonDocument/MemberProxy.cpp

@@ -2,8 +2,6 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
-#include "progmem_emulation.hpp"
-
 #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
 #define ARDUINOJSON_ENABLE_PROGMEM 1
 #include <ArduinoJson.h>

+ 0 - 2
extras/tests/JsonDocument/add.cpp

@@ -2,8 +2,6 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
-#include "progmem_emulation.hpp"
-
 #define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
 #define ARDUINOJSON_ENABLE_PROGMEM 1
 #include <ArduinoJson.h>

+ 4 - 5
extras/tests/Misc/StringAdapters.cpp

@@ -2,17 +2,16 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
-#define ARDUINOJSON_ENABLE_PROGMEM 1
-
-#include "custom_string.hpp"
-#include "progmem_emulation.hpp"
-#include "weird_strcmp.hpp"
+#include <Arduino.h>
 
 #include <ArduinoJson/Strings/IsString.hpp>
 #include <ArduinoJson/Strings/StringAdapters.hpp>
 
 #include <catch.hpp>
 
+#include "custom_string.hpp"
+#include "weird_strcmp.hpp"
+
 using namespace ArduinoJson::detail;
 
 TEST_CASE("ZeroTerminatedRamString") {

+ 4 - 1
extras/tests/Misc/StringWriter.cpp

@@ -2,10 +2,13 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
-#define ARDUINOJSON_ENABLE_ARDUINO_STRING 1
+#include <Arduino.h>
+
 #define ARDUINOJSON_STRING_BUFFER_SIZE 5
 #include <ArduinoJson.h>
+
 #include <catch.hpp>
+
 #include "custom_string.hpp"
 
 using namespace ArduinoJson::detail;

+ 0 - 2
extras/tests/MixedConfiguration/enable_progmem_1.cpp

@@ -2,8 +2,6 @@
 // Copyright © 2014-2023, Benoit BLANCHON
 // MIT License
 
-#include "progmem_emulation.hpp"
-
 #define ARDUINOJSON_ENABLE_PROGMEM 1
 #include <ArduinoJson.h>
 

+ 0 - 2
extras/tests/MixedConfiguration/issue1707.cpp

@@ -5,8 +5,6 @@
 #define ARDUINO
 #define memcpy_P(dest, src, n) memcpy((dest), (src), (n))
 
-#include "progmem_emulation.hpp"
-
 #include <ArduinoJson.h>
 
 #include <catch.hpp>

+ 2 - 1
src/ArduinoJson.hpp

@@ -13,7 +13,8 @@
 // Include Arduino.h before stdlib.h to avoid conflict with atexit()
 // https://github.com/bblanchon/ArduinoJson/pull/1693#issuecomment-1001060240
 #if ARDUINOJSON_ENABLE_ARDUINO_STRING || ARDUINOJSON_ENABLE_ARDUINO_STREAM || \
-    ARDUINOJSON_ENABLE_ARDUINO_PRINT || ARDUINOJSON_ENABLE_PROGMEM
+    ARDUINOJSON_ENABLE_ARDUINO_PRINT ||                                       \
+    (ARDUINOJSON_ENABLE_PROGMEM && defined(ARDUINO))
 #  include <Arduino.h>
 #endif
 

+ 1 - 1
src/ArduinoJson/Deserialization/Readers/FlashReader.hpp

@@ -4,7 +4,7 @@
 
 #pragma once
 
-#include <Arduino.h>
+#include <ArduinoJson/Polyfills/pgmspace.hpp>
 
 ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
 

+ 7 - 1
src/ArduinoJson/Polyfills/pgmspace.hpp

@@ -4,7 +4,13 @@
 
 #pragma once
 
-#include <Arduino.h>
+#ifdef ARDUINO
+#  include <Arduino.h>
+#else
+// Allow using PROGMEM outside of Arduino (issue #1903)
+class __FlashStringHelper;
+#  include <avr/pgmspace.h>
+#endif
 
 #include <ArduinoJson/Configuration.hpp>
 #include <ArduinoJson/Namespace.hpp>

+ 0 - 2
src/ArduinoJson/Strings/Adapters/FlashString.hpp

@@ -4,8 +4,6 @@
 
 #pragma once
 
-#include <Arduino.h>
-
 #include <ArduinoJson/Polyfills/pgmspace.hpp>
 #include <ArduinoJson/Strings/StringAdapter.hpp>