mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Embed: (wiki syntax)

« Back to documentation index

Sleep manager API

The sleep manager provides API to automatically select sleep mode. More...

Modules

 Sleep manager API tests
 

Tests to validate the proper implementation of the sleep manager.


Functions

void sleep_manager_lock_deep_sleep_internal (void)
 Lock the deep sleep mode.
void sleep_manager_unlock_deep_sleep_internal (void)
 Unlock the deep sleep mode.
bool sleep_manager_can_deep_sleep (void)
 Get the status of deep sleep allowance for a target.
bool sleep_manager_can_deep_sleep_test_check (void)
 Check if the target can deep sleep within a period of time.
void sleep_manager_sleep_auto (void)
 Enter auto selected sleep mode.
static void sleep (void)
 Send the microcontroller to sleep.
 MBED_DEPRECATED_SINCE ("mbed-os-5.6","One entry point for an application, use sleep()") static inline void deepsleep(void)
 Send the microcontroller to deep sleep.
us_timestamp_t mbed_time_sleep (void)
 Provides the time spent in sleep mode since boot.
us_timestamp_t mbed_time_deepsleep (void)
 Provides the time spent in deep sleep mode since boot.
us_timestamp_t mbed_time_idle (void)
 Provides the time spent in idle mode since boot.
us_timestamp_t mbed_uptime (void)
 Provides the time since the system is up i.e.

Detailed Description

The sleep manager provides API to automatically select sleep mode.

There are two sleep modes:

  • sleep
  • deepsleep

Use locking/unlocking deepsleep for drivers that depend on features that are not allowed (=disabled) during the deepsleep. For instance, high frequency clocks.

# Defined behavior * The lock is a counter * The lock can be locked up to USHRT_MAX - Verified by test_lock_eq_ushrt_max * The lock has to be equally unlocked as locked - Verified by test_lock_eq_ushrt_max * The function sleep_manager_lock_deep_sleep_internal() locks the automatic deep mode selection - Verified by test_lock_unlock * The function sleep_manager_unlock_deep_sleep_internal() unlocks the automatic deep mode selection - Verified by test_lock_unlock * The function sleep_manager_sleep_auto() chooses the sleep or deep sleep modes based on the lock - Verified by test_sleep_auto * The function sleep_manager_lock_deep_sleep_internal() is IRQ and thread safe - Verified by sleep_manager_multithread_test and sleep_manager_irq_test * The function sleep_manager_unlock_deep_sleep_internal() is IRQ and thread safe - Verified by sleep_manager_multithread_test and sleep_manager_irq_test * The function sleep_manager_sleep_auto() is IRQ and thread safe

Example:

 void driver::handler()
 {
     if (_sensor.get_event()) {
         // any event - we are finished, unlock the deepsleep
         sleep_manager_unlock_deep_sleep();
         _callback();
     }
 }

 int driver::measure(event_t event, callback_t& callback)
 {
      _callback = callback;
      sleep_manager_lock_deep_sleep();
      // start async transaction, we are waiting for an event
      return _sensor.start(event, callback);
 }

Function Documentation

MBED_DEPRECATED_SINCE ( "mbed-os-5.6"  ,
"One entry point for an   application,
use sleep()"   
)

Send the microcontroller to deep sleep.

Note:
This function can be a noop if not implemented by the platform.
This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined)

This processor is setup ready for deep sleep, and sent to sleep. This mode has the same sleep features as sleep plus it powers down peripherals and clocks. All state is still maintained.

The processor can only be woken up by an external interrupt on a pin or a watchdog timer.

Note:
The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be able to access the LocalFileSystem
Note:
This function can be a noop if not implemented by the platform.
This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined)

This processor is setup ready for deep sleep, and sent to sleep. This mode has the same sleep features as sleep plus it powers down peripherals and clocks. All state is still maintained.

The processor can only be woken up by an external interrupt on a pin or a watchdog timer.

