From 09745d279bec22d08e3fe586b5b5a61019b71836 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 12 Jul 2012 12:38:11 +0000 Subject: [PATCH] Make PM button logic configurable git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4934 7fd9a85b-ad96-42d3-883c-3090e2eb8679 --- nuttx/configs/stm3210e-eval/pm/defconfig | 1 + nuttx/configs/stm3210e-eval/src/Makefile | 2 +- .../stm3210e-eval/src/stm3210e-internal.h | 4 +- nuttx/configs/stm3210e-eval/src/up_idle.c | 48 ++++++++++++------- .../configs/stm3210e-eval/src/up_pmbuttons.c | 4 +- 5 files changed, 37 insertions(+), 22 deletions(-) diff --git a/nuttx/configs/stm3210e-eval/pm/defconfig b/nuttx/configs/stm3210e-eval/pm/defconfig index d261225ad..d5b0a75f9 100644 --- a/nuttx/configs/stm3210e-eval/pm/defconfig +++ b/nuttx/configs/stm3210e-eval/pm/defconfig @@ -473,6 +473,7 @@ CONFIG_IDLE_CUSTOM=y # Board/Application-Specific Power Management Configuration. # These settings are probably not meaningful outside of this configuration # +CONFIG_PM_BUTTONS=y CONFIG_PM_IRQBUTTONS_MIN=0 CONFIG_PM_IRQBUTTONS_MAX=7 CONFIG_PM_BUTTONS_NAME0="WAKEUP" diff --git a/nuttx/configs/stm3210e-eval/src/Makefile b/nuttx/configs/stm3210e-eval/src/Makefile index 2179bd6a9..871d01ff1 100644 --- a/nuttx/configs/stm3210e-eval/src/Makefile +++ b/nuttx/configs/stm3210e-eval/src/Makefile @@ -80,7 +80,7 @@ ifeq ($(CONFIG_PM_CUSTOMINIT),y) CSRCS += up_pm.c endif -ifeq ($(CONFIG_PM),y) +ifeq ($(CONFIG_PM_BUTTONS),y) CSRCS += up_pmbuttons.c endif diff --git a/nuttx/configs/stm3210e-eval/src/stm3210e-internal.h b/nuttx/configs/stm3210e-eval/src/stm3210e-internal.h index 0f31b6201..d0ff66cf4 100644 --- a/nuttx/configs/stm3210e-eval/src/stm3210e-internal.h +++ b/nuttx/configs/stm3210e-eval/src/stm3210e-internal.h @@ -313,7 +313,7 @@ void up_ledpminitialize(void); * ************************************************************************************/ -#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) +#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) && defined(CONFIG_PM_BUTTONS) void up_pmbuttons(void); #endif @@ -325,7 +325,7 @@ void up_pmbuttons(void); * ************************************************************************************/ -#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) +#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) && defined(CONFIG_PM_BUTTONS) void up_unregisterbuttons(void); #endif diff --git a/nuttx/configs/stm3210e-eval/src/up_idle.c b/nuttx/configs/stm3210e-eval/src/up_idle.c index a59996211..f68574bd8 100644 --- a/nuttx/configs/stm3210e-eval/src/up_idle.c +++ b/nuttx/configs/stm3210e-eval/src/up_idle.c @@ -86,7 +86,7 @@ * Private Data ****************************************************************************/ -#ifdef CONFIG_PM +#if defined(CONFIG_PM) && defined(CONFIG_RTC_ALARM) static void up_alarmcb(void); #endif @@ -105,7 +105,9 @@ static void up_alarmcb(void); #ifdef CONFIG_PM static void up_idlepm(void) { +#ifdef CONFIG_RTC_ALARM struct timespec alarmtime; +#endif static enum pm_state_e oldstate = PM_NORMAL; enum pm_state_e newstate; irqstate_t flags; @@ -143,21 +145,17 @@ static void up_idlepm(void) { case PM_NORMAL: { - /* Cancel the alarm that was set in PM_STANDBY */ - - if (oldstate == PM_STANDBY) - { - ret = up_rtc_cancelalarm(); - if (ret < 0) - { - lldbg("Warning: Cancel alarm failed\n"); - } - } } break; case PM_IDLE: { + /* The wake-up event is really dependent upon the application + * an resources provided by the application. However, + * CONFIG_PM_BUTTONS may defined to support PM testing. + */ + +#ifdef CONFIG_PM_BUTTONS /* Check if the buttons have already been registered */ up_unregisterbuttons(); @@ -167,11 +165,18 @@ static void up_idlepm(void) */ up_pmbuttons(); +#endif } break; case PM_STANDBY: { + /* The wake-up event is really dependent upon the application + * an resources provided by the application. However, + * CONFIG_PM_BUTTONS may defined to support PM testing. + */ + +#ifdef CONFIG_PM_BUTTONS /* Check if the buttons have already been registered */ up_unregisterbuttons(); @@ -179,11 +184,12 @@ static void up_idlepm(void) /* Configure all the buttons as wakeup EXTI */ up_pmbuttons(); +#endif +#ifdef CONFIG_RTC_ALARM + /* Configure the RTC alarm to Auto Wake the system */ (void)up_rtc_gettime(&alarmtime); - /* Configure the RTC alarm to Auto Wake the system */ - alarmtime.tv_sec += CONFIG_PM_ALARM_SEC; alarmtime.tv_nsec += CONFIG_PM_ALARM_NSEC; @@ -204,9 +210,9 @@ static void up_idlepm(void) ret = up_rtc_setalarm(&alarmtime, &up_alarmcb); if (ret < 0) { - lldbg("Warning: The alarm is already set.\n"); + lldbg("Warning: The alarm is already set\n"); } - +#endif /* Call the STM32 stop mode */ stm32_pmstop(true); @@ -216,7 +222,15 @@ static void up_idlepm(void) * operation. */ - up_rtc_cancelalarm(); +#ifdef CONFIG_RTC_ALARM + ret = up_rtc_cancelalarm(); + if (ret < 0) + { + lldbg("Warning: Cancel alarm failed\n"); + } +#endif + /* Resume normal operation */ + pm_changestate(PM_NORMAL); newstate = PM_NORMAL; } @@ -256,7 +270,7 @@ errout: * ************************************************************************************/ -#ifdef CONFIG_PM +#if defined(CONFIG_PM) && defined(CONFIG_RTC_ALARM) static void up_alarmcb(void) { /* This alarm occurs because there wasn't any EXTI interrupt during the diff --git a/nuttx/configs/stm3210e-eval/src/up_pmbuttons.c b/nuttx/configs/stm3210e-eval/src/up_pmbuttons.c index ab7fd549e..0a214d709 100644 --- a/nuttx/configs/stm3210e-eval/src/up_pmbuttons.c +++ b/nuttx/configs/stm3210e-eval/src/up_pmbuttons.c @@ -53,7 +53,7 @@ #include "stm32_pm.h" #include "stm3210e-internal.h" -#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) +#if defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) && defined(CONFIG_PM_BUTTONS) /**************************************************************************** * Pre-processor Definitions @@ -406,4 +406,4 @@ int i; #endif } -#endif /* defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) */ +#endif /* defined(CONFIG_PM) && defined(CONFIG_IDLE_CUSTOM) && defined(CONFIG_PM_BUTTONS) */