/**
******************************************************************************
* @file STM32LowPower.h
* @author Frederic Pillon
* @brief Provides a STM32 Low Power interface with Arduino
*
******************************************************************************
* @attention
*
*
© COPYRIGHT(c) 2020 STMicroelectronics
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
#ifndef _STM32_LOW_POWER_H_
#define _STM32_LOW_POWER_H_
#include
#include "low_power.h"
// Check if PWR HAL enable in variants/board_name/stm32yzxx_hal_conf.h
#ifndef HAL_PWR_MODULE_ENABLED
#error "PWR configuration is missing. Check flag HAL_PWR_MODULE_ENABLED in variants/board_name/stm32yzxx_hal_conf.h"
#endif
#include "STM32RTC.h"
enum LP_Mode : uint8_t {
IDLE_MODE,
SLEEP_MODE,
DEEP_SLEEP_MODE,
SHUTDOWN_MODE
};
typedef void (*voidFuncPtrVoid)(void) ;
class STM32LowPower {
public:
STM32LowPower();
void begin(void);
void idle(uint32_t ms = 0);
void idle(int ms)
{
idle((uint32_t)ms);
}
void sleep(uint32_t ms = 0);
void sleep(int ms)
{
sleep((uint32_t)ms);
}
void deepSleep(uint32_t ms = 0);
void deepSleep(int ms)
{
deepSleep((uint32_t)ms);
}
void shutdown(uint32_t ms = 0);
void shutdown(int ms)
{
shutdown((uint32_t)ms);
}
void attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode, LP_Mode LowPowerMode = SHUTDOWN_MODE);
void enableWakeupFrom(HardwareSerial *serial, voidFuncPtrVoid callback);
void enableWakeupFrom(STM32RTC *rtc, voidFuncPtr callback, void *data = NULL);
private:
bool _configured; // Low Power mode initialization status
serial_t *_serial; // Serial for wakeup from deep sleep
bool _rtc_wakeup; // Is RTC wakeup?
void programRtcWakeUp(uint32_t ms, LP_Mode lp_mode);
void setAlarmTime(uint32_t ms, STM32RTC &rtc);
};
extern STM32LowPower LowPower;
#endif // _STM32_LOW_POWER_H_