Fahad Mirza
/
Nucleo_HXC900
A demo application for HXC900 LoRaWAN module using Nucleo-L053R8.
Diff: low_power_manager.c
- Revision:
- 0:a0c5877bd360
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/low_power_manager.c Thu Jul 12 00:50:48 2018 +0000 @@ -0,0 +1,188 @@ +/** + ****************************************************************************** + * @file low_power_manager.c + * @author MCD Application Team + * @version V1.1.4 + * @date 08-January-2018 + * @brief Low Power Manager + ****************************************************************************** + * @attention + * + * <h2><center>© Copyright (c) 2016 STMicroelectronics International N.V. + * All rights reserved.</center></h2> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted, provided that the following conditions are met: + * + * 1. Redistribution of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of other + * contributors to this software may be used to endorse or promote products + * derived from this software without specific written permission. + * 4. This software, including modifications and/or derivative works of this + * software, must execute solely and exclusively on microcontroller or + * microprocessor devices manufactured by or for STMicroelectronics. + * 5. Redistribution and use of this software other than as permitted under + * this license is void and will automatically terminate your rights under + * this license. + * + * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY + * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT + * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "hw.h" +#include "low_power_manager.h" + +/* Private typedef -----------------------------------------------------------*/ +/* Private defines -----------------------------------------------------------*/ +/* Private macros ------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +static uint32_t StopModeDisable = 0; +static uint32_t OffModeDisable = 0; + +/* Global variables ----------------------------------------------------------*/ +/* Private function prototypes -----------------------------------------------*/ +/* Functions Definition ------------------------------------------------------*/ +void LPM_SetOffMode(LPM_Id_t id, LPM_SetMode_t mode) +{ + BACKUP_PRIMASK(); + + DISABLE_IRQ( ); + + + switch(mode) + { + case LPM_Disable: + { + OffModeDisable |= (uint32_t)id; + break; + } + case LPM_Enable: + { + OffModeDisable &= ~(uint32_t)id; + break; + } + default: + break; + } + + RESTORE_PRIMASK( ); + + return; +} + +void LPM_SetStopMode(LPM_Id_t id, LPM_SetMode_t mode) +{ + BACKUP_PRIMASK(); + + DISABLE_IRQ( ); + + + switch(mode) + { + case LPM_Disable: + { + StopModeDisable |= (uint32_t)id; + break; + } + case LPM_Enable: + { + StopModeDisable &= ~(uint32_t)id; + break; + } + default: + break; + } + RESTORE_PRIMASK( ); + + return; +} + +void LPM_EnterLowPower(void) +{ + if( StopModeDisable ) + { + /** + * SLEEP mode is required + */ + LPM_EnterSleepMode(); + LPM_ExitSleepMode(); + } + else + { + if( OffModeDisable ) + { + /** + * STOP mode is required + */ + LPM_EnterStopMode(); + LPM_ExitStopMode(); + } + else + { + /** + * OFF mode is required + */ + LPM_EnterOffMode(); + LPM_ExitOffMode(); + } + } + + return; +} + +LPM_GetMode_t LPM_GetMode(void) +{ + LPM_GetMode_t mode_selected; + + BACKUP_PRIMASK(); + + DISABLE_IRQ( ); + + if(StopModeDisable ) + { + mode_selected = LPM_SleepMode; + } + else + { + if(OffModeDisable) + { + mode_selected = LPM_StopMode; + } + else + { + mode_selected = LPM_OffMode; + } + } + + RESTORE_PRIMASK( ); + + return mode_selected; +} + +__weak void LPM_EnterSleepMode(void) {} +__weak void LPM_ExitSleepMode(void) {} +__weak void LPM_EnterStopMode(void) {} +__weak void LPM_ExitStopMode(void) {} +__weak void LPM_EnterOffMode(void) {} +__weak void LPM_ExitOffMode(void) {} + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ +