mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-06 15:59:52 +03:00
Merge branch 'dev' of https://github.com/emsesp/EMS-ESP32 into dev2
This commit is contained in:
@@ -72,7 +72,7 @@
|
|||||||
"prettier": "^3.2.5",
|
"prettier": "^3.2.5",
|
||||||
"rollup-plugin-visualizer": "^5.12.0",
|
"rollup-plugin-visualizer": "^5.12.0",
|
||||||
"terser": "^5.27.0",
|
"terser": "^5.27.0",
|
||||||
"vite": "^5.1.0",
|
"vite": "^5.1.1",
|
||||||
"vite-plugin-imagemin": "^0.6.1",
|
"vite-plugin-imagemin": "^0.6.1",
|
||||||
"vite-tsconfig-paths": "^4.3.1"
|
"vite-tsconfig-paths": "^4.3.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import { ToastContainer, Slide } from 'react-toastify';
|
|||||||
import 'react-toastify/dist/ReactToastify.min.css';
|
import 'react-toastify/dist/ReactToastify.min.css';
|
||||||
|
|
||||||
import { localStorageDetector } from 'typesafe-i18n/detectors';
|
import { localStorageDetector } from 'typesafe-i18n/detectors';
|
||||||
import { FeaturesLoader } from './contexts/features';
|
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
import AppRouting from 'AppRouting';
|
import AppRouting from 'AppRouting';
|
||||||
import CustomTheme from 'CustomTheme';
|
import CustomTheme from 'CustomTheme';
|
||||||
@@ -27,9 +26,7 @@ const App: FC = () => {
|
|||||||
return (
|
return (
|
||||||
<TypesafeI18n locale={detectedLocale}>
|
<TypesafeI18n locale={detectedLocale}>
|
||||||
<CustomTheme>
|
<CustomTheme>
|
||||||
<FeaturesLoader>
|
|
||||||
<AppRouting />
|
<AppRouting />
|
||||||
</FeaturesLoader>
|
|
||||||
<ToastContainer
|
<ToastContainer
|
||||||
position="bottom-left"
|
position="bottom-left"
|
||||||
autoClose={3000}
|
autoClose={3000}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import { Box, Paper, Typography, MenuItem, TextField, Button } from '@mui/materi
|
|||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import { FeaturesContext } from './contexts/features';
|
|
||||||
import type { ValidateFieldsError } from 'async-validator';
|
import type { ValidateFieldsError } from 'async-validator';
|
||||||
|
|
||||||
import type { Locales } from 'i18n/i18n-types';
|
import type { Locales } from 'i18n/i18n-types';
|
||||||
@@ -35,8 +34,6 @@ const SignIn: FC = () => {
|
|||||||
|
|
||||||
const { LL, setLocale, locale } = useContext(I18nContext);
|
const { LL, setLocale, locale } = useContext(I18nContext);
|
||||||
|
|
||||||
const { features } = useContext(FeaturesContext);
|
|
||||||
|
|
||||||
const [signInRequest, setSignInRequest] = useState<SignInRequest>({
|
const [signInRequest, setSignInRequest] = useState<SignInRequest>({
|
||||||
username: '',
|
username: '',
|
||||||
password: ''
|
password: ''
|
||||||
@@ -112,7 +109,6 @@ const SignIn: FC = () => {
|
|||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<Typography variant="h4">{PROJECT_NAME}</Typography>
|
<Typography variant="h4">{PROJECT_NAME}</Typography>
|
||||||
<Typography variant="subtitle2">{features.version}</Typography>
|
|
||||||
|
|
||||||
<TextField name="locale" variant="outlined" value={locale} onChange={onLocaleSelected} size="small" select>
|
<TextField name="locale" variant="outlined" value={locale} onChange={onLocaleSelected} size="small" select>
|
||||||
<MenuItem key="de" value="de">
|
<MenuItem key="de" value="de">
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
import { alovaInstance } from './endpoints';
|
|
||||||
|
|
||||||
import type { Features } from 'types';
|
|
||||||
|
|
||||||
export const readFeatures = () => alovaInstance.Get<Features>('/rest/features');
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
import { useRequest } from 'alova';
|
|
||||||
|
|
||||||
import { FeaturesContext } from '.';
|
|
||||||
import type { FC } from 'react';
|
|
||||||
|
|
||||||
import type { RequiredChildrenProps } from 'utils';
|
|
||||||
import * as FeaturesApi from 'api/features';
|
|
||||||
|
|
||||||
const FeaturesLoader: FC<RequiredChildrenProps> = (props) => {
|
|
||||||
const { data: features } = useRequest(FeaturesApi.readFeatures);
|
|
||||||
|
|
||||||
if (features) {
|
|
||||||
return (
|
|
||||||
<FeaturesContext.Provider
|
|
||||||
value={{
|
|
||||||
features
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{props.children}
|
|
||||||
</FeaturesContext.Provider>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export default FeaturesLoader;
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
import { createContext } from 'react';
|
|
||||||
|
|
||||||
import type { Features } from 'types';
|
|
||||||
|
|
||||||
export interface FeaturesContextValue {
|
|
||||||
features: Features;
|
|
||||||
}
|
|
||||||
|
|
||||||
const FeaturesContextDefaultValue = {} as FeaturesContextValue;
|
|
||||||
export const FeaturesContext = createContext(FeaturesContextDefaultValue);
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
export * from './context';
|
|
||||||
export { default as FeaturesLoader } from './FeaturesLoader';
|
|
||||||
@@ -29,7 +29,6 @@ import {
|
|||||||
import { useRequest } from 'alova';
|
import { useRequest } from 'alova';
|
||||||
import { useContext, useState } from 'react';
|
import { useContext, useState } from 'react';
|
||||||
import { toast } from 'react-toastify';
|
import { toast } from 'react-toastify';
|
||||||
import { FeaturesContext } from '../../contexts/features';
|
|
||||||
import RestartMonitor from './RestartMonitor';
|
import RestartMonitor from './RestartMonitor';
|
||||||
import SystemStatusVersionDialog from './SystemStatusVersionDialog';
|
import SystemStatusVersionDialog from './SystemStatusVersionDialog';
|
||||||
import type { FC } from 'react';
|
import type { FC } from 'react';
|
||||||
@@ -54,8 +53,6 @@ const SystemStatusForm: FC = () => {
|
|||||||
const [restarting, setRestarting] = useState<boolean>();
|
const [restarting, setRestarting] = useState<boolean>();
|
||||||
const [versionDialogOpen, setVersionDialogOpen] = useState<boolean>(false);
|
const [versionDialogOpen, setVersionDialogOpen] = useState<boolean>(false);
|
||||||
|
|
||||||
const { features } = useContext(FeaturesContext);
|
|
||||||
|
|
||||||
const { send: restartCommand } = useRequest(SystemApi.restart(), {
|
const { send: restartCommand } = useRequest(SystemApi.restart(), {
|
||||||
immediate: false
|
immediate: false
|
||||||
});
|
});
|
||||||
@@ -215,7 +212,7 @@ const SystemStatusForm: FC = () => {
|
|||||||
<DevicesIcon />
|
<DevicesIcon />
|
||||||
</Avatar>
|
</Avatar>
|
||||||
</ListItemAvatar>
|
</ListItemAvatar>
|
||||||
<ListItemText primary="SDK" secondary={data.arduino_version + ' / ESP-IDF v' + data.sdk_version} />
|
<ListItemText primary="SDK" secondary={data.arduino_version + ' / ESP-IDF ' + data.sdk_version} />
|
||||||
</ListItem>
|
</ListItem>
|
||||||
<Divider variant="inset" component="li" />
|
<Divider variant="inset" component="li" />
|
||||||
<ListItem>
|
<ListItem>
|
||||||
@@ -355,7 +352,7 @@ const SystemStatusForm: FC = () => {
|
|||||||
open={versionDialogOpen}
|
open={versionDialogOpen}
|
||||||
onClose={() => setVersionDialogOpen(false)}
|
onClose={() => setVersionDialogOpen(false)}
|
||||||
version={data.emsesp_version}
|
version={data.emsesp_version}
|
||||||
platform={features.platform}
|
platform={data.esp_platform}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</SectionContent>
|
</SectionContent>
|
||||||
|
|||||||
@@ -94,8 +94,14 @@ const DashboardDevices: FC = () => {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const leftOffset = () => {
|
const leftOffset = () => {
|
||||||
const left = document.getElementById('devices-window')?.getBoundingClientRect().left;
|
const devicesWindow = document.getElementById('devices-window');
|
||||||
const right = document.getElementById('devices-window')?.getBoundingClientRect().right;
|
if (!devicesWindow) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const clientRect = devicesWindow.getBoundingClientRect();
|
||||||
|
const left = clientRect.left;
|
||||||
|
const right = clientRect.right;
|
||||||
|
|
||||||
if (!left || !right) {
|
if (!left || !right) {
|
||||||
return 0;
|
return 0;
|
||||||
@@ -416,11 +422,11 @@ const DashboardDevices: FC = () => {
|
|||||||
const renderCoreData = () => (
|
const renderCoreData = () => (
|
||||||
<IconContext.Provider value={{ color: 'lightblue', size: '24', style: { verticalAlign: 'middle' } }}>
|
<IconContext.Provider value={{ color: 'lightblue', size: '24', style: { verticalAlign: 'middle' } }}>
|
||||||
{!coreData.connected && <MessageBox my={2} level="error" message={LL.EMS_BUS_WARNING()} />}
|
{!coreData.connected && <MessageBox my={2} level="error" message={LL.EMS_BUS_WARNING()} />}
|
||||||
{coreData.connected && coreData.devices.length === 0 && (
|
{/* {coreData.connected && coreData.devices.length === 0 && (
|
||||||
<MessageBox my={2} level="warning" message={LL.EMS_BUS_SCANNING()} />
|
<MessageBox my={2} level="warning" message={LL.EMS_BUS_SCANNING()} />
|
||||||
)}
|
)} */}
|
||||||
|
|
||||||
{coreData.devices.length !== 0 && (
|
{coreData.connected && (
|
||||||
<Table data={{ nodes: coreData.devices }} select={device_select} theme={device_theme} layout={{ custom: true }}>
|
<Table data={{ nodes: coreData.devices }} select={device_select} theme={device_theme} layout={{ custom: true }}>
|
||||||
{(tableList: any) => (
|
{(tableList: any) => (
|
||||||
<>
|
<>
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
export * from './ap';
|
export * from './ap';
|
||||||
export * from './features';
|
|
||||||
export * from './me';
|
export * from './me';
|
||||||
export * from './mqtt';
|
export * from './mqtt';
|
||||||
export * from './ntp';
|
export * from './ntp';
|
||||||
|
|||||||
@@ -1895,7 +1895,7 @@ __metadata:
|
|||||||
terser: "npm:^5.27.0"
|
terser: "npm:^5.27.0"
|
||||||
typesafe-i18n: "npm:^5.26.2"
|
typesafe-i18n: "npm:^5.26.2"
|
||||||
typescript: "npm:^5.3.3"
|
typescript: "npm:^5.3.3"
|
||||||
vite: "npm:^5.1.0"
|
vite: "npm:^5.1.1"
|
||||||
vite-plugin-imagemin: "npm:^0.6.1"
|
vite-plugin-imagemin: "npm:^0.6.1"
|
||||||
vite-tsconfig-paths: "npm:^4.3.1"
|
vite-tsconfig-paths: "npm:^4.3.1"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@@ -8793,9 +8793,9 @@ __metadata:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"vite@npm:^5.1.0":
|
"vite@npm:^5.1.1":
|
||||||
version: 5.1.0
|
version: 5.1.1
|
||||||
resolution: "vite@npm:5.1.0"
|
resolution: "vite@npm:5.1.1"
|
||||||
dependencies:
|
dependencies:
|
||||||
esbuild: "npm:^0.19.3"
|
esbuild: "npm:^0.19.3"
|
||||||
fsevents: "npm:~2.3.3"
|
fsevents: "npm:~2.3.3"
|
||||||
@@ -8829,7 +8829,7 @@ __metadata:
|
|||||||
optional: true
|
optional: true
|
||||||
bin:
|
bin:
|
||||||
vite: bin/vite.js
|
vite: bin/vite.js
|
||||||
checksum: 10/14d136f2e71d657cb55bec2a9330951e27e572ed79c4e79e3edc24decfa87f95664b8206614bfcf6a61db933667e554a8eed389291ad8af49de0784548a83a4c
|
checksum: 10/bdb8e683caddaa0a9adcbf40144ca8ea3660836b208862b07d43787ea867845919af16e58745365bd13ed3b7f66bbf9788a6869ee22cfaacac01645b59729c34
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/ArduinoJson.h
Normal file → Executable file
0
lib/ArduinoJson/ArduinoJson.h
Normal file → Executable file
7
lib/ArduinoJson/CHANGELOG.md
Normal file → Executable file
7
lib/ArduinoJson/CHANGELOG.md
Normal file → Executable file
@@ -1,6 +1,13 @@
|
|||||||
ArduinoJson: change log
|
ArduinoJson: change log
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
|
v7.0.3 (2024-02-05)
|
||||||
|
------
|
||||||
|
|
||||||
|
* Improve error messages when using `char` or `char*` (issue #2043)
|
||||||
|
* Reduce stack consumption (issue #2046)
|
||||||
|
* Fix compatibility with GCC 4.8 (issue #2045)
|
||||||
|
|
||||||
v7.0.2 (2024-01-19)
|
v7.0.2 (2024-01-19)
|
||||||
------
|
------
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
# ArduinoJson - https://arduinojson.org
|
|
||||||
# Copyright © 2014-2024, Benoit BLANCHON
|
|
||||||
# MIT License
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.15)
|
|
||||||
|
|
||||||
if(ESP_PLATFORM)
|
|
||||||
# Build ArduinoJson as an ESP-IDF component
|
|
||||||
idf_component_register(INCLUDE_DIRS src)
|
|
||||||
return()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
project(ArduinoJson VERSION 7.0.2)
|
|
||||||
|
|
||||||
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
|
|
||||||
include(CTest)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(src)
|
|
||||||
|
|
||||||
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
|
|
||||||
include(extras/CompileOptions.cmake)
|
|
||||||
add_subdirectory(extras/tests)
|
|
||||||
add_subdirectory(extras/fuzzing)
|
|
||||||
endif()
|
|
||||||
0
lib/ArduinoJson/LICENSE.txt
Normal file → Executable file
0
lib/ArduinoJson/LICENSE.txt
Normal file → Executable file
155
lib/ArduinoJson/README.md
Executable file
155
lib/ArduinoJson/README.md
Executable file
@@ -0,0 +1,155 @@
|
|||||||
|
<p align="center">
|
||||||
|
<a href="https://arduinojson.org/"><img alt="ArduinoJson" src="https://arduinojson.org/images/logo.svg" width="200" /></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
[](https://github.com/bblanchon/ArduinoJson/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A7.x)
|
||||||
|
[](https://ci.appveyor.com/project/bblanchon/arduinojson/branch/7.x)
|
||||||
|
[](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:arduinojson)
|
||||||
|
[](https://coveralls.io/github/bblanchon/ArduinoJson?branch=7.x)
|
||||||
|
[](https://github.com/bblanchon/ArduinoJson/stargazers)
|
||||||
|
[](https://github.com/sponsors/bblanchon)
|
||||||
|
|
||||||
|
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)
|
||||||
|
* 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/)
|
||||||
|
* 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/)
|
||||||
|
* [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 converters](https://arduinojson.org/news/2021/05/04/version-6-18-0/)
|
||||||
|
* Portable
|
||||||
|
* Usable on any C++ project (not limited to Arduino)
|
||||||
|
* Compatible with C++11, C++14 and C++17
|
||||||
|
* Support for C++98/C++03 available on [ArduinoJson 6.20.x](https://github.com/bblanchon/ArduinoJson/tree/6.20.x)
|
||||||
|
* Zero warnings with `-Wall -Wextra -pedantic` and `/W4`
|
||||||
|
* [Header-only library](https://en.wikipedia.org/wiki/Header-only)
|
||||||
|
* Works with virtually any board
|
||||||
|
* Arduino boards: [Uno](https://amzn.to/38aL2ik), [Due](https://amzn.to/36YkWi2), [Micro](https://amzn.to/35WkdwG), [Nano](https://amzn.to/2QTvwRX), [Mega](https://amzn.to/36XWhuf), [Yun](https://amzn.to/30odURc), [Leonardo](https://amzn.to/36XWjlR)...
|
||||||
|
* Espressif chips: [ESP8266](https://amzn.to/36YluV8), [ESP32](https://amzn.to/2G4pRCB)
|
||||||
|
* Lolin (WeMos) boards: [D1 mini](https://amzn.to/2QUpz7q), [D1 Mini Pro](https://amzn.to/36UsGSs)...
|
||||||
|
* Teensy boards: [4.0](https://amzn.to/30ljXGq), [3.2](https://amzn.to/2FT0EuC), [2.0](https://amzn.to/2QXUMXj)
|
||||||
|
* Particle boards: [Argon](https://amzn.to/2FQHa9X), [Boron](https://amzn.to/36WgLUd), [Electron](https://amzn.to/30vEc4k), [Photon](https://amzn.to/387F9Cd)...
|
||||||
|
* Texas Instruments boards: [MSP430](https://amzn.to/30nJWgg)...
|
||||||
|
* Soft cores: [Nios II](https://en.wikipedia.org/wiki/Nios_II)...
|
||||||
|
* Tested on all major development environments
|
||||||
|
* [Arduino IDE](https://www.arduino.cc/en/Main/Software)
|
||||||
|
* [Atmel Studio](http://www.atmel.com/microsite/atmel-studio/)
|
||||||
|
* [Atollic TrueSTUDIO](https://atollic.com/truestudio/)
|
||||||
|
* [Energia](http://energia.nu/)
|
||||||
|
* [IAR Embedded Workbench](https://www.iar.com/iar-embedded-workbench/)
|
||||||
|
* [Keil uVision](http://www.keil.com/)
|
||||||
|
* [MPLAB X IDE](http://www.microchip.com/mplab/mplab-x-ide)
|
||||||
|
* [Particle](https://www.particle.io/)
|
||||||
|
* [PlatformIO](http://platformio.org/)
|
||||||
|
* [Sloeber plugin for Eclipse](https://eclipse.baeyens.it/)
|
||||||
|
* [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/)
|
||||||
|
* Well designed
|
||||||
|
* [Elegant API](http://arduinojson.org/v7/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/)
|
||||||
|
* [TMP friendly](https://en.wikipedia.org/wiki/Template_metaprogramming)
|
||||||
|
* Handles [integer overflows](https://arduinojson.org/v7/api/jsonvariant/as/#integer-overflows)
|
||||||
|
* Well tested
|
||||||
|
* [Unit test coverage close to 100%](https://coveralls.io/github/bblanchon/ArduinoJson?branch=7.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 3.9, 4.0, 5.0, 6.0, 7, 8, 9, 10, 11, 12, 13, 14, 15](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/)
|
||||||
|
* [Book](https://arduinojson.org/book/)
|
||||||
|
* [Changelog](CHANGELOG.md)
|
||||||
|
* Vibrant user community
|
||||||
|
* Most popular of all Arduino libraries on [GitHub](https://github.com/search?o=desc&q=arduino+library&s=stars&type=Repositories)
|
||||||
|
* [Used in hundreds of projects](https://www.hackster.io/search?i=projects&q=arduinojson)
|
||||||
|
* [Responsive support](https://github.com/bblanchon/ArduinoJson/issues?q=is%3Aissue+is%3Aclosed)
|
||||||
|
|
||||||
|
## Quickstart
|
||||||
|
|
||||||
|
### Deserialization
|
||||||
|
|
||||||
|
Here is a program that parses a JSON document with ArduinoJson.
|
||||||
|
|
||||||
|
```c++
|
||||||
|
const char* json = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";
|
||||||
|
|
||||||
|
JsonDocument doc;
|
||||||
|
deserializeJson(doc, json);
|
||||||
|
|
||||||
|
const char* sensor = doc["sensor"];
|
||||||
|
long time = doc["time"];
|
||||||
|
double latitude = doc["data"][0];
|
||||||
|
double longitude = doc["data"][1];
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [tutorial on arduinojson.org](https://arduinojson.org/v7/doc/deserialization/)
|
||||||
|
|
||||||
|
### Serialization
|
||||||
|
|
||||||
|
Here is a program that generates a JSON document with ArduinoJson:
|
||||||
|
|
||||||
|
```c++
|
||||||
|
JsonDocument doc;
|
||||||
|
|
||||||
|
doc["sensor"] = "gps";
|
||||||
|
doc["time"] = 1351824120;
|
||||||
|
doc["data"][0] = 48.756080;
|
||||||
|
doc["data"][1] = 2.302038;
|
||||||
|
|
||||||
|
serializeJson(doc, Serial);
|
||||||
|
// This prints:
|
||||||
|
// {"sensor":"gps","time":1351824120,"data":[48.756080,2.302038]}
|
||||||
|
```
|
||||||
|
|
||||||
|
See the [tutorial on arduinojson.org](https://arduinojson.org/v7/doc/serialization/)
|
||||||
|
|
||||||
|
## Sponsors
|
||||||
|
|
||||||
|
ArduinoJson is thankful to its sponsors. Please give them a visit; they deserve it!
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="https://www.programmingelectronics.com/" rel="sponsored">
|
||||||
|
<img src="https://arduinojson.org/images/2021/10/programmingeleactronicsacademy.png" alt="Programming Electronics Academy" width="200">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="https://github.com/1technophile" rel="sponsored">
|
||||||
|
<img alt="1technophile" src="https://avatars.githubusercontent.com/u/12672732?s=40&v=4">
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
If you are an individual user and want to support the development (or give a sign of appreciation), consider purchasing the book [Mastering ArduinoJson](https://arduinojson.org/book/) ❤, or simply [cast a star](https://github.com/bblanchon/ArduinoJson/stargazers) ⭐.
|
||||||
27
lib/ArduinoJson/SUPPORT.md
Executable file
27
lib/ArduinoJson/SUPPORT.md
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
# ArduinoJson Support
|
||||||
|
|
||||||
|
First off, thank you very much for using ArduinoJson.
|
||||||
|
|
||||||
|
We'll be very happy to help you, but first please read the following.
|
||||||
|
|
||||||
|
## Before asking for help
|
||||||
|
|
||||||
|
1. Read the [FAQ](https://arduinojson.org/faq/?utm_source=github&utm_medium=support)
|
||||||
|
2. Search in the [API Reference](https://arduinojson.org/api/?utm_source=github&utm_medium=support)
|
||||||
|
|
||||||
|
If you did not find the answer, please create a [new issue on GitHub](https://github.com/bblanchon/ArduinoJson/issues/new).
|
||||||
|
|
||||||
|
It is OK to add a comment to a currently opened issue, but please avoid adding comments to a closed issue.
|
||||||
|
|
||||||
|
## Before hitting the Submit button
|
||||||
|
|
||||||
|
Please provide all the relevant information:
|
||||||
|
|
||||||
|
* Good title
|
||||||
|
* Short description of the problem
|
||||||
|
* Target platform
|
||||||
|
* Compiler model and version
|
||||||
|
* [MVCE](https://stackoverflow.com/help/mcve)
|
||||||
|
* Compiler output
|
||||||
|
|
||||||
|
Good questions get fast answers!
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
version: "7.0.2"
|
|
||||||
description: >-
|
|
||||||
A simple and efficient JSON library for embedded C++.
|
|
||||||
⭐ 6444 stars on GitHub!
|
|
||||||
Supports serialization, deserialization, MessagePack, streams, filtering, and more.
|
|
||||||
Fully tested and documented.
|
|
||||||
url: https://arduinojson.org/
|
|
||||||
files:
|
|
||||||
exclude:
|
|
||||||
- "**/.vs/**/*"
|
|
||||||
- ".devcontainer/**/*"
|
|
||||||
- "examples/**/*"
|
|
||||||
- "extras/**/*"
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ArduinoJson",
|
|
||||||
"keywords": "json, rest, http, web",
|
|
||||||
"description": "A simple and efficient JSON library for embedded C++. ⭐ 6444 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.",
|
|
||||||
"homepage": "https://arduinojson.org/?utm_source=meta&utm_medium=library.json",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/bblanchon/ArduinoJson.git"
|
|
||||||
},
|
|
||||||
"version": "7.0.2",
|
|
||||||
"authors": {
|
|
||||||
"name": "Benoit Blanchon",
|
|
||||||
"url": "https://blog.benoitblanchon.fr"
|
|
||||||
},
|
|
||||||
"export": {
|
|
||||||
"include": ["src", "examples", "LICENSE.txt", "ArduinoJson.h"]
|
|
||||||
},
|
|
||||||
"frameworks": "*",
|
|
||||||
"platforms": "*",
|
|
||||||
"build": {
|
|
||||||
"libArchive": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
name=ArduinoJson
|
|
||||||
version=7.0.2
|
|
||||||
author=Benoit Blanchon <blog.benoitblanchon.fr>
|
|
||||||
maintainer=Benoit Blanchon <blog.benoitblanchon.fr>
|
|
||||||
sentence=A simple and efficient JSON library for embedded C++.
|
|
||||||
paragraph=⭐ 6444 stars on GitHub! Supports serialization, deserialization, MessagePack, streams, filtering, and more. Fully tested and documented.
|
|
||||||
category=Data Processing
|
|
||||||
url=https://arduinojson.org/?utm_source=meta&utm_medium=library.properties
|
|
||||||
architectures=*
|
|
||||||
repository=https://github.com/bblanchon/ArduinoJson.git
|
|
||||||
license=MIT
|
|
||||||
0
lib/ArduinoJson/src/ArduinoJson.h
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson.h
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/ArrayData.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/ArrayImpl.hpp
Normal file → Executable file
10
lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp
Normal file → Executable file
10
lib/ArduinoJson/src/ArduinoJson/Array/ElementProxy.hpp
Normal file → Executable file
@@ -22,25 +22,25 @@ class ElementProxy : public VariantRefBase<ElementProxy<TUpstream>>,
|
|||||||
ElementProxy(const ElementProxy& src)
|
ElementProxy(const ElementProxy& src)
|
||||||
: upstream_(src.upstream_), index_(src.index_) {}
|
: upstream_(src.upstream_), index_(src.index_) {}
|
||||||
|
|
||||||
FORCE_INLINE ElementProxy& operator=(const ElementProxy& src) {
|
ElementProxy& operator=(const ElementProxy& src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE ElementProxy& operator=(const T& src) {
|
ElementProxy& operator=(const T& src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE ElementProxy& operator=(T* src) {
|
ElementProxy& operator=(T* src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FORCE_INLINE ResourceManager* getResourceManager() const {
|
ResourceManager* getResourceManager() const {
|
||||||
return VariantAttorney::getResourceManager(upstream_);
|
return VariantAttorney::getResourceManager(upstream_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ class ElementProxy : public VariantRefBase<ElementProxy<TUpstream>>,
|
|||||||
VariantAttorney::getResourceManager(upstream_));
|
VariantAttorney::getResourceManager(upstream_));
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE VariantData* getOrCreateData() const {
|
VariantData* getOrCreateData() const {
|
||||||
auto data = VariantAttorney::getOrCreateData(upstream_);
|
auto data = VariantAttorney::getOrCreateData(upstream_);
|
||||||
if (!data)
|
if (!data)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
29
lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp
Normal file → Executable file
29
lib/ArduinoJson/src/ArduinoJson/Array/JsonArray.hpp
Normal file → Executable file
@@ -20,11 +20,10 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
typedef JsonArrayIterator iterator;
|
typedef JsonArrayIterator iterator;
|
||||||
|
|
||||||
// Constructs an unbound reference.
|
// Constructs an unbound reference.
|
||||||
FORCE_INLINE JsonArray() : data_(0), resources_(0) {}
|
JsonArray() : data_(0), resources_(0) {}
|
||||||
|
|
||||||
// INTERNAL USE ONLY
|
// INTERNAL USE ONLY
|
||||||
FORCE_INLINE JsonArray(detail::ArrayData* data,
|
JsonArray(detail::ArrayData* data, detail::ResourceManager* resources)
|
||||||
detail::ResourceManager* resources)
|
|
||||||
: data_(data), resources_(resources) {}
|
: data_(data), resources_(resources) {}
|
||||||
|
|
||||||
// Returns a JsonVariant pointing to the array.
|
// Returns a JsonVariant pointing to the array.
|
||||||
@@ -63,20 +62,20 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
// Appends a value to the array.
|
// Appends a value to the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/add/
|
// https://arduinojson.org/v7/api/jsonarray/add/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE bool add(const T& value) const {
|
bool add(const T& value) const {
|
||||||
return add<JsonVariant>().set(value);
|
return add<JsonVariant>().set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Appends a value to the array.
|
// Appends a value to the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/add/
|
// https://arduinojson.org/v7/api/jsonarray/add/
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE bool add(T* value) const {
|
bool add(T* value) const {
|
||||||
return add<JsonVariant>().set(value);
|
return add<JsonVariant>().set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns an iterator to the first element of the array.
|
// Returns an iterator to the first element of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/begin/
|
// https://arduinojson.org/v7/api/jsonarray/begin/
|
||||||
FORCE_INLINE iterator begin() const {
|
iterator begin() const {
|
||||||
if (!data_)
|
if (!data_)
|
||||||
return iterator();
|
return iterator();
|
||||||
return iterator(data_->createIterator(resources_), resources_);
|
return iterator(data_->createIterator(resources_), resources_);
|
||||||
@@ -84,13 +83,13 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
|
|
||||||
// Returns an iterator following the last element of the array.
|
// Returns an iterator following the last element of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/end/
|
// https://arduinojson.org/v7/api/jsonarray/end/
|
||||||
FORCE_INLINE iterator end() const {
|
iterator end() const {
|
||||||
return iterator();
|
return iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copies an array.
|
// Copies an array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/set/
|
// https://arduinojson.org/v7/api/jsonarray/set/
|
||||||
FORCE_INLINE bool set(JsonArrayConst src) const {
|
bool set(JsonArrayConst src) const {
|
||||||
if (!data_)
|
if (!data_)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -105,13 +104,13 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
|
|
||||||
// Removes the element at the specified iterator.
|
// Removes the element at the specified iterator.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/remove/
|
// https://arduinojson.org/v7/api/jsonarray/remove/
|
||||||
FORCE_INLINE void remove(iterator it) const {
|
void remove(iterator it) const {
|
||||||
detail::ArrayData::remove(data_, it.iterator_, resources_);
|
detail::ArrayData::remove(data_, it.iterator_, resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removes the element at the specified index.
|
// Removes the element at the specified index.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/remove/
|
// https://arduinojson.org/v7/api/jsonarray/remove/
|
||||||
FORCE_INLINE void remove(size_t index) const {
|
void remove(size_t index) const {
|
||||||
detail::ArrayData::removeElement(data_, index, resources_);
|
detail::ArrayData::removeElement(data_, index, resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,7 +122,7 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
|
|
||||||
// Gets or sets the element at the specified index.
|
// Gets or sets the element at the specified index.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/subscript/
|
// https://arduinojson.org/v7/api/jsonarray/subscript/
|
||||||
FORCE_INLINE detail::ElementProxy<JsonArray> operator[](size_t index) const {
|
detail::ElementProxy<JsonArray> operator[](size_t index) const {
|
||||||
return {*this, index};
|
return {*this, index};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -133,25 +132,25 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
|
|||||||
|
|
||||||
// Returns true if the reference is unbound.
|
// Returns true if the reference is unbound.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/isnull/
|
// https://arduinojson.org/v7/api/jsonarray/isnull/
|
||||||
FORCE_INLINE bool isNull() const {
|
bool isNull() const {
|
||||||
return data_ == 0;
|
return data_ == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the reference is bound.
|
// Returns true if the reference is bound.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/isnull/
|
// https://arduinojson.org/v7/api/jsonarray/isnull/
|
||||||
FORCE_INLINE operator bool() const {
|
operator bool() const {
|
||||||
return data_ != 0;
|
return data_ != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the depth (nesting level) of the array.
|
// Returns the depth (nesting level) of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/nesting/
|
// https://arduinojson.org/v7/api/jsonarray/nesting/
|
||||||
FORCE_INLINE size_t nesting() const {
|
size_t nesting() const {
|
||||||
return detail::VariantData::nesting(collectionToVariant(data_), resources_);
|
return detail::VariantData::nesting(collectionToVariant(data_), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of elements in the array.
|
// Returns the number of elements in the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarray/size/
|
// https://arduinojson.org/v7/api/jsonarray/size/
|
||||||
FORCE_INLINE size_t size() const {
|
size_t size() const {
|
||||||
return data_ ? data_->size(resources_) : 0;
|
return data_ ? data_->size(resources_) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
18
lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp
Normal file → Executable file
18
lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayConst.hpp
Normal file → Executable file
@@ -23,7 +23,7 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
|
|
||||||
// Returns an iterator to the first element of the array.
|
// Returns an iterator to the first element of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/begin/
|
// https://arduinojson.org/v7/api/jsonarrayconst/begin/
|
||||||
FORCE_INLINE iterator begin() const {
|
iterator begin() const {
|
||||||
if (!data_)
|
if (!data_)
|
||||||
return iterator();
|
return iterator();
|
||||||
return iterator(data_->createIterator(resources_), resources_);
|
return iterator(data_->createIterator(resources_), resources_);
|
||||||
@@ -31,21 +31,21 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
|
|
||||||
// Returns an iterator to the element following the last element of the array.
|
// Returns an iterator to the element following the last element of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/end/
|
// https://arduinojson.org/v7/api/jsonarrayconst/end/
|
||||||
FORCE_INLINE iterator end() const {
|
iterator end() const {
|
||||||
return iterator();
|
return iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Creates an unbound reference.
|
// Creates an unbound reference.
|
||||||
FORCE_INLINE JsonArrayConst() : data_(0) {}
|
JsonArrayConst() : data_(0) {}
|
||||||
|
|
||||||
// INTERNAL USE ONLY
|
// INTERNAL USE ONLY
|
||||||
FORCE_INLINE JsonArrayConst(const detail::ArrayData* data,
|
JsonArrayConst(const detail::ArrayData* data,
|
||||||
const detail::ResourceManager* resources)
|
const detail::ResourceManager* resources)
|
||||||
: data_(data), resources_(resources) {}
|
: data_(data), resources_(resources) {}
|
||||||
|
|
||||||
// Returns the element at the specified index.
|
// Returns the element at the specified index.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/subscript/
|
// https://arduinojson.org/v7/api/jsonarrayconst/subscript/
|
||||||
FORCE_INLINE JsonVariantConst operator[](size_t index) const {
|
JsonVariantConst operator[](size_t index) const {
|
||||||
return JsonVariantConst(
|
return JsonVariantConst(
|
||||||
detail::ArrayData::getElement(data_, index, resources_), resources_);
|
detail::ArrayData::getElement(data_, index, resources_), resources_);
|
||||||
}
|
}
|
||||||
@@ -56,25 +56,25 @@ class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
|
|||||||
|
|
||||||
// Returns true if the reference is unbound.
|
// Returns true if the reference is unbound.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
||||||
FORCE_INLINE bool isNull() const {
|
bool isNull() const {
|
||||||
return data_ == 0;
|
return data_ == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the reference is bound.
|
// Returns true if the reference is bound.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
// https://arduinojson.org/v7/api/jsonarrayconst/isnull/
|
||||||
FORCE_INLINE operator bool() const {
|
operator bool() const {
|
||||||
return data_ != 0;
|
return data_ != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the depth (nesting level) of the array.
|
// Returns the depth (nesting level) of the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/nesting/
|
// https://arduinojson.org/v7/api/jsonarrayconst/nesting/
|
||||||
FORCE_INLINE size_t nesting() const {
|
size_t nesting() const {
|
||||||
return detail::VariantData::nesting(getData(), resources_);
|
return detail::VariantData::nesting(getData(), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of elements in the array.
|
// Returns the number of elements in the array.
|
||||||
// https://arduinojson.org/v7/api/jsonarrayconst/size/
|
// https://arduinojson.org/v7/api/jsonarrayconst/size/
|
||||||
FORCE_INLINE size_t size() const {
|
size_t size() const {
|
||||||
return data_ ? data_->size(resources_) : 0;
|
return data_ ? data_->size(resources_) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/JsonArrayIterator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Array/Utilities.hpp
Normal file → Executable file
4
lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp
Normal file → Executable file
4
lib/ArduinoJson/src/ArduinoJson/Collection/CollectionData.hpp
Normal file → Executable file
@@ -107,6 +107,10 @@ class CollectionData {
|
|||||||
return collection->remove(it, resources);
|
return collection->remove(it, resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SlotId head() const {
|
||||||
|
return head_;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
iterator addSlot(ResourceManager*);
|
iterator addSlot(ResourceManager*);
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Collection/CollectionImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Configuration.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Configuration.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationError.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/DeserializationOptions.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Filter.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/NestingLimit.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Reader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStreamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/ArduinoStringReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/FlashReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/IteratorReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/RamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/StdStreamReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/Readers/VariantReader.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Deserialization/deserialize.hpp
Normal file → Executable file
37
lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp
Normal file → Executable file
37
lib/ArduinoJson/src/ArduinoJson/Document/JsonDocument.hpp
Normal file → Executable file
@@ -30,7 +30,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Move-constructor
|
// Move-constructor
|
||||||
JsonDocument(JsonDocument&& src) : JsonDocument() {
|
JsonDocument(JsonDocument&& src)
|
||||||
|
: JsonDocument(detail::DefaultAllocator::instance()) {
|
||||||
swap(*this, src);
|
swap(*this, src);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,8 +170,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Gets or sets a root object's member.
|
// Gets or sets a root object's member.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE typename detail::enable_if<
|
typename detail::enable_if<detail::IsString<TString>::value,
|
||||||
detail::IsString<TString>::value,
|
|
||||||
detail::MemberProxy<JsonDocument&, TString>>::type
|
detail::MemberProxy<JsonDocument&, TString>>::type
|
||||||
operator[](const TString& key) {
|
operator[](const TString& key) {
|
||||||
return {*this, key};
|
return {*this, key};
|
||||||
@@ -179,8 +179,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Gets or sets a root object's member.
|
// Gets or sets a root object's member.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE typename detail::enable_if<
|
typename detail::enable_if<detail::IsString<TChar*>::value,
|
||||||
detail::IsString<TChar*>::value,
|
|
||||||
detail::MemberProxy<JsonDocument&, TChar*>>::type
|
detail::MemberProxy<JsonDocument&, TChar*>>::type
|
||||||
operator[](TChar* key) {
|
operator[](TChar* key) {
|
||||||
return {*this, key};
|
return {*this, key};
|
||||||
@@ -189,7 +188,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Gets a root object's member.
|
// Gets a root object's member.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
|
typename detail::enable_if<detail::IsString<TString>::value,
|
||||||
JsonVariantConst>::type
|
JsonVariantConst>::type
|
||||||
operator[](const TString& key) const {
|
operator[](const TString& key) const {
|
||||||
return JsonVariantConst(
|
return JsonVariantConst(
|
||||||
@@ -199,7 +198,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Gets a root object's member.
|
// Gets a root object's member.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
|
typename detail::enable_if<detail::IsString<TChar*>::value,
|
||||||
JsonVariantConst>::type
|
JsonVariantConst>::type
|
||||||
operator[](TChar* key) const {
|
operator[](TChar* key) const {
|
||||||
return JsonVariantConst(
|
return JsonVariantConst(
|
||||||
@@ -208,13 +207,13 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
|
|
||||||
// Gets or sets a root array's element.
|
// Gets or sets a root array's element.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
FORCE_INLINE detail::ElementProxy<JsonDocument&> operator[](size_t index) {
|
detail::ElementProxy<JsonDocument&> operator[](size_t index) {
|
||||||
return {*this, index};
|
return {*this, index};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets a root array's member.
|
// Gets a root array's member.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
// https://arduinojson.org/v7/api/jsondocument/subscript/
|
||||||
FORCE_INLINE JsonVariantConst operator[](size_t index) const {
|
JsonVariantConst operator[](size_t index) const {
|
||||||
return JsonVariantConst(data_.getElement(index, &resources_), &resources_);
|
return JsonVariantConst(data_.getElement(index, &resources_), &resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -239,28 +238,28 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Appends a value to the root array.
|
// Appends a value to the root array.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/add/
|
// https://arduinojson.org/v7/api/jsondocument/add/
|
||||||
template <typename TValue>
|
template <typename TValue>
|
||||||
FORCE_INLINE bool add(const TValue& value) {
|
bool add(const TValue& value) {
|
||||||
return add<JsonVariant>().set(value);
|
return add<JsonVariant>().set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Appends a value to the root array.
|
// Appends a value to the root array.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/add/
|
// https://arduinojson.org/v7/api/jsondocument/add/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE bool add(TChar* value) {
|
bool add(TChar* value) {
|
||||||
return add<JsonVariant>().set(value);
|
return add<JsonVariant>().set(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removes an element of the root array.
|
// Removes an element of the root array.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/remove/
|
// https://arduinojson.org/v7/api/jsondocument/remove/
|
||||||
FORCE_INLINE void remove(size_t index) {
|
void remove(size_t index) {
|
||||||
detail::VariantData::removeElement(getData(), index, getResourceManager());
|
detail::VariantData::removeElement(getData(), index, getResourceManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Removes a member of the root object.
|
// Removes a member of the root object.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/remove/
|
// https://arduinojson.org/v7/api/jsondocument/remove/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value>::type
|
typename detail::enable_if<detail::IsString<TChar*>::value>::type remove(
|
||||||
remove(TChar* key) {
|
TChar* key) {
|
||||||
detail::VariantData::removeMember(getData(), detail::adaptString(key),
|
detail::VariantData::removeMember(getData(), detail::adaptString(key),
|
||||||
getResourceManager());
|
getResourceManager());
|
||||||
}
|
}
|
||||||
@@ -268,18 +267,18 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
|
|||||||
// Removes a member of the root object.
|
// Removes a member of the root object.
|
||||||
// https://arduinojson.org/v7/api/jsondocument/remove/
|
// https://arduinojson.org/v7/api/jsondocument/remove/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE
|
|
||||||
typename detail::enable_if<detail::IsString<TString>::value>::type
|
typename detail::enable_if<detail::IsString<TString>::value>::type remove(
|
||||||
remove(const TString& key) {
|
const TString& key) {
|
||||||
detail::VariantData::removeMember(getData(), detail::adaptString(key),
|
detail::VariantData::removeMember(getData(), detail::adaptString(key),
|
||||||
getResourceManager());
|
getResourceManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE operator JsonVariant() {
|
operator JsonVariant() {
|
||||||
return getVariant();
|
return getVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE operator JsonVariantConst() const {
|
operator JsonVariantConst() const {
|
||||||
return getVariant();
|
return getVariant();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/EscapeSequence.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/JsonDeserializer.hpp
Normal file → Executable file
30
lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp
Normal file → Executable file
30
lib/ArduinoJson/src/ArduinoJson/Json/JsonSerializer.hpp
Normal file → Executable file
@@ -19,18 +19,19 @@ class JsonSerializer : public VariantDataVisitor<size_t> {
|
|||||||
JsonSerializer(TWriter writer, const ResourceManager* resources)
|
JsonSerializer(TWriter writer, const ResourceManager* resources)
|
||||||
: formatter_(writer), resources_(resources) {}
|
: formatter_(writer), resources_(resources) {}
|
||||||
|
|
||||||
FORCE_INLINE size_t visit(const ArrayData& array) {
|
size_t visit(const ArrayData& array) {
|
||||||
write('[');
|
write('[');
|
||||||
|
|
||||||
auto it = array.createIterator(resources_);
|
auto slotId = array.head();
|
||||||
|
|
||||||
while (!it.done()) {
|
while (slotId != NULL_SLOT) {
|
||||||
it->accept(*this);
|
auto slot = resources_->getSlot(slotId);
|
||||||
|
|
||||||
it.next(resources_);
|
slot->data()->accept(*this);
|
||||||
if (it.done())
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
slotId = slot->next();
|
||||||
|
|
||||||
|
if (slotId != NULL_SLOT)
|
||||||
write(',');
|
write(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,17 +42,18 @@ class JsonSerializer : public VariantDataVisitor<size_t> {
|
|||||||
size_t visit(const ObjectData& object) {
|
size_t visit(const ObjectData& object) {
|
||||||
write('{');
|
write('{');
|
||||||
|
|
||||||
auto it = object.createIterator(resources_);
|
auto slotId = object.head();
|
||||||
|
|
||||||
while (!it.done()) {
|
while (slotId != NULL_SLOT) {
|
||||||
formatter_.writeString(it.key());
|
auto slot = resources_->getSlot(slotId);
|
||||||
|
|
||||||
|
formatter_.writeString(slot->key());
|
||||||
write(':');
|
write(':');
|
||||||
it->accept(*this);
|
slot->data()->accept(*this);
|
||||||
|
|
||||||
it.next(resources_);
|
slotId = slot->next();
|
||||||
if (it.done())
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
if (slotId != NULL_SLOT)
|
||||||
write(',');
|
write(',');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/Latch.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/PrettyJsonSerializer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/TextFormatter.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/Utf16.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Json/Utf8.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/Alignment.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/Allocator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/ResourceManager.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringBuilder.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringNode.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/StringPool.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPool.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPool.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPoolImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPoolImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPoolList.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Memory/VariantPoolList.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Misc/SerializedValue.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp
Normal file → Executable file
22
lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp
Normal file → Executable file
22
lib/ArduinoJson/src/ArduinoJson/MsgPack/MsgPackSerializer.hpp
Normal file → Executable file
@@ -59,10 +59,14 @@ class MsgPackSerializer : public VariantDataVisitor<size_t> {
|
|||||||
writeByte(0xDD);
|
writeByte(0xDD);
|
||||||
writeInteger(uint32_t(n));
|
writeInteger(uint32_t(n));
|
||||||
}
|
}
|
||||||
for (auto it = array.createIterator(resources_); !it.done();
|
|
||||||
it.next(resources_)) {
|
auto slotId = array.head();
|
||||||
it->accept(*this);
|
while (slotId != NULL_SLOT) {
|
||||||
|
auto slot = resources_->getSlot(slotId);
|
||||||
|
slot->data()->accept(*this);
|
||||||
|
slotId = slot->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,11 +81,15 @@ class MsgPackSerializer : public VariantDataVisitor<size_t> {
|
|||||||
writeByte(0xDF);
|
writeByte(0xDF);
|
||||||
writeInteger(uint32_t(n));
|
writeInteger(uint32_t(n));
|
||||||
}
|
}
|
||||||
for (auto it = object.createIterator(resources_); !it.done();
|
|
||||||
it.next(resources_)) {
|
auto slotId = object.head();
|
||||||
visit(it.key());
|
while (slotId != NULL_SLOT) {
|
||||||
it->accept(*this);
|
auto slot = resources_->getSlot(slotId);
|
||||||
|
visit(slot->key());
|
||||||
|
slot->data()->accept(*this);
|
||||||
|
slotId = slot->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytesWritten();
|
return bytesWritten();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/endianess.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/endianess.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/MsgPack/ieee754.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Namespace.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Namespace.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/FloatParts.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/FloatTraits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/JsonFloat.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/JsonInteger.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/arithmeticCompare.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/convertNumber.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Numbers/parseNumber.hpp
Normal file → Executable file
27
lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp
Normal file → Executable file
27
lib/ArduinoJson/src/ArduinoJson/Object/JsonObject.hpp
Normal file → Executable file
@@ -20,11 +20,10 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
typedef JsonObjectIterator iterator;
|
typedef JsonObjectIterator iterator;
|
||||||
|
|
||||||
// Creates an unbound reference.
|
// Creates an unbound reference.
|
||||||
FORCE_INLINE JsonObject() : data_(0), resources_(0) {}
|
JsonObject() : data_(0), resources_(0) {}
|
||||||
|
|
||||||
// INTERNAL USE ONLY
|
// INTERNAL USE ONLY
|
||||||
FORCE_INLINE JsonObject(detail::ObjectData* data,
|
JsonObject(detail::ObjectData* data, detail::ResourceManager* resource)
|
||||||
detail::ResourceManager* resource)
|
|
||||||
: data_(data), resources_(resource) {}
|
: data_(data), resources_(resource) {}
|
||||||
|
|
||||||
operator JsonVariant() const {
|
operator JsonVariant() const {
|
||||||
@@ -43,31 +42,31 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
|
|
||||||
// Returns true if the reference is unbound.
|
// Returns true if the reference is unbound.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/isnull/
|
// https://arduinojson.org/v7/api/jsonobject/isnull/
|
||||||
FORCE_INLINE bool isNull() const {
|
bool isNull() const {
|
||||||
return data_ == 0;
|
return data_ == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the reference is bound.
|
// Returns true if the reference is bound.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/isnull/
|
// https://arduinojson.org/v7/api/jsonobject/isnull/
|
||||||
FORCE_INLINE operator bool() const {
|
operator bool() const {
|
||||||
return data_ != 0;
|
return data_ != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the depth (nesting level) of the object.
|
// Returns the depth (nesting level) of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/nesting/
|
// https://arduinojson.org/v7/api/jsonobject/nesting/
|
||||||
FORCE_INLINE size_t nesting() const {
|
size_t nesting() const {
|
||||||
return detail::VariantData::nesting(collectionToVariant(data_), resources_);
|
return detail::VariantData::nesting(collectionToVariant(data_), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of members in the object.
|
// Returns the number of members in the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/size/
|
// https://arduinojson.org/v7/api/jsonobject/size/
|
||||||
FORCE_INLINE size_t size() const {
|
size_t size() const {
|
||||||
return data_ ? data_->size(resources_) : 0;
|
return data_ ? data_->size(resources_) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns an iterator to the first key-value pair of the object.
|
// Returns an iterator to the first key-value pair of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/begin/
|
// https://arduinojson.org/v7/api/jsonobject/begin/
|
||||||
FORCE_INLINE iterator begin() const {
|
iterator begin() const {
|
||||||
if (!data_)
|
if (!data_)
|
||||||
return iterator();
|
return iterator();
|
||||||
return iterator(data_->createIterator(resources_), resources_);
|
return iterator(data_->createIterator(resources_), resources_);
|
||||||
@@ -75,7 +74,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
|
|
||||||
// Returns an iterator following the last key-value pair of the object.
|
// Returns an iterator following the last key-value pair of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/end/
|
// https://arduinojson.org/v7/api/jsonobject/end/
|
||||||
FORCE_INLINE iterator end() const {
|
iterator end() const {
|
||||||
return iterator();
|
return iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -87,7 +86,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
|
|
||||||
// Copies an object.
|
// Copies an object.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/set/
|
// https://arduinojson.org/v7/api/jsonobject/set/
|
||||||
FORCE_INLINE bool set(JsonObjectConst src) {
|
bool set(JsonObjectConst src) {
|
||||||
if (!data_ || !src.data_)
|
if (!data_ || !src.data_)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -103,7 +102,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
// Gets or sets the member with specified key.
|
// Gets or sets the member with specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/subscript/
|
// https://arduinojson.org/v7/api/jsonobject/subscript/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE
|
|
||||||
typename detail::enable_if<detail::IsString<TString>::value,
|
typename detail::enable_if<detail::IsString<TString>::value,
|
||||||
detail::MemberProxy<JsonObject, TString>>::type
|
detail::MemberProxy<JsonObject, TString>>::type
|
||||||
operator[](const TString& key) const {
|
operator[](const TString& key) const {
|
||||||
@@ -113,7 +112,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
// Gets or sets the member with specified key.
|
// Gets or sets the member with specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/subscript/
|
// https://arduinojson.org/v7/api/jsonobject/subscript/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE
|
|
||||||
typename detail::enable_if<detail::IsString<TChar*>::value,
|
typename detail::enable_if<detail::IsString<TChar*>::value,
|
||||||
detail::MemberProxy<JsonObject, TChar*>>::type
|
detail::MemberProxy<JsonObject, TChar*>>::type
|
||||||
operator[](TChar* key) const {
|
operator[](TChar* key) const {
|
||||||
@@ -145,7 +144,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
// Returns true if the object contains the specified key.
|
// Returns true if the object contains the specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/containskey/
|
// https://arduinojson.org/v7/api/jsonobject/containskey/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE
|
|
||||||
typename detail::enable_if<detail::IsString<TString>::value, bool>::type
|
typename detail::enable_if<detail::IsString<TString>::value, bool>::type
|
||||||
containsKey(const TString& key) const {
|
containsKey(const TString& key) const {
|
||||||
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
||||||
@@ -155,7 +154,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
|
|||||||
// Returns true if the object contains the specified key.
|
// Returns true if the object contains the specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobject/containskey/
|
// https://arduinojson.org/v7/api/jsonobject/containskey/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE
|
|
||||||
typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
|
typename detail::enable_if<detail::IsString<TChar*>::value, bool>::type
|
||||||
containsKey(TChar* key) const {
|
containsKey(TChar* key) const {
|
||||||
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
||||||
|
|||||||
20
lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp
Normal file → Executable file
20
lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectConst.hpp
Normal file → Executable file
@@ -32,31 +32,31 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
|
|||||||
|
|
||||||
// Returns true if the reference is unbound.
|
// Returns true if the reference is unbound.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/isnull/
|
// https://arduinojson.org/v7/api/jsonobjectconst/isnull/
|
||||||
FORCE_INLINE bool isNull() const {
|
bool isNull() const {
|
||||||
return data_ == 0;
|
return data_ == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the reference is bound.
|
// Returns true if the reference is bound.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/isnull/
|
// https://arduinojson.org/v7/api/jsonobjectconst/isnull/
|
||||||
FORCE_INLINE operator bool() const {
|
operator bool() const {
|
||||||
return data_ != 0;
|
return data_ != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the depth (nesting level) of the object.
|
// Returns the depth (nesting level) of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/nesting/
|
// https://arduinojson.org/v7/api/jsonobjectconst/nesting/
|
||||||
FORCE_INLINE size_t nesting() const {
|
size_t nesting() const {
|
||||||
return detail::VariantData::nesting(getData(), resources_);
|
return detail::VariantData::nesting(getData(), resources_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the number of members in the object.
|
// Returns the number of members in the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/size/
|
// https://arduinojson.org/v7/api/jsonobjectconst/size/
|
||||||
FORCE_INLINE size_t size() const {
|
size_t size() const {
|
||||||
return data_ ? data_->size(resources_) : 0;
|
return data_ ? data_->size(resources_) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns an iterator to the first key-value pair of the object.
|
// Returns an iterator to the first key-value pair of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/begin/
|
// https://arduinojson.org/v7/api/jsonobjectconst/begin/
|
||||||
FORCE_INLINE iterator begin() const {
|
iterator begin() const {
|
||||||
if (!data_)
|
if (!data_)
|
||||||
return iterator();
|
return iterator();
|
||||||
return iterator(data_->createIterator(resources_), resources_);
|
return iterator(data_->createIterator(resources_), resources_);
|
||||||
@@ -64,14 +64,14 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
|
|||||||
|
|
||||||
// Returns an iterator following the last key-value pair of the object.
|
// Returns an iterator following the last key-value pair of the object.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/end/
|
// https://arduinojson.org/v7/api/jsonobjectconst/end/
|
||||||
FORCE_INLINE iterator end() const {
|
iterator end() const {
|
||||||
return iterator();
|
return iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns true if the object contains the specified key.
|
// Returns true if the object contains the specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/containskey/
|
// https://arduinojson.org/v7/api/jsonobjectconst/containskey/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE bool containsKey(const TString& key) const {
|
bool containsKey(const TString& key) const {
|
||||||
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
||||||
resources_) != 0;
|
resources_) != 0;
|
||||||
}
|
}
|
||||||
@@ -79,7 +79,7 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
|
|||||||
// Returns true if the object contains the specified key.
|
// Returns true if the object contains the specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/containskey/
|
// https://arduinojson.org/v7/api/jsonobjectconst/containskey/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE bool containsKey(TChar* key) const {
|
bool containsKey(TChar* key) const {
|
||||||
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
return detail::ObjectData::getMember(data_, detail::adaptString(key),
|
||||||
resources_) != 0;
|
resources_) != 0;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
|
|||||||
// Gets the member with specified key.
|
// Gets the member with specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/subscript/
|
// https://arduinojson.org/v7/api/jsonobjectconst/subscript/
|
||||||
template <typename TString>
|
template <typename TString>
|
||||||
FORCE_INLINE typename detail::enable_if<detail::IsString<TString>::value,
|
typename detail::enable_if<detail::IsString<TString>::value,
|
||||||
JsonVariantConst>::type
|
JsonVariantConst>::type
|
||||||
operator[](const TString& key) const {
|
operator[](const TString& key) const {
|
||||||
return JsonVariantConst(detail::ObjectData::getMember(
|
return JsonVariantConst(detail::ObjectData::getMember(
|
||||||
@@ -98,7 +98,7 @@ class JsonObjectConst : public detail::VariantOperators<JsonObjectConst> {
|
|||||||
// Gets the member with specified key.
|
// Gets the member with specified key.
|
||||||
// https://arduinojson.org/v7/api/jsonobjectconst/subscript/
|
// https://arduinojson.org/v7/api/jsonobjectconst/subscript/
|
||||||
template <typename TChar>
|
template <typename TChar>
|
||||||
FORCE_INLINE typename detail::enable_if<detail::IsString<TChar*>::value,
|
typename detail::enable_if<detail::IsString<TChar*>::value,
|
||||||
JsonVariantConst>::type
|
JsonVariantConst>::type
|
||||||
operator[](TChar* key) const {
|
operator[](TChar* key) const {
|
||||||
return JsonVariantConst(detail::ObjectData::getMember(
|
return JsonVariantConst(detail::ObjectData::getMember(
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/JsonObjectIterator.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/JsonPair.hpp
Normal file → Executable file
14
lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp
Normal file → Executable file
14
lib/ArduinoJson/src/ArduinoJson/Object/MemberProxy.hpp
Normal file → Executable file
@@ -17,41 +17,41 @@ class MemberProxy
|
|||||||
friend class VariantAttorney;
|
friend class VariantAttorney;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FORCE_INLINE MemberProxy(TUpstream upstream, TStringRef key)
|
MemberProxy(TUpstream upstream, TStringRef key)
|
||||||
: upstream_(upstream), key_(key) {}
|
: upstream_(upstream), key_(key) {}
|
||||||
|
|
||||||
MemberProxy(const MemberProxy& src)
|
MemberProxy(const MemberProxy& src)
|
||||||
: upstream_(src.upstream_), key_(src.key_) {}
|
: upstream_(src.upstream_), key_(src.key_) {}
|
||||||
|
|
||||||
FORCE_INLINE MemberProxy& operator=(const MemberProxy& src) {
|
MemberProxy& operator=(const MemberProxy& src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE MemberProxy& operator=(const T& src) {
|
MemberProxy& operator=(const T& src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
FORCE_INLINE MemberProxy& operator=(T* src) {
|
MemberProxy& operator=(T* src) {
|
||||||
this->set(src);
|
this->set(src);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FORCE_INLINE ResourceManager* getResourceManager() const {
|
ResourceManager* getResourceManager() const {
|
||||||
return VariantAttorney::getResourceManager(upstream_);
|
return VariantAttorney::getResourceManager(upstream_);
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE VariantData* getData() const {
|
VariantData* getData() const {
|
||||||
return VariantData::getMember(
|
return VariantData::getMember(
|
||||||
VariantAttorney::getData(upstream_), adaptString(key_),
|
VariantAttorney::getData(upstream_), adaptString(key_),
|
||||||
VariantAttorney::getResourceManager(upstream_));
|
VariantAttorney::getResourceManager(upstream_));
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE VariantData* getOrCreateData() const {
|
VariantData* getOrCreateData() const {
|
||||||
auto data = VariantAttorney::getOrCreateData(upstream_);
|
auto data = VariantAttorney::getOrCreateData(upstream_);
|
||||||
if (!data)
|
if (!data)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/ObjectData.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Object/ObjectImpl.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/alias_cast.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/assert.hpp
Normal file → Executable file
3
lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp
Normal file → Executable file
3
lib/ArduinoJson/src/ArduinoJson/Polyfills/attributes.hpp
Normal file → Executable file
@@ -7,7 +7,6 @@
|
|||||||
#ifdef _MSC_VER // Visual Studio
|
#ifdef _MSC_VER // Visual Studio
|
||||||
|
|
||||||
# define FORCE_INLINE // __forceinline causes C4714 when returning std::string
|
# define FORCE_INLINE // __forceinline causes C4714 when returning std::string
|
||||||
# define NO_INLINE __declspec(noinline)
|
|
||||||
|
|
||||||
# ifndef ARDUINOJSON_DEPRECATED
|
# ifndef ARDUINOJSON_DEPRECATED
|
||||||
# define ARDUINOJSON_DEPRECATED(msg) __declspec(deprecated(msg))
|
# define ARDUINOJSON_DEPRECATED(msg) __declspec(deprecated(msg))
|
||||||
@@ -16,7 +15,6 @@
|
|||||||
#elif defined(__GNUC__) // GCC or Clang
|
#elif defined(__GNUC__) // GCC or Clang
|
||||||
|
|
||||||
# define FORCE_INLINE __attribute__((always_inline))
|
# define FORCE_INLINE __attribute__((always_inline))
|
||||||
# define NO_INLINE __attribute__((noinline))
|
|
||||||
|
|
||||||
# ifndef ARDUINOJSON_DEPRECATED
|
# ifndef ARDUINOJSON_DEPRECATED
|
||||||
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
|
# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
|
||||||
@@ -29,7 +27,6 @@
|
|||||||
#else // Other compilers
|
#else // Other compilers
|
||||||
|
|
||||||
# define FORCE_INLINE
|
# define FORCE_INLINE
|
||||||
# define NO_INLINE
|
|
||||||
|
|
||||||
# ifndef ARDUINOJSON_DEPRECATED
|
# ifndef ARDUINOJSON_DEPRECATED
|
||||||
# define ARDUINOJSON_DEPRECATED(msg)
|
# define ARDUINOJSON_DEPRECATED(msg)
|
||||||
|
|||||||
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/ctype.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/integer.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/limits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/math.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/mpl/max.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/pgmspace_generic.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/preprocessor.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/conditional.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/declval.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/enable_if.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/integral_constant.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp
Normal file → Executable file
0
lib/ArduinoJson/src/ArduinoJson/Polyfills/type_traits/is_array.hpp
Normal file → Executable file
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user