Vergil Cola
/
MQTTGateway2
Fork of my original MQTTGateway
Diff: easy-connect/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktStack.h
- Revision:
- 0:a1734fe1ec4b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/easy-connect/stm-spirit1-rf-driver/source/libs/spirit1/SPIRIT1_Library/Inc/SPIRIT_PktStack.h Sat Apr 08 14:43:14 2017 +0000 @@ -0,0 +1,849 @@ +/** + ****************************************************************************** + * @file SPIRIT_PktStack.h + * @author VMA division - AMS + * @version 3.2.2 + * @date 08-July-2015 + * @brief Configuration and management of SPIRIT STack packets. + * + * @details + * + * This module can be used to manage the configuration of Spirit STack + * packets, and it is quite similar to the Basic packets one since the + * STack packets can be considered an extension of Basic. + * The user can obtain a packet configuration filling the structure + * <i>@ref PktStackInit</i>, defining in it some general parameters + * for the Spirit STack packet format. + * Another structure the user can fill is <i>@ref PktStackAddressesInit</i> + * to define the addresses which will be used during the communication. + * The structure <i>@ref PktStackLlpInit</i> is provided in order to configure + * the link layer protocol features like autoack, autoretransmission + * or piggybacking. + * Moreover, functions to set the payload length and the destination address + * are provided. + * + * <b>Example:</b> + * @code + * + * PktStackInit stackInit={ + * PKT_PREAMBLE_LENGTH_08BYTES, // preamble length in bytes + * PKT_SYNC_LENGTH_4BYTES, // sync word length in bytes + * 0x1A2635A8, // sync word + * PKT_LENGTH_VAR, // variable or fixed payload length + * 7, // length field width in bits (used only for variable length) + * PKT_NO_CRC, // CRC mode + * PKT_CONTROL_LENGTH_0BYTES, // control field length + * S_DISABLE, // FEC + * S_ENABLE // whitening + * }; + * + * PktStackAddressesInit addressInit={ + * S_ENABLE, // enable/disable filtering on my address + * 0x34, // my address (address of the current node) + * S_DISABLE, // enable/disable filtering on multicast address + * 0xEE, // multicast address + * S_DISABLE, // enable/disable filtering on broadcast address + * 0xFF // broadcast address + * }; + * + * PktStackLlpInit stackLLPInit ={ + * S_DISABLE, // enable/disable the autoack feature + * S_DISABLE, // enable/disable the piggybacking feature + * PKT_DISABLE_RETX // set the max number of retransmissions or disable them + * }; + * ... + * + * SpiritPktStackInit(&stackInit); + * SpiritPktStackAddressesInit(&addressInit); + * SpiritPktStackLlpInit(&stackLLPInit); + * + * ... + * + * SpiritPktStackSetPayloadLength(20); + * SpiritPktStackSetDestinationAddress(0x44); + * + * ... + * + * @endcode + * + * The module provides some other functions that can be used to modify + * or read only some configuration parameters. + * + * + * @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. + * + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __SPIRIT_PKT_STACK_H +#define __SPIRIT_PKT_STACK_H + +/* Includes ------------------------------------------------------------------*/ + +#include "SPIRIT_Regs.h" +#include "SPIRIT_Types.h" +#include "SPIRIT_PktCommon.h" + +#ifdef __cplusplus + extern "C" { +#endif + + + +/** + * @addtogroup SPIRIT_Libraries + * @{ + */ + + +/** + * @defgroup SPIRIT_PktStack Pkt STack + * @brief Configuration and management of SPIRIT STack packets. + * @details See the file <i>@ref SPIRIT_PktStack.h</i> for more details. + * @{ + */ + +/** + * @defgroup PktStack_Exported_Types Pkt STack Exported Types + * @{ + */ + +/** + * @brief Preamble length in bytes enumeration. + */ +typedef PktPreambleLength StackPreambleLength; + +#define IS_STACK_PREAMBLE_LENGTH IS_PKT_PREAMBLE_LENGTH + +/** + * @brief Sync length in bytes enumeration. + */ +typedef PktSyncLength StackSyncLength; + +#define IS_STACK_SYNC_LENGTH IS_PKT_SYNC_LENGTH + + + +/** + * @brief CRC length in bytes enumeration. + */ +typedef PktCrcMode StackCrcMode; + +#define IS_STACK_CRC_MODE IS_PKT_CRC_MODE + + +/** + * @brief Fixed or variable payload length enumeration. + */ +typedef PktFixVarLength StackFixVarLength; + +#define IS_STACK_FIX_VAR_LENGTH IS_PKT_FIX_VAR_LENGTH + +/** + * @brief Control length in bytes enumeration for SPIRIT. + */ +typedef PktControlLength StackControlLength; + +#define IS_STACK_CONTROL_LENGTH IS_PKT_CONTROL_LENGTH + +/** + * @brief Sync words enumeration for SPIRIT. + */ +typedef PktSyncX StackSyncX; + +#define IS_STACK_SYNCx IS_PKT_SYNCx + +/** + * @brief Max retransmission number enumeration for SPIRIT. + */ +typedef PktNMaxReTx StackNMaxReTx; + +#define IS_STACK_NMAX_RETX IS_PKT_NMAX_RETX + + +/** + * @brief SPIRIT STack Packet Init structure definition. This structure allows users to set the main options + * for the STack packet. + */ +typedef struct +{ + + StackPreambleLength xPreambleLength; /*!< Specifies the preamble length of packet. + This parameter can be any value of @ref StackPreambleLength */ + StackSyncLength xSyncLength; /*!< Specifies the sync word length of packet. + This parameter can be any value of @ref StackSyncLength */ + uint32_t lSyncWords; /*!< Specifies the sync words. + This parameter is a uint32_t word with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4| */ + StackFixVarLength xFixVarLength; /*!< Specifies if a fixed length of packet has to be used. + This parameter can be any value of @ref StackFixVarLength */ + uint8_t cPktLengthWidth; /*!< Specifies the size of the length of packet in bits. This field is useful only if + the field xFixVarLength is set to STACK_LENGTH_VAR. For STack packets the length width + is log2( max payload length + control length (0 to 4) + address length (always 2)). + This parameter is an uint8_t */ + StackCrcMode xCrcMode; /*!< Specifies the CRC word length of packet. + This parameter can be any value of @ref StackCrcMode */ + StackControlLength xControlLength; /*!< Specifies the length of a control field to be sent. + This parameter can be any value of @ref StackControlLength */ + SpiritFunctionalState xFec; /*!< Specifies if FEC has to be enabled. + This parameter can be any value of @ref SpiritFunctionalState */ + SpiritFunctionalState xDataWhitening; /*!< Specifies if data whitening has to be enabled. + This parameter can be any value of @ref SpiritFunctionalState */ + +}PktStackInit; + + +/** + * @brief SPIRIT STack packet address structure definition. This structure allows users to specify + * the node/multicast/broadcast addresses and the correspondent filtering options. + */ +typedef struct +{ + + SpiritFunctionalState xFilterOnMyAddress; /*!< If set RX packet is accepted if its destination address matches with cMyAddress. + This parameter can be S_ENABLE or S_DISABLE */ + uint8_t cMyAddress; /*!< Specifies the TX packet source address (address of this node). + This parameter is an uint8_t */ + SpiritFunctionalState xFilterOnMulticastAddress; /*!< If set RX packet is accepted if its destination address matches with cMulticastAddress. + This parameter can be S_ENABLE or S_DISABLE */ + uint8_t cMulticastAddress; /*!< Specifies the Multicast group address for this node. + This parameter is an uint8_t */ + SpiritFunctionalState xFilterOnBroadcastAddress; /*!< If set RX packet is accepted if its destination address matches with cBroadcastAddress. + This parameter can be S_ENABLE or S_DISABLE */ + uint8_t cBroadcastAddress; /*!< Specifies the Broadcast address for this node. + This parameter is an uint8_t */ +}PktStackAddressesInit; + + +/** + * @brief SPIRIT STack packet LLP structure definition. This structure allows users to configure + * all the LLP options for STack packets. + */ +typedef struct +{ + + SpiritFunctionalState xAutoAck; /*!< Specifies if the auto ACK feature is used or not. + This parameter can be a value of @ref SpiritFunctionalState */ + SpiritFunctionalState xPiggybacking; /*!< Specifies if the piggybacking feature is used or not. + This parameter can be a value of @ref SpiritFunctionalState */ + StackNMaxReTx xNMaxRetx; /*!< Specifies the number of MAX-Retransmissions. + This parameter can be a value of @ref StackNMaxReTx */ +}PktStackLlpInit; + + + +/** + *@} + */ + + +/** + * @defgroup PktStack_Exported_Constants Pkt STack Exported Constants + * @{ + */ + +#define IS_STACK_LENGTH_WIDTH_BITS IS_PKT_LENGTH_WIDTH_BITS + +/** + *@} + */ + + +/** + * @defgroup PktStack_Exported_Macros Pkt STack Exported Macros + * @{ + */ + +/** + * @brief Macro used to compute the lower part of the packet length + * for Spirit STack packets, to write in the PCKTLEN0 register. + * @param nLength length of the packet payload. + * This parameter is an uint16_t. + * @retval None. + */ +#define STACK_BUILD_PCKTLEN0(nLength) BUILD_PCKTLEN0(nLength) + + +/** + * @brief Macro used to compute the upper part of the packet length + * for Spirit STack packets, to write the PCKTLEN1 register. + * @param nLength length of the packet payload. + * This parameter is an uint16_t. + * @retval None. + */ +#define STACK_BUILD_PCKTLEN1(nLength) BUILD_PCKTLEN1(nLength) + + +/** + * @brief Sets the CONTROL length for SPIRIT STack packets. + * @param xControlLength length of CONTROL field in bytes. + * This parameter can be any value of @ref StackControlLength. + * @retval None. + */ +#define SpiritPktStackSetControlLength(xControlLength) SpiritPktCommonSetControlLength(xControlLength) + + +/** + * @brief Returns the CONTROL length for SPIRIT STack packets. + * @param None. + * @retval Control length. + */ +#define SpiritPktStackGetControlLength() SpiritPktCommonGetControlLength() + + +/** + * @brief Sets the PREAMBLE Length mode for SPIRIT STack packets. + * @param xPreambleLength length of PREAMBLE field in bytes. + * This parameter can be any value of @ref StackPreambleLength. + * @retval None. + */ +#define SpiritPktStackSetPreambleLength(xPreambleLength) SpiritPktCommonSetPreambleLength((PktPreambleLength)xPreambleLength) + + +/** + * @brief Returns the PREAMBLE Length mode for SPIRIT STack packets. + * @param None. + * @retval uint8_t Preamble length in bytes. + */ +#define SpiritPktStackGetPreambleLength() SpiritPktCommonGetPreambleLength() + + +/** + * @brief Sets the SYNC Length for SPIRIT STack packets. + * @param xSyncLength length of SYNC field in bytes. + * This parameter can be any value of @ref StackSyncLength. + * @retval None. + */ +#define SpiritPktStackSetSyncLength(xSyncLength) SpiritPktCommonSetSyncLength((PktSyncLength)xSyncLength) + + +/** + * @brief Returns the SYNC Length for SPIRIT STack packets. + * @param None. + * @retval uint8_t Sync length in bytes. + */ +#define SpiritPktStackGetSyncLength() SpiritPktCommonGetSyncLength() + + +/** + * @brief Sets fixed or variable payload length mode for SPIRIT STack 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. + */ +#define SpiritPktStackSetFixVarLength(xFixVarLength) SpiritPktCommonSetFixVarLength((PktFixVarLength)xFixVarLength) + + +/** + * @brief Enables or Disables the CRC filtering. + * @param xNewState new state for CRC_CHECK. + * This parameter can be S_ENABLE or S_DISABLE. + * @retval None. + */ +#define SpiritPktStackFilterOnCrc(xNewState) SpiritPktCommonFilterOnCrc(xNewState) + + +/** + * @brief Returns the CRC filtering bit. + * @param None. + * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE. + */ +#define SpiritPktStackGetFilterOnCrc() SpiritPktCommonGetFilterOnCrc() + + +/** + * @brief Sets the CRC mode for SPIRIT STack packets. + * @param xCrcMode CRC mode. + * This parameter can be any value of @ref StackCrcMode. + * @retval None. + */ +#define SpiritPktStackSetCrcMode(xCrcMode) SpiritPktCommonSetCrcMode((PktCrcMode)xCrcMode) + + +/** + * @brief Returns the CRC mode for SPIRIT packets. + * @param None. + * @retval StackCrcMode Crc mode. + */ +#define SpiritPktStackGetCrcMode() (StackCrcMode)SpiritPktCommonGetCrcMode() + + +/** + * @brief Enables or Disables WHITENING for SPIRIT STack packets. + * @param xNewState new state for WHITENING mode. + * This parameter can be S_ENABLE or S_DISABLE. + * @retval None. + */ +#define SpiritPktStackWhitening(xNewState) SpiritPktCommonWhitening(xNewState) + + +/** + * @brief Enables or Disables FEC for SPIRIT STack packets. + * @param xNewState new state for FEC mode. + * This parameter can be S_ENABLE or S_DISABLE. + * @retval None. + */ +#define SpiritPktStackFec(xNewState) SpiritPktCommonFec(xNewState) + + +/** + * @brief Sets a specific SYNC word for SPIRIT STack packets. + * @param xSyncX SYNC word number to be set. + * This parameter can be any value of @ref StackSyncX. + * @param cSyncWord SYNC word. + * This parameter is an uint8_t. + * @retval None. + */ +#define SpiritPktStackSetSyncxWord(xSyncX, cSyncWord) SpiritPktCommonSetSyncxWord((PktSyncX)xSyncX,cSyncWord) + + +/** + * @brief Returns a specific SYNC word for SPIRIT STack packets. + * @param xSyncX SYNC word number to be get. + * This parameter can be any value of @ref StackSyncX. + * @retval uint8_t Sync word x. + */ +#define SpiritPktStackGetSyncxWord(xSyncX) SpiritPktCommonGetSyncxWord(xSyncX) + + +/** + * @brief Sets multiple SYNC words for SPIRIT STack 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 StackSyncLength. + * @retval None. + */ +#define SpiritPktStackSetSyncWords(lSyncWords, xSyncLength) SpiritPktCommonSetSyncWords(lSyncWords,(PktSyncLength)xSyncLength) + + +/** + * @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 StackSyncLength. + * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|. + */ +#define SpiritPktStackGetSyncWords(xSyncLength) SpiritPktCommonGetSyncWords((PktSyncLength)xSyncLength) + + +/** + * @brief Returns the SPIRIT variable length width (in number of bits). + * @param None. + * @retval uint8_t Variable length width in bits. + */ +#define SpiritPktStackGetVarLengthWidth() SpiritPktCommonGetVarLengthWidth() + + +/** + * @brief Sets the destination address for the Tx packet. + * @param cAddress destination address. + * This parameter is an uint8_t. + * @retval None. + */ +#define SpiritPktStackSetDestinationAddress(cAddress) SpiritPktCommonSetDestinationAddress(cAddress) + + +/** + * @brief Sets the Rx packet reference source address. The source address extracted from the received packet is masked + * with the source reference mask and then compared to the masked reference value. + * @param cAddress Reference source address. + * This parameter is an uint8_t. + * @retval None. + */ +#define SpiritPktStackSetSourceReferenceAddress(cAddress) SpiritPktCommonSetDestinationAddress(cAddress) + + +/** + * @brief Returns the Rx packet reference source address. The source address extracted from the received packet is masked + * with the source reference mask and then compared to the masked reference value. + * @param cAddress Reference source address. + * This parameter is an uint8_t. + * @retval None. + */ +#define SpiritPktStackGetSourceReferenceAddress() SpiritPktCommonGetTransmittedDestAddress() + + +/** + * @brief Returns the settled destination address. + * @param None. + * @retval uint8_t Transmitted destination address. + */ +#define SpiritPktStackGetTransmittedDestAddress() SpiritPktCommonGetTransmittedDestAddress() + + +/** + * @brief Sets the node 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. + */ +#define SpiritPktStackSetMyAddress(cAddress) SpiritPktCommonSetMyAddress(cAddress) + + +/** + * @brief Returns the address of the present node. + * @param None. + * @retval uint8_t My address (address of this node). + */ +#define SpiritPktStackGetMyAddress() SpiritPktCommonGetMyAddress() + + +/** + * @brief Sets the broadcast address. When the broadcast filtering is on, 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. + */ +#define SpiritPktStackSetBroadcastAddress(cAddress) SpiritPktCommonSetBroadcastAddress(cAddress) + + +/** + * @brief Returns the broadcast address. + * @param None. + * @retval uint8_t Broadcast address. + */ +#define SpiritPktStackGetBroadcastAddress() SpiritPktCommonGetBroadcastAddress() + + +/** + * @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. + */ +#define SpiritPktStackSetMulticastAddress(cAddress) SpiritPktCommonSetMulticastAddress(cAddress) + + +/** + * @brief Returns the multicast address. + * @param None. + * @retval uint8_t Multicast address. + */ +#define SpiritPktStackGetMulticastAddress() SpiritPktCommonGetMulticastAddress() + + +/** + * @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. + */ +#define SpiritPktStackSetCtrlMask(lMask) SpiritPktCommonSetCtrlMask(lMask) + + +/** + * @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. + */ +#define SpiritPktStackGetCtrlMask() SpiritPktCommonGetCtrlMask() + + +/** + * @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. + */ +#define SpiritPktStackSetCtrlReference(lReference) SpiritPktCommonSetCtrlReference(lReference) + + +/** + * @brief Returns the control field reference. + * @param None. + * @retval uint32_t Control reference. + */ +#define SpiritPktStackGetCtrlReference() SpiritPktCommonGetCtrlReference() + + +/** + * @brief Sets the TX control field. + * @param lField TX CONTROL FIELD. + * This parameter is an uint32_t. + * @retval None. + */ +#define SpiritPktStackSetTransmittedCtrlField(lField) SpiritPktCommonSetTransmittedCtrlField(lField) + + +/** + * @brief Returns the TX control field. + * @param None. + * @retval uint32_t Control field of the transmitted packet. + */ +#define SpiritPktStackGetTransmittedCtrlField() SpiritPktCommonGetTransmittedCtrlField() + + +/** + * @brief If enabled RX packet is accepted if its destination address matches with TX_SOURCE_ADDRESS. + * @param xNewState new state for DEST_VS_SOURCE_ADDRESS. + * This parameter can be S_ENABLE or S_DISABLE. + * @retval None. + */ +#define SpiritPktStackFilterOnMyAddress(xNewState) SpiritPktCommonFilterOnMyAddress(xNewState) + + +/** + * @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. + */ +#define SpiritPktStackFilterOnMulticastAddress(xNewState) SpiritPktCommonFilterOnMulticastAddress(xNewState) + + +/** + * @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. + */ +#define SpiritPktStackFilterOnBroadcastAddress(xNewState) SpiritPktCommonFilterOnBroadcastAddress(xNewState) + + +/** + * @brief Returns the enable bit of the my address filtering. + * @param None. + * @retval SpiritFunctionalStateThis parameter can be S_ENABLE or S_DISABLE. + */ +#define SpiritPktStackGetFilterOnMyAddress() SpiritPktCommonGetFilterOnMyAddress(); + + +/** + * @brief Returns the enable bit of the multicast address filtering. + * @param None. + * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE. + */ +#define SpiritPktStackGetFilterOnMulticastAddress() SpiritPktCommonGetFilterOnMulticastAddress(); + + +/** + * @brief Returns the enable bit of the broadcast address filtering. + * @param None. + * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE. + */ +#define SpiritPktStackGetFilterOnBroadcastAddress() SpiritPktCommonGetFilterOnBroadcastAddress(); + + +/** + * @brief Returns the control field of the received packet. + * @param None. + * @retval uint32_t Received control field. + */ +#define SpiritPktStackGetReceivedCtrlField() SpiritPktCommonGetReceivedCtrlField() + + +/** + * @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. + */ +#define SpiritPktStackGetReceivedCrcField(cCrcFieldVect) SpiritPktCommonGetReceivedCrcField(cCrcFieldVect) + +/** + * @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. + */ +#define SpiritPktStackAutoAck(xAutoAck, xPiggybacking) SpiritPktCommonAutoAck(xAutoAck, xPiggybacking) + + +/** + * @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. + */ +#define SpiritPktStackRequireAck(xNewState) SpiritPktCommonRequireAck(xNewState) + + +/** + * @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. + */ +#define SpiritPktStackSetTransmittedSeqNumberReload(cSeqNumberReload) SpiritPktCommonSetTransmittedSeqNumberReload(cSeqNumberReload) + + +/** + * @brief Sets the max number of automatic retransmission. + * @param xNMaxReTx max number of retransmission. + * This parameter can be any value of @ref PktNMaxReTx. + * @retval None. + */ +#define SpiritPktStackSetNMaxReTx(xNMaxReTx) SpiritPktCommonSetNMaxReTx((PktNMaxReTx)xNMaxReTx) + + +/** + * @brief Returns the max number of automatic retransmission. + * @param None. + * @retval uint8_t Max number of retransmissions. + */ +#define SpiritPktStackGetNMaxReTx() SpiritPktCommonGetNMaxReTx() + + +/** + * @brief Returns the TX ACK request. + * @param None. + * @retval SpiritFunctionalState. + */ +#define SpiritPktStackGetGetTxAckRequest() SpiritPktCommonGetTxAckRequest() + +/** + * @brief Returns the destination address of the received packet. + * @param None. + * @retval uint8_t Destination address of the received packet. + */ +#define SpiritPktStackGetReceivedDestAddress() SpiritPktCommonGetReceivedDestAddress() + + +/** + * @brief Returns the source address of the received packet. + * @param None. + * @retval uint8_t Source address of the received packet. + */ +#define SpiritPktStackGetReceivedSourceAddress() SpiritPktCommonGetReceivedSourceAddress() + + +/** + * @brief Returns the sequence number of the received packet. + * @param None. + * @retval uint8_t Received Sequence number. + */ +#define SpiritPktStackGetReceivedSeqNumber() SpiritPktCommonGetReceivedSeqNumber() + + +/** + * @brief Returns the Nack bit of the received packet + * @param None. + * @retval uint8_t Value of the NAck bit. + */ +#define SpiritPktStackGetReceivedNackRx() SpiritPktCommonGetReceivedNackRx() + + +/** + * @brief Returns the sequence number of the transmitted packet. + * @param None. + * @retval uint8_t Sequence number of the transmitted packet. + */ +#define SpiritPktStackGetTransmittedSeqNumber() SpiritPktCommonGetTransmittedSeqNumber() + + +/** + * @brief Returns the number of retransmission done on the transmitted packet. + * @param None. + * @retval uint8_t Number of retransmissions done until now. + */ +#define SpiritPktStackGetNReTx() SpiritPktCommonGetNReTx() + + +/** + * @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. + */ +#define SpiritPktStackFilterOnControlField(xNewState) SpiritPktCommonFilterOnControlField(xNewState) + + +/** + * @brief Returns the enable bit of the control field filtering. + * @param None. + * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE. + */ +#define SpiritPktStackGetFilterOnControlField() SpiritPktCommonGetFilterOnControlField(); + + +/** + *@} + */ + + +/** + * @defgroup PktStack_Exported_Functions Pkt STack Exported Functions + * @{ + */ + +void SpiritPktStackInit(PktStackInit* pxPktStackInit); +void SpiritPktStackGetInfo(PktStackInit* pxPktStackInit); +void SpiritPktStackAddressesInit(PktStackAddressesInit* pxPktStackAddresses); +void SpiritPktStackGetAddressesInfo(PktStackAddressesInit* pxPktStackAddresses); +void SpiritPktStackLlpInit(PktStackLlpInit* pxPktStackLlpInit); +void SpiritPktStackLlpGetInfo(PktStackLlpInit* pxPktStackLlpInit); +void SpiritPktStackSetFormat(void); +void SpiritPktStackSetPayloadLength(uint16_t nPayloadLength); +uint16_t SpiritPktStackGetPayloadLength(void); +void SpiritPktStackSetVarLengthWidth(uint16_t nMaxPayloadLength, StackControlLength xControlLength); +void SpiritPktStackSetRxSourceMask(uint8_t cMask); +uint8_t SpiritPktStackGetRxSourceMask(void); +uint16_t SpiritPktStackGetReceivedPktLength(void); +void SpiritPktStackFilterOnSourceAddress(SpiritFunctionalState xNewState); +void SpiritPktStackSetAddressLength(void); + +/** + *@} + */ + +/** + *@} + */ + + +/** + *@} + */ + +#ifdef __cplusplus +} +#endif + +#endif + +/******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/