From d0fec78b4b39b03c9cf9b92b5a087c16ebc8b3ea Mon Sep 17 00:00:00 2001 From: Peter Sarkozi Date: Wed, 14 Jun 2023 15:07:07 +0200 Subject: [PATCH 1/9] Initial support code for Deep Sleep --- cores/beken-7231n/base/config/sys_config.h | 1 + .../arduino/libraries/DeepSleep/DeepSleep.cpp | 43 +++++++++++++++++++ .../libraries/DeepSleep/DeepSleepPrivate.h | 16 +++++++ .../libraries/api/DeepSleep/DeepSleep.h | 28 ++++++++++++ cores/common/arduino/src/compat/DeepSleep.h | 5 +++ 5 files changed, 93 insertions(+) create mode 100644 cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp create mode 100644 cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h create mode 100644 cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h create mode 100644 cores/common/arduino/src/compat/DeepSleep.h diff --git a/cores/beken-7231n/base/config/sys_config.h b/cores/beken-7231n/base/config/sys_config.h index 2a67a98a3..94f6850e2 100644 --- a/cores/beken-7231n/base/config/sys_config.h +++ b/cores/beken-7231n/base/config/sys_config.h @@ -132,3 +132,4 @@ #define UART1_USE_FIFO_REC 0 #define UART2_USE_FIFO_REC 0 #define WIFI_DEFAULT_BLE_REQUEST 1 +#define PS_SUPPORT_MANUAL_SLEEP 1 diff --git a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp new file mode 100644 index 000000000..1a8f73131 --- /dev/null +++ b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp @@ -0,0 +1,43 @@ +/* Copyright (c) Peter Sarkozi 2023-06-13. */ + +#include +#include +#include +#include "DeepSleepPrivate.h" + + void bk_enter_deep_sleep_manual(uint32_t g_gpio_index_map, uint32_t g_gpio_edge_map) + { + PS_DEEP_CTRL_PARAM deep_sleep_param; + + deep_sleep_param.wake_up_way = PS_DEEP_WAKEUP_GPIO; + deep_sleep_param.gpio_index_map = g_gpio_index_map; + deep_sleep_param.gpio_edge_map = g_gpio_edge_map; + extern void bk_enter_deep_sleep_mode(ps_deep_ctrl*); + bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM*)&deep_sleep_param); + } + + + +LibreTinyDeepSleep::LibreTinyDeepSleep() { + data = (LibreTinyDeepSleep *)calloc(1, sizeof(LibreTinyDeepSleep)); +} + +LibreTinyDeepSleep::~LibreTinyDeepSleep() { + free(data); + data = NULL; +} +void LibreTinyDeepSleep::enableTimerWakeup(uint32_t duration) { + extern void deep_sleep_wakeup_with_timer(uint32_t sleep_time); + deep_sleep_wakeup_with_timer(duration); +} +void LibreTinyDeepSleep::enableGpioWakeup(uint32_t gpioIndexMap, bool onHigh) { + DATA->gpioMap = gpioIndexMap; + DATA->onHigh = onHigh; +} +void LibreTinyDeepSleep::enter() { +#if CFG_SOC_NAME == SOC_BK7231U + extern void deep_sleep_wakeup_with_gpio(uint32_t gpio_index_map, uint32_t gpio_edge_map); + deep_sleep_wakeup_with_gpio(DATA->gpioMap, DATA->onHigh ? 0 : 0xFFFFFFFF); +#endif + bk_enter_deep_sleep_manual(DATA->gpioMap, DATA->onHigh ? 0 : 0xFFFFFFFF); +} diff --git a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h new file mode 100644 index 000000000..4430d6fe3 --- /dev/null +++ b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h @@ -0,0 +1,16 @@ +/* Copyright (c) Peter Sarkozi 2023-06-13. */ + +#pragma once + +#include + +extern "C" { + typedef struct { + uint32_t gpioMap; + bool onHigh; + } DeepSleepData; + + + +#define DATA ((DeepSleepData *)data) +} diff --git a/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h b/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h new file mode 100644 index 000000000..313b2655a --- /dev/null +++ b/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h @@ -0,0 +1,28 @@ +/* Copyright (c) Peter Sarkozi 2023-06-13. */ + +#pragma once + +#include + +/** + * @brief Deep Sleep helper class. + * + * The class is accessible using the `DeepSleep` global object. + */ +class LibreTinyDeepSleep { + public: + void *data; + + public: /* DeepSleep.cpp */ + LibreTinyDeepSleep(); + ~LibreTinyDeepSleep(); + void dataInitialize(); + void dataFree(); + + public: + void enableTimerWakeup(uint32_t duration); + void enableGpioWakeup(uint32_t gpioIndexMap, bool onHigh); + void enter(); +}; + +extern LibreTinyDeepSleep DeepSleep; diff --git a/cores/common/arduino/src/compat/DeepSleep.h b/cores/common/arduino/src/compat/DeepSleep.h new file mode 100644 index 000000000..7a06112f0 --- /dev/null +++ b/cores/common/arduino/src/compat/DeepSleep.h @@ -0,0 +1,5 @@ +/* Copyright (c) Peter Sarkozi 2023-06-14. */ + +#pragma once + +#include From ef3d6d795c822b558863a65214e83162997d9a8e Mon Sep 17 00:00:00 2001 From: Peter Sarkozi Date: Sat, 17 Jun 2023 15:10:20 +0200 Subject: [PATCH 2/9] Global functions --- .../arduino/libraries/DeepSleep/DeepSleep.cpp | 43 ------------------- .../libraries/DeepSleep/DeepSleepPrivate.h | 16 ------- cores/beken-72xx/base/lt_api.c | 22 ++++++++++ cores/beken-72xx/base/sdk_private.h | 2 + .../libraries/api/DeepSleep/DeepSleep.h | 28 ------------ cores/common/arduino/src/compat/DeepSleep.h | 5 --- cores/common/base/api/lt_deep_sleep.h | 24 +++++++++++ cores/common/base/lt_api.c | 11 +++++ cores/common/base/lt_api.h | 1 + 9 files changed, 60 insertions(+), 92 deletions(-) delete mode 100644 cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp delete mode 100644 cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h delete mode 100644 cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h delete mode 100644 cores/common/arduino/src/compat/DeepSleep.h create mode 100644 cores/common/base/api/lt_deep_sleep.h diff --git a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp deleted file mode 100644 index 1a8f73131..000000000 --- a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleep.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) Peter Sarkozi 2023-06-13. */ - -#include -#include -#include -#include "DeepSleepPrivate.h" - - void bk_enter_deep_sleep_manual(uint32_t g_gpio_index_map, uint32_t g_gpio_edge_map) - { - PS_DEEP_CTRL_PARAM deep_sleep_param; - - deep_sleep_param.wake_up_way = PS_DEEP_WAKEUP_GPIO; - deep_sleep_param.gpio_index_map = g_gpio_index_map; - deep_sleep_param.gpio_edge_map = g_gpio_edge_map; - extern void bk_enter_deep_sleep_mode(ps_deep_ctrl*); - bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM*)&deep_sleep_param); - } - - - -LibreTinyDeepSleep::LibreTinyDeepSleep() { - data = (LibreTinyDeepSleep *)calloc(1, sizeof(LibreTinyDeepSleep)); -} - -LibreTinyDeepSleep::~LibreTinyDeepSleep() { - free(data); - data = NULL; -} -void LibreTinyDeepSleep::enableTimerWakeup(uint32_t duration) { - extern void deep_sleep_wakeup_with_timer(uint32_t sleep_time); - deep_sleep_wakeup_with_timer(duration); -} -void LibreTinyDeepSleep::enableGpioWakeup(uint32_t gpioIndexMap, bool onHigh) { - DATA->gpioMap = gpioIndexMap; - DATA->onHigh = onHigh; -} -void LibreTinyDeepSleep::enter() { -#if CFG_SOC_NAME == SOC_BK7231U - extern void deep_sleep_wakeup_with_gpio(uint32_t gpio_index_map, uint32_t gpio_edge_map); - deep_sleep_wakeup_with_gpio(DATA->gpioMap, DATA->onHigh ? 0 : 0xFFFFFFFF); -#endif - bk_enter_deep_sleep_manual(DATA->gpioMap, DATA->onHigh ? 0 : 0xFFFFFFFF); -} diff --git a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h b/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h deleted file mode 100644 index 4430d6fe3..000000000 --- a/cores/beken-72xx/arduino/libraries/DeepSleep/DeepSleepPrivate.h +++ /dev/null @@ -1,16 +0,0 @@ -/* Copyright (c) Peter Sarkozi 2023-06-13. */ - -#pragma once - -#include - -extern "C" { - typedef struct { - uint32_t gpioMap; - bool onHigh; - } DeepSleepData; - - - -#define DATA ((DeepSleepData *)data) -} diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index c8994e918..8c1e4384a 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -188,3 +188,25 @@ void lt_wdt_disable() { void lt_wdt_feed() { wdt_ctrl(WCMD_RELOAD_PERIOD, NULL); } + + +/** +* Deep Sleep +**/ + +static PS_DEEP_CTRL_PARAM deep_sleep_param; + +void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { + deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_GPIO; + deep_sleep_param.gpio_index_map = gpio_index_map; + deep_sleep_param.gpio_edge_map = on_high ? 0 : 0xFFFFFFFF; +} + +void lt_deep_sleep_config_timer(uint32_t sleep_duration) { + deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; + deep_sleep_param.sleep_time = sleep_duration; +} + +void lt_deep_sleep_enter() { + bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM*)&deep_sleep_param); +} diff --git a/cores/beken-72xx/base/sdk_private.h b/cores/beken-72xx/base/sdk_private.h index 41d6a56c9..a5e5a700a 100644 --- a/cores/beken-72xx/base/sdk_private.h +++ b/cores/beken-72xx/base/sdk_private.h @@ -18,6 +18,8 @@ extern "C" { #include #include #include +#include +#include extern uint8_t system_mac[]; extern uint32_t wdt_ctrl(uint32_t cmd, void *param); diff --git a/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h b/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h deleted file mode 100644 index 313b2655a..000000000 --- a/cores/common/arduino/libraries/api/DeepSleep/DeepSleep.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (c) Peter Sarkozi 2023-06-13. */ - -#pragma once - -#include - -/** - * @brief Deep Sleep helper class. - * - * The class is accessible using the `DeepSleep` global object. - */ -class LibreTinyDeepSleep { - public: - void *data; - - public: /* DeepSleep.cpp */ - LibreTinyDeepSleep(); - ~LibreTinyDeepSleep(); - void dataInitialize(); - void dataFree(); - - public: - void enableTimerWakeup(uint32_t duration); - void enableGpioWakeup(uint32_t gpioIndexMap, bool onHigh); - void enter(); -}; - -extern LibreTinyDeepSleep DeepSleep; diff --git a/cores/common/arduino/src/compat/DeepSleep.h b/cores/common/arduino/src/compat/DeepSleep.h deleted file mode 100644 index 7a06112f0..000000000 --- a/cores/common/arduino/src/compat/DeepSleep.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Copyright (c) Peter Sarkozi 2023-06-14. */ - -#pragma once - -#include diff --git a/cores/common/base/api/lt_deep_sleep.h b/cores/common/base/api/lt_deep_sleep.h new file mode 100644 index 000000000..0a1cabfe5 --- /dev/null +++ b/cores/common/base/api/lt_deep_sleep.h @@ -0,0 +1,24 @@ +/* Copyright (c) Peter Sarkozi 2023-06-17. */ + +#pragma once + +#include + +/** + * @brief Enable GPIO Wakeup from Deep Sleep. + * + * @param gpio_index_map bitMap of the pins we should wake up on + * @param on_high wether to wake up on High or Low state + */ +void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); + +/** + * @brief Disable the hardware watchdog. + * @param sleep_duration the time in seconds to sleep + */ +void lt_deep_sleep_config_timer(uint32_t sleep_duration); + +/** + * @brief Start deep sleep + */ +void lt_deep_sleep_enter(); diff --git a/cores/common/base/lt_api.c b/cores/common/base/lt_api.c index 7259fd028..355eb7d73 100644 --- a/cores/common/base/lt_api.c +++ b/cores/common/base/lt_api.c @@ -268,3 +268,14 @@ __attribute__((weak)) bool lt_wdt_enable(uint32_t timeout) { __attribute__((weak)) void lt_wdt_disable() {} __attribute__((weak)) void lt_wdt_feed() {} + + +/** +* Deep Sleep +**/ + +__attribute__((weak)) void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); + +__attribute__((weak)) void lt_deep_sleep_config_timer(uint32_t sleep_duration); + +__attribute__((weak)) void lt_deep_sleep_enter(); diff --git a/cores/common/base/lt_api.h b/cores/common/base/lt_api.h index 8564dbd9e..3ac67d105 100644 --- a/cores/common/base/lt_api.h +++ b/cores/common/base/lt_api.h @@ -18,6 +18,7 @@ extern "C" { #include "api/lt_ota.h" #include "api/lt_utils.h" #include "api/lt_wdt.h" +#include "api/lt_deep_sleep.h" #ifdef __cplusplus } // extern "C" From 4ad030d85a9f854916ead661393d3de4f3dc6523 Mon Sep 17 00:00:00 2001 From: Peter Sarkozi Date: Sat, 17 Jun 2023 21:05:06 +0200 Subject: [PATCH 3/9] Remove unnecessary override --- cores/beken-7231n/base/config/sys_config.h | 1 - 1 file changed, 1 deletion(-) diff --git a/cores/beken-7231n/base/config/sys_config.h b/cores/beken-7231n/base/config/sys_config.h index 94f6850e2..2a67a98a3 100644 --- a/cores/beken-7231n/base/config/sys_config.h +++ b/cores/beken-7231n/base/config/sys_config.h @@ -132,4 +132,3 @@ #define UART1_USE_FIFO_REC 0 #define UART2_USE_FIFO_REC 0 #define WIFI_DEFAULT_BLE_REQUEST 1 -#define PS_SUPPORT_MANUAL_SLEEP 1 From 9e75826ca802941f8b4c590d5237bfdd310a3fcb Mon Sep 17 00:00:00 2001 From: Peter Sarkozi Date: Sat, 17 Jun 2023 21:21:24 +0200 Subject: [PATCH 4/9] clang-format --- cores/beken-72xx/base/lt_api.c | 17 ++++++++--------- cores/beken-72xx/base/sdk_private.h | 4 ++-- cores/common/base/lt_api.c | 5 ++--- cores/common/base/lt_api.h | 2 +- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index 8c1e4384a..b4772c8d1 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -189,24 +189,23 @@ void lt_wdt_feed() { wdt_ctrl(WCMD_RELOAD_PERIOD, NULL); } - /** -* Deep Sleep -**/ + * Deep Sleep + **/ static PS_DEEP_CTRL_PARAM deep_sleep_param; void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { - deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_GPIO; - deep_sleep_param.gpio_index_map = gpio_index_map; - deep_sleep_param.gpio_edge_map = on_high ? 0 : 0xFFFFFFFF; + deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_GPIO; + deep_sleep_param.gpio_index_map = gpio_index_map; + deep_sleep_param.gpio_edge_map = on_high ? 0 : 0xFFFFFFFF; } void lt_deep_sleep_config_timer(uint32_t sleep_duration) { - deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; - deep_sleep_param.sleep_time = sleep_duration; + deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; + deep_sleep_param.sleep_time = sleep_duration; } void lt_deep_sleep_enter() { - bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM*)&deep_sleep_param); + bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM *)&deep_sleep_param); } diff --git a/cores/beken-72xx/base/sdk_private.h b/cores/beken-72xx/base/sdk_private.h index a5e5a700a..2f081896e 100644 --- a/cores/beken-72xx/base/sdk_private.h +++ b/cores/beken-72xx/base/sdk_private.h @@ -11,6 +11,8 @@ extern "C" { // other includes #include #include +#include +#include #include #include #include @@ -18,8 +20,6 @@ extern "C" { #include #include #include -#include -#include extern uint8_t system_mac[]; extern uint32_t wdt_ctrl(uint32_t cmd, void *param); diff --git a/cores/common/base/lt_api.c b/cores/common/base/lt_api.c index 355eb7d73..2544c9cd2 100644 --- a/cores/common/base/lt_api.c +++ b/cores/common/base/lt_api.c @@ -269,10 +269,9 @@ __attribute__((weak)) void lt_wdt_disable() {} __attribute__((weak)) void lt_wdt_feed() {} - /** -* Deep Sleep -**/ + * Deep Sleep + **/ __attribute__((weak)) void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); diff --git a/cores/common/base/lt_api.h b/cores/common/base/lt_api.h index 3ac67d105..cb7b5277f 100644 --- a/cores/common/base/lt_api.h +++ b/cores/common/base/lt_api.h @@ -11,6 +11,7 @@ extern "C" { #endif // __cplusplus #include "api/lt_cpu.h" +#include "api/lt_deep_sleep.h" #include "api/lt_device.h" #include "api/lt_flash.h" #include "api/lt_init.h" @@ -18,7 +19,6 @@ extern "C" { #include "api/lt_ota.h" #include "api/lt_utils.h" #include "api/lt_wdt.h" -#include "api/lt_deep_sleep.h" #ifdef __cplusplus } // extern "C" From 1a3a42e564c008c9dadd233f3e67462b245f1c28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20S=C3=A1rk=C3=B6zi?= Date: Sat, 24 Jun 2023 01:53:46 +0200 Subject: [PATCH 5/9] Support for multiple pins --- cores/beken-72xx/base/lt_api.c | 25 +++++++++++++++++++++---- cores/beken-72xx/base/sdk_private.h | 1 - 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index b4772c8d1..280325303 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -197,15 +197,32 @@ static PS_DEEP_CTRL_PARAM deep_sleep_param; void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_GPIO; - deep_sleep_param.gpio_index_map = gpio_index_map; - deep_sleep_param.gpio_edge_map = on_high ? 0 : 0xFFFFFFFF; + deep_sleep_param.gpio_index_map |= gpio_index_map; + if (on_high) { + deep_sleep_param.gpio_edge_map &= (~gpio_index_map); + } else { + deep_sleep_param.gpio_edge_map |= gpio_index_map; + } } void lt_deep_sleep_config_timer(uint32_t sleep_duration) { deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; - deep_sleep_param.sleep_time = sleep_duration; + uint64_t duration_math = 32768*sleep_duration; + if (duration_math > 0xFFFFFFFF) { + // Sleep forever + deep_sleep_param.sleep_time = 0xFFFFFFFF; + } else { + deep_sleep_param.sleep_time = (duration_math/1000) & 0xFFFFFFFF; + } } void lt_deep_sleep_enter() { - bk_enter_deep_sleep_mode((PS_DEEP_CTRL_PARAM *)&deep_sleep_param); + extern void sctrl_enter_rtos_deep_sleep(PS_DEEP_CTRL_PARAM *deep_param); + extern void ps_delay(volatile UINT16 times); + bk_misc_update_set_type(RESET_SOURCE_DEEPPS_GPIO); + GLOBAL_INT_DECLARATION(); + GLOBAL_INT_DISABLE(); + sctrl_enter_rtos_deep_sleep((PS_DEEP_CTRL_PARAM *)&deep_sleep_param); + ps_delay ( 500 ); + GLOBAL_INT_RESTORE(); } diff --git a/cores/beken-72xx/base/sdk_private.h b/cores/beken-72xx/base/sdk_private.h index 2f081896e..f50fb75cf 100644 --- a/cores/beken-72xx/base/sdk_private.h +++ b/cores/beken-72xx/base/sdk_private.h @@ -11,7 +11,6 @@ extern "C" { // other includes #include #include -#include #include #include #include From e435732ae5686a0e0a4686cb92fdc3474f69d694 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20S=C3=A1rk=C3=B6zi?= Date: Sat, 24 Jun 2023 23:16:55 +0200 Subject: [PATCH 6/9] Fix math --- cores/beken-72xx/base/lt_api.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index 280325303..c929e4c76 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -208,7 +208,7 @@ void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { void lt_deep_sleep_config_timer(uint32_t sleep_duration) { deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; uint64_t duration_math = 32768*sleep_duration; - if (duration_math > 0xFFFFFFFF) { + if (duration_math/1000 > 0xFFFFFFFF) { // Sleep forever deep_sleep_param.sleep_time = 0xFFFFFFFF; } else { From 6f7f516ff0d67e2df74c866f2eb5a348875ea316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20S=C3=A1rk=C3=B6zi?= Date: Sat, 24 Jun 2023 23:49:32 +0200 Subject: [PATCH 7/9] Add a way to unset GPIOs --- cores/beken-72xx/base/lt_api.c | 4 ++++ cores/common/base/api/lt_deep_sleep.h | 7 +++++++ cores/common/base/lt_api.c | 2 ++ 3 files changed, 13 insertions(+) diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index c929e4c76..15a508b08 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -205,6 +205,10 @@ void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { } } +void lt_deep_sleep_unset_gpio(uint32_t gpio_index_map) { + deep_sleep_param.gpio_index_map &= (~gpio_index_map); +} + void lt_deep_sleep_config_timer(uint32_t sleep_duration) { deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; uint64_t duration_math = 32768*sleep_duration; diff --git a/cores/common/base/api/lt_deep_sleep.h b/cores/common/base/api/lt_deep_sleep.h index 0a1cabfe5..f82da2f5e 100644 --- a/cores/common/base/api/lt_deep_sleep.h +++ b/cores/common/base/api/lt_deep_sleep.h @@ -12,6 +12,13 @@ */ void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); +/** + * @brief Disable GPIO Wakeup on given pins + * + * @param gpio_index_map bitMap of the pins we should disable wake up on + */ +void lt_deep_sleep_unset_gpio(uint32_t gpio_index_map); + /** * @brief Disable the hardware watchdog. * @param sleep_duration the time in seconds to sleep diff --git a/cores/common/base/lt_api.c b/cores/common/base/lt_api.c index 2544c9cd2..3140ad9fd 100644 --- a/cores/common/base/lt_api.c +++ b/cores/common/base/lt_api.c @@ -275,6 +275,8 @@ __attribute__((weak)) void lt_wdt_feed() {} __attribute__((weak)) void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); +__attribute__((weak)) void lt_deep_sleep_unset_gpio(uint32_t gpio_index_map); + __attribute__((weak)) void lt_deep_sleep_config_timer(uint32_t sleep_duration); __attribute__((weak)) void lt_deep_sleep_enter(); From 67d4c855ff4bcc2b97415213607e9ab42f95f3e1 Mon Sep 17 00:00:00 2001 From: Peter Sarkozi Date: Sat, 24 Jun 2023 23:52:04 +0200 Subject: [PATCH 8/9] Clang format --- cores/beken-72xx/base/lt_api.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cores/beken-72xx/base/lt_api.c b/cores/beken-72xx/base/lt_api.c index c929e4c76..47b5f3de4 100644 --- a/cores/beken-72xx/base/lt_api.c +++ b/cores/beken-72xx/base/lt_api.c @@ -207,22 +207,22 @@ void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high) { void lt_deep_sleep_config_timer(uint32_t sleep_duration) { deep_sleep_param.wake_up_way |= PS_DEEP_WAKEUP_RTC; - uint64_t duration_math = 32768*sleep_duration; - if (duration_math/1000 > 0xFFFFFFFF) { + uint64_t duration_math = 32768 * sleep_duration; + if (duration_math / 1000 > 0xFFFFFFFF) { // Sleep forever deep_sleep_param.sleep_time = 0xFFFFFFFF; } else { - deep_sleep_param.sleep_time = (duration_math/1000) & 0xFFFFFFFF; + deep_sleep_param.sleep_time = (duration_math / 1000) & 0xFFFFFFFF; } } void lt_deep_sleep_enter() { - extern void sctrl_enter_rtos_deep_sleep(PS_DEEP_CTRL_PARAM *deep_param); + extern void sctrl_enter_rtos_deep_sleep(PS_DEEP_CTRL_PARAM * deep_param); extern void ps_delay(volatile UINT16 times); bk_misc_update_set_type(RESET_SOURCE_DEEPPS_GPIO); GLOBAL_INT_DECLARATION(); GLOBAL_INT_DISABLE(); sctrl_enter_rtos_deep_sleep((PS_DEEP_CTRL_PARAM *)&deep_sleep_param); - ps_delay ( 500 ); + ps_delay(500); GLOBAL_INT_RESTORE(); } From e8b032be028ec612a4159162a607affeef9655ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20S=C3=A1rk=C3=B6zi?= Date: Sun, 25 Jun 2023 00:08:28 +0200 Subject: [PATCH 9/9] Update brief --- cores/common/base/api/lt_deep_sleep.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/common/base/api/lt_deep_sleep.h b/cores/common/base/api/lt_deep_sleep.h index f82da2f5e..c1349e205 100644 --- a/cores/common/base/api/lt_deep_sleep.h +++ b/cores/common/base/api/lt_deep_sleep.h @@ -20,7 +20,7 @@ void lt_deep_sleep_config_gpio(uint32_t gpio_index_map, bool on_high); void lt_deep_sleep_unset_gpio(uint32_t gpio_index_map); /** - * @brief Disable the hardware watchdog. + * @brief Set a sleep timer to wake up the device * @param sleep_duration the time in seconds to sleep */ void lt_deep_sleep_config_timer(uint32_t sleep_duration);