#ifndef __FREERTOS_PMU_H_
#define __FREERTOS_PMU_H_

#include "sleep_ex_api.h"

#define BIT(n)                   (1<<n)
// wakelock for system usage
#define WAKELOCK_OS              BIT(0)
#define WAKELOCK_WLAN            BIT(1)
#define WAKELOCK_LOGUART         BIT(2)
#define WAKELOCK_SDIO_DEVICE     BIT(3)

// wakelock for user defined
#define WAKELOCK_USER_BASE       BIT(16)

#if 0
#define DEFAULT_WAKELOCK         (0)
#else
// default locked by OS and not to sleep until OS release wakelock in somewhere
#define DEFAULT_WAKELOCK         (WAKELOCK_OS)
#endif

#define DEFAULT_WAKEUP_EVENT (SLEEP_WAKEUP_BY_STIMER | SLEEP_WAKEUP_BY_GTIMER | SLEEP_WAKEUP_BY_GPIO_INT | SLEEP_WAKEUP_BY_WLAN)

void acquire_wakelock(uint32_t lock_id);
void release_wakelock(uint32_t lock_id);
uint32_t get_wakelock_status();
#if (configGENERATE_RUN_TIME_STATS == 1)
void get_wakelock_hold_stats( char *pcWriteBuffer );
void clean_wakelock_stat();
#endif

void add_wakeup_event(uint32_t event);
void del_wakeup_event(uint32_t event);

void register_pre_sleep_callback( void (*pre_sleep_cb)(unsigned int) );
void register_post_sleep_callback( void (*post_sleep_cb)(unsigned int) );

#endif