STM32CubeWL/Middlewares/Third_Party/LoRaWAN/LmHandler/NvmDataMgmt.c

97 lines
2.7 KiB
C

/*!
* \file NvmDataMgmt.c
*
* \brief NVM context management implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
* ______ _
* / _____) _ | |
* ( (____ _____ ____ _| |_ _____ ____| |__
* \____ \| ___ | (_ _) ___ |/ ___) _ \
* _____) ) ____| | | || |_| ____( (___| | | |
* (______/|_____)_|_|_| \__)_____)\____)_| |_|
* (C)2013-2017 Semtech
*
* ___ _____ _ ___ _ _____ ___ ___ ___ ___
* / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __|
* \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _|
* |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
* embedded.connectivity.solutions===============
*
* \endcode
*
* \author Miguel Luis ( Semtech )
*
* \author Gregory Cristian ( Semtech )
*
* \author Daniel Jaeckle ( STACKFORCE )
*
* \author Johannes Bruder ( STACKFORCE )
*/
/**
******************************************************************************
*
* Portions COPYRIGHT 2020 STMicroelectronics
*
* @file NvmDataMgmt.c
* @author MCD Application Team
* @brief NVM context management implementation
******************************************************************************
*/
#include "utilities.h"
#include "LoRaMac.h"
#include "NvmDataMgmt.h"
/*!
* Enables/Disables the context storage management storage.
* Must be enabled for LoRaWAN 1.0.4 or later.
*/
#ifndef CONTEXT_MANAGEMENT_ENABLED
#define CONTEXT_MANAGEMENT_ENABLED 0
#endif /* CONTEXT_MANAGEMENT_ENABLED */
#if ( CONTEXT_MANAGEMENT_ENABLED == 1 )
static uint16_t NvmNotifyFlags = 0;
#endif /* CONTEXT_MANAGEMENT_ENABLED == 1 */
void NvmDataMgmtEvent( uint16_t notifyFlags )
{
#if ( CONTEXT_MANAGEMENT_ENABLED == 1 )
NvmNotifyFlags |= notifyFlags;
#endif /* CONTEXT_MANAGEMENT_ENABLED == 1 */
}
int32_t NvmDataMgmtStoreBegin( void )
{
#if ( CONTEXT_MANAGEMENT_ENABLED == 1 )
/* Input checks */
if( NvmNotifyFlags == LORAMAC_NVM_NOTIFY_FLAG_NONE )
{
/* There was no update. */
return NVM_DATA_NO_UPDATED_DATA;
}
if( LoRaMacStop( ) != LORAMAC_STATUS_OK )
{
return NVM_DATA_NOT_AVAILABLE;
}
return NVM_DATA_OK;
#else
return NVM_DATA_DISABLED;
#endif /* CONTEXT_MANAGEMENT_ENABLED */
}
int32_t NvmDataMgmtStoreEnd( void )
{
#if ( CONTEXT_MANAGEMENT_ENABLED == 1 )
/* Reset notification flags */
NvmNotifyFlags = LORAMAC_NVM_NOTIFY_FLAG_NONE;
/* Resume LoRaMac */
LoRaMacStart( );
return NVM_DATA_OK;
#else
return NVM_DATA_DISABLED;
#endif /* CONTEXT_MANAGEMENT_ENABLED */
}