diff --git a/arduino/libretuya/common/main.cpp b/arduino/libretuya/common/main.cpp new file mode 100644 index 0000000..e2a11f1 --- /dev/null +++ b/arduino/libretuya/common/main.cpp @@ -0,0 +1,40 @@ +/* Copyright (c) Kuba Szczodrzyński 2022-06-19. */ + +#include +#include + +using namespace arduino; + +// Weak empty variant initialization function. +// May be redefined by variant files. +void initVariant() __attribute__((weak)); + +// Initialize C library +extern "C" void __libc_init_array(void); + +void main_task(const void *arg) { + setup(); + + for (;;) { + loop(); + if (serialEventRun) + serialEventRun(); + yield(); + } +} + +int main(void) { + // print a startup banner + LT_BANNER(); + // initialize Arduino framework + init(); + // initialize C library + __libc_init_array(); + // optionally initialize per-variant code + initVariant(); + // start the main task and OS kernel + startMainTask(); + + while (1) {} + return 0; +} diff --git a/arduino/libretuya/common/serial_event.cpp b/arduino/libretuya/common/serial_event.cpp new file mode 100644 index 0000000..85a0822 --- /dev/null +++ b/arduino/libretuya/common/serial_event.cpp @@ -0,0 +1,11 @@ +/* Copyright (c) Kuba Szczodrzyński 2022-06-19. */ + +#include + +void serialEvent() __attribute__((weak)); +bool Serial_available() __attribute__((weak)); + +void serialEventRun(void) { + if (Serial_available && serialEvent && Serial_available()) + serialEvent(); +} diff --git a/arduino/libretuya/core/LibreTuyaAPI.h b/arduino/libretuya/core/LibreTuyaAPI.h index 8d74318..18d91f9 100644 --- a/arduino/libretuya/core/LibreTuyaAPI.h +++ b/arduino/libretuya/core/LibreTuyaAPI.h @@ -2,6 +2,11 @@ #pragma once +// C standard libraries +#include +#include +#include + // LibreTuya version macros #ifndef LT_VERSION #define LT_VERSION 1.0.0 diff --git a/arduino/libretuya/core/LibreTuyaCustom.h b/arduino/libretuya/core/LibreTuyaCustom.h index 7119fd2..205f726 100644 --- a/arduino/libretuya/core/LibreTuyaCustom.h +++ b/arduino/libretuya/core/LibreTuyaCustom.h @@ -1,11 +1,24 @@ /* Copyright (c) Kuba Szczodrzyński 2022-06-06. */ +#pragma once + #include "LibreTuyaAPI.h" #ifdef __cplusplus extern "C" { #endif +/** + * @brief Run main_task & start OS kernel (family-defined) + */ +extern bool startMainTask(); + +/** + * @brief Main setup() and loop() task. + * Not to be called directly. + */ +extern void main_task(const void *arg); + #define PIN_NONE (1 << 0) #define PIN_GPIO (1 << 1) #define PIN_IRQ (1 << 2) diff --git a/arduino/libretuya/libraries/MD5/MD5.h b/arduino/libretuya/libraries/MD5/MD5.h index 593d72a..4aae25e 100644 --- a/arduino/libretuya/libraries/MD5/MD5.h +++ b/arduino/libretuya/libraries/MD5/MD5.h @@ -2,6 +2,7 @@ #pragma once +#include #include // available built-in implementations diff --git a/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.cpp b/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.cpp index f03ddb7..fe5b032 100644 --- a/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.cpp +++ b/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.cpp @@ -1,14 +1,9 @@ /* Copyright (c) Kuba Szczodrzyński 2022-06-03. */ -// check if impl defines LT_MD5_USE_POLARSSL -extern "C" { -#include -} +#include "MD5.h" #if LT_MD5_USE_POLARSSL -#include "MD5PolarSSLImpl.h" - extern "C" { void MD5Init(LT_MD5_CTX_T *context) { diff --git a/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.h b/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.h index 7cad1fc..778d526 100644 --- a/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.h +++ b/arduino/libretuya/libraries/MD5/MD5PolarSSLImpl.h @@ -12,5 +12,3 @@ extern "C" { #ifdef __cplusplus } // extern "C" #endif - -#include "MD5.h" diff --git a/arduino/realtek-ambz/cores/arduino/WVariant.h b/arduino/realtek-ambz/cores/arduino/WVariant.h index 6e7e5ac..71902f3 100644 --- a/arduino/realtek-ambz/cores/arduino/WVariant.h +++ b/arduino/realtek-ambz/cores/arduino/WVariant.h @@ -1,9 +1,5 @@ #pragma once -#include -#include -#include - #ifdef __cplusplus extern "C" { #endif diff --git a/arduino/realtek-ambz/cores/arduino/main.cpp b/arduino/realtek-ambz/cores/arduino/main.cpp index 8a02de6..39804c5 100644 --- a/arduino/realtek-ambz/cores/arduino/main.cpp +++ b/arduino/realtek-ambz/cores/arduino/main.cpp @@ -22,53 +22,13 @@ #include #include -// Weak empty variant initialization function. -// May be redefined by variant files. -void initVariant() __attribute__((weak)); - -void initVariant() {} - -// Initialize C library -extern "C" void __libc_init_array(void); - osThreadId main_tid = 0; -void main_task(const void *arg) { - setup(); - - for (;;) { - loop(); - if (serialEventRun) - serialEventRun(); - yield(); - } -} - -int main(void) { - LT_BANNER(); - init(); - - __libc_init_array(); - - initVariant(); - +bool startMainTask() { osThreadDef(main_task, osPriorityRealtime, 1, 4096 * 4); main_tid = osThreadCreate(osThread(main_task), NULL); - osKernelStart(); - - while (1) - ; - - return 0; -} - -void serialEvent() __attribute__((weak)); -bool Serial_available() __attribute__((weak)); - -void serialEventRun(void) { - if (Serial_available && serialEvent && Serial_available()) - serialEvent(); + return true; } void wait_for_debug() { diff --git a/arduino/realtek-ambz/cores/arduino/sdk_extern.h b/arduino/realtek-ambz/cores/arduino/sdk_extern.h index 09ea421..da658dd 100644 --- a/arduino/realtek-ambz/cores/arduino/sdk_extern.h +++ b/arduino/realtek-ambz/cores/arduino/sdk_extern.h @@ -2,9 +2,8 @@ #pragma once +// va_list is declared by SDK and conflicting #include -#include -#include // disable typedef in basic_types.h #define boolean boolean_rtl diff --git a/arduino/realtek-ambz/libraries/MD5/MD5Impl.h b/arduino/realtek-ambz/libraries/MD5/MD5Impl.h index ba7753f..e9bb3d8 100644 --- a/arduino/realtek-ambz/libraries/MD5/MD5Impl.h +++ b/arduino/realtek-ambz/libraries/MD5/MD5Impl.h @@ -2,6 +2,4 @@ #pragma once -#include - #define LT_MD5_USE_POLARSSL 1