From f2e7858d3a6862593297b9eda5edb451b84cf098 Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 1 Sep 2011 15:09:49 +0000 Subject: [PATCH] Add NSH date command git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3932 42af7a65-404d-4744-a932-0658087f49c3 --- Documentation/NuttX.html | 2 + arch/arm/src/stm32/stm32_rtc.c | 13 +-- configs/vsn/nsh/defconfig | 6 +- include/nuttx/pm.h | 175 ++++++++++++++++++++++++++------- 4 files changed, 151 insertions(+), 45 deletions(-) diff --git a/Documentation/NuttX.html b/Documentation/NuttX.html index 383e7d6a77..4e603e0d02 100644 --- a/Documentation/NuttX.html +++ b/Documentation/NuttX.html @@ -1377,6 +1377,8 @@
  • Support for the NetClamps VSN was included in version 5.18 of NuttX. + Uros Platise added support for timers, RTC, I2C, FLASH, extended power management + and other features.
  • diff --git a/arch/arm/src/stm32/stm32_rtc.c b/arch/arm/src/stm32/stm32_rtc.c index 17b6110084..68c4bc30d9 100644 --- a/arch/arm/src/stm32/stm32_rtc.c +++ b/arch/arm/src/stm32/stm32_rtc.c @@ -222,11 +222,12 @@ clock_t up_rtc_getclock(void) * * \param time The unit depends on the prescaler value **/ -void up_rtc_setclock(clock_t clock) + +void up_rtc_setclock(clock_t newclock) { stm32_rtc_beginwr(); - putreg16(clock >> 16, STM32_RTC_CNTH); - putreg16(clock & 0xFFFF, STM32_RTC_CNTL); + putreg16(newclock >> 16, STM32_RTC_CNTH); + putreg16(newclock & 0xFFFF, STM32_RTC_CNTL); stm32_rtc_endwr(); } @@ -263,14 +264,14 @@ time_t up_rtc_gettime(void) } -void up_rtc_settime(time_t time) +void up_rtc_settime(time_t newtime) { /* Do reverse compared to gettime above */ - uint32_t time_lsb = time << RTC_CLOCKS_SHIFT | + uint32_t time_lsb = newtime << RTC_CLOCKS_SHIFT | (up_rtc_getclock() & ((1<> (32-RTC_CLOCKS_SHIFT); + uint32_t time_msb = newtime >> (32-RTC_CLOCKS_SHIFT); irqstate_t irqs = irqsave(); diff --git a/configs/vsn/nsh/defconfig b/configs/vsn/nsh/defconfig index 1b979ad166..06da39faa5 100755 --- a/configs/vsn/nsh/defconfig +++ b/configs/vsn/nsh/defconfig @@ -398,9 +398,9 @@ CONFIG_ARCH_LOWPUTC=y CONFIG_RR_INTERVAL=200 CONFIG_SCHED_INSTRUMENTATION=n CONFIG_TASK_NAME_SIZE=16 -CONFIG_START_YEAR=2009 -CONFIG_START_MONTH=9 -CONFIG_START_DAY=21 +CONFIG_START_YEAR=2011 +CONFIG_START_MONTH=8 +CONFIG_START_DAY=23 CONFIG_GREGORIAN_TIME=n CONFIG_JULIAN_TIME=n CONFIG_DEV_CONSOLE=y diff --git a/include/nuttx/pm.h b/include/nuttx/pm.h index f40bca61f8..184f00e9c3 100644 --- a/include/nuttx/pm.h +++ b/include/nuttx/pm.h @@ -33,6 +33,27 @@ * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ +/* Definition of terms. Various "sleep" and low power consumption states + * have various names and are sometimes used in conflicting ways. In the + * PM logic, we will use the following terminology: + * + * NORMAL - The normal, full power operating mode. + * REDUCED - This is still basically normal operational mode, but with some + * simple changes to reduce power consumption. Perhaps this just + * means just dimming the backlight. + * STANDBY - Standby is a very low power consumption mode. It is the lowest + * power from which the system can recover quickly. + * SLEEP - The lowest power consumption mode. It may require some time + * to get back to normal operation from SLEEP (some parts may + * even require going through reset). + * + * State changes always proceed from higher to lower power usage: + * + * NORMAL->REDUCED->STANDBY->SLEEP + * ^ | | | + * | V V V + * +-------+---------+--------+ + */ #ifndef __INCLUDE_NUTTX_PM_H #define __INCLUDE_NUTTX_PM_H @@ -42,11 +63,30 @@ ****************************************************************************/ #include -#include + +#ifdef CONFIG_PM /**************************************************************************** * Pre-Processor Definitions ****************************************************************************/ +/* Configuration ************************************************************/ +/* Time slices */ + +#ifndef CONFIG_PM_SLICEMS +# define CONFIG_PM_SLICEMS 100 /* Default is 100 msec */ +#endif + +#ifndef CONFIG_PM_NREDUCED +# define CONFIG_PM_NREDUCED 30 /* Thiry IDLE slices to enter reduced mode */ +#endif + +#ifndef CONFIG_PM_NSTANDBY +# define CONFIG_PM_NSTANDBY 80 /* Eight IDLE slices to enter standby mode */ +#endif + +#ifndef CONFIG_PM_NSLEEP +# define CONFIG_PM_NSLEEP 150 /* 150 IDLE slices to enter standby mode */ +#endif /**************************************************************************** * Public Types @@ -56,33 +96,31 @@ * state indication is the state transition event. */ -enum pm_event_e +enum pm_state_e { - PM_IDLE = 0, /* Drivers will receive periodic idle indications. The driver - * may use these IDLE indications to perform driver-specific - * power optimizations. - */ - PM_SLEEP_PREP, /* This is a warning that the system is about to enter into - * sleep mode. The driver should begin whatever operations - * that may be required to enter sleep mode. The driver - * may abort the sleep mode by returning a non-zero value - * from the callback function. - */ - PM_STOP_PREP, /* This is a warning that the system is about to enter into - * stop mode. The driver should begin whatever operations - * that may be required to enter stop mode. The driver - * may abort the stop mode by returning a non-zero value - * from the callback function. - */ - PM_SLEEP, /* The system is entering sleep mode. The driver should - * already be prepared for this mode. - */ - PM_STOP, /* The system is entering stop mode. The driver should - * already be prepared for this mode. - */ - PM_RESUME, /* The system resuming normal operation. The driver should - * reinitialize for normal operation. - */ + PM_REDUCED = 0, /* Drivers will receive periodic this indications if it is + * appropriate to enter a simple reduced power state. This + * would include simple things such as displaying display back- + * lighting. The driver should essentially be ready to resume + * normal activity instantly. + * + * PM_REDUCED may be followed by PM_STANDBY or PM_RESUME. + */ + PM_STANDBY, /* The system is entering standby mode. The driver should + * already be prepared for this mode. + * + * PM_STANDBY may be followed PM_SLEEP or by PM_RESUME + */ + PM_SLEEP, /* The system is entering deep sleep mode. The driver should + * already be prepared for this mode. + * + * PM_SLEEP may be following by PM_RESUME + */ + PM_RESUME, /* The system is resuming normal operation. The driver should + * reinitialize for normal operation. + * + * PM_RESUME may be followed by PM_REDUCED. + */ } /* This structure contain pointers callback functions in the driver. These @@ -93,7 +131,53 @@ enum pm_event_e struct pm_callback_s { struct pm_callback_s *flink; /* Supports a singly linked list */ - int (*notify)(enum pm_event_e pmevent); /* PM event callback */ + + /************************************************************************** + * Name: prepare + * + * Description: + * Notify the driver to prepare for a new power confition .This is a + * warning that the system is about to enter into a new power state. The + * driver should begin whatever operations that may be required to enter + * power state. The driver may abort the state change mode by returning + * a non-zero value from the callback function + * + * Input Parameters: + * cb - Returned to the driver. The driver version of the callback + * strucure may include additional, driver-specific state + * data at the end of the structure. + * pmstate - Idenfifies the new PM state + * + * Returned Value: + * 0 (OK) means the event was successfully processed. Non-zero means + * means that the driver is not prepared to perform the tasks needed + * achieve this power setting. + * + **************************************************************************/ + + int (*prepare)(FAR struct pm_callback_s *cb, enum pm_state_e pmstate); + + /************************************************************************** + * Name: notify + * + * Description: + * Notify the driver of new power state. This callback is called after + * all drivers have had the opportunity to prepare for the new power + * state. + * + * Input Parameters: + * cb - Returned to the driver. The driver version of the callback + * strucure may include additional, driver-specific state + * data at the end of the structure. + * pmstate - Idenfifies the new PM state + * + * Returned Value: + * 0 (OK) means the event was successfully processed. Non-zero means + * means that the driver failed to enter the power mode. + * + **************************************************************************/ + + int (*notify)(FAR struct pm_callback_s *cb, enum pm_state_e pmstate); } /**************************************************************************** @@ -128,29 +212,41 @@ extern "C" { * ****************************************************************************/ -EXTERN int pm_register(FAR const struct pm_callback_s *callbacks); +EXTERN int pm_register(FAR struct pm_callback_s *callbacks); /**************************************************************************** - * Name: pm_broadcast + * Name: pm_changestate * * Description: * This function is used to platform-specific power managmeent logic. It - * will announce the power management event to all drivers that have - * registered for power management event callbacks. + * will announce the power management power management state change to all + * drivers that have registered for power management event callbacks. * - * + * Input Parameters: + * pmstate - Idenfifies the new PM state + * + * Returned Value: + * 0 (OK) means that the callback function for all registered drivers + * returned OK (meaning that they accept the state change). * ****************************************************************************/ -EXTERN int pm_broadcast(enum pm_event_s pmevent); +EXTERN int pm_changestate(enum pm_event_s pmstate); /**************************************************************************** * Name: pm_activity * * Description: * This function is called by a device driver to indicate that it is - * performing meaningful activities (non-idle). This will restart a - * idle timer and prevent entering reduced power states. + * performing meaningful activities (non-idle). This increment an activty + * cound and/or will restart a idle timer and prevent entering reduced + * power states. + * + * Input Parameters: + * None + * + * Returned Value: + * The current activity count. * ****************************************************************************/ @@ -164,6 +260,12 @@ EXTERN int pm_activity(void); * was called. A count of zero will indicate that no meaningful activity * occurred since the last time this function was called. * + * Input Parameters: + * None + * + * Returned Value: + * The current activity count. + * ****************************************************************************/ EXTERN int pm_checkactivity(void); @@ -174,4 +276,5 @@ EXTERN int pm_checkactivity(void); #endif #endif /* __ASSEMBLY__ */ +#endif /* CONFIG_PM */ #endif /* __INCLUDE_NUTTX_PM_H */