From 8ed0fded6b8821b04c1d6147f7c457c9ba71534d Mon Sep 17 00:00:00 2001 From: Aymane Bahssain Date: Thu, 29 Jan 2026 11:18:17 +0100 Subject: [PATCH 1/3] refactor: update STM32LowPower callbacks and pin types for ArduinoCore-API integration Signed-off-by: Aymane Bahssain --- src/STM32LowPower.cpp | 6 +++--- src/STM32LowPower.h | 7 +++---- src/low_power.c | 9 ++++----- src/low_power.h | 5 +++-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/STM32LowPower.cpp b/src/STM32LowPower.cpp index d3abfe8..cdcae29 100644 --- a/src/STM32LowPower.cpp +++ b/src/STM32LowPower.cpp @@ -145,7 +145,7 @@ void STM32LowPower::shutdown(uint32_t ms) * In case of SHUTDOWN_MODE only, Wakeup pin capability is activated * @retval None */ -void STM32LowPower::attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode) +void STM32LowPower::attachInterruptWakeup(pin_size_t pin, voidFuncPtr callback, PinStatus mode, LP_Mode LowPowerMode) { attachInterrupt(pin, callback, mode); @@ -166,7 +166,7 @@ void STM32LowPower::attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback * mode. * @retval None */ -void STM32LowPower::enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback) +void STM32LowPower::enableWakeupFrom(HardwareSerial *serial, voidFuncPtr callback) { if (serial != NULL) { _serial = &(serial->_serial); @@ -184,7 +184,7 @@ void STM32LowPower::enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid cal * @param data: optional pointer to callback data parameters (default NULL). * @retval None */ -void STM32LowPower::enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data) +void STM32LowPower::enableWakeupFrom(STM32RTC *rtc, voidFuncPtrParam callback, void *data) { if (rtc == NULL) { rtc = &(STM32RTC::getInstance()); diff --git a/src/STM32LowPower.h b/src/STM32LowPower.h index 9737522..56816f1 100644 --- a/src/STM32LowPower.h +++ b/src/STM32LowPower.h @@ -55,7 +55,6 @@ enum LP_Mode : uint8_t { SHUTDOWN_MODE }; -typedef void (*voidFuncPtrVoid)(void) ; class STM32LowPower { public: @@ -89,10 +88,10 @@ class STM32LowPower { shutdown((uint32_t)ms); } #endif - void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode = SHUTDOWN_MODE); + void attachInterruptWakeup(pin_size_t pin, voidFuncPtr callback, PinStatus mode, LP_Mode LowPowerMode = SHUTDOWN_MODE); - void enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback); - void enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data = NULL); + void enableWakeupFrom(HardwareSerial *serial, voidFuncPtr callback); + void enableWakeupFrom(STM32RTC *rtc, voidFuncPtrParam callback, void *data = NULL); private: bool _configured; // Low Power mode initialization status diff --git a/src/low_power.c b/src/low_power.c index 4072118..a0641cc 100644 --- a/src/low_power.c +++ b/src/low_power.c @@ -18,7 +18,6 @@ ****************************************************************************** */ -#include "Arduino.h" #include "low_power.h" #include "stm32yyxx_ll_cortex.h" #include "stm32yyxx_ll_pwr.h" @@ -202,7 +201,7 @@ void LowPower_init() * @param mode: pin mode (edge or state). The configuration have to be compatible. * @retval None */ -void LowPower_EnableWakeUpPin(uint32_t pin, uint32_t mode) +void LowPower_EnableWakeUpPin(pin_size_t pin, PinStatus mode) { PinName p = digitalPinToPinName(pin); #if defined(PWR_WAKEUP_SELECT_0) || defined(PWR_WAKEUP1_SOURCE_SELECTION_0) @@ -975,10 +974,10 @@ void LowPower_shutdown(bool isRTC) * with which low power mode the UART is compatible. * Warning This function will change UART clock source to HSI * @param serial: pointer to serial - * @param FuncPtr: pointer to callback + * @param callback: pointer to callback * @retval None */ -void LowPower_EnableWakeUpUart(serial_t *serial, void (*FuncPtr)(void)) +void LowPower_EnableWakeUpUart(serial_t *serial, voidFuncPtr callback) { #if defined(UART_WKUP_SUPPORT) #ifdef IS_UART_WAKEUP_SELECTION @@ -1009,7 +1008,7 @@ void LowPower_EnableWakeUpUart(serial_t *serial, void (*FuncPtr)(void)) UNUSED(serial); #endif /* Save callback */ - WakeUpUartCb = FuncPtr; + WakeUpUartCb = callback; } /** diff --git a/src/low_power.h b/src/low_power.h index 7aede40..11a4a29 100644 --- a/src/low_power.h +++ b/src/low_power.h @@ -40,6 +40,7 @@ /* Includes ------------------------------------------------------------------*/ #include "stm32_def.h" #include "uart.h" +#include "Arduino.h" #if defined(HAL_PWR_MODULE_ENABLED) && !defined(HAL_PWR_MODULE_ONLY) @@ -53,8 +54,8 @@ extern "C" { /* Exported functions ------------------------------------------------------- */ void LowPower_init(); -void LowPower_EnableWakeUpPin(uint32_t pin, uint32_t mode); -void LowPower_EnableWakeUpUart(serial_t *serial, void (*FuncPtr)(void)); +void LowPower_EnableWakeUpPin(pin_size_t pin, PinStatus mode); +void LowPower_EnableWakeUpUart(serial_t *serial, voidFuncPtr callback); void LowPower_sleep(uint32_t regulator); void LowPower_stop(serial_t *obj); void LowPower_standby(); From 9ba47559bfcaa700bc54f5179062091fe30baf0f Mon Sep 17 00:00:00 2001 From: Aymane Bahssain Date: Thu, 29 Jan 2026 11:18:37 +0100 Subject: [PATCH 2/3] chore: add CMake support Signed-off-by: Aymane Bahssain --- CMakeLists.txt | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..467c733 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,31 @@ +# v3.21 implemented semantic changes regarding $ +# See https://cmake.org/cmake/help/v3.21/command/target_link_libraries.html#linking-object-libraries-via-target-objects +cmake_minimum_required(VERSION 3.21) + +add_library(STM32LowPower INTERFACE) +add_library(STM32LowPower_usage INTERFACE) + +target_include_directories(STM32LowPower_usage INTERFACE + src +) + + +target_link_libraries(STM32LowPower_usage INTERFACE + base_config +) + +target_link_libraries(STM32LowPower INTERFACE STM32LowPower_usage) + + + +add_library(STM32LowPower_bin OBJECT EXCLUDE_FROM_ALL + src/low_power.c + src/STM32LowPower.cpp +) +target_link_libraries(STM32LowPower_bin PUBLIC STM32LowPower_usage) + +target_link_libraries(STM32LowPower INTERFACE + STM32LowPower_bin + $ +) + From 44a4e3ffc366a3ba6503d43aef6c11d098eed22c Mon Sep 17 00:00:00 2001 From: Aymane Bahssain Date: Thu, 29 Jan 2026 11:18:58 +0100 Subject: [PATCH 3/3] ci: ensure submodules are checked out during CI workflow Signed-off-by: Aymane Bahssain --- .github/workflows/Continuous-Integration.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/Continuous-Integration.yml b/.github/workflows/Continuous-Integration.yml index ff16262..a99f55a 100644 --- a/.github/workflows/Continuous-Integration.yml +++ b/.github/workflows/Continuous-Integration.yml @@ -22,6 +22,8 @@ jobs: # First of all, clone the repo using the checkout action. - name: Checkout uses: actions/checkout@main + with: + submodules: true - name: Compilation id: Compile