210 lines
6.8 KiB
C
210 lines
6.8 KiB
C
|
|
||
|
/******************************************************************************
|
||
|
* @attention
|
||
|
*
|
||
|
* <h2><center>© COPYRIGHT 2020 STMicroelectronics</center></h2>
|
||
|
*
|
||
|
* Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
|
||
|
* You may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at:
|
||
|
*
|
||
|
* http://www.st.com/myliberty
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
|
||
|
* AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
||
|
* FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
******************************************************************************/
|
||
|
|
||
|
/*
|
||
|
* PROJECT: ST25R391x firmware
|
||
|
* $Revision: $
|
||
|
* LANGUAGE: ISO C99
|
||
|
*/
|
||
|
|
||
|
/*! \file rfal_dpo.h
|
||
|
*
|
||
|
* \author Martin Zechleitner
|
||
|
*
|
||
|
* \brief Dynamic Power adjustment
|
||
|
*
|
||
|
* This module provides an interface to perform the power adjustment dynamically
|
||
|
*
|
||
|
*
|
||
|
* \addtogroup RFAL
|
||
|
* @{
|
||
|
*
|
||
|
* \addtogroup RFAL-HAL
|
||
|
* \brief RFAL Hardware Abstraction Layer
|
||
|
* @{
|
||
|
*
|
||
|
* \addtogroup DPO
|
||
|
* \brief RFAL Dynamic Power Module
|
||
|
* @{
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#ifndef RFAL_DPO_H
|
||
|
#define RFAL_DPO_H
|
||
|
|
||
|
/*
|
||
|
******************************************************************************
|
||
|
* INCLUDES
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
#include "platform.h"
|
||
|
#include "st_errno.h"
|
||
|
|
||
|
/*
|
||
|
******************************************************************************
|
||
|
* GLOBAL DEFINES
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
#define RFAL_DPO_TABLE_SIZE_MAX 15U /*!< Max DPO table size */
|
||
|
#define RFAL_DPO_TABLE_PARAMETER 3U /*!< DPO table Parameter length */
|
||
|
|
||
|
/*
|
||
|
******************************************************************************
|
||
|
* GLOBAL TYPES
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
/*! DPO table entry struct */
|
||
|
typedef struct {
|
||
|
uint8_t rfoRes; /*!< Setting for the resistance level of the RFO */
|
||
|
uint8_t inc; /*!< Threshold for incrementing the output power */
|
||
|
uint8_t dec; /*!< Threshold for decrementing the output power */
|
||
|
}rfalDpoEntry;
|
||
|
|
||
|
/*! Function pointer to methode doing the reference measurement */
|
||
|
typedef ReturnCode (*rfalDpoMeasureFunc)(uint8_t*);
|
||
|
|
||
|
/*
|
||
|
******************************************************************************
|
||
|
* GLOBAL FUNCTION PROTOTYPES
|
||
|
******************************************************************************
|
||
|
*/
|
||
|
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Initialize dynamic power table
|
||
|
*
|
||
|
* This function sets the internal dynamic power table to the default
|
||
|
* values stored in rfal_DpoTbl.h
|
||
|
*
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
void rfalDpoInitialize( void );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Set the measurement methode
|
||
|
*
|
||
|
* This function sets the measurement method used for reference measurement.
|
||
|
* Based on the measurement the power will then be adjusted
|
||
|
*
|
||
|
* \param[in] dpoMeasureFunc: callback of measurement function
|
||
|
*
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
void rfalDpoSetMeasureCallback( rfalDpoMeasureFunc dpoMeasureFunc );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Write dynamic power table
|
||
|
*
|
||
|
* Load the dynamic power table
|
||
|
*
|
||
|
* \param[in] powerTbl: location of power Table to be loaded
|
||
|
* \param[in] powerTblEntries: number of entries of the power Table to be loaded
|
||
|
*
|
||
|
* \return ERR_NONE : No error
|
||
|
* \return ERR_PARAM : if configTbl is invalid
|
||
|
* \return ERR_NOMEM : if the given Table is bigger exceeds the max size
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
ReturnCode rfalDpoTableWrite( rfalDpoEntry* powerTbl, uint8_t powerTblEntries );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Dynamic power table Read
|
||
|
*
|
||
|
* Read the dynamic power table
|
||
|
*
|
||
|
* \param[out] tblBuf: location to the rfalDpoEntry[] to place the Table
|
||
|
* \param[in] tblBufEntries: number of entries available in tblBuf to place the power Table
|
||
|
* \param[out] tableEntries: returned number of entries actually written into tblBuf
|
||
|
*
|
||
|
* \return ERR_NONE : No error
|
||
|
* \return ERR_PARAM : if configTbl is invalid or parameters are invalid
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
ReturnCode rfalDpoTableRead( rfalDpoEntry* tblBuf, uint8_t tblBufEntries, uint8_t* tableEntries );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Dynamic power adjust
|
||
|
*
|
||
|
* It measures the current output and adjusts the power accordingly to
|
||
|
* the dynamic power table
|
||
|
*
|
||
|
* \return ERR_NONE : No error
|
||
|
* \return ERR_PARAM : if configTbl is invalid or parameters are invalid
|
||
|
* \return ERR_WRONG_STATE : if the current state is valid for DPO Adjustment
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
ReturnCode rfalDpoAdjust( void );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Get Current Dynamic power table entry
|
||
|
*
|
||
|
* Return current used DPO power table entry settings
|
||
|
*
|
||
|
* \return ERR_NONE : Current DpoEntry. This includes d_res, inc and dec
|
||
|
*
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
rfalDpoEntry* rfalDpoGetCurrentTableEntry(void);
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Dynamic power set enabled state
|
||
|
*
|
||
|
* \param[in] enable: new active state
|
||
|
*
|
||
|
* Set state to enable or disable the Dynamic power adjustment
|
||
|
*
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
void rfalDpoSetEnabled( bool enable );
|
||
|
|
||
|
/*!
|
||
|
*****************************************************************************
|
||
|
* \brief Get the Dynamic power enabled state
|
||
|
*
|
||
|
* Get state of the Dynamic power adjustment
|
||
|
*
|
||
|
* \return true : enabled
|
||
|
* \return false : disabled
|
||
|
*****************************************************************************
|
||
|
*/
|
||
|
bool rfalDpoIsEnabled(void);
|
||
|
|
||
|
#endif /* RFAL_DPO_H */
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*
|
||
|
* @}
|
||
|
*
|
||
|
* @}
|
||
|
*/
|