/** @file pwr.h
 * Module handling the power management's control
 *
 * The module provides functions to enter the different sleep states, control
 * and filter wakeup events (WKUP and RTC) and configure power voltage
 * detection
 */

#ifndef _PWR_H_
#define _PWR_H_

//--includes--------------------------------------------------------------------

//--type definitions------------------------------------------------------------

enum PwrWakeupSpeed {
	PWR_WAKEUP_SPEED_FAST, //faster wakeup, higher consumption in stop mode
	PWR_WAKEUP_SPEED_SLOW, //slower wakeup, lower consumption in stop mode
};

enum PwrPvdThreshold {
	PWR_PVD_THRESHOLD_2_2V,
	PWR_PVD_THRESHOLD_2_3V,
	PWR_PVD_THRESHOLD_2_4V,
	PWR_PVD_THRESHOLD_2_5V,
	PWR_PVD_THRESHOLD_2_6V,
	PWR_PVD_THRESHOLD_2_7V,
	PWR_PVD_THRESHOLD_2_8V,
	PWR_PVD_THRESHOLD_2_9V,

};

typedef void (*PwrPvdCallback)(void);


//--functions-------------------------------------------------------------------

void pwr_sleep(void);
void pwr_stop(enum PwrWakeupSpeed speed);
void pwr_standby(void);

bool pwr_wakeup_event(void);
bool pwr_standby_exit(void);

void pwr_configure_bkp_write(bool enable);
void pwr_configure_wakeup_pin(bool enable);
void pwr_configure_pvd(enum PwrPvdThreshold treshold);


#endif //_PWR_H_