Note:
The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be able to access the LocalFileSystem

Definition at line 223 of file cmsis/BUILD/mbed/platform/mbed_power_mgmt.h.

us_timestamp_t mbed_time_deepsleep ( void   )

Provides the time spent in deep sleep mode since boot.

Returns:
Time spent in deep sleep
Note:
Works only if platform supports LP ticker.

Definition at line 69 of file mbed_sleep_manager.c.

us_timestamp_t mbed_time_idle ( void   )

Provides the time spent in idle mode since boot.

Returns:
Idle thread time.
Note:
Works only if platform supports LP ticker.

Definition at line 54 of file mbed_sleep_manager.c.

us_timestamp_t mbed_time_sleep ( void   )

Provides the time spent in sleep mode since boot.

Returns:
Time spent in sleep
Note:
Works only if platform supports LP ticker.

Definition at line 64 of file mbed_sleep_manager.c.

us_timestamp_t mbed_uptime ( void   )

Provides the time since the system is up i.e.

boot.

Returns:
System uptime.
Note:
Works only if platform supports LP ticker.

Definition at line 59 of file mbed_sleep_manager.c.

static void sleep ( void   ) [static]

Send the microcontroller to sleep.

Note:
This function can be a noop if not implemented by the platform.
This function will be a noop in debug mode (debug build profile when MBED_DEBUG is defined).
This function will be a noop if the following conditions are met:
  • The RTOS is present
  • The processor turn off the Systick clock during sleep
  • The target does not implement tickless mode

The processor is setup ready for sleep, and sent to sleep using __WFI(). In this mode, the system clock to the core is stopped until a reset or an interrupt occurs. This eliminates dynamic power used by the processor, memory systems and buses. The processor, peripheral and memory state are maintained, and the peripherals continue to work and can generate interrupts.

The processor can be woken up by any internal peripheral interrupt or external pin interrupt.

Note:
The mbed interface semihosting is disconnected as part of going to sleep, and can not be restored. Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be able to access the LocalFileSystem

Definition at line 194 of file cmsis/BUILD/mbed/platform/mbed_power_mgmt.h.

bool sleep_manager_can_deep_sleep ( void   )

Get the status of deep sleep allowance for a target.

Returns:
true if a target can go to deepsleep, false otherwise

Definition at line 245 of file mbed_sleep_manager.c.

bool sleep_manager_can_deep_sleep_test_check ( void   )

Check if the target can deep sleep within a period of time.

This function in intended for use in testing. The amount of time this functions waits for deeps sleep to be available is currently 2ms. This may change in the future depending on testing requirements.

Returns:
true if a target can go to deepsleep, false otherwise

Definition at line 187 of file mbed_sleep_manager.c.

void sleep_manager_lock_deep_sleep_internal ( void   )

Lock the deep sleep mode.

This locks the automatic deep mode selection. sleep_manager_sleep_auto() will ignore deepsleep mode if this function is invoked at least once (the internal counter is non-zero)

Use this locking mechanism for interrupt driven API that are running in the background and deepsleep could affect their functionality

The lock is a counter, can be locked up to USHRT_MAX This function is IRQ and thread safe

Definition at line 235 of file mbed_sleep_manager.c.

void sleep_manager_sleep_auto ( void   )

Enter auto selected sleep mode.

It chooses the sleep or deepsleep modes based on the deepsleep locking counter

This function is IRQ and thread safe

Note:
If MBED_DEBUG is defined, only hal_sleep is allowed. This ensures the debugger to be active for debug modes.

Definition at line 200 of file mbed_sleep_manager.c.

void sleep_manager_unlock_deep_sleep_internal ( void   )

Unlock the deep sleep mode.

Use unlocking in pair with sleep_manager_lock_deep_sleep().

The lock is a counter, should be equally unlocked as locked This function is IRQ and thread safe

Definition at line 240 of file mbed_sleep_manager.c.