Add ability to have a callback when wakeups happen.

Change-Id: I02ff0e035bf8a97bd1a3b6b1699181fc3a137d79
This commit is contained in:
Dianne Hackborn 2014-03-07 11:00:39 -08:00
parent 7d2998ea18
commit 9552cdf434
2 changed files with 23 additions and 0 deletions

View file

@ -25,6 +25,7 @@
#include <unistd.h>
#define LOG_TAG "libsuspend"
//#define LOG_NDEBUG 0
#include <cutils/log.h>
#include "autosuspend_ops.h"
@ -37,6 +38,7 @@ static int wakeup_count_fd;
static pthread_t suspend_thread;
static sem_t suspend_lockout;
static const char *sleep_state = "mem";
static void (*wakeup_func)(void) = NULL;
static void *suspend_thread_func(void *arg __attribute__((unused)))
{
@ -80,6 +82,11 @@ static void *suspend_thread_func(void *arg __attribute__((unused)))
if (ret < 0) {
strerror_r(errno, buf, sizeof(buf));
ALOGE("Error writing to %s: %s\n", SYS_POWER_STATE, buf);
} else {
void (*func)(void) = wakeup_func;
if (func != NULL) {
(*func)();
}
}
}
@ -131,6 +138,15 @@ static int autosuspend_wakeup_count_disable(void)
return ret;
}
void set_wakeup_callback(void (*func)(void))
{
if (wakeup_func != NULL) {
ALOGE("Duplicate wakeup callback applied, keeping original");
return;
}
wakeup_func = func;
}
struct autosuspend_ops autosuspend_wakeup_count_ops = {
.enable = autosuspend_wakeup_count_enable,
.disable = autosuspend_wakeup_count_disable,

View file

@ -43,6 +43,13 @@ int autosuspend_enable(void);
*/
int autosuspend_disable(void);
/*
* set_wakeup_callback
*
* Set a function to be called each time the device wakes up from suspend.
*/
void set_wakeup_callback(void (*func)(void));
__END_DECLS
#endif