From 515d47f0553b85820906044db164ba2c1893a5bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kuba=20Szczodrzy=C5=84ski?= Date: Fri, 29 Apr 2022 19:19:49 +0200 Subject: [PATCH] [core] Add MQTT library compatibility --- README.md | 13 ++++++++++--- arduino/libretuya/api/LibreTuyaAPI.cpp | 9 +++++++++ arduino/libretuya/api/LibreTuyaAPI.h | 2 ++ builder/arduino-common.py | 2 ++ docs/Libraries.md | 15 +++++++++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 arduino/libretuya/api/LibreTuyaAPI.cpp create mode 100644 docs/Libraries.md diff --git a/README.md b/README.md index 5cc37e8..afb5dac 100644 --- a/README.md +++ b/README.md @@ -176,22 +176,29 @@ Wi-Fi Access Point | ✔️ Wi-Fi Events | ❌ Wi-Fi Client (SSL) | ✔️ (❌) Wi-Fi Server | ✔️ +NVS / Preferences | ❌ SPIFFS | ❌ BLE | - HTTP | ❌ NTP | ❌ OTA | ❌ MDNS | ❌ -MQTT | ❌ +MQTT | ✅ SD | ❌ -Legend: +Symbols: - ✔️ working -- ❗ broken +- ✅ tested, external library - ❓ untested +- ❗ broken - ❌ not implemented (yet?) - \- not applicable +Names: +- Core functions - stuff like delay(), millis(), yield(), etc. +- **CORE LIBRARIES** - included normally in all Arduino cores +- **OTHER LIBRARIES** - included in ESP32 core or downloadable + ## License See [LICENSE](LICENSE). Project is licensed under MIT License. diff --git a/arduino/libretuya/api/LibreTuyaAPI.cpp b/arduino/libretuya/api/LibreTuyaAPI.cpp new file mode 100644 index 0000000..ab7404c --- /dev/null +++ b/arduino/libretuya/api/LibreTuyaAPI.cpp @@ -0,0 +1,9 @@ +#include "LibreTuyaAPI.h" + +__weak char *strdup(const char *s) { + size_t len = strlen(s) + 1; + void *newp = malloc(len); + if (newp == NULL) + return NULL; + return (char *)memcpy(newp, s, len); +} diff --git a/arduino/libretuya/api/LibreTuyaAPI.h b/arduino/libretuya/api/LibreTuyaAPI.h index 2f9b7f3..bf12951 100644 --- a/arduino/libretuya/api/LibreTuyaAPI.h +++ b/arduino/libretuya/api/LibreTuyaAPI.h @@ -34,3 +34,5 @@ extern "C" { __LINE__, \ "LibreTuya v" LT_VERSION_STR " on " LT_BOARD_STR ", compiled at " __DATE__ " " __TIME__ \ ) + +extern char *strdup(const char *); diff --git a/builder/arduino-common.py b/builder/arduino-common.py index 2e6d39d..83f5ee6 100644 --- a/builder/arduino-common.py +++ b/builder/arduino-common.py @@ -16,6 +16,7 @@ env.Prepend( CPPPATH=[ # fmt: off join(API_DIR), + join(API_DIR, "api", "deprecated"), join(LT_API_DIR), join(LT_API_DIR, "compat"), # fmt: on @@ -35,6 +36,7 @@ sources_api = [ "+<" + API_DIR + "/api/Stream.cpp>", "+<" + API_DIR + "/api/String.cpp>", "+<" + LT_API_DIR + "/api/IPv6Address.cpp>", + "+<" + LT_API_DIR + "/api/LibreTuyaAPI.cpp>", "+<" + LT_API_DIR + "/api/lt_logger.c>", "+<" + LT_API_DIR + "/api/LwIPRxBuffer.cpp>", # fmt: on diff --git a/docs/Libraries.md b/docs/Libraries.md new file mode 100644 index 0000000..05069fe --- /dev/null +++ b/docs/Libraries.md @@ -0,0 +1,15 @@ +# Libraries + +A page outlining 3-rd party libraries compatible with LibreTuya. + +To use some (most? (all?)) of these, a flag in `platformio.ini` is required to disable compatibility checks (because most libs are meant for ESP32/Arduino official framework): +```ini +[env:my_board] +lib_compat_mode = off +``` + +## MQTT +Tested with `realtek-ambz`. +```ini +lib_deps = 256dpi/MQTT@^2.5.0 +```