Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.
Prototype RF Driver for STM Sub-1 GHz RF Expansion Boards based on the SPSGRF-868 and SPSGRF-915 Modules for STM32 Nucleo
Currently supported boards:
Note, in order to use expansion board X-NUCLEO-IDS01A4 in mbed you need to perform the following HW modifications on the board:
- Unmount resistor
R4 - Mount resistor
R7
Furthermore, on some Nucleo development boards (e.g. the NUCLEO_F429ZI), in order to be able to use Ethernet together with these Sub-1 GHz RF expansion boards, you need to compile this driver with macro SPIRIT1_SPI_MOSI=PB_5 defined, while the development board typically requires some HW modification as e.g. described here!
This driver can be used together with the 6LoWPAN stack (a.k.a. Nanostack).
Diff: source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c
- Revision:
- 67:93bec0baf1de
- Parent:
- 34:edda6a7238ec
--- a/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c Wed Jul 05 14:02:16 2017 +0200
+++ b/source/libs/spirit1/SPIRIT1_Library/Src/SPIRIT_PktCommon.c Thu Jul 06 11:13:31 2017 +0200
@@ -1,1453 +1,1453 @@
-/**
- ******************************************************************************
- * @file SPIRIT_PktCommon.c
- * @author VMA division - AMS
- * @version 3.2.2
- * @date 08-July-2015
- * @brief Configuration and management of the common features of SPIRIT packets.
- * @details
- *
- * @attention
- *
- * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions 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 its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 "SPIRIT_PktCommon.h"
-#include "MCU_Interface.h"
-
-
-/**
- * @addtogroup SPIRIT_Libraries
- * @{
- */
-
-
-/**
- * @addtogroup SPIRIT_PktCommon
- * @{
- */
-
-
-/**
- * @defgroup PktCommon_Private_TypesDefinitions Pkt Common Private Types Definitions
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Defines Pkt Common Private Defines
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Macros Pkt Common Private Macros
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Variables Pkt Common Private Variables
- * @{
- */
-
-/**
- *@}
- */
-
-
-
-/**
- * @defgroup PktCommon_Private_FunctionPrototypes Pkt Common Private Function Prototypes
- * @{
- */
-
-/**
- *@}
- */
-
-
-/**
- * @defgroup PktCommon_Private_Functions Pkt Common Private Functions
- * @{
- */
-
-/**
- * @brief Sets the CONTROL field length for SPIRIT packets.
- * @param xControlLength length of CONTROL field in bytes.
- * This parameter can be any value of @ref PktControlLength.
- * @retval None.
- */
-void SpiritPktCommonSetControlLength(PktControlLength xControlLength)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_CONTROL_LENGTH(xControlLength));
-
- /* Reads the PCKTCTRL4 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
- /* Set the control length */
- tempRegValue &= ~PCKTCTRL4_CONTROL_LEN_MASK;
- tempRegValue |= (uint8_t)xControlLength;
-
- /* Writes the new value on the PCKTCTRL4 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @brief Returns the CONTROL field length for SPIRIT packets.
- * @param None.
- * @retval uint8_t Control field length.
- */
-uint8_t SpiritPktCommonGetControlLength(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PCKTCTRL4 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
-
- /* Rebuild and return value */
- return (tempRegValue & PCKTCTRL4_CONTROL_LEN_MASK);
-}
-
-
-/**
- * @brief Sets the PREAMBLE field Length mode for SPIRIT packets.
- * @param xPreambleLength length of PREAMBLE field in bytes.
- * This parameter can be any value of @ref PktPreambleLength.
- * @retval None.
- */
-void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_PREAMBLE_LENGTH(xPreambleLength));
-
- /* Reads the PCKTCTRL2 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
- /* Set the preamble length */
- tempRegValue &= ~PCKTCTRL2_PREAMBLE_LENGTH_MASK;
- tempRegValue |= (uint8_t)xPreambleLength;
-
- /* Writes the new value on the PCKTCTRL2 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-}
-
-
-/**
- * @brief Returns the PREAMBLE field Length mode for SPIRIT packets.
- * @param None.
- * @retval uint8_t Preamble field length in bytes.
- */
-uint8_t SpiritPktCommonGetPreambleLength(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PCKTCTRL2 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
- /* Rebuild and return value */
- return ((tempRegValue & PCKTCTRL2_PREAMBLE_LENGTH_MASK)>>3) + 1;
-
-}
-
-
-/**
- * @brief Sets the SYNC field Length for SPIRIT packets.
- * @param xSyncLength length of SYNC field in bytes.
- * This parameter can be any value of @ref PktSyncLength.
- * @retval None.
- */
-void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_SYNC_LENGTH(xSyncLength));
-
- /* Reads the PCKTCTRL2 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
- /* Set the sync length */
- tempRegValue &= ~PCKTCTRL2_SYNC_LENGTH_MASK;
- tempRegValue |= (uint8_t)xSyncLength;
-
- /* Writes the new value on the PCKTCTRL2 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the SYNC field Length for SPIRIT packets.
- * @param None.
- * @retval uint8_t Sync field length in bytes.
- */
-uint8_t SpiritPktCommonGetSyncLength(void)
-{
- uint8_t tempRetValue;
-
- /* Reads the PCKTCTRL2 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRetValue);
-
- /* Rebuild and return value */
- return ((tempRetValue & PCKTCTRL2_SYNC_LENGTH_MASK)>>1) + 1;
-
-}
-
-
-/**
- * @brief Sets fixed or variable payload length mode for SPIRIT packets.
- * @param xFixVarLength variable or fixed length.
- * PKT_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
- * PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
- * @retval None.
- */
-void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_FIX_VAR_LENGTH(xFixVarLength));
-
- /* Reads the PCKTCTRL2 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
- /* Set fixed or variable address mode */
- tempRegValue &= ~PCKTCTRL2_FIX_VAR_LEN_MASK;
- tempRegValue |= (uint8_t)xFixVarLength;
-
- /* Writes the new value on the PCKTCTRL2 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Enables or Disables the filtering on CRC.
- * @param xNewState new state for CRC_CHECK.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads the PCKT_FLT_OPTIONS register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Modify the register value: enable or disable the CRC filtering */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
- }
- else
- {
- tempRegValue &= ~PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
- }
-
- /* Writes the PCKT_FLT_OPTIONS register value */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the CRC filtering enable bit.
- * @param None.
- * @retval SpiritFunctionalState CRC filtering.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void)
-{
- uint8_t tempRegValue;
-
-
- /* Reads the PCKT_FLT_OPTIONS register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Check the CRC filtering bit */
- if(tempRegValue & PCKT_FLT_OPTIONS_CRC_CHECK_MASK)
- {
- return S_ENABLE;
- }
- else
- {
- return S_DISABLE;
- }
-
-}
-
-
-/**
- * @brief Sets the CRC mode for SPIRIT packets.
- * @param xCrcMode length of CRC field in bytes.
- * This parameter can be any value of @ref PktCrcMode.
- * @retval None.
- */
-void SpiritPktCommonSetCrcMode(PktCrcMode xCrcMode)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_CRC_MODE(xCrcMode));
-
- /* Reads the PCKTCTRL1 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
- /* Build data to write setting the CRC mode */
- tempRegValue &= ~PCKTCTRL1_CRC_MODE_MASK;
- tempRegValue |= (uint8_t)xCrcMode;
-
- /* Writes the new value on the PCKTCTRL1 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the CRC mode for SPIRIT packets.
- * @param None.
- * @retval PktCrcMode Crc mode.
- */
-PktCrcMode SpiritPktCommonGetCrcMode(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PCKTCTRL1 register */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
- /* Rebuild and return value */
- return (PktCrcMode)(tempRegValue & 0xE0);
-
-}
-
-
-/**
- * @brief Enables or Disables WHITENING for SPIRIT packets.
- * @param xNewState new state for WHITENING mode.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonWhitening(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads the PCKTCTRL1 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
- /* Build data to write: set or reset the whitening enable bit */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKTCTRL1_WHIT_MASK;
- }
- else
- {
- tempRegValue &= ~PCKTCTRL1_WHIT_MASK;
- }
-
- /* Writes the new value on the PCKTCTRL1 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Enables or Disables FEC for SPIRIT packets.
- * @param xNewState new state for FEC mode.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFec(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads the PCKTCTRL1 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
- /* Build data to write: set or reset the FEC enable bit */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKTCTRL1_FEC_MASK;
- }
- else
- {
- tempRegValue &= ~PCKTCTRL1_FEC_MASK;
- }
-
- /* Writes data on the PCKTCTRL1 register */
- g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Sets a specific SYNC word for SPIRIT packets.
- * @param xSyncX SYNC word number to be set.
- * This parameter can be any value of @ref PktSyncX.
- * @param cSyncWord SYNC word.
- * This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX , uint8_t cSyncWord)
-{
- uint8_t tempRegAddress;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_SYNCx(xSyncX));
-
- /* Set the specified address */
- switch(xSyncX)
- {
- case PKT_SYNC_WORD_1:
- tempRegAddress=SYNC1_BASE;
- break;
- case PKT_SYNC_WORD_2:
- tempRegAddress=SYNC2_BASE;
- break;
- case PKT_SYNC_WORD_3:
- tempRegAddress=SYNC3_BASE;
- break;
- default:
- tempRegAddress=SYNC4_BASE;
- break;
- }
-
- /* Writes value on the selected register */
- g_xStatus = SpiritSpiWriteRegisters(tempRegAddress, 1, &cSyncWord);
-
-}
-
-
-/**
- * @brief Returns a specific SYNC word for SPIRIT packets.
- * @param xSyncX SYNC word number to be get.
- * This parameter can be any value of @ref PktSyncX.
- * @retval uint8_t Sync word x.
- */
-uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX)
-{
- uint8_t tempRegAddress, tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_SYNCx(xSyncX));
-
- /* Set the specified address */
- switch(xSyncX)
- {
- case PKT_SYNC_WORD_1:
- tempRegAddress=SYNC1_BASE;
- break;
- case PKT_SYNC_WORD_2:
- tempRegAddress=SYNC2_BASE;
- break;
- case PKT_SYNC_WORD_3:
- tempRegAddress=SYNC3_BASE;
- break;
- default:
- tempRegAddress=SYNC4_BASE;
- break;
- }
-
- /* Reads the selected register value */
- g_xStatus = SpiritSpiReadRegisters(tempRegAddress, 1, &tempRegValue);
-
- /* Returns the read value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Sets multiple SYNC words for SPIRIT packets.
- * @param lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- * This parameter is a uint32_t.
- * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- * until the number of bytes in xSyncLength has been stored.
- * This parameter is a @ref PktSyncLength.
- * @retval None.
- */
-void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength)
-{
- uint8_t tempRegValue[4];
-
- /* Split the 32-bit value in 4 8-bit values */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- if(i< ((3-xSyncLength) >>1) )
- {
- tempRegValue[i]=0;
- }
- else
- {
- tempRegValue[i]=(uint8_t)(lSyncWords>>(8*i));
- }
- }
-
- /* Writes SYNC value on the SYNCx registers */
- g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief Returns multiple SYNC words for SPIRIT packets.
- * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
- * until the number of bytes in xSyncLength has been stored.
- * This parameter is a pointer to @ref PktSyncLength.
- * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
- */
-uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength)
-{
- uint8_t tempRegValue[4];
- uint32_t tempRetValue=0;
-
- /* Reads the SYNCx registers value */
- g_xStatus = SpiritSpiReadRegisters(SYNC4_BASE, 4, tempRegValue);
-
- /* Rebuild the SYNC words */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- if(i>2-(xSyncLength >>1))
- {
- tempRetValue |= tempRegValue[i]<<(8*i);
- }
- }
-
- /* Return SYNC words */
- return tempRetValue;
-
-}
-
-
-/**
- * @brief Returns the variable length width (in number of bits).
- * @param None.
- * @retval uint8_t Variable length width in bits.
- */
-uint8_t SpiritPktCommonGetVarLengthWidth(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PCKTCTRL3 register value */
- g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
-
- /* Rebuild and return value */
- return (tempRegValue & PCKTCTRL3_LEN_WID_MASK)+1;
-
-}
-
-
-/**
- * @brief Sets the destination address for the Tx packet.
- * @param cAddress Destination address.
- * This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetDestinationAddress(uint8_t cAddress)
-{
- /* Writes value on PCKT_FLT_GOALS_SOURCE_ADDR register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief Returns the settled destination address.
- * @param None.
- * @retval uint8_t Transmitted destination address.
- */
-uint8_t SpiritPktCommonGetTransmittedDestAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads value on the PCKT_FLT_GOALS_SOURCE_ADDR register */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &tempRegValue);
-
- /* Return value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Sets the node my address. When the filtering on my address is on, if the destination address extracted from the received packet is equal to the content of the
- * my address, then the packet is accepted (this is the address of the node).
- * @param cAddress Address of the present node.
- * This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetMyAddress(uint8_t cAddress)
-{
- /* Writes value on the PCKT_FLT_GOALS_TX_ADDR register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief Returns the address of the present node.
- * @param None.
- * @retval uint8_t My address (address of this node).
- */
-uint8_t SpiritPktCommonGetMyAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads value on the PCKT_FLT_GOALS_TX_ADDR register */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &tempRegValue);
-
- /* Return value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Sets the broadcast address. If the destination address extracted from the received packet is equal to the content of the
- * BROADCAST_ADDR register, then the packet is accepted.
- * @param cAddress Broadcast address.
- * This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress)
-{
- /* Writes value on the PCKT_FLT_GOALS_BROADCAST register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief Returns the broadcast address.
- * @param None.
- * @retval uint8_t Broadcast address.
- */
-uint8_t SpiritPktCommonGetBroadcastAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads value on the PCKT_FLT_GOALS_BROADCAST register */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &tempRegValue);
-
- /* Return value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Sets the multicast address. When the multicast filtering is on, if the destination address extracted from the received packet is equal to the content of the
- * MULTICAST_ADDR register, then the packet is accepted.
- * @param cAddress Multicast address.
- * This parameter is an uint8_t.
- * @retval None.
- */
-void SpiritPktCommonSetMulticastAddress(uint8_t cAddress)
-{
- /* Writes value on the PCKT_FLT_GOALS_MULTICAST register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &cAddress);
-
-}
-
-
-/**
- * @brief Returns the multicast address.
- * @param None.
- * @retval uint8_t Multicast address.
- */
-uint8_t SpiritPktCommonGetMulticastAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads value on the PCKT_FLT_GOALS_MULTICAST register */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &tempRegValue);
-
- /* Return value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
- * bits to be used in filtering. (All 0s no filtering)
- * @param lMask Control mask.
- * This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetCtrlMask(uint32_t lMask)
-{
- uint8_t tempRegValue[4];
-
- /* Split the 32-bit value in 4 8-bit values */
- tempRegValue[0] = (uint8_t) lMask;
- tempRegValue[1] = (uint8_t)(lMask >> 8);
- tempRegValue[2] = (uint8_t)(lMask >> 16);
- tempRegValue[3] = (uint8_t)(lMask >> 24);
-
- /* Writes values on the CKT_FLT_GOALS_CONTROLx_MASK registers */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
- * bits to be used in filtering. (All 0s no filtering)
- * @param None.
- * @retval uint32_t Control mask.
- */
-uint32_t SpiritPktCommonGetCtrlMask(void)
-{
- uint8_t tempRegValue[4];
- uint32_t tempRetValue=0;
-
- /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
-
- /* Rebuild the control mask value on a 32-bit integer variable */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
- }
-
- /* Return value */
- return tempRetValue;
-}
-
-/**
- * @brief Sets the control field reference. If the bits enabled by the CONTROL_MASK
- * match the ones of the control fields extracted from the received packet
- * then the packet is accepted.
- * @param lReference Control reference.
- * This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetCtrlReference(uint32_t lReference)
-{
- uint8_t tempRegValue[4];
-
- /* Split the 32-bit value in 4 8-bit values */
- tempRegValue[0] = (uint8_t) lReference;
- tempRegValue[1] = (uint8_t)(lReference >> 8);
- tempRegValue[2] = (uint8_t)(lReference >> 16);
- tempRegValue[3] = (uint8_t)(lReference >> 24);
-
- /* Writes values on the CKT_FLT_GOALS_CONTROLx_FIELD registers */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the control field reference.
- * @param None.
- * @retval uint32_t Control reference.
- */
-uint32_t SpiritPktCommonGetCtrlReference(void)
-{
- uint8_t tempRegValue[4];
- uint32_t tempRetValue=0;
-
- /* Reads the PCKT_FLT_GOALS_CONTROLx_FIELD registers */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
-
- /* Rebuild the control mask value on a 32-bit integer variable */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
- }
-
- /* Return value */
- return tempRetValue;
-}
-
-
-/**
- * @brief Sets the TX control field.
- * @param lField Tx contro field.
- * This parameter is an uint32_t.
- * @retval None.
- */
-void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField)
-{
- uint8_t tempRegValue[4];
-
- /* Split the 32-bit value in 4 8-bit values */
- tempRegValue[3] = (uint8_t) lField;
- tempRegValue[2] = (uint8_t)(lField >> 8);
- tempRegValue[1] = (uint8_t)(lField >> 16);
- tempRegValue[0] = (uint8_t)(lField >> 24);
-
- /* Writes value on the TX_CTRL_FIELDx register */
- g_xStatus = SpiritSpiWriteRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the Tx control field.
- * @param None.
- * @retval uint32_t Control field of the transmitted packet.
- */
-uint32_t SpiritPktCommonGetTransmittedCtrlField(void)
-{
- uint8_t tempRegValue[4];
- uint32_t tempRetValue=0;
-
- /* Reads the TX_CTRL_FIELDx registers */
- g_xStatus = SpiritSpiReadRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
-
- /* Rebuild value: build a 32-bit value from the read bytes */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*(3-i));
- }
-
- /* Return value */
- return tempRetValue;
-
-}
-
-
-/**
- * @brief If enabled RX packet is accepted if its destination address matches with My address.
- * @param xNewState new state for DEST_VS_SOURCE_ADDRESS.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-
- /* Modify the register value: set or reset the TX source address control */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Set or reset the DESTINATION vs TX enabling bit */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
- }
- else
- {
- tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
- }
-
- /* Writes the new value on the PCKT_FLT_OPTIONS register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief If enabled RX packet is accepted if its destination address matches with multicast address.
- * @param xNewState new state for DEST_VS_MULTICAST_ADDRESS.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads the PCKT_FLT_OPTIONS register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Enable or disable the filtering option */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
- }
- else
- {
- tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
- }
-
- /* Writes the new value on the PCKT_FLT_OPTIONS register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief If enabled RX packet is accepted if its destination address matches with broadcast address.
- * @param xNewState new state for DEST_VS_BROADCAST_ADDRESS.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads the register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Enable or disable the filtering option */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
- }
- else
- {
- tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
- }
-
- /* Writes the new value on the PCKT_FLT_OPTIONS register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the enable bit of the my address filtering.
- * @param None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Gets the enable/disable bit in form of SpiritFunctionalState type */
- if(tempRegValue & 0x08)
- {
- return S_ENABLE;
- }
- else
- {
- return S_DISABLE;
- }
-
-}
-
-/**
- * @brief Returns the enable bit of the multicast address filtering.
- * @param None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Get the enable/disable bit in form of SpiritFunctionalState type */
- if(tempRegValue & 0x04)
- {
- return S_ENABLE;
- }
- else
- {
- return S_DISABLE;
- }
-
-}
-
-/**
- * @brief Returns the enable bit of the broadcast address filtering.
- * @param None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Get the enable/disable bit in form of SpiritFunctionalState type */
- if(tempRegValue & 0x02)
- {
- return S_ENABLE;
- }
- else
- {
- return S_DISABLE;
- }
-
-}
-
-
-/**
- * @brief Returns the destination address of the received packet.
- * @param None.
- * @retval uint8_t Destination address of the received address.
- */
-uint8_t SpiritPktCommonGetReceivedDestAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the RX_ADDR_FIELD0 register value */
- g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD0_BASE, 1, &tempRegValue);
-
- /* Return value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Returns the control field of the received packet.
- * @param None.
- * @retval uint32_t Received control field.
- */
-uint32_t SpiritPktCommonGetReceivedCtrlField(void)
-{
- uint8_t tempRegValue[4];
- uint32_t tempRetValue=0;
-
- /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
- g_xStatus = SpiritSpiReadRegisters(RX_CTRL_FIELD0_BASE, 4, tempRegValue);
-
- /* Rebuild the control mask value on a 32-bit integer variable */
- for(uint8_t i=0 ; i<4 ; i++)
- {
- tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
- }
-
- /* Returns value */
- return tempRetValue;
-}
-
-
-/**
- * @brief Returns the CRC field of the received packet.
- * @param cCrcFieldVect array in which the CRC field has to be stored.
- * This parameter is an uint8_t array of 3 elements.
- * @retval None.
- */
-void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect)
-{
- uint8_t tempRegValue[3],crcLength;
- PktCrcMode crcMode;
-
- /* Gets the CRC mode in PktCrcMode enum */
- crcMode=SpiritPktCommonGetCrcMode();
-
- /* Cast to uint8_t */
- crcLength = (uint8_t)crcMode;
-
- /* Obtains the real length: see the @ref PktCrcMode enumeration */
- crcLength >>= 5;
- if(crcLength>=3) crcLength--;
-
- /* Reads the CRC_FIELDx registers value */
- g_xStatus = SpiritSpiReadRegisters(CRC_FIELD2_BASE, 3,tempRegValue);
-
- /* Sets the array to be returned */
- for(uint8_t i=0 ; i<3 ; i++)
- {
- if(i<crcLength)
- {
- cCrcFieldVect[i]=tempRegValue[2-i];
- }
- else
- {
- cCrcFieldVect[i]=0;
- }
- }
-
-}
-
-
-/**
- * @brief Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature is enabled and
- * a data packet has been correctly received, then an acknowledgement packet is sent back to the originator of the received
- * packet. If the PIGGYBACKING bit is also set, payload data will be read from the FIFO; otherwise an empty packet is sent
- * only containing the source and destination addresses and the sequence number of the packet being acknowledged.
- * @param xAutoAck new state for autoack.
- * This parameter can be: S_ENABLE or S_DISABLE.
- * @param xPiggybacking new state for autoack.
- * This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck , SpiritFunctionalState xPiggybacking)
-{
- uint8_t tempRegValue[2];
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAutoAck));
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xPiggybacking));
- /* Check if piggybacking is enabled and autoack is disabled */
- s_assert_param(!(xPiggybacking==S_ENABLE && xAutoAck==S_DISABLE));
-
- /* Reads the PROTOCOL[1:0] registers value */
- g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
- /* Sets the specified LLP option */
- /* Autoack setting */
- if(xAutoAck == S_ENABLE)
- {
- tempRegValue[1] |= PROTOCOL0_AUTO_ACK_MASK;
- }
- else
- {
- tempRegValue[1] &= (~PROTOCOL0_AUTO_ACK_MASK);
- }
-
- /* Piggybacking setting */
- if(xPiggybacking == S_ENABLE)
- {
- tempRegValue[0] |= PROTOCOL1_PIGGYBACKING_MASK;
- }
- else
- {
- tempRegValue[0] &= (~PROTOCOL1_PIGGYBACKING_MASK);
- }
-
- /* Writes data on the PROTOCOL[1:0] registers */
- g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 2, tempRegValue);
-
-}
-
-
-/**
- * @brief Sets the AUTO ACKNOLEDGEMENT mechanism on the transmitter. On the transmitter side, the NACK_TX field can be used to require or not an acknowledgment for each individual packet: if
- * NACK_TX is set to "1" then acknowledgment will not be required; if NACK_TX is set to "0" then acknowledgment will be
- * required.
- * @param xNewState new state for TX_AUTOACK.
- * This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonRequireAck(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
- /* Reads value on the PROTOCOL0 register */
- g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
- /* Enables or disables the ack requirement option */
- if(xNewState == S_DISABLE)
- {
- tempRegValue |= PROTOCOL0_NACK_TX_MASK;
- }
- else
- {
- tempRegValue &= ~PROTOCOL0_NACK_TX_MASK;
- }
-
- /* Writes value on the PROTOCOL0 register */
- g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Sets the TX sequence number to be used to start counting.
- * @param cSeqNumberReload new value for Tx seq number reload.
- * @retval None.
- */
-void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload){
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_SEQ_NUMBER_RELOAD(cSeqNumberReload));
-
- /* Reads value on the PROTOCOL2 register */
- g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
- tempRegValue &= 0xE7;
- tempRegValue |= (cSeqNumberReload << 3);
-
- /* Writes value on the PROTOCOL2 register */
- g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Sets the TX sequence number to be used to start counting.
- * @param cSeqNumberReload new value for Tx seq number reload.
- * This parameter can be: S_ENABLE or S_DISABLE.
- * @retval None.
- */
-void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_PKT_NMAX_RETX(xNMaxReTx));
-
- /* Reads the PROTOCOL0 register value */
- g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
- /* Build the value to be written */
- tempRegValue &= ~PROTOCOL0_NMAX_RETX_MASK;
- tempRegValue |= xNMaxReTx;
-
- /* Writes value on the PROTOCOL0 register */
- g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the max number of automatic retransmission.
- * @param None.
- * @retval uint8_t Max number of retransmissions.
- * This parameter is an uint8_t.
- */
-uint8_t SpiritPktCommonGetNMaxReTx(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PROTOCOL0 register value */
- g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
-
- /* Build the value to be written */
- return ((tempRegValue & PROTOCOL0_NMAX_RETX_MASK)>>4);
-
-}
-
-/**
- * @brief Returns the TX ACK request
- * @param None.
- * @retval uint8_t Max number of retransmissions.
- * This parameter is an uint8_t.
- */
-SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the PROTOCOL0 register value */
- g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
- /* Build the value to be written */
- return (SpiritFunctionalState)((tempRegValue & TX_PCKT_INFO_NACK_RX)>>2);
-
-}
-
-
-/**
- * @brief Returns the source address of the received packet.
- * @param None.
- * @retval uint8_t Source address of the received packet.
- */
-uint8_t SpiritPktCommonGetReceivedSourceAddress(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the RX_ADDR_FIELD1 register value */
- g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD1_BASE, 1, &tempRegValue);
-
- /* Returns value */
- return tempRegValue;
-
-}
-
-
-/**
- * @brief Returns the sequence number of the received packet.
- * @param None.
- * @retval uint8_t Received Sequence number.
- */
-uint8_t SpiritPktCommonGetReceivedSeqNumber(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the RX_PCKT_INFO register value */
- g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
- /* Obtains and returns the sequence number */
- return tempRegValue & 0x03;
-
-}
-
-
-/**
- * @brief Returns the Nack bit of the received packet
- * @param None.
- * @retval uint8_t Value of the Nack bit.
- */
-uint8_t SpiritPktCommonGetReceivedNackRx(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the RX_PCKT_INFO register value */
- g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
-
- /* Obtains and returns the RX nack bit */
- return (tempRegValue >> 2) & 0x01;
-
-}
-
-
-/**
- * @brief Returns the sequence number of the transmitted packet.
- * @param None.
- * @retval uint8_t Sequence number of the transmitted packet.
- */
-uint8_t SpiritPktCommonGetTransmittedSeqNumber(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the TX_PCKT_INFO register value */
- g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRegValue);
-
- /* Obtains and returns the TX sequence number */
- return (tempRegValue >> 4) & 0x07;
-
-}
-
-
-/**
- * @brief Returns the number of retransmission done on the transmitted packet.
- * @param None.
- * @retval uint8_t Number of retransmissions done until now.
- */
-uint8_t SpiritPktCommonGetNReTx(void)
-{
- uint8_t tempRetValue;
-
- /* Reads the TX_PCKT_INFO register value */
- g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRetValue);
-
- /* Obtains and returns the number of retransmission done */
- return (tempRetValue & 0x0F);
-
-}
-
-
-/**
- * @brief If enabled RX packet is accepted only if the masked control field matches the
- * masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
- * @param xNewState new state for Control filtering enable bit.
- * This parameter can be S_ENABLE or S_DISABLE.
- * @retval None.
- * @note This filtering control is enabled by default but the control mask is by default set to 0.
- * As a matter of fact the user has to enable the control filtering bit after the packet initialization
- * because the PktInit routine disables it.
- */
-void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState)
-{
- uint8_t tempRegValue;
-
- /* Check the parameters */
- s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
-
-
- /* Modify the register value: set or reset the control bit filtering */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Set or reset the CONTROL filtering enabling bit */
- if(xNewState == S_ENABLE)
- {
- tempRegValue |= PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
- }
- else
- {
- tempRegValue &= ~PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
- }
-
- /* Writes the new value on the PCKT_FLT_OPTIONS register */
- g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
-}
-
-
-/**
- * @brief Returns the enable bit of the control field filtering.
- * @param None.
- * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
- */
-SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void)
-{
- uint8_t tempRegValue;
-
- /* Reads the register value */
- g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
-
- /* Gets the enable/disable bit in form of SpiritFunctionalState type */
- if(tempRegValue & PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK)
- {
- return S_ENABLE;
- }
- else
- {
- return S_DISABLE;
- }
-
-}
-
-
-/**
- *@}
- */
-
-/**
- *@}
- */
-
-
-/**
- *@}
- */
-
-
-/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file SPIRIT_PktCommon.c
+ * @author VMA division - AMS
+ * @version 3.2.2
+ * @date 08-July-2015
+ * @brief Configuration and management of the common features of SPIRIT packets.
+ * @details
+ *
+ * @attention
+ *
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions 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 its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER 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 "SPIRIT_PktCommon.h"
+#include "MCU_Interface.h"
+
+
+/**
+ * @addtogroup SPIRIT_Libraries
+ * @{
+ */
+
+
+/**
+ * @addtogroup SPIRIT_PktCommon
+ * @{
+ */
+
+
+/**
+ * @defgroup PktCommon_Private_TypesDefinitions Pkt Common Private Types Definitions
+ * @{
+ */
+
+/**
+ *@}
+ */
+
+
+/**
+ * @defgroup PktCommon_Private_Defines Pkt Common Private Defines
+ * @{
+ */
+
+/**
+ *@}
+ */
+
+
+/**
+ * @defgroup PktCommon_Private_Macros Pkt Common Private Macros
+ * @{
+ */
+
+/**
+ *@}
+ */
+
+
+/**
+ * @defgroup PktCommon_Private_Variables Pkt Common Private Variables
+ * @{
+ */
+
+/**
+ *@}
+ */
+
+
+
+/**
+ * @defgroup PktCommon_Private_FunctionPrototypes Pkt Common Private Function Prototypes
+ * @{
+ */
+
+/**
+ *@}
+ */
+
+
+/**
+ * @defgroup PktCommon_Private_Functions Pkt Common Private Functions
+ * @{
+ */
+
+/**
+ * @brief Sets the CONTROL field length for SPIRIT packets.
+ * @param xControlLength length of CONTROL field in bytes.
+ * This parameter can be any value of @ref PktControlLength.
+ * @retval None.
+ */
+void SpiritPktCommonSetControlLength(PktControlLength xControlLength)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_CONTROL_LENGTH(xControlLength));
+
+ /* Reads the PCKTCTRL4 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
+
+ /* Set the control length */
+ tempRegValue &= ~PCKTCTRL4_CONTROL_LEN_MASK;
+ tempRegValue |= (uint8_t)xControlLength;
+
+ /* Writes the new value on the PCKTCTRL4 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
+}
+
+
+/**
+ * @brief Returns the CONTROL field length for SPIRIT packets.
+ * @param None.
+ * @retval uint8_t Control field length.
+ */
+uint8_t SpiritPktCommonGetControlLength(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PCKTCTRL4 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
+
+ /* Rebuild and return value */
+ return (tempRegValue & PCKTCTRL4_CONTROL_LEN_MASK);
+}
+
+
+/**
+ * @brief Sets the PREAMBLE field Length mode for SPIRIT packets.
+ * @param xPreambleLength length of PREAMBLE field in bytes.
+ * This parameter can be any value of @ref PktPreambleLength.
+ * @retval None.
+ */
+void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_PREAMBLE_LENGTH(xPreambleLength));
+
+ /* Reads the PCKTCTRL2 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+ /* Set the preamble length */
+ tempRegValue &= ~PCKTCTRL2_PREAMBLE_LENGTH_MASK;
+ tempRegValue |= (uint8_t)xPreambleLength;
+
+ /* Writes the new value on the PCKTCTRL2 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+}
+
+
+/**
+ * @brief Returns the PREAMBLE field Length mode for SPIRIT packets.
+ * @param None.
+ * @retval uint8_t Preamble field length in bytes.
+ */
+uint8_t SpiritPktCommonGetPreambleLength(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PCKTCTRL2 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+ /* Rebuild and return value */
+ return ((tempRegValue & PCKTCTRL2_PREAMBLE_LENGTH_MASK)>>3) + 1;
+
+}
+
+
+/**
+ * @brief Sets the SYNC field Length for SPIRIT packets.
+ * @param xSyncLength length of SYNC field in bytes.
+ * This parameter can be any value of @ref PktSyncLength.
+ * @retval None.
+ */
+void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_SYNC_LENGTH(xSyncLength));
+
+ /* Reads the PCKTCTRL2 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+ /* Set the sync length */
+ tempRegValue &= ~PCKTCTRL2_SYNC_LENGTH_MASK;
+ tempRegValue |= (uint8_t)xSyncLength;
+
+ /* Writes the new value on the PCKTCTRL2 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the SYNC field Length for SPIRIT packets.
+ * @param None.
+ * @retval uint8_t Sync field length in bytes.
+ */
+uint8_t SpiritPktCommonGetSyncLength(void)
+{
+ uint8_t tempRetValue;
+
+ /* Reads the PCKTCTRL2 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRetValue);
+
+ /* Rebuild and return value */
+ return ((tempRetValue & PCKTCTRL2_SYNC_LENGTH_MASK)>>1) + 1;
+
+}
+
+
+/**
+ * @brief Sets fixed or variable payload length mode for SPIRIT packets.
+ * @param xFixVarLength variable or fixed length.
+ * PKT_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
+ * PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
+ * @retval None.
+ */
+void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_FIX_VAR_LENGTH(xFixVarLength));
+
+ /* Reads the PCKTCTRL2 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+ /* Set fixed or variable address mode */
+ tempRegValue &= ~PCKTCTRL2_FIX_VAR_LEN_MASK;
+ tempRegValue |= (uint8_t)xFixVarLength;
+
+ /* Writes the new value on the PCKTCTRL2 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Enables or Disables the filtering on CRC.
+ * @param xNewState new state for CRC_CHECK.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads the PCKT_FLT_OPTIONS register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Modify the register value: enable or disable the CRC filtering */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
+ }
+
+ /* Writes the PCKT_FLT_OPTIONS register value */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the CRC filtering enable bit.
+ * @param None.
+ * @retval SpiritFunctionalState CRC filtering.
+ */
+SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void)
+{
+ uint8_t tempRegValue;
+
+
+ /* Reads the PCKT_FLT_OPTIONS register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Check the CRC filtering bit */
+ if(tempRegValue & PCKT_FLT_OPTIONS_CRC_CHECK_MASK)
+ {
+ return S_ENABLE;
+ }
+ else
+ {
+ return S_DISABLE;
+ }
+
+}
+
+
+/**
+ * @brief Sets the CRC mode for SPIRIT packets.
+ * @param xCrcMode length of CRC field in bytes.
+ * This parameter can be any value of @ref PktCrcMode.
+ * @retval None.
+ */
+void SpiritPktCommonSetCrcMode(PktCrcMode xCrcMode)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_CRC_MODE(xCrcMode));
+
+ /* Reads the PCKTCTRL1 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+ /* Build data to write setting the CRC mode */
+ tempRegValue &= ~PCKTCTRL1_CRC_MODE_MASK;
+ tempRegValue |= (uint8_t)xCrcMode;
+
+ /* Writes the new value on the PCKTCTRL1 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the CRC mode for SPIRIT packets.
+ * @param None.
+ * @retval PktCrcMode Crc mode.
+ */
+PktCrcMode SpiritPktCommonGetCrcMode(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PCKTCTRL1 register */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+ /* Rebuild and return value */
+ return (PktCrcMode)(tempRegValue & 0xE0);
+
+}
+
+
+/**
+ * @brief Enables or Disables WHITENING for SPIRIT packets.
+ * @param xNewState new state for WHITENING mode.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonWhitening(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads the PCKTCTRL1 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+ /* Build data to write: set or reset the whitening enable bit */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKTCTRL1_WHIT_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKTCTRL1_WHIT_MASK;
+ }
+
+ /* Writes the new value on the PCKTCTRL1 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Enables or Disables FEC for SPIRIT packets.
+ * @param xNewState new state for FEC mode.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonFec(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads the PCKTCTRL1 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+ /* Build data to write: set or reset the FEC enable bit */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKTCTRL1_FEC_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKTCTRL1_FEC_MASK;
+ }
+
+ /* Writes data on the PCKTCTRL1 register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Sets a specific SYNC word for SPIRIT packets.
+ * @param xSyncX SYNC word number to be set.
+ * This parameter can be any value of @ref PktSyncX.
+ * @param cSyncWord SYNC word.
+ * This parameter is an uint8_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX , uint8_t cSyncWord)
+{
+ uint8_t tempRegAddress;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_SYNCx(xSyncX));
+
+ /* Set the specified address */
+ switch(xSyncX)
+ {
+ case PKT_SYNC_WORD_1:
+ tempRegAddress=SYNC1_BASE;
+ break;
+ case PKT_SYNC_WORD_2:
+ tempRegAddress=SYNC2_BASE;
+ break;
+ case PKT_SYNC_WORD_3:
+ tempRegAddress=SYNC3_BASE;
+ break;
+ default:
+ tempRegAddress=SYNC4_BASE;
+ break;
+ }
+
+ /* Writes value on the selected register */
+ g_xStatus = SpiritSpiWriteRegisters(tempRegAddress, 1, &cSyncWord);
+
+}
+
+
+/**
+ * @brief Returns a specific SYNC word for SPIRIT packets.
+ * @param xSyncX SYNC word number to be get.
+ * This parameter can be any value of @ref PktSyncX.
+ * @retval uint8_t Sync word x.
+ */
+uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX)
+{
+ uint8_t tempRegAddress, tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_SYNCx(xSyncX));
+
+ /* Set the specified address */
+ switch(xSyncX)
+ {
+ case PKT_SYNC_WORD_1:
+ tempRegAddress=SYNC1_BASE;
+ break;
+ case PKT_SYNC_WORD_2:
+ tempRegAddress=SYNC2_BASE;
+ break;
+ case PKT_SYNC_WORD_3:
+ tempRegAddress=SYNC3_BASE;
+ break;
+ default:
+ tempRegAddress=SYNC4_BASE;
+ break;
+ }
+
+ /* Reads the selected register value */
+ g_xStatus = SpiritSpiReadRegisters(tempRegAddress, 1, &tempRegValue);
+
+ /* Returns the read value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Sets multiple SYNC words for SPIRIT packets.
+ * @param lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
+ * This parameter is a uint32_t.
+ * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
+ * until the number of bytes in xSyncLength has been stored.
+ * This parameter is a @ref PktSyncLength.
+ * @retval None.
+ */
+void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength)
+{
+ uint8_t tempRegValue[4];
+
+ /* Split the 32-bit value in 4 8-bit values */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ if(i< ((3-xSyncLength) >>1) )
+ {
+ tempRegValue[i]=0;
+ }
+ else
+ {
+ tempRegValue[i]=(uint8_t)(lSyncWords>>(8*i));
+ }
+ }
+
+ /* Writes SYNC value on the SYNCx registers */
+ g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns multiple SYNC words for SPIRIT packets.
+ * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
+ * until the number of bytes in xSyncLength has been stored.
+ * This parameter is a pointer to @ref PktSyncLength.
+ * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
+ */
+uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength)
+{
+ uint8_t tempRegValue[4];
+ uint32_t tempRetValue=0;
+
+ /* Reads the SYNCx registers value */
+ g_xStatus = SpiritSpiReadRegisters(SYNC4_BASE, 4, tempRegValue);
+
+ /* Rebuild the SYNC words */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ if(i>2-(xSyncLength >>1))
+ {
+ tempRetValue |= tempRegValue[i]<<(8*i);
+ }
+ }
+
+ /* Return SYNC words */
+ return tempRetValue;
+
+}
+
+
+/**
+ * @brief Returns the variable length width (in number of bits).
+ * @param None.
+ * @retval uint8_t Variable length width in bits.
+ */
+uint8_t SpiritPktCommonGetVarLengthWidth(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PCKTCTRL3 register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
+
+ /* Rebuild and return value */
+ return (tempRegValue & PCKTCTRL3_LEN_WID_MASK)+1;
+
+}
+
+
+/**
+ * @brief Sets the destination address for the Tx packet.
+ * @param cAddress Destination address.
+ * This parameter is an uint8_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetDestinationAddress(uint8_t cAddress)
+{
+ /* Writes value on PCKT_FLT_GOALS_SOURCE_ADDR register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &cAddress);
+
+}
+
+
+/**
+ * @brief Returns the settled destination address.
+ * @param None.
+ * @retval uint8_t Transmitted destination address.
+ */
+uint8_t SpiritPktCommonGetTransmittedDestAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads value on the PCKT_FLT_GOALS_SOURCE_ADDR register */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &tempRegValue);
+
+ /* Return value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Sets the node my address. When the filtering on my address is on, if the destination address extracted from the received packet is equal to the content of the
+ * my address, then the packet is accepted (this is the address of the node).
+ * @param cAddress Address of the present node.
+ * This parameter is an uint8_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetMyAddress(uint8_t cAddress)
+{
+ /* Writes value on the PCKT_FLT_GOALS_TX_ADDR register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &cAddress);
+
+}
+
+
+/**
+ * @brief Returns the address of the present node.
+ * @param None.
+ * @retval uint8_t My address (address of this node).
+ */
+uint8_t SpiritPktCommonGetMyAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads value on the PCKT_FLT_GOALS_TX_ADDR register */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &tempRegValue);
+
+ /* Return value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Sets the broadcast address. If the destination address extracted from the received packet is equal to the content of the
+ * BROADCAST_ADDR register, then the packet is accepted.
+ * @param cAddress Broadcast address.
+ * This parameter is an uint8_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress)
+{
+ /* Writes value on the PCKT_FLT_GOALS_BROADCAST register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &cAddress);
+
+}
+
+
+/**
+ * @brief Returns the broadcast address.
+ * @param None.
+ * @retval uint8_t Broadcast address.
+ */
+uint8_t SpiritPktCommonGetBroadcastAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads value on the PCKT_FLT_GOALS_BROADCAST register */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &tempRegValue);
+
+ /* Return value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Sets the multicast address. When the multicast filtering is on, if the destination address extracted from the received packet is equal to the content of the
+ * MULTICAST_ADDR register, then the packet is accepted.
+ * @param cAddress Multicast address.
+ * This parameter is an uint8_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetMulticastAddress(uint8_t cAddress)
+{
+ /* Writes value on the PCKT_FLT_GOALS_MULTICAST register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &cAddress);
+
+}
+
+
+/**
+ * @brief Returns the multicast address.
+ * @param None.
+ * @retval uint8_t Multicast address.
+ */
+uint8_t SpiritPktCommonGetMulticastAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads value on the PCKT_FLT_GOALS_MULTICAST register */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &tempRegValue);
+
+ /* Return value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
+ * bits to be used in filtering. (All 0s no filtering)
+ * @param lMask Control mask.
+ * This parameter is an uint32_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetCtrlMask(uint32_t lMask)
+{
+ uint8_t tempRegValue[4];
+
+ /* Split the 32-bit value in 4 8-bit values */
+ tempRegValue[0] = (uint8_t) lMask;
+ tempRegValue[1] = (uint8_t)(lMask >> 8);
+ tempRegValue[2] = (uint8_t)(lMask >> 16);
+ tempRegValue[3] = (uint8_t)(lMask >> 24);
+
+ /* Writes values on the CKT_FLT_GOALS_CONTROLx_MASK registers */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
+ * bits to be used in filtering. (All 0s no filtering)
+ * @param None.
+ * @retval uint32_t Control mask.
+ */
+uint32_t SpiritPktCommonGetCtrlMask(void)
+{
+ uint8_t tempRegValue[4];
+ uint32_t tempRetValue=0;
+
+ /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
+
+ /* Rebuild the control mask value on a 32-bit integer variable */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
+ }
+
+ /* Return value */
+ return tempRetValue;
+}
+
+/**
+ * @brief Sets the control field reference. If the bits enabled by the CONTROL_MASK
+ * match the ones of the control fields extracted from the received packet
+ * then the packet is accepted.
+ * @param lReference Control reference.
+ * This parameter is an uint32_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetCtrlReference(uint32_t lReference)
+{
+ uint8_t tempRegValue[4];
+
+ /* Split the 32-bit value in 4 8-bit values */
+ tempRegValue[0] = (uint8_t) lReference;
+ tempRegValue[1] = (uint8_t)(lReference >> 8);
+ tempRegValue[2] = (uint8_t)(lReference >> 16);
+ tempRegValue[3] = (uint8_t)(lReference >> 24);
+
+ /* Writes values on the CKT_FLT_GOALS_CONTROLx_FIELD registers */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the control field reference.
+ * @param None.
+ * @retval uint32_t Control reference.
+ */
+uint32_t SpiritPktCommonGetCtrlReference(void)
+{
+ uint8_t tempRegValue[4];
+ uint32_t tempRetValue=0;
+
+ /* Reads the PCKT_FLT_GOALS_CONTROLx_FIELD registers */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
+
+ /* Rebuild the control mask value on a 32-bit integer variable */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
+ }
+
+ /* Return value */
+ return tempRetValue;
+}
+
+
+/**
+ * @brief Sets the TX control field.
+ * @param lField Tx contro field.
+ * This parameter is an uint32_t.
+ * @retval None.
+ */
+void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField)
+{
+ uint8_t tempRegValue[4];
+
+ /* Split the 32-bit value in 4 8-bit values */
+ tempRegValue[3] = (uint8_t) lField;
+ tempRegValue[2] = (uint8_t)(lField >> 8);
+ tempRegValue[1] = (uint8_t)(lField >> 16);
+ tempRegValue[0] = (uint8_t)(lField >> 24);
+
+ /* Writes value on the TX_CTRL_FIELDx register */
+ g_xStatus = SpiritSpiWriteRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the Tx control field.
+ * @param None.
+ * @retval uint32_t Control field of the transmitted packet.
+ */
+uint32_t SpiritPktCommonGetTransmittedCtrlField(void)
+{
+ uint8_t tempRegValue[4];
+ uint32_t tempRetValue=0;
+
+ /* Reads the TX_CTRL_FIELDx registers */
+ g_xStatus = SpiritSpiReadRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
+
+ /* Rebuild value: build a 32-bit value from the read bytes */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*(3-i));
+ }
+
+ /* Return value */
+ return tempRetValue;
+
+}
+
+
+/**
+ * @brief If enabled RX packet is accepted if its destination address matches with My address.
+ * @param xNewState new state for DEST_VS_SOURCE_ADDRESS.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+
+ /* Modify the register value: set or reset the TX source address control */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Set or reset the DESTINATION vs TX enabling bit */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
+ }
+
+ /* Writes the new value on the PCKT_FLT_OPTIONS register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief If enabled RX packet is accepted if its destination address matches with multicast address.
+ * @param xNewState new state for DEST_VS_MULTICAST_ADDRESS.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads the PCKT_FLT_OPTIONS register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Enable or disable the filtering option */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
+ }
+
+ /* Writes the new value on the PCKT_FLT_OPTIONS register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief If enabled RX packet is accepted if its destination address matches with broadcast address.
+ * @param xNewState new state for DEST_VS_BROADCAST_ADDRESS.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads the register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Enable or disable the filtering option */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
+ }
+
+ /* Writes the new value on the PCKT_FLT_OPTIONS register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the enable bit of the my address filtering.
+ * @param None.
+ * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
+ */
+SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Gets the enable/disable bit in form of SpiritFunctionalState type */
+ if(tempRegValue & 0x08)
+ {
+ return S_ENABLE;
+ }
+ else
+ {
+ return S_DISABLE;
+ }
+
+}
+
+/**
+ * @brief Returns the enable bit of the multicast address filtering.
+ * @param None.
+ * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
+ */
+SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Get the enable/disable bit in form of SpiritFunctionalState type */
+ if(tempRegValue & 0x04)
+ {
+ return S_ENABLE;
+ }
+ else
+ {
+ return S_DISABLE;
+ }
+
+}
+
+/**
+ * @brief Returns the enable bit of the broadcast address filtering.
+ * @param None.
+ * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
+ */
+SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Get the enable/disable bit in form of SpiritFunctionalState type */
+ if(tempRegValue & 0x02)
+ {
+ return S_ENABLE;
+ }
+ else
+ {
+ return S_DISABLE;
+ }
+
+}
+
+
+/**
+ * @brief Returns the destination address of the received packet.
+ * @param None.
+ * @retval uint8_t Destination address of the received address.
+ */
+uint8_t SpiritPktCommonGetReceivedDestAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the RX_ADDR_FIELD0 register value */
+ g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD0_BASE, 1, &tempRegValue);
+
+ /* Return value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Returns the control field of the received packet.
+ * @param None.
+ * @retval uint32_t Received control field.
+ */
+uint32_t SpiritPktCommonGetReceivedCtrlField(void)
+{
+ uint8_t tempRegValue[4];
+ uint32_t tempRetValue=0;
+
+ /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
+ g_xStatus = SpiritSpiReadRegisters(RX_CTRL_FIELD0_BASE, 4, tempRegValue);
+
+ /* Rebuild the control mask value on a 32-bit integer variable */
+ for(uint8_t i=0 ; i<4 ; i++)
+ {
+ tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
+ }
+
+ /* Returns value */
+ return tempRetValue;
+}
+
+
+/**
+ * @brief Returns the CRC field of the received packet.
+ * @param cCrcFieldVect array in which the CRC field has to be stored.
+ * This parameter is an uint8_t array of 3 elements.
+ * @retval None.
+ */
+void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect)
+{
+ uint8_t tempRegValue[3],crcLength;
+ PktCrcMode crcMode;
+
+ /* Gets the CRC mode in PktCrcMode enum */
+ crcMode=SpiritPktCommonGetCrcMode();
+
+ /* Cast to uint8_t */
+ crcLength = (uint8_t)crcMode;
+
+ /* Obtains the real length: see the @ref PktCrcMode enumeration */
+ crcLength >>= 5;
+ if(crcLength>=3) crcLength--;
+
+ /* Reads the CRC_FIELDx registers value */
+ g_xStatus = SpiritSpiReadRegisters(CRC_FIELD2_BASE, 3,tempRegValue);
+
+ /* Sets the array to be returned */
+ for(uint8_t i=0 ; i<3 ; i++)
+ {
+ if(i<crcLength)
+ {
+ cCrcFieldVect[i]=tempRegValue[2-i];
+ }
+ else
+ {
+ cCrcFieldVect[i]=0;
+ }
+ }
+
+}
+
+
+/**
+ * @brief Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature is enabled and
+ * a data packet has been correctly received, then an acknowledgement packet is sent back to the originator of the received
+ * packet. If the PIGGYBACKING bit is also set, payload data will be read from the FIFO; otherwise an empty packet is sent
+ * only containing the source and destination addresses and the sequence number of the packet being acknowledged.
+ * @param xAutoAck new state for autoack.
+ * This parameter can be: S_ENABLE or S_DISABLE.
+ * @param xPiggybacking new state for autoack.
+ * This parameter can be: S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck , SpiritFunctionalState xPiggybacking)
+{
+ uint8_t tempRegValue[2];
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAutoAck));
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xPiggybacking));
+ /* Check if piggybacking is enabled and autoack is disabled */
+ s_assert_param(!(xPiggybacking==S_ENABLE && xAutoAck==S_DISABLE));
+
+ /* Reads the PROTOCOL[1:0] registers value */
+ g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
+
+ /* Sets the specified LLP option */
+ /* Autoack setting */
+ if(xAutoAck == S_ENABLE)
+ {
+ tempRegValue[1] |= PROTOCOL0_AUTO_ACK_MASK;
+ }
+ else
+ {
+ tempRegValue[1] &= (~PROTOCOL0_AUTO_ACK_MASK);
+ }
+
+ /* Piggybacking setting */
+ if(xPiggybacking == S_ENABLE)
+ {
+ tempRegValue[0] |= PROTOCOL1_PIGGYBACKING_MASK;
+ }
+ else
+ {
+ tempRegValue[0] &= (~PROTOCOL1_PIGGYBACKING_MASK);
+ }
+
+ /* Writes data on the PROTOCOL[1:0] registers */
+ g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 2, tempRegValue);
+
+}
+
+
+/**
+ * @brief Sets the AUTO ACKNOLEDGEMENT mechanism on the transmitter. On the transmitter side, the NACK_TX field can be used to require or not an acknowledgment for each individual packet: if
+ * NACK_TX is set to "1" then acknowledgment will not be required; if NACK_TX is set to "0" then acknowledgment will be
+ * required.
+ * @param xNewState new state for TX_AUTOACK.
+ * This parameter can be: S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonRequireAck(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+ /* Reads value on the PROTOCOL0 register */
+ g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
+
+ /* Enables or disables the ack requirement option */
+ if(xNewState == S_DISABLE)
+ {
+ tempRegValue |= PROTOCOL0_NACK_TX_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PROTOCOL0_NACK_TX_MASK;
+ }
+
+ /* Writes value on the PROTOCOL0 register */
+ g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Sets the TX sequence number to be used to start counting.
+ * @param cSeqNumberReload new value for Tx seq number reload.
+ * @retval None.
+ */
+void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload){
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_SEQ_NUMBER_RELOAD(cSeqNumberReload));
+
+ /* Reads value on the PROTOCOL2 register */
+ g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
+
+ tempRegValue &= 0xE7;
+ tempRegValue |= (cSeqNumberReload << 3);
+
+ /* Writes value on the PROTOCOL2 register */
+ g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Sets the TX sequence number to be used to start counting.
+ * @param cSeqNumberReload new value for Tx seq number reload.
+ * This parameter can be: S_ENABLE or S_DISABLE.
+ * @retval None.
+ */
+void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_PKT_NMAX_RETX(xNMaxReTx));
+
+ /* Reads the PROTOCOL0 register value */
+ g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
+
+ /* Build the value to be written */
+ tempRegValue &= ~PROTOCOL0_NMAX_RETX_MASK;
+ tempRegValue |= xNMaxReTx;
+
+ /* Writes value on the PROTOCOL0 register */
+ g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the max number of automatic retransmission.
+ * @param None.
+ * @retval uint8_t Max number of retransmissions.
+ * This parameter is an uint8_t.
+ */
+uint8_t SpiritPktCommonGetNMaxReTx(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PROTOCOL0 register value */
+ g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
+
+ /* Build the value to be written */
+ return ((tempRegValue & PROTOCOL0_NMAX_RETX_MASK)>>4);
+
+}
+
+/**
+ * @brief Returns the TX ACK request
+ * @param None.
+ * @retval uint8_t Max number of retransmissions.
+ * This parameter is an uint8_t.
+ */
+SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the PROTOCOL0 register value */
+ g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
+
+ /* Build the value to be written */
+ return (SpiritFunctionalState)((tempRegValue & TX_PCKT_INFO_NACK_RX)>>2);
+
+}
+
+
+/**
+ * @brief Returns the source address of the received packet.
+ * @param None.
+ * @retval uint8_t Source address of the received packet.
+ */
+uint8_t SpiritPktCommonGetReceivedSourceAddress(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the RX_ADDR_FIELD1 register value */
+ g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD1_BASE, 1, &tempRegValue);
+
+ /* Returns value */
+ return tempRegValue;
+
+}
+
+
+/**
+ * @brief Returns the sequence number of the received packet.
+ * @param None.
+ * @retval uint8_t Received Sequence number.
+ */
+uint8_t SpiritPktCommonGetReceivedSeqNumber(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the RX_PCKT_INFO register value */
+ g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
+
+ /* Obtains and returns the sequence number */
+ return tempRegValue & 0x03;
+
+}
+
+
+/**
+ * @brief Returns the Nack bit of the received packet
+ * @param None.
+ * @retval uint8_t Value of the Nack bit.
+ */
+uint8_t SpiritPktCommonGetReceivedNackRx(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the RX_PCKT_INFO register value */
+ g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
+
+ /* Obtains and returns the RX nack bit */
+ return (tempRegValue >> 2) & 0x01;
+
+}
+
+
+/**
+ * @brief Returns the sequence number of the transmitted packet.
+ * @param None.
+ * @retval uint8_t Sequence number of the transmitted packet.
+ */
+uint8_t SpiritPktCommonGetTransmittedSeqNumber(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the TX_PCKT_INFO register value */
+ g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRegValue);
+
+ /* Obtains and returns the TX sequence number */
+ return (tempRegValue >> 4) & 0x07;
+
+}
+
+
+/**
+ * @brief Returns the number of retransmission done on the transmitted packet.
+ * @param None.
+ * @retval uint8_t Number of retransmissions done until now.
+ */
+uint8_t SpiritPktCommonGetNReTx(void)
+{
+ uint8_t tempRetValue;
+
+ /* Reads the TX_PCKT_INFO register value */
+ g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRetValue);
+
+ /* Obtains and returns the number of retransmission done */
+ return (tempRetValue & 0x0F);
+
+}
+
+
+/**
+ * @brief If enabled RX packet is accepted only if the masked control field matches the
+ * masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
+ * @param xNewState new state for Control filtering enable bit.
+ * This parameter can be S_ENABLE or S_DISABLE.
+ * @retval None.
+ * @note This filtering control is enabled by default but the control mask is by default set to 0.
+ * As a matter of fact the user has to enable the control filtering bit after the packet initialization
+ * because the PktInit routine disables it.
+ */
+void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState)
+{
+ uint8_t tempRegValue;
+
+ /* Check the parameters */
+ s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
+
+
+ /* Modify the register value: set or reset the control bit filtering */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Set or reset the CONTROL filtering enabling bit */
+ if(xNewState == S_ENABLE)
+ {
+ tempRegValue |= PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
+ }
+ else
+ {
+ tempRegValue &= ~PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
+ }
+
+ /* Writes the new value on the PCKT_FLT_OPTIONS register */
+ g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+}
+
+
+/**
+ * @brief Returns the enable bit of the control field filtering.
+ * @param None.
+ * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
+ */
+SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void)
+{
+ uint8_t tempRegValue;
+
+ /* Reads the register value */
+ g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
+
+ /* Gets the enable/disable bit in form of SpiritFunctionalState type */
+ if(tempRegValue & PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK)
+ {
+ return S_ENABLE;
+ }
+ else
+ {
+ return S_DISABLE;
+ }
+
+}
+
+
+/**
+ *@}
+ */
+
+/**
+ *@}
+ */
+
+
+/**
+ *@}
+ */
+
+
+/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/
X-NUCLEO-IDS01A4 Sub-1GHz RF Expansion Board