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).

Committer:
Wolfgang Betz
Date:
Thu Jul 06 11:13:31 2017 +0200
Revision:
67:93bec0baf1de
Parent:
34:edda6a7238ec
Clarify some comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 67:93bec0baf1de 1 /**
Wolfgang Betz 67:93bec0baf1de 2 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 3 * @file SPIRIT_PktCommon.c
Wolfgang Betz 67:93bec0baf1de 4 * @author VMA division - AMS
Wolfgang Betz 67:93bec0baf1de 5 * @version 3.2.2
Wolfgang Betz 67:93bec0baf1de 6 * @date 08-July-2015
Wolfgang Betz 67:93bec0baf1de 7 * @brief Configuration and management of the common features of SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 8 * @details
Wolfgang Betz 67:93bec0baf1de 9 *
Wolfgang Betz 67:93bec0baf1de 10 * @attention
Wolfgang Betz 67:93bec0baf1de 11 *
Wolfgang Betz 67:93bec0baf1de 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Wolfgang Betz 67:93bec0baf1de 13 *
Wolfgang Betz 67:93bec0baf1de 14 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 67:93bec0baf1de 15 * are permitted provided that the following conditions are met:
Wolfgang Betz 67:93bec0baf1de 16 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 17 * this list of conditions and the following disclaimer.
Wolfgang Betz 67:93bec0baf1de 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 19 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 67:93bec0baf1de 20 * and/or other materials provided with the distribution.
Wolfgang Betz 67:93bec0baf1de 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 67:93bec0baf1de 22 * may be used to endorse or promote products derived from this software
Wolfgang Betz 67:93bec0baf1de 23 * without specific prior written permission.
Wolfgang Betz 67:93bec0baf1de 24 *
Wolfgang Betz 67:93bec0baf1de 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 67:93bec0baf1de 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 67:93bec0baf1de 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 67:93bec0baf1de 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 67:93bec0baf1de 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 67:93bec0baf1de 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 67:93bec0baf1de 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 67:93bec0baf1de 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 67:93bec0baf1de 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 67:93bec0baf1de 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 67:93bec0baf1de 35 *
Wolfgang Betz 67:93bec0baf1de 36 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 37 */
Wolfgang Betz 67:93bec0baf1de 38
Wolfgang Betz 67:93bec0baf1de 39 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 40 #include "SPIRIT_PktCommon.h"
Wolfgang Betz 67:93bec0baf1de 41 #include "MCU_Interface.h"
Wolfgang Betz 67:93bec0baf1de 42
Wolfgang Betz 67:93bec0baf1de 43
Wolfgang Betz 67:93bec0baf1de 44 /**
Wolfgang Betz 67:93bec0baf1de 45 * @addtogroup SPIRIT_Libraries
Wolfgang Betz 67:93bec0baf1de 46 * @{
Wolfgang Betz 67:93bec0baf1de 47 */
Wolfgang Betz 67:93bec0baf1de 48
Wolfgang Betz 67:93bec0baf1de 49
Wolfgang Betz 67:93bec0baf1de 50 /**
Wolfgang Betz 67:93bec0baf1de 51 * @addtogroup SPIRIT_PktCommon
Wolfgang Betz 67:93bec0baf1de 52 * @{
Wolfgang Betz 67:93bec0baf1de 53 */
Wolfgang Betz 67:93bec0baf1de 54
Wolfgang Betz 67:93bec0baf1de 55
Wolfgang Betz 67:93bec0baf1de 56 /**
Wolfgang Betz 67:93bec0baf1de 57 * @defgroup PktCommon_Private_TypesDefinitions Pkt Common Private Types Definitions
Wolfgang Betz 67:93bec0baf1de 58 * @{
Wolfgang Betz 67:93bec0baf1de 59 */
Wolfgang Betz 67:93bec0baf1de 60
Wolfgang Betz 67:93bec0baf1de 61 /**
Wolfgang Betz 67:93bec0baf1de 62 *@}
Wolfgang Betz 67:93bec0baf1de 63 */
Wolfgang Betz 67:93bec0baf1de 64
Wolfgang Betz 67:93bec0baf1de 65
Wolfgang Betz 67:93bec0baf1de 66 /**
Wolfgang Betz 67:93bec0baf1de 67 * @defgroup PktCommon_Private_Defines Pkt Common Private Defines
Wolfgang Betz 67:93bec0baf1de 68 * @{
Wolfgang Betz 67:93bec0baf1de 69 */
Wolfgang Betz 67:93bec0baf1de 70
Wolfgang Betz 67:93bec0baf1de 71 /**
Wolfgang Betz 67:93bec0baf1de 72 *@}
Wolfgang Betz 67:93bec0baf1de 73 */
Wolfgang Betz 67:93bec0baf1de 74
Wolfgang Betz 67:93bec0baf1de 75
Wolfgang Betz 67:93bec0baf1de 76 /**
Wolfgang Betz 67:93bec0baf1de 77 * @defgroup PktCommon_Private_Macros Pkt Common Private Macros
Wolfgang Betz 67:93bec0baf1de 78 * @{
Wolfgang Betz 67:93bec0baf1de 79 */
Wolfgang Betz 67:93bec0baf1de 80
Wolfgang Betz 67:93bec0baf1de 81 /**
Wolfgang Betz 67:93bec0baf1de 82 *@}
Wolfgang Betz 67:93bec0baf1de 83 */
Wolfgang Betz 67:93bec0baf1de 84
Wolfgang Betz 67:93bec0baf1de 85
Wolfgang Betz 67:93bec0baf1de 86 /**
Wolfgang Betz 67:93bec0baf1de 87 * @defgroup PktCommon_Private_Variables Pkt Common Private Variables
Wolfgang Betz 67:93bec0baf1de 88 * @{
Wolfgang Betz 67:93bec0baf1de 89 */
Wolfgang Betz 67:93bec0baf1de 90
Wolfgang Betz 67:93bec0baf1de 91 /**
Wolfgang Betz 67:93bec0baf1de 92 *@}
Wolfgang Betz 67:93bec0baf1de 93 */
Wolfgang Betz 67:93bec0baf1de 94
Wolfgang Betz 67:93bec0baf1de 95
Wolfgang Betz 67:93bec0baf1de 96
Wolfgang Betz 67:93bec0baf1de 97 /**
Wolfgang Betz 67:93bec0baf1de 98 * @defgroup PktCommon_Private_FunctionPrototypes Pkt Common Private Function Prototypes
Wolfgang Betz 67:93bec0baf1de 99 * @{
Wolfgang Betz 67:93bec0baf1de 100 */
Wolfgang Betz 67:93bec0baf1de 101
Wolfgang Betz 67:93bec0baf1de 102 /**
Wolfgang Betz 67:93bec0baf1de 103 *@}
Wolfgang Betz 67:93bec0baf1de 104 */
Wolfgang Betz 67:93bec0baf1de 105
Wolfgang Betz 67:93bec0baf1de 106
Wolfgang Betz 67:93bec0baf1de 107 /**
Wolfgang Betz 67:93bec0baf1de 108 * @defgroup PktCommon_Private_Functions Pkt Common Private Functions
Wolfgang Betz 67:93bec0baf1de 109 * @{
Wolfgang Betz 67:93bec0baf1de 110 */
Wolfgang Betz 67:93bec0baf1de 111
Wolfgang Betz 67:93bec0baf1de 112 /**
Wolfgang Betz 67:93bec0baf1de 113 * @brief Sets the CONTROL field length for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 114 * @param xControlLength length of CONTROL field in bytes.
Wolfgang Betz 67:93bec0baf1de 115 * This parameter can be any value of @ref PktControlLength.
Wolfgang Betz 67:93bec0baf1de 116 * @retval None.
Wolfgang Betz 67:93bec0baf1de 117 */
Wolfgang Betz 67:93bec0baf1de 118 void SpiritPktCommonSetControlLength(PktControlLength xControlLength)
Wolfgang Betz 67:93bec0baf1de 119 {
Wolfgang Betz 67:93bec0baf1de 120 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 121
Wolfgang Betz 67:93bec0baf1de 122 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 123 s_assert_param(IS_PKT_CONTROL_LENGTH(xControlLength));
Wolfgang Betz 67:93bec0baf1de 124
Wolfgang Betz 67:93bec0baf1de 125 /* Reads the PCKTCTRL4 register value */
Wolfgang Betz 67:93bec0baf1de 126 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 127
Wolfgang Betz 67:93bec0baf1de 128 /* Set the control length */
Wolfgang Betz 67:93bec0baf1de 129 tempRegValue &= ~PCKTCTRL4_CONTROL_LEN_MASK;
Wolfgang Betz 67:93bec0baf1de 130 tempRegValue |= (uint8_t)xControlLength;
Wolfgang Betz 67:93bec0baf1de 131
Wolfgang Betz 67:93bec0baf1de 132 /* Writes the new value on the PCKTCTRL4 register */
Wolfgang Betz 67:93bec0baf1de 133 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 134 }
Wolfgang Betz 67:93bec0baf1de 135
Wolfgang Betz 67:93bec0baf1de 136
Wolfgang Betz 67:93bec0baf1de 137 /**
Wolfgang Betz 67:93bec0baf1de 138 * @brief Returns the CONTROL field length for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 139 * @param None.
Wolfgang Betz 67:93bec0baf1de 140 * @retval uint8_t Control field length.
Wolfgang Betz 67:93bec0baf1de 141 */
Wolfgang Betz 67:93bec0baf1de 142 uint8_t SpiritPktCommonGetControlLength(void)
Wolfgang Betz 67:93bec0baf1de 143 {
Wolfgang Betz 67:93bec0baf1de 144 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 145
Wolfgang Betz 67:93bec0baf1de 146 /* Reads the PCKTCTRL4 register value */
Wolfgang Betz 67:93bec0baf1de 147 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 148
Wolfgang Betz 67:93bec0baf1de 149 /* Rebuild and return value */
Wolfgang Betz 67:93bec0baf1de 150 return (tempRegValue & PCKTCTRL4_CONTROL_LEN_MASK);
Wolfgang Betz 67:93bec0baf1de 151 }
Wolfgang Betz 67:93bec0baf1de 152
Wolfgang Betz 67:93bec0baf1de 153
Wolfgang Betz 67:93bec0baf1de 154 /**
Wolfgang Betz 67:93bec0baf1de 155 * @brief Sets the PREAMBLE field Length mode for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 156 * @param xPreambleLength length of PREAMBLE field in bytes.
Wolfgang Betz 67:93bec0baf1de 157 * This parameter can be any value of @ref PktPreambleLength.
Wolfgang Betz 67:93bec0baf1de 158 * @retval None.
Wolfgang Betz 67:93bec0baf1de 159 */
Wolfgang Betz 67:93bec0baf1de 160 void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength)
Wolfgang Betz 67:93bec0baf1de 161 {
Wolfgang Betz 67:93bec0baf1de 162 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 163
Wolfgang Betz 67:93bec0baf1de 164 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 165 s_assert_param(IS_PKT_PREAMBLE_LENGTH(xPreambleLength));
Wolfgang Betz 67:93bec0baf1de 166
Wolfgang Betz 67:93bec0baf1de 167 /* Reads the PCKTCTRL2 register value */
Wolfgang Betz 67:93bec0baf1de 168 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 169
Wolfgang Betz 67:93bec0baf1de 170 /* Set the preamble length */
Wolfgang Betz 67:93bec0baf1de 171 tempRegValue &= ~PCKTCTRL2_PREAMBLE_LENGTH_MASK;
Wolfgang Betz 67:93bec0baf1de 172 tempRegValue |= (uint8_t)xPreambleLength;
Wolfgang Betz 67:93bec0baf1de 173
Wolfgang Betz 67:93bec0baf1de 174 /* Writes the new value on the PCKTCTRL2 register */
Wolfgang Betz 67:93bec0baf1de 175 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 176 }
Wolfgang Betz 67:93bec0baf1de 177
Wolfgang Betz 67:93bec0baf1de 178
Wolfgang Betz 67:93bec0baf1de 179 /**
Wolfgang Betz 67:93bec0baf1de 180 * @brief Returns the PREAMBLE field Length mode for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 181 * @param None.
Wolfgang Betz 67:93bec0baf1de 182 * @retval uint8_t Preamble field length in bytes.
Wolfgang Betz 67:93bec0baf1de 183 */
Wolfgang Betz 67:93bec0baf1de 184 uint8_t SpiritPktCommonGetPreambleLength(void)
Wolfgang Betz 67:93bec0baf1de 185 {
Wolfgang Betz 67:93bec0baf1de 186 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 187
Wolfgang Betz 67:93bec0baf1de 188 /* Reads the PCKTCTRL2 register value */
Wolfgang Betz 67:93bec0baf1de 189 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 190
Wolfgang Betz 67:93bec0baf1de 191 /* Rebuild and return value */
Wolfgang Betz 67:93bec0baf1de 192 return ((tempRegValue & PCKTCTRL2_PREAMBLE_LENGTH_MASK)>>3) + 1;
Wolfgang Betz 67:93bec0baf1de 193
Wolfgang Betz 67:93bec0baf1de 194 }
Wolfgang Betz 67:93bec0baf1de 195
Wolfgang Betz 67:93bec0baf1de 196
Wolfgang Betz 67:93bec0baf1de 197 /**
Wolfgang Betz 67:93bec0baf1de 198 * @brief Sets the SYNC field Length for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 199 * @param xSyncLength length of SYNC field in bytes.
Wolfgang Betz 67:93bec0baf1de 200 * This parameter can be any value of @ref PktSyncLength.
Wolfgang Betz 67:93bec0baf1de 201 * @retval None.
Wolfgang Betz 67:93bec0baf1de 202 */
Wolfgang Betz 67:93bec0baf1de 203 void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength)
Wolfgang Betz 67:93bec0baf1de 204 {
Wolfgang Betz 67:93bec0baf1de 205 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 206
Wolfgang Betz 67:93bec0baf1de 207 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 208 s_assert_param(IS_PKT_SYNC_LENGTH(xSyncLength));
Wolfgang Betz 67:93bec0baf1de 209
Wolfgang Betz 67:93bec0baf1de 210 /* Reads the PCKTCTRL2 register value */
Wolfgang Betz 67:93bec0baf1de 211 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 212
Wolfgang Betz 67:93bec0baf1de 213 /* Set the sync length */
Wolfgang Betz 67:93bec0baf1de 214 tempRegValue &= ~PCKTCTRL2_SYNC_LENGTH_MASK;
Wolfgang Betz 67:93bec0baf1de 215 tempRegValue |= (uint8_t)xSyncLength;
Wolfgang Betz 67:93bec0baf1de 216
Wolfgang Betz 67:93bec0baf1de 217 /* Writes the new value on the PCKTCTRL2 register */
Wolfgang Betz 67:93bec0baf1de 218 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 219
Wolfgang Betz 67:93bec0baf1de 220 }
Wolfgang Betz 67:93bec0baf1de 221
Wolfgang Betz 67:93bec0baf1de 222
Wolfgang Betz 67:93bec0baf1de 223 /**
Wolfgang Betz 67:93bec0baf1de 224 * @brief Returns the SYNC field Length for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 225 * @param None.
Wolfgang Betz 67:93bec0baf1de 226 * @retval uint8_t Sync field length in bytes.
Wolfgang Betz 67:93bec0baf1de 227 */
Wolfgang Betz 67:93bec0baf1de 228 uint8_t SpiritPktCommonGetSyncLength(void)
Wolfgang Betz 67:93bec0baf1de 229 {
Wolfgang Betz 67:93bec0baf1de 230 uint8_t tempRetValue;
Wolfgang Betz 67:93bec0baf1de 231
Wolfgang Betz 67:93bec0baf1de 232 /* Reads the PCKTCTRL2 register value */
Wolfgang Betz 67:93bec0baf1de 233 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRetValue);
Wolfgang Betz 67:93bec0baf1de 234
Wolfgang Betz 67:93bec0baf1de 235 /* Rebuild and return value */
Wolfgang Betz 67:93bec0baf1de 236 return ((tempRetValue & PCKTCTRL2_SYNC_LENGTH_MASK)>>1) + 1;
Wolfgang Betz 67:93bec0baf1de 237
Wolfgang Betz 67:93bec0baf1de 238 }
Wolfgang Betz 67:93bec0baf1de 239
Wolfgang Betz 67:93bec0baf1de 240
Wolfgang Betz 67:93bec0baf1de 241 /**
Wolfgang Betz 67:93bec0baf1de 242 * @brief Sets fixed or variable payload length mode for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 243 * @param xFixVarLength variable or fixed length.
Wolfgang Betz 67:93bec0baf1de 244 * PKT_FIXED_LENGTH_VAR -> variable (the length is extracted from the received packet).
Wolfgang Betz 67:93bec0baf1de 245 * PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0 and PCKTLEN1).
Wolfgang Betz 67:93bec0baf1de 246 * @retval None.
Wolfgang Betz 67:93bec0baf1de 247 */
Wolfgang Betz 67:93bec0baf1de 248 void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength)
Wolfgang Betz 67:93bec0baf1de 249 {
Wolfgang Betz 67:93bec0baf1de 250 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 251
Wolfgang Betz 67:93bec0baf1de 252 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 253 s_assert_param(IS_PKT_FIX_VAR_LENGTH(xFixVarLength));
Wolfgang Betz 67:93bec0baf1de 254
Wolfgang Betz 67:93bec0baf1de 255 /* Reads the PCKTCTRL2 register value */
Wolfgang Betz 67:93bec0baf1de 256 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 257
Wolfgang Betz 67:93bec0baf1de 258 /* Set fixed or variable address mode */
Wolfgang Betz 67:93bec0baf1de 259 tempRegValue &= ~PCKTCTRL2_FIX_VAR_LEN_MASK;
Wolfgang Betz 67:93bec0baf1de 260 tempRegValue |= (uint8_t)xFixVarLength;
Wolfgang Betz 67:93bec0baf1de 261
Wolfgang Betz 67:93bec0baf1de 262 /* Writes the new value on the PCKTCTRL2 register */
Wolfgang Betz 67:93bec0baf1de 263 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 264
Wolfgang Betz 67:93bec0baf1de 265 }
Wolfgang Betz 67:93bec0baf1de 266
Wolfgang Betz 67:93bec0baf1de 267
Wolfgang Betz 67:93bec0baf1de 268 /**
Wolfgang Betz 67:93bec0baf1de 269 * @brief Enables or Disables the filtering on CRC.
Wolfgang Betz 67:93bec0baf1de 270 * @param xNewState new state for CRC_CHECK.
Wolfgang Betz 67:93bec0baf1de 271 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 272 * @retval None.
Wolfgang Betz 67:93bec0baf1de 273 */
Wolfgang Betz 67:93bec0baf1de 274 void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 275 {
Wolfgang Betz 67:93bec0baf1de 276 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 277
Wolfgang Betz 67:93bec0baf1de 278 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 279 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 280
Wolfgang Betz 67:93bec0baf1de 281 /* Reads the PCKT_FLT_OPTIONS register value */
Wolfgang Betz 67:93bec0baf1de 282 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 283
Wolfgang Betz 67:93bec0baf1de 284 /* Modify the register value: enable or disable the CRC filtering */
Wolfgang Betz 67:93bec0baf1de 285 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 286 {
Wolfgang Betz 67:93bec0baf1de 287 tempRegValue |= PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
Wolfgang Betz 67:93bec0baf1de 288 }
Wolfgang Betz 67:93bec0baf1de 289 else
Wolfgang Betz 67:93bec0baf1de 290 {
Wolfgang Betz 67:93bec0baf1de 291 tempRegValue &= ~PCKT_FLT_OPTIONS_CRC_CHECK_MASK;
Wolfgang Betz 67:93bec0baf1de 292 }
Wolfgang Betz 67:93bec0baf1de 293
Wolfgang Betz 67:93bec0baf1de 294 /* Writes the PCKT_FLT_OPTIONS register value */
Wolfgang Betz 67:93bec0baf1de 295 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 296
Wolfgang Betz 67:93bec0baf1de 297 }
Wolfgang Betz 67:93bec0baf1de 298
Wolfgang Betz 67:93bec0baf1de 299
Wolfgang Betz 67:93bec0baf1de 300 /**
Wolfgang Betz 67:93bec0baf1de 301 * @brief Returns the CRC filtering enable bit.
Wolfgang Betz 67:93bec0baf1de 302 * @param None.
Wolfgang Betz 67:93bec0baf1de 303 * @retval SpiritFunctionalState CRC filtering.
Wolfgang Betz 67:93bec0baf1de 304 */
Wolfgang Betz 67:93bec0baf1de 305 SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void)
Wolfgang Betz 67:93bec0baf1de 306 {
Wolfgang Betz 67:93bec0baf1de 307 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 308
Wolfgang Betz 67:93bec0baf1de 309
Wolfgang Betz 67:93bec0baf1de 310 /* Reads the PCKT_FLT_OPTIONS register value */
Wolfgang Betz 67:93bec0baf1de 311 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 312
Wolfgang Betz 67:93bec0baf1de 313 /* Check the CRC filtering bit */
Wolfgang Betz 67:93bec0baf1de 314 if(tempRegValue & PCKT_FLT_OPTIONS_CRC_CHECK_MASK)
Wolfgang Betz 67:93bec0baf1de 315 {
Wolfgang Betz 67:93bec0baf1de 316 return S_ENABLE;
Wolfgang Betz 67:93bec0baf1de 317 }
Wolfgang Betz 67:93bec0baf1de 318 else
Wolfgang Betz 67:93bec0baf1de 319 {
Wolfgang Betz 67:93bec0baf1de 320 return S_DISABLE;
Wolfgang Betz 67:93bec0baf1de 321 }
Wolfgang Betz 67:93bec0baf1de 322
Wolfgang Betz 67:93bec0baf1de 323 }
Wolfgang Betz 67:93bec0baf1de 324
Wolfgang Betz 67:93bec0baf1de 325
Wolfgang Betz 67:93bec0baf1de 326 /**
Wolfgang Betz 67:93bec0baf1de 327 * @brief Sets the CRC mode for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 328 * @param xCrcMode length of CRC field in bytes.
Wolfgang Betz 67:93bec0baf1de 329 * This parameter can be any value of @ref PktCrcMode.
Wolfgang Betz 67:93bec0baf1de 330 * @retval None.
Wolfgang Betz 67:93bec0baf1de 331 */
Wolfgang Betz 67:93bec0baf1de 332 void SpiritPktCommonSetCrcMode(PktCrcMode xCrcMode)
Wolfgang Betz 67:93bec0baf1de 333 {
Wolfgang Betz 67:93bec0baf1de 334 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 335
Wolfgang Betz 67:93bec0baf1de 336 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 337 s_assert_param(IS_PKT_CRC_MODE(xCrcMode));
Wolfgang Betz 67:93bec0baf1de 338
Wolfgang Betz 67:93bec0baf1de 339 /* Reads the PCKTCTRL1 register value */
Wolfgang Betz 67:93bec0baf1de 340 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 341
Wolfgang Betz 67:93bec0baf1de 342 /* Build data to write setting the CRC mode */
Wolfgang Betz 67:93bec0baf1de 343 tempRegValue &= ~PCKTCTRL1_CRC_MODE_MASK;
Wolfgang Betz 67:93bec0baf1de 344 tempRegValue |= (uint8_t)xCrcMode;
Wolfgang Betz 67:93bec0baf1de 345
Wolfgang Betz 67:93bec0baf1de 346 /* Writes the new value on the PCKTCTRL1 register */
Wolfgang Betz 67:93bec0baf1de 347 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 348
Wolfgang Betz 67:93bec0baf1de 349 }
Wolfgang Betz 67:93bec0baf1de 350
Wolfgang Betz 67:93bec0baf1de 351
Wolfgang Betz 67:93bec0baf1de 352 /**
Wolfgang Betz 67:93bec0baf1de 353 * @brief Returns the CRC mode for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 354 * @param None.
Wolfgang Betz 67:93bec0baf1de 355 * @retval PktCrcMode Crc mode.
Wolfgang Betz 67:93bec0baf1de 356 */
Wolfgang Betz 67:93bec0baf1de 357 PktCrcMode SpiritPktCommonGetCrcMode(void)
Wolfgang Betz 67:93bec0baf1de 358 {
Wolfgang Betz 67:93bec0baf1de 359 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 360
Wolfgang Betz 67:93bec0baf1de 361 /* Reads the PCKTCTRL1 register */
Wolfgang Betz 67:93bec0baf1de 362 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 363
Wolfgang Betz 67:93bec0baf1de 364 /* Rebuild and return value */
Wolfgang Betz 67:93bec0baf1de 365 return (PktCrcMode)(tempRegValue & 0xE0);
Wolfgang Betz 67:93bec0baf1de 366
Wolfgang Betz 67:93bec0baf1de 367 }
Wolfgang Betz 67:93bec0baf1de 368
Wolfgang Betz 67:93bec0baf1de 369
Wolfgang Betz 67:93bec0baf1de 370 /**
Wolfgang Betz 67:93bec0baf1de 371 * @brief Enables or Disables WHITENING for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 372 * @param xNewState new state for WHITENING mode.
Wolfgang Betz 67:93bec0baf1de 373 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 374 * @retval None.
Wolfgang Betz 67:93bec0baf1de 375 */
Wolfgang Betz 67:93bec0baf1de 376 void SpiritPktCommonWhitening(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 377 {
Wolfgang Betz 67:93bec0baf1de 378 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 379
Wolfgang Betz 67:93bec0baf1de 380 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 381 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 382
Wolfgang Betz 67:93bec0baf1de 383 /* Reads the PCKTCTRL1 register value */
Wolfgang Betz 67:93bec0baf1de 384 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 385
Wolfgang Betz 67:93bec0baf1de 386 /* Build data to write: set or reset the whitening enable bit */
Wolfgang Betz 67:93bec0baf1de 387 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 388 {
Wolfgang Betz 67:93bec0baf1de 389 tempRegValue |= PCKTCTRL1_WHIT_MASK;
Wolfgang Betz 67:93bec0baf1de 390 }
Wolfgang Betz 67:93bec0baf1de 391 else
Wolfgang Betz 67:93bec0baf1de 392 {
Wolfgang Betz 67:93bec0baf1de 393 tempRegValue &= ~PCKTCTRL1_WHIT_MASK;
Wolfgang Betz 67:93bec0baf1de 394 }
Wolfgang Betz 67:93bec0baf1de 395
Wolfgang Betz 67:93bec0baf1de 396 /* Writes the new value on the PCKTCTRL1 register */
Wolfgang Betz 67:93bec0baf1de 397 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 398
Wolfgang Betz 67:93bec0baf1de 399 }
Wolfgang Betz 67:93bec0baf1de 400
Wolfgang Betz 67:93bec0baf1de 401
Wolfgang Betz 67:93bec0baf1de 402 /**
Wolfgang Betz 67:93bec0baf1de 403 * @brief Enables or Disables FEC for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 404 * @param xNewState new state for FEC mode.
Wolfgang Betz 67:93bec0baf1de 405 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 406 * @retval None.
Wolfgang Betz 67:93bec0baf1de 407 */
Wolfgang Betz 67:93bec0baf1de 408 void SpiritPktCommonFec(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 409 {
Wolfgang Betz 67:93bec0baf1de 410 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 411
Wolfgang Betz 67:93bec0baf1de 412 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 413 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 414
Wolfgang Betz 67:93bec0baf1de 415 /* Reads the PCKTCTRL1 register value */
Wolfgang Betz 67:93bec0baf1de 416 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 417
Wolfgang Betz 67:93bec0baf1de 418 /* Build data to write: set or reset the FEC enable bit */
Wolfgang Betz 67:93bec0baf1de 419 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 420 {
Wolfgang Betz 67:93bec0baf1de 421 tempRegValue |= PCKTCTRL1_FEC_MASK;
Wolfgang Betz 67:93bec0baf1de 422 }
Wolfgang Betz 67:93bec0baf1de 423 else
Wolfgang Betz 67:93bec0baf1de 424 {
Wolfgang Betz 67:93bec0baf1de 425 tempRegValue &= ~PCKTCTRL1_FEC_MASK;
Wolfgang Betz 67:93bec0baf1de 426 }
Wolfgang Betz 67:93bec0baf1de 427
Wolfgang Betz 67:93bec0baf1de 428 /* Writes data on the PCKTCTRL1 register */
Wolfgang Betz 67:93bec0baf1de 429 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 430
Wolfgang Betz 67:93bec0baf1de 431 }
Wolfgang Betz 67:93bec0baf1de 432
Wolfgang Betz 67:93bec0baf1de 433
Wolfgang Betz 67:93bec0baf1de 434 /**
Wolfgang Betz 67:93bec0baf1de 435 * @brief Sets a specific SYNC word for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 436 * @param xSyncX SYNC word number to be set.
Wolfgang Betz 67:93bec0baf1de 437 * This parameter can be any value of @ref PktSyncX.
Wolfgang Betz 67:93bec0baf1de 438 * @param cSyncWord SYNC word.
Wolfgang Betz 67:93bec0baf1de 439 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 440 * @retval None.
Wolfgang Betz 67:93bec0baf1de 441 */
Wolfgang Betz 67:93bec0baf1de 442 void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX , uint8_t cSyncWord)
Wolfgang Betz 67:93bec0baf1de 443 {
Wolfgang Betz 67:93bec0baf1de 444 uint8_t tempRegAddress;
Wolfgang Betz 67:93bec0baf1de 445
Wolfgang Betz 67:93bec0baf1de 446 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 447 s_assert_param(IS_PKT_SYNCx(xSyncX));
Wolfgang Betz 67:93bec0baf1de 448
Wolfgang Betz 67:93bec0baf1de 449 /* Set the specified address */
Wolfgang Betz 67:93bec0baf1de 450 switch(xSyncX)
Wolfgang Betz 67:93bec0baf1de 451 {
Wolfgang Betz 67:93bec0baf1de 452 case PKT_SYNC_WORD_1:
Wolfgang Betz 67:93bec0baf1de 453 tempRegAddress=SYNC1_BASE;
Wolfgang Betz 67:93bec0baf1de 454 break;
Wolfgang Betz 67:93bec0baf1de 455 case PKT_SYNC_WORD_2:
Wolfgang Betz 67:93bec0baf1de 456 tempRegAddress=SYNC2_BASE;
Wolfgang Betz 67:93bec0baf1de 457 break;
Wolfgang Betz 67:93bec0baf1de 458 case PKT_SYNC_WORD_3:
Wolfgang Betz 67:93bec0baf1de 459 tempRegAddress=SYNC3_BASE;
Wolfgang Betz 67:93bec0baf1de 460 break;
Wolfgang Betz 67:93bec0baf1de 461 default:
Wolfgang Betz 67:93bec0baf1de 462 tempRegAddress=SYNC4_BASE;
Wolfgang Betz 67:93bec0baf1de 463 break;
Wolfgang Betz 67:93bec0baf1de 464 }
Wolfgang Betz 67:93bec0baf1de 465
Wolfgang Betz 67:93bec0baf1de 466 /* Writes value on the selected register */
Wolfgang Betz 67:93bec0baf1de 467 g_xStatus = SpiritSpiWriteRegisters(tempRegAddress, 1, &cSyncWord);
Wolfgang Betz 67:93bec0baf1de 468
Wolfgang Betz 67:93bec0baf1de 469 }
Wolfgang Betz 67:93bec0baf1de 470
Wolfgang Betz 67:93bec0baf1de 471
Wolfgang Betz 67:93bec0baf1de 472 /**
Wolfgang Betz 67:93bec0baf1de 473 * @brief Returns a specific SYNC word for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 474 * @param xSyncX SYNC word number to be get.
Wolfgang Betz 67:93bec0baf1de 475 * This parameter can be any value of @ref PktSyncX.
Wolfgang Betz 67:93bec0baf1de 476 * @retval uint8_t Sync word x.
Wolfgang Betz 67:93bec0baf1de 477 */
Wolfgang Betz 67:93bec0baf1de 478 uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX)
Wolfgang Betz 67:93bec0baf1de 479 {
Wolfgang Betz 67:93bec0baf1de 480 uint8_t tempRegAddress, tempRegValue;
Wolfgang Betz 67:93bec0baf1de 481
Wolfgang Betz 67:93bec0baf1de 482 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 483 s_assert_param(IS_PKT_SYNCx(xSyncX));
Wolfgang Betz 67:93bec0baf1de 484
Wolfgang Betz 67:93bec0baf1de 485 /* Set the specified address */
Wolfgang Betz 67:93bec0baf1de 486 switch(xSyncX)
Wolfgang Betz 67:93bec0baf1de 487 {
Wolfgang Betz 67:93bec0baf1de 488 case PKT_SYNC_WORD_1:
Wolfgang Betz 67:93bec0baf1de 489 tempRegAddress=SYNC1_BASE;
Wolfgang Betz 67:93bec0baf1de 490 break;
Wolfgang Betz 67:93bec0baf1de 491 case PKT_SYNC_WORD_2:
Wolfgang Betz 67:93bec0baf1de 492 tempRegAddress=SYNC2_BASE;
Wolfgang Betz 67:93bec0baf1de 493 break;
Wolfgang Betz 67:93bec0baf1de 494 case PKT_SYNC_WORD_3:
Wolfgang Betz 67:93bec0baf1de 495 tempRegAddress=SYNC3_BASE;
Wolfgang Betz 67:93bec0baf1de 496 break;
Wolfgang Betz 67:93bec0baf1de 497 default:
Wolfgang Betz 67:93bec0baf1de 498 tempRegAddress=SYNC4_BASE;
Wolfgang Betz 67:93bec0baf1de 499 break;
Wolfgang Betz 67:93bec0baf1de 500 }
Wolfgang Betz 67:93bec0baf1de 501
Wolfgang Betz 67:93bec0baf1de 502 /* Reads the selected register value */
Wolfgang Betz 67:93bec0baf1de 503 g_xStatus = SpiritSpiReadRegisters(tempRegAddress, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 504
Wolfgang Betz 67:93bec0baf1de 505 /* Returns the read value */
Wolfgang Betz 67:93bec0baf1de 506 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 507
Wolfgang Betz 67:93bec0baf1de 508 }
Wolfgang Betz 67:93bec0baf1de 509
Wolfgang Betz 67:93bec0baf1de 510
Wolfgang Betz 67:93bec0baf1de 511 /**
Wolfgang Betz 67:93bec0baf1de 512 * @brief Sets multiple SYNC words for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 513 * @param lSyncWords SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
Wolfgang Betz 67:93bec0baf1de 514 * This parameter is a uint32_t.
Wolfgang Betz 67:93bec0baf1de 515 * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
Wolfgang Betz 67:93bec0baf1de 516 * until the number of bytes in xSyncLength has been stored.
Wolfgang Betz 67:93bec0baf1de 517 * This parameter is a @ref PktSyncLength.
Wolfgang Betz 67:93bec0baf1de 518 * @retval None.
Wolfgang Betz 67:93bec0baf1de 519 */
Wolfgang Betz 67:93bec0baf1de 520 void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength)
Wolfgang Betz 67:93bec0baf1de 521 {
Wolfgang Betz 67:93bec0baf1de 522 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 523
Wolfgang Betz 67:93bec0baf1de 524 /* Split the 32-bit value in 4 8-bit values */
Wolfgang Betz 67:93bec0baf1de 525 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 526 {
Wolfgang Betz 67:93bec0baf1de 527 if(i< ((3-xSyncLength) >>1) )
Wolfgang Betz 67:93bec0baf1de 528 {
Wolfgang Betz 67:93bec0baf1de 529 tempRegValue[i]=0;
Wolfgang Betz 67:93bec0baf1de 530 }
Wolfgang Betz 67:93bec0baf1de 531 else
Wolfgang Betz 67:93bec0baf1de 532 {
Wolfgang Betz 67:93bec0baf1de 533 tempRegValue[i]=(uint8_t)(lSyncWords>>(8*i));
Wolfgang Betz 67:93bec0baf1de 534 }
Wolfgang Betz 67:93bec0baf1de 535 }
Wolfgang Betz 67:93bec0baf1de 536
Wolfgang Betz 67:93bec0baf1de 537 /* Writes SYNC value on the SYNCx registers */
Wolfgang Betz 67:93bec0baf1de 538 g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 539
Wolfgang Betz 67:93bec0baf1de 540 }
Wolfgang Betz 67:93bec0baf1de 541
Wolfgang Betz 67:93bec0baf1de 542
Wolfgang Betz 67:93bec0baf1de 543 /**
Wolfgang Betz 67:93bec0baf1de 544 * @brief Returns multiple SYNC words for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 545 * @param xSyncLength SYNC length in bytes. The 32bit word passed will be stored in the SYNCx registers from the MSb
Wolfgang Betz 67:93bec0baf1de 546 * until the number of bytes in xSyncLength has been stored.
Wolfgang Betz 67:93bec0baf1de 547 * This parameter is a pointer to @ref PktSyncLength.
Wolfgang Betz 67:93bec0baf1de 548 * @retval uint32_t Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
Wolfgang Betz 67:93bec0baf1de 549 */
Wolfgang Betz 67:93bec0baf1de 550 uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength)
Wolfgang Betz 67:93bec0baf1de 551 {
Wolfgang Betz 67:93bec0baf1de 552 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 553 uint32_t tempRetValue=0;
Wolfgang Betz 67:93bec0baf1de 554
Wolfgang Betz 67:93bec0baf1de 555 /* Reads the SYNCx registers value */
Wolfgang Betz 67:93bec0baf1de 556 g_xStatus = SpiritSpiReadRegisters(SYNC4_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 557
Wolfgang Betz 67:93bec0baf1de 558 /* Rebuild the SYNC words */
Wolfgang Betz 67:93bec0baf1de 559 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 560 {
Wolfgang Betz 67:93bec0baf1de 561 if(i>2-(xSyncLength >>1))
Wolfgang Betz 67:93bec0baf1de 562 {
Wolfgang Betz 67:93bec0baf1de 563 tempRetValue |= tempRegValue[i]<<(8*i);
Wolfgang Betz 67:93bec0baf1de 564 }
Wolfgang Betz 67:93bec0baf1de 565 }
Wolfgang Betz 67:93bec0baf1de 566
Wolfgang Betz 67:93bec0baf1de 567 /* Return SYNC words */
Wolfgang Betz 67:93bec0baf1de 568 return tempRetValue;
Wolfgang Betz 67:93bec0baf1de 569
Wolfgang Betz 67:93bec0baf1de 570 }
Wolfgang Betz 67:93bec0baf1de 571
Wolfgang Betz 67:93bec0baf1de 572
Wolfgang Betz 67:93bec0baf1de 573 /**
Wolfgang Betz 67:93bec0baf1de 574 * @brief Returns the variable length width (in number of bits).
Wolfgang Betz 67:93bec0baf1de 575 * @param None.
Wolfgang Betz 67:93bec0baf1de 576 * @retval uint8_t Variable length width in bits.
Wolfgang Betz 67:93bec0baf1de 577 */
Wolfgang Betz 67:93bec0baf1de 578 uint8_t SpiritPktCommonGetVarLengthWidth(void)
Wolfgang Betz 67:93bec0baf1de 579 {
Wolfgang Betz 67:93bec0baf1de 580 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 581
Wolfgang Betz 67:93bec0baf1de 582 /* Reads the PCKTCTRL3 register value */
Wolfgang Betz 67:93bec0baf1de 583 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 584
Wolfgang Betz 67:93bec0baf1de 585 /* Rebuild and return value */
Wolfgang Betz 67:93bec0baf1de 586 return (tempRegValue & PCKTCTRL3_LEN_WID_MASK)+1;
Wolfgang Betz 67:93bec0baf1de 587
Wolfgang Betz 67:93bec0baf1de 588 }
Wolfgang Betz 67:93bec0baf1de 589
Wolfgang Betz 67:93bec0baf1de 590
Wolfgang Betz 67:93bec0baf1de 591 /**
Wolfgang Betz 67:93bec0baf1de 592 * @brief Sets the destination address for the Tx packet.
Wolfgang Betz 67:93bec0baf1de 593 * @param cAddress Destination address.
Wolfgang Betz 67:93bec0baf1de 594 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 595 * @retval None.
Wolfgang Betz 67:93bec0baf1de 596 */
Wolfgang Betz 67:93bec0baf1de 597 void SpiritPktCommonSetDestinationAddress(uint8_t cAddress)
Wolfgang Betz 67:93bec0baf1de 598 {
Wolfgang Betz 67:93bec0baf1de 599 /* Writes value on PCKT_FLT_GOALS_SOURCE_ADDR register */
Wolfgang Betz 67:93bec0baf1de 600 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &cAddress);
Wolfgang Betz 67:93bec0baf1de 601
Wolfgang Betz 67:93bec0baf1de 602 }
Wolfgang Betz 67:93bec0baf1de 603
Wolfgang Betz 67:93bec0baf1de 604
Wolfgang Betz 67:93bec0baf1de 605 /**
Wolfgang Betz 67:93bec0baf1de 606 * @brief Returns the settled destination address.
Wolfgang Betz 67:93bec0baf1de 607 * @param None.
Wolfgang Betz 67:93bec0baf1de 608 * @retval uint8_t Transmitted destination address.
Wolfgang Betz 67:93bec0baf1de 609 */
Wolfgang Betz 67:93bec0baf1de 610 uint8_t SpiritPktCommonGetTransmittedDestAddress(void)
Wolfgang Betz 67:93bec0baf1de 611 {
Wolfgang Betz 67:93bec0baf1de 612 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 613
Wolfgang Betz 67:93bec0baf1de 614 /* Reads value on the PCKT_FLT_GOALS_SOURCE_ADDR register */
Wolfgang Betz 67:93bec0baf1de 615 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_SOURCE_ADDR_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 616
Wolfgang Betz 67:93bec0baf1de 617 /* Return value */
Wolfgang Betz 67:93bec0baf1de 618 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 619
Wolfgang Betz 67:93bec0baf1de 620 }
Wolfgang Betz 67:93bec0baf1de 621
Wolfgang Betz 67:93bec0baf1de 622
Wolfgang Betz 67:93bec0baf1de 623 /**
Wolfgang Betz 67:93bec0baf1de 624 * @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
Wolfgang Betz 67:93bec0baf1de 625 * my address, then the packet is accepted (this is the address of the node).
Wolfgang Betz 67:93bec0baf1de 626 * @param cAddress Address of the present node.
Wolfgang Betz 67:93bec0baf1de 627 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 628 * @retval None.
Wolfgang Betz 67:93bec0baf1de 629 */
Wolfgang Betz 67:93bec0baf1de 630 void SpiritPktCommonSetMyAddress(uint8_t cAddress)
Wolfgang Betz 67:93bec0baf1de 631 {
Wolfgang Betz 67:93bec0baf1de 632 /* Writes value on the PCKT_FLT_GOALS_TX_ADDR register */
Wolfgang Betz 67:93bec0baf1de 633 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &cAddress);
Wolfgang Betz 67:93bec0baf1de 634
Wolfgang Betz 67:93bec0baf1de 635 }
Wolfgang Betz 67:93bec0baf1de 636
Wolfgang Betz 67:93bec0baf1de 637
Wolfgang Betz 67:93bec0baf1de 638 /**
Wolfgang Betz 67:93bec0baf1de 639 * @brief Returns the address of the present node.
Wolfgang Betz 67:93bec0baf1de 640 * @param None.
Wolfgang Betz 67:93bec0baf1de 641 * @retval uint8_t My address (address of this node).
Wolfgang Betz 67:93bec0baf1de 642 */
Wolfgang Betz 67:93bec0baf1de 643 uint8_t SpiritPktCommonGetMyAddress(void)
Wolfgang Betz 67:93bec0baf1de 644 {
Wolfgang Betz 67:93bec0baf1de 645 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 646
Wolfgang Betz 67:93bec0baf1de 647 /* Reads value on the PCKT_FLT_GOALS_TX_ADDR register */
Wolfgang Betz 67:93bec0baf1de 648 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_TX_ADDR_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 649
Wolfgang Betz 67:93bec0baf1de 650 /* Return value */
Wolfgang Betz 67:93bec0baf1de 651 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 652
Wolfgang Betz 67:93bec0baf1de 653 }
Wolfgang Betz 67:93bec0baf1de 654
Wolfgang Betz 67:93bec0baf1de 655
Wolfgang Betz 67:93bec0baf1de 656 /**
Wolfgang Betz 67:93bec0baf1de 657 * @brief Sets the broadcast address. If the destination address extracted from the received packet is equal to the content of the
Wolfgang Betz 67:93bec0baf1de 658 * BROADCAST_ADDR register, then the packet is accepted.
Wolfgang Betz 67:93bec0baf1de 659 * @param cAddress Broadcast address.
Wolfgang Betz 67:93bec0baf1de 660 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 661 * @retval None.
Wolfgang Betz 67:93bec0baf1de 662 */
Wolfgang Betz 67:93bec0baf1de 663 void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress)
Wolfgang Betz 67:93bec0baf1de 664 {
Wolfgang Betz 67:93bec0baf1de 665 /* Writes value on the PCKT_FLT_GOALS_BROADCAST register */
Wolfgang Betz 67:93bec0baf1de 666 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &cAddress);
Wolfgang Betz 67:93bec0baf1de 667
Wolfgang Betz 67:93bec0baf1de 668 }
Wolfgang Betz 67:93bec0baf1de 669
Wolfgang Betz 67:93bec0baf1de 670
Wolfgang Betz 67:93bec0baf1de 671 /**
Wolfgang Betz 67:93bec0baf1de 672 * @brief Returns the broadcast address.
Wolfgang Betz 67:93bec0baf1de 673 * @param None.
Wolfgang Betz 67:93bec0baf1de 674 * @retval uint8_t Broadcast address.
Wolfgang Betz 67:93bec0baf1de 675 */
Wolfgang Betz 67:93bec0baf1de 676 uint8_t SpiritPktCommonGetBroadcastAddress(void)
Wolfgang Betz 67:93bec0baf1de 677 {
Wolfgang Betz 67:93bec0baf1de 678 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 679
Wolfgang Betz 67:93bec0baf1de 680 /* Reads value on the PCKT_FLT_GOALS_BROADCAST register */
Wolfgang Betz 67:93bec0baf1de 681 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 682
Wolfgang Betz 67:93bec0baf1de 683 /* Return value */
Wolfgang Betz 67:93bec0baf1de 684 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 685
Wolfgang Betz 67:93bec0baf1de 686 }
Wolfgang Betz 67:93bec0baf1de 687
Wolfgang Betz 67:93bec0baf1de 688
Wolfgang Betz 67:93bec0baf1de 689 /**
Wolfgang Betz 67:93bec0baf1de 690 * @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
Wolfgang Betz 67:93bec0baf1de 691 * MULTICAST_ADDR register, then the packet is accepted.
Wolfgang Betz 67:93bec0baf1de 692 * @param cAddress Multicast address.
Wolfgang Betz 67:93bec0baf1de 693 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 694 * @retval None.
Wolfgang Betz 67:93bec0baf1de 695 */
Wolfgang Betz 67:93bec0baf1de 696 void SpiritPktCommonSetMulticastAddress(uint8_t cAddress)
Wolfgang Betz 67:93bec0baf1de 697 {
Wolfgang Betz 67:93bec0baf1de 698 /* Writes value on the PCKT_FLT_GOALS_MULTICAST register */
Wolfgang Betz 67:93bec0baf1de 699 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &cAddress);
Wolfgang Betz 67:93bec0baf1de 700
Wolfgang Betz 67:93bec0baf1de 701 }
Wolfgang Betz 67:93bec0baf1de 702
Wolfgang Betz 67:93bec0baf1de 703
Wolfgang Betz 67:93bec0baf1de 704 /**
Wolfgang Betz 67:93bec0baf1de 705 * @brief Returns the multicast address.
Wolfgang Betz 67:93bec0baf1de 706 * @param None.
Wolfgang Betz 67:93bec0baf1de 707 * @retval uint8_t Multicast address.
Wolfgang Betz 67:93bec0baf1de 708 */
Wolfgang Betz 67:93bec0baf1de 709 uint8_t SpiritPktCommonGetMulticastAddress(void)
Wolfgang Betz 67:93bec0baf1de 710 {
Wolfgang Betz 67:93bec0baf1de 711 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 712
Wolfgang Betz 67:93bec0baf1de 713 /* Reads value on the PCKT_FLT_GOALS_MULTICAST register */
Wolfgang Betz 67:93bec0baf1de 714 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_MULTICAST_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 715
Wolfgang Betz 67:93bec0baf1de 716 /* Return value */
Wolfgang Betz 67:93bec0baf1de 717 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 718
Wolfgang Betz 67:93bec0baf1de 719 }
Wolfgang Betz 67:93bec0baf1de 720
Wolfgang Betz 67:93bec0baf1de 721
Wolfgang Betz 67:93bec0baf1de 722 /**
Wolfgang Betz 67:93bec0baf1de 723 * @brief Sets the control mask. The 1 bits of the CONTROL_MASK indicate the
Wolfgang Betz 67:93bec0baf1de 724 * bits to be used in filtering. (All 0s no filtering)
Wolfgang Betz 67:93bec0baf1de 725 * @param lMask Control mask.
Wolfgang Betz 67:93bec0baf1de 726 * This parameter is an uint32_t.
Wolfgang Betz 67:93bec0baf1de 727 * @retval None.
Wolfgang Betz 67:93bec0baf1de 728 */
Wolfgang Betz 67:93bec0baf1de 729 void SpiritPktCommonSetCtrlMask(uint32_t lMask)
Wolfgang Betz 67:93bec0baf1de 730 {
Wolfgang Betz 67:93bec0baf1de 731 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 732
Wolfgang Betz 67:93bec0baf1de 733 /* Split the 32-bit value in 4 8-bit values */
Wolfgang Betz 67:93bec0baf1de 734 tempRegValue[0] = (uint8_t) lMask;
Wolfgang Betz 67:93bec0baf1de 735 tempRegValue[1] = (uint8_t)(lMask >> 8);
Wolfgang Betz 67:93bec0baf1de 736 tempRegValue[2] = (uint8_t)(lMask >> 16);
Wolfgang Betz 67:93bec0baf1de 737 tempRegValue[3] = (uint8_t)(lMask >> 24);
Wolfgang Betz 67:93bec0baf1de 738
Wolfgang Betz 67:93bec0baf1de 739 /* Writes values on the CKT_FLT_GOALS_CONTROLx_MASK registers */
Wolfgang Betz 67:93bec0baf1de 740 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 741
Wolfgang Betz 67:93bec0baf1de 742 }
Wolfgang Betz 67:93bec0baf1de 743
Wolfgang Betz 67:93bec0baf1de 744
Wolfgang Betz 67:93bec0baf1de 745 /**
Wolfgang Betz 67:93bec0baf1de 746 * @brief Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
Wolfgang Betz 67:93bec0baf1de 747 * bits to be used in filtering. (All 0s no filtering)
Wolfgang Betz 67:93bec0baf1de 748 * @param None.
Wolfgang Betz 67:93bec0baf1de 749 * @retval uint32_t Control mask.
Wolfgang Betz 67:93bec0baf1de 750 */
Wolfgang Betz 67:93bec0baf1de 751 uint32_t SpiritPktCommonGetCtrlMask(void)
Wolfgang Betz 67:93bec0baf1de 752 {
Wolfgang Betz 67:93bec0baf1de 753 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 754 uint32_t tempRetValue=0;
Wolfgang Betz 67:93bec0baf1de 755
Wolfgang Betz 67:93bec0baf1de 756 /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
Wolfgang Betz 67:93bec0baf1de 757 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_MASK_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 758
Wolfgang Betz 67:93bec0baf1de 759 /* Rebuild the control mask value on a 32-bit integer variable */
Wolfgang Betz 67:93bec0baf1de 760 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 761 {
Wolfgang Betz 67:93bec0baf1de 762 tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
Wolfgang Betz 67:93bec0baf1de 763 }
Wolfgang Betz 67:93bec0baf1de 764
Wolfgang Betz 67:93bec0baf1de 765 /* Return value */
Wolfgang Betz 67:93bec0baf1de 766 return tempRetValue;
Wolfgang Betz 67:93bec0baf1de 767 }
Wolfgang Betz 67:93bec0baf1de 768
Wolfgang Betz 67:93bec0baf1de 769 /**
Wolfgang Betz 67:93bec0baf1de 770 * @brief Sets the control field reference. If the bits enabled by the CONTROL_MASK
Wolfgang Betz 67:93bec0baf1de 771 * match the ones of the control fields extracted from the received packet
Wolfgang Betz 67:93bec0baf1de 772 * then the packet is accepted.
Wolfgang Betz 67:93bec0baf1de 773 * @param lReference Control reference.
Wolfgang Betz 67:93bec0baf1de 774 * This parameter is an uint32_t.
Wolfgang Betz 67:93bec0baf1de 775 * @retval None.
Wolfgang Betz 67:93bec0baf1de 776 */
Wolfgang Betz 67:93bec0baf1de 777 void SpiritPktCommonSetCtrlReference(uint32_t lReference)
Wolfgang Betz 67:93bec0baf1de 778 {
Wolfgang Betz 67:93bec0baf1de 779 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 780
Wolfgang Betz 67:93bec0baf1de 781 /* Split the 32-bit value in 4 8-bit values */
Wolfgang Betz 67:93bec0baf1de 782 tempRegValue[0] = (uint8_t) lReference;
Wolfgang Betz 67:93bec0baf1de 783 tempRegValue[1] = (uint8_t)(lReference >> 8);
Wolfgang Betz 67:93bec0baf1de 784 tempRegValue[2] = (uint8_t)(lReference >> 16);
Wolfgang Betz 67:93bec0baf1de 785 tempRegValue[3] = (uint8_t)(lReference >> 24);
Wolfgang Betz 67:93bec0baf1de 786
Wolfgang Betz 67:93bec0baf1de 787 /* Writes values on the CKT_FLT_GOALS_CONTROLx_FIELD registers */
Wolfgang Betz 67:93bec0baf1de 788 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 789
Wolfgang Betz 67:93bec0baf1de 790 }
Wolfgang Betz 67:93bec0baf1de 791
Wolfgang Betz 67:93bec0baf1de 792
Wolfgang Betz 67:93bec0baf1de 793 /**
Wolfgang Betz 67:93bec0baf1de 794 * @brief Returns the control field reference.
Wolfgang Betz 67:93bec0baf1de 795 * @param None.
Wolfgang Betz 67:93bec0baf1de 796 * @retval uint32_t Control reference.
Wolfgang Betz 67:93bec0baf1de 797 */
Wolfgang Betz 67:93bec0baf1de 798 uint32_t SpiritPktCommonGetCtrlReference(void)
Wolfgang Betz 67:93bec0baf1de 799 {
Wolfgang Betz 67:93bec0baf1de 800 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 801 uint32_t tempRetValue=0;
Wolfgang Betz 67:93bec0baf1de 802
Wolfgang Betz 67:93bec0baf1de 803 /* Reads the PCKT_FLT_GOALS_CONTROLx_FIELD registers */
Wolfgang Betz 67:93bec0baf1de 804 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_CONTROL0_FIELD_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 805
Wolfgang Betz 67:93bec0baf1de 806 /* Rebuild the control mask value on a 32-bit integer variable */
Wolfgang Betz 67:93bec0baf1de 807 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 808 {
Wolfgang Betz 67:93bec0baf1de 809 tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
Wolfgang Betz 67:93bec0baf1de 810 }
Wolfgang Betz 67:93bec0baf1de 811
Wolfgang Betz 67:93bec0baf1de 812 /* Return value */
Wolfgang Betz 67:93bec0baf1de 813 return tempRetValue;
Wolfgang Betz 67:93bec0baf1de 814 }
Wolfgang Betz 67:93bec0baf1de 815
Wolfgang Betz 67:93bec0baf1de 816
Wolfgang Betz 67:93bec0baf1de 817 /**
Wolfgang Betz 67:93bec0baf1de 818 * @brief Sets the TX control field.
Wolfgang Betz 67:93bec0baf1de 819 * @param lField Tx contro field.
Wolfgang Betz 67:93bec0baf1de 820 * This parameter is an uint32_t.
Wolfgang Betz 67:93bec0baf1de 821 * @retval None.
Wolfgang Betz 67:93bec0baf1de 822 */
Wolfgang Betz 67:93bec0baf1de 823 void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField)
Wolfgang Betz 67:93bec0baf1de 824 {
Wolfgang Betz 67:93bec0baf1de 825 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 826
Wolfgang Betz 67:93bec0baf1de 827 /* Split the 32-bit value in 4 8-bit values */
Wolfgang Betz 67:93bec0baf1de 828 tempRegValue[3] = (uint8_t) lField;
Wolfgang Betz 67:93bec0baf1de 829 tempRegValue[2] = (uint8_t)(lField >> 8);
Wolfgang Betz 67:93bec0baf1de 830 tempRegValue[1] = (uint8_t)(lField >> 16);
Wolfgang Betz 67:93bec0baf1de 831 tempRegValue[0] = (uint8_t)(lField >> 24);
Wolfgang Betz 67:93bec0baf1de 832
Wolfgang Betz 67:93bec0baf1de 833 /* Writes value on the TX_CTRL_FIELDx register */
Wolfgang Betz 67:93bec0baf1de 834 g_xStatus = SpiritSpiWriteRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 835
Wolfgang Betz 67:93bec0baf1de 836 }
Wolfgang Betz 67:93bec0baf1de 837
Wolfgang Betz 67:93bec0baf1de 838
Wolfgang Betz 67:93bec0baf1de 839 /**
Wolfgang Betz 67:93bec0baf1de 840 * @brief Returns the Tx control field.
Wolfgang Betz 67:93bec0baf1de 841 * @param None.
Wolfgang Betz 67:93bec0baf1de 842 * @retval uint32_t Control field of the transmitted packet.
Wolfgang Betz 67:93bec0baf1de 843 */
Wolfgang Betz 67:93bec0baf1de 844 uint32_t SpiritPktCommonGetTransmittedCtrlField(void)
Wolfgang Betz 67:93bec0baf1de 845 {
Wolfgang Betz 67:93bec0baf1de 846 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 847 uint32_t tempRetValue=0;
Wolfgang Betz 67:93bec0baf1de 848
Wolfgang Betz 67:93bec0baf1de 849 /* Reads the TX_CTRL_FIELDx registers */
Wolfgang Betz 67:93bec0baf1de 850 g_xStatus = SpiritSpiReadRegisters(TX_CTRL_FIELD3_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 851
Wolfgang Betz 67:93bec0baf1de 852 /* Rebuild value: build a 32-bit value from the read bytes */
Wolfgang Betz 67:93bec0baf1de 853 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 854 {
Wolfgang Betz 67:93bec0baf1de 855 tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*(3-i));
Wolfgang Betz 67:93bec0baf1de 856 }
Wolfgang Betz 67:93bec0baf1de 857
Wolfgang Betz 67:93bec0baf1de 858 /* Return value */
Wolfgang Betz 67:93bec0baf1de 859 return tempRetValue;
Wolfgang Betz 67:93bec0baf1de 860
Wolfgang Betz 67:93bec0baf1de 861 }
Wolfgang Betz 67:93bec0baf1de 862
Wolfgang Betz 67:93bec0baf1de 863
Wolfgang Betz 67:93bec0baf1de 864 /**
Wolfgang Betz 67:93bec0baf1de 865 * @brief If enabled RX packet is accepted if its destination address matches with My address.
Wolfgang Betz 67:93bec0baf1de 866 * @param xNewState new state for DEST_VS_SOURCE_ADDRESS.
Wolfgang Betz 67:93bec0baf1de 867 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 868 * @retval None.
Wolfgang Betz 67:93bec0baf1de 869 */
Wolfgang Betz 67:93bec0baf1de 870 void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 871 {
Wolfgang Betz 67:93bec0baf1de 872 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 873
Wolfgang Betz 67:93bec0baf1de 874 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 875 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 876
Wolfgang Betz 67:93bec0baf1de 877
Wolfgang Betz 67:93bec0baf1de 878 /* Modify the register value: set or reset the TX source address control */
Wolfgang Betz 67:93bec0baf1de 879 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 880
Wolfgang Betz 67:93bec0baf1de 881 /* Set or reset the DESTINATION vs TX enabling bit */
Wolfgang Betz 67:93bec0baf1de 882 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 883 {
Wolfgang Betz 67:93bec0baf1de 884 tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 885 }
Wolfgang Betz 67:93bec0baf1de 886 else
Wolfgang Betz 67:93bec0baf1de 887 {
Wolfgang Betz 67:93bec0baf1de 888 tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 889 }
Wolfgang Betz 67:93bec0baf1de 890
Wolfgang Betz 67:93bec0baf1de 891 /* Writes the new value on the PCKT_FLT_OPTIONS register */
Wolfgang Betz 67:93bec0baf1de 892 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 893
Wolfgang Betz 67:93bec0baf1de 894 }
Wolfgang Betz 67:93bec0baf1de 895
Wolfgang Betz 67:93bec0baf1de 896
Wolfgang Betz 67:93bec0baf1de 897 /**
Wolfgang Betz 67:93bec0baf1de 898 * @brief If enabled RX packet is accepted if its destination address matches with multicast address.
Wolfgang Betz 67:93bec0baf1de 899 * @param xNewState new state for DEST_VS_MULTICAST_ADDRESS.
Wolfgang Betz 67:93bec0baf1de 900 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 901 * @retval None.
Wolfgang Betz 67:93bec0baf1de 902 */
Wolfgang Betz 67:93bec0baf1de 903 void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 904 {
Wolfgang Betz 67:93bec0baf1de 905 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 906
Wolfgang Betz 67:93bec0baf1de 907 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 908 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 909
Wolfgang Betz 67:93bec0baf1de 910 /* Reads the PCKT_FLT_OPTIONS register value */
Wolfgang Betz 67:93bec0baf1de 911 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 912
Wolfgang Betz 67:93bec0baf1de 913 /* Enable or disable the filtering option */
Wolfgang Betz 67:93bec0baf1de 914 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 915 {
Wolfgang Betz 67:93bec0baf1de 916 tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 917 }
Wolfgang Betz 67:93bec0baf1de 918 else
Wolfgang Betz 67:93bec0baf1de 919 {
Wolfgang Betz 67:93bec0baf1de 920 tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 921 }
Wolfgang Betz 67:93bec0baf1de 922
Wolfgang Betz 67:93bec0baf1de 923 /* Writes the new value on the PCKT_FLT_OPTIONS register */
Wolfgang Betz 67:93bec0baf1de 924 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 925
Wolfgang Betz 67:93bec0baf1de 926 }
Wolfgang Betz 67:93bec0baf1de 927
Wolfgang Betz 67:93bec0baf1de 928
Wolfgang Betz 67:93bec0baf1de 929 /**
Wolfgang Betz 67:93bec0baf1de 930 * @brief If enabled RX packet is accepted if its destination address matches with broadcast address.
Wolfgang Betz 67:93bec0baf1de 931 * @param xNewState new state for DEST_VS_BROADCAST_ADDRESS.
Wolfgang Betz 67:93bec0baf1de 932 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 933 * @retval None.
Wolfgang Betz 67:93bec0baf1de 934 */
Wolfgang Betz 67:93bec0baf1de 935 void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 936 {
Wolfgang Betz 67:93bec0baf1de 937 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 938
Wolfgang Betz 67:93bec0baf1de 939 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 940 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 941
Wolfgang Betz 67:93bec0baf1de 942 /* Reads the register value */
Wolfgang Betz 67:93bec0baf1de 943 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 944
Wolfgang Betz 67:93bec0baf1de 945 /* Enable or disable the filtering option */
Wolfgang Betz 67:93bec0baf1de 946 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 947 {
Wolfgang Betz 67:93bec0baf1de 948 tempRegValue |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 949 }
Wolfgang Betz 67:93bec0baf1de 950 else
Wolfgang Betz 67:93bec0baf1de 951 {
Wolfgang Betz 67:93bec0baf1de 952 tempRegValue &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
Wolfgang Betz 67:93bec0baf1de 953 }
Wolfgang Betz 67:93bec0baf1de 954
Wolfgang Betz 67:93bec0baf1de 955 /* Writes the new value on the PCKT_FLT_OPTIONS register */
Wolfgang Betz 67:93bec0baf1de 956 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 957
Wolfgang Betz 67:93bec0baf1de 958 }
Wolfgang Betz 67:93bec0baf1de 959
Wolfgang Betz 67:93bec0baf1de 960
Wolfgang Betz 67:93bec0baf1de 961 /**
Wolfgang Betz 67:93bec0baf1de 962 * @brief Returns the enable bit of the my address filtering.
Wolfgang Betz 67:93bec0baf1de 963 * @param None.
Wolfgang Betz 67:93bec0baf1de 964 * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 965 */
Wolfgang Betz 67:93bec0baf1de 966 SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void)
Wolfgang Betz 67:93bec0baf1de 967 {
Wolfgang Betz 67:93bec0baf1de 968 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 969
Wolfgang Betz 67:93bec0baf1de 970 /* Reads the register value */
Wolfgang Betz 67:93bec0baf1de 971 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 972
Wolfgang Betz 67:93bec0baf1de 973 /* Gets the enable/disable bit in form of SpiritFunctionalState type */
Wolfgang Betz 67:93bec0baf1de 974 if(tempRegValue & 0x08)
Wolfgang Betz 67:93bec0baf1de 975 {
Wolfgang Betz 67:93bec0baf1de 976 return S_ENABLE;
Wolfgang Betz 67:93bec0baf1de 977 }
Wolfgang Betz 67:93bec0baf1de 978 else
Wolfgang Betz 67:93bec0baf1de 979 {
Wolfgang Betz 67:93bec0baf1de 980 return S_DISABLE;
Wolfgang Betz 67:93bec0baf1de 981 }
Wolfgang Betz 67:93bec0baf1de 982
Wolfgang Betz 67:93bec0baf1de 983 }
Wolfgang Betz 67:93bec0baf1de 984
Wolfgang Betz 67:93bec0baf1de 985 /**
Wolfgang Betz 67:93bec0baf1de 986 * @brief Returns the enable bit of the multicast address filtering.
Wolfgang Betz 67:93bec0baf1de 987 * @param None.
Wolfgang Betz 67:93bec0baf1de 988 * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 989 */
Wolfgang Betz 67:93bec0baf1de 990 SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void)
Wolfgang Betz 67:93bec0baf1de 991 {
Wolfgang Betz 67:93bec0baf1de 992 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 993
Wolfgang Betz 67:93bec0baf1de 994 /* Reads the register value */
Wolfgang Betz 67:93bec0baf1de 995 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 996
Wolfgang Betz 67:93bec0baf1de 997 /* Get the enable/disable bit in form of SpiritFunctionalState type */
Wolfgang Betz 67:93bec0baf1de 998 if(tempRegValue & 0x04)
Wolfgang Betz 67:93bec0baf1de 999 {
Wolfgang Betz 67:93bec0baf1de 1000 return S_ENABLE;
Wolfgang Betz 67:93bec0baf1de 1001 }
Wolfgang Betz 67:93bec0baf1de 1002 else
Wolfgang Betz 67:93bec0baf1de 1003 {
Wolfgang Betz 67:93bec0baf1de 1004 return S_DISABLE;
Wolfgang Betz 67:93bec0baf1de 1005 }
Wolfgang Betz 67:93bec0baf1de 1006
Wolfgang Betz 67:93bec0baf1de 1007 }
Wolfgang Betz 67:93bec0baf1de 1008
Wolfgang Betz 67:93bec0baf1de 1009 /**
Wolfgang Betz 67:93bec0baf1de 1010 * @brief Returns the enable bit of the broadcast address filtering.
Wolfgang Betz 67:93bec0baf1de 1011 * @param None.
Wolfgang Betz 67:93bec0baf1de 1012 * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1013 */
Wolfgang Betz 67:93bec0baf1de 1014 SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void)
Wolfgang Betz 67:93bec0baf1de 1015 {
Wolfgang Betz 67:93bec0baf1de 1016 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1017
Wolfgang Betz 67:93bec0baf1de 1018 /* Reads the register value */
Wolfgang Betz 67:93bec0baf1de 1019 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1020
Wolfgang Betz 67:93bec0baf1de 1021 /* Get the enable/disable bit in form of SpiritFunctionalState type */
Wolfgang Betz 67:93bec0baf1de 1022 if(tempRegValue & 0x02)
Wolfgang Betz 67:93bec0baf1de 1023 {
Wolfgang Betz 67:93bec0baf1de 1024 return S_ENABLE;
Wolfgang Betz 67:93bec0baf1de 1025 }
Wolfgang Betz 67:93bec0baf1de 1026 else
Wolfgang Betz 67:93bec0baf1de 1027 {
Wolfgang Betz 67:93bec0baf1de 1028 return S_DISABLE;
Wolfgang Betz 67:93bec0baf1de 1029 }
Wolfgang Betz 67:93bec0baf1de 1030
Wolfgang Betz 67:93bec0baf1de 1031 }
Wolfgang Betz 67:93bec0baf1de 1032
Wolfgang Betz 67:93bec0baf1de 1033
Wolfgang Betz 67:93bec0baf1de 1034 /**
Wolfgang Betz 67:93bec0baf1de 1035 * @brief Returns the destination address of the received packet.
Wolfgang Betz 67:93bec0baf1de 1036 * @param None.
Wolfgang Betz 67:93bec0baf1de 1037 * @retval uint8_t Destination address of the received address.
Wolfgang Betz 67:93bec0baf1de 1038 */
Wolfgang Betz 67:93bec0baf1de 1039 uint8_t SpiritPktCommonGetReceivedDestAddress(void)
Wolfgang Betz 67:93bec0baf1de 1040 {
Wolfgang Betz 67:93bec0baf1de 1041 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1042
Wolfgang Betz 67:93bec0baf1de 1043 /* Reads the RX_ADDR_FIELD0 register value */
Wolfgang Betz 67:93bec0baf1de 1044 g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1045
Wolfgang Betz 67:93bec0baf1de 1046 /* Return value */
Wolfgang Betz 67:93bec0baf1de 1047 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1048
Wolfgang Betz 67:93bec0baf1de 1049 }
Wolfgang Betz 67:93bec0baf1de 1050
Wolfgang Betz 67:93bec0baf1de 1051
Wolfgang Betz 67:93bec0baf1de 1052 /**
Wolfgang Betz 67:93bec0baf1de 1053 * @brief Returns the control field of the received packet.
Wolfgang Betz 67:93bec0baf1de 1054 * @param None.
Wolfgang Betz 67:93bec0baf1de 1055 * @retval uint32_t Received control field.
Wolfgang Betz 67:93bec0baf1de 1056 */
Wolfgang Betz 67:93bec0baf1de 1057 uint32_t SpiritPktCommonGetReceivedCtrlField(void)
Wolfgang Betz 67:93bec0baf1de 1058 {
Wolfgang Betz 67:93bec0baf1de 1059 uint8_t tempRegValue[4];
Wolfgang Betz 67:93bec0baf1de 1060 uint32_t tempRetValue=0;
Wolfgang Betz 67:93bec0baf1de 1061
Wolfgang Betz 67:93bec0baf1de 1062 /* Reads the PCKT_FLT_GOALS_CONTROLx_MASK registers */
Wolfgang Betz 67:93bec0baf1de 1063 g_xStatus = SpiritSpiReadRegisters(RX_CTRL_FIELD0_BASE, 4, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1064
Wolfgang Betz 67:93bec0baf1de 1065 /* Rebuild the control mask value on a 32-bit integer variable */
Wolfgang Betz 67:93bec0baf1de 1066 for(uint8_t i=0 ; i<4 ; i++)
Wolfgang Betz 67:93bec0baf1de 1067 {
Wolfgang Betz 67:93bec0baf1de 1068 tempRetValue |= ((uint32_t)tempRegValue[i])<<(8*i);
Wolfgang Betz 67:93bec0baf1de 1069 }
Wolfgang Betz 67:93bec0baf1de 1070
Wolfgang Betz 67:93bec0baf1de 1071 /* Returns value */
Wolfgang Betz 67:93bec0baf1de 1072 return tempRetValue;
Wolfgang Betz 67:93bec0baf1de 1073 }
Wolfgang Betz 67:93bec0baf1de 1074
Wolfgang Betz 67:93bec0baf1de 1075
Wolfgang Betz 67:93bec0baf1de 1076 /**
Wolfgang Betz 67:93bec0baf1de 1077 * @brief Returns the CRC field of the received packet.
Wolfgang Betz 67:93bec0baf1de 1078 * @param cCrcFieldVect array in which the CRC field has to be stored.
Wolfgang Betz 67:93bec0baf1de 1079 * This parameter is an uint8_t array of 3 elements.
Wolfgang Betz 67:93bec0baf1de 1080 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1081 */
Wolfgang Betz 67:93bec0baf1de 1082 void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect)
Wolfgang Betz 67:93bec0baf1de 1083 {
Wolfgang Betz 67:93bec0baf1de 1084 uint8_t tempRegValue[3],crcLength;
Wolfgang Betz 67:93bec0baf1de 1085 PktCrcMode crcMode;
Wolfgang Betz 67:93bec0baf1de 1086
Wolfgang Betz 67:93bec0baf1de 1087 /* Gets the CRC mode in PktCrcMode enum */
Wolfgang Betz 67:93bec0baf1de 1088 crcMode=SpiritPktCommonGetCrcMode();
Wolfgang Betz 67:93bec0baf1de 1089
Wolfgang Betz 67:93bec0baf1de 1090 /* Cast to uint8_t */
Wolfgang Betz 67:93bec0baf1de 1091 crcLength = (uint8_t)crcMode;
Wolfgang Betz 67:93bec0baf1de 1092
Wolfgang Betz 67:93bec0baf1de 1093 /* Obtains the real length: see the @ref PktCrcMode enumeration */
Wolfgang Betz 67:93bec0baf1de 1094 crcLength >>= 5;
Wolfgang Betz 67:93bec0baf1de 1095 if(crcLength>=3) crcLength--;
Wolfgang Betz 67:93bec0baf1de 1096
Wolfgang Betz 67:93bec0baf1de 1097 /* Reads the CRC_FIELDx registers value */
Wolfgang Betz 67:93bec0baf1de 1098 g_xStatus = SpiritSpiReadRegisters(CRC_FIELD2_BASE, 3,tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1099
Wolfgang Betz 67:93bec0baf1de 1100 /* Sets the array to be returned */
Wolfgang Betz 67:93bec0baf1de 1101 for(uint8_t i=0 ; i<3 ; i++)
Wolfgang Betz 67:93bec0baf1de 1102 {
Wolfgang Betz 67:93bec0baf1de 1103 if(i<crcLength)
Wolfgang Betz 67:93bec0baf1de 1104 {
Wolfgang Betz 67:93bec0baf1de 1105 cCrcFieldVect[i]=tempRegValue[2-i];
Wolfgang Betz 67:93bec0baf1de 1106 }
Wolfgang Betz 67:93bec0baf1de 1107 else
Wolfgang Betz 67:93bec0baf1de 1108 {
Wolfgang Betz 67:93bec0baf1de 1109 cCrcFieldVect[i]=0;
Wolfgang Betz 67:93bec0baf1de 1110 }
Wolfgang Betz 67:93bec0baf1de 1111 }
Wolfgang Betz 67:93bec0baf1de 1112
Wolfgang Betz 67:93bec0baf1de 1113 }
Wolfgang Betz 67:93bec0baf1de 1114
Wolfgang Betz 67:93bec0baf1de 1115
Wolfgang Betz 67:93bec0baf1de 1116 /**
Wolfgang Betz 67:93bec0baf1de 1117 * @brief Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature is enabled and
Wolfgang Betz 67:93bec0baf1de 1118 * a data packet has been correctly received, then an acknowledgement packet is sent back to the originator of the received
Wolfgang Betz 67:93bec0baf1de 1119 * packet. If the PIGGYBACKING bit is also set, payload data will be read from the FIFO; otherwise an empty packet is sent
Wolfgang Betz 67:93bec0baf1de 1120 * only containing the source and destination addresses and the sequence number of the packet being acknowledged.
Wolfgang Betz 67:93bec0baf1de 1121 * @param xAutoAck new state for autoack.
Wolfgang Betz 67:93bec0baf1de 1122 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1123 * @param xPiggybacking new state for autoack.
Wolfgang Betz 67:93bec0baf1de 1124 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1125 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1126 */
Wolfgang Betz 67:93bec0baf1de 1127 void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck , SpiritFunctionalState xPiggybacking)
Wolfgang Betz 67:93bec0baf1de 1128 {
Wolfgang Betz 67:93bec0baf1de 1129 uint8_t tempRegValue[2];
Wolfgang Betz 67:93bec0baf1de 1130
Wolfgang Betz 67:93bec0baf1de 1131 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 1132 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAutoAck));
Wolfgang Betz 67:93bec0baf1de 1133 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xPiggybacking));
Wolfgang Betz 67:93bec0baf1de 1134 /* Check if piggybacking is enabled and autoack is disabled */
Wolfgang Betz 67:93bec0baf1de 1135 s_assert_param(!(xPiggybacking==S_ENABLE && xAutoAck==S_DISABLE));
Wolfgang Betz 67:93bec0baf1de 1136
Wolfgang Betz 67:93bec0baf1de 1137 /* Reads the PROTOCOL[1:0] registers value */
Wolfgang Betz 67:93bec0baf1de 1138 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 2, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1139
Wolfgang Betz 67:93bec0baf1de 1140 /* Sets the specified LLP option */
Wolfgang Betz 67:93bec0baf1de 1141 /* Autoack setting */
Wolfgang Betz 67:93bec0baf1de 1142 if(xAutoAck == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 1143 {
Wolfgang Betz 67:93bec0baf1de 1144 tempRegValue[1] |= PROTOCOL0_AUTO_ACK_MASK;
Wolfgang Betz 67:93bec0baf1de 1145 }
Wolfgang Betz 67:93bec0baf1de 1146 else
Wolfgang Betz 67:93bec0baf1de 1147 {
Wolfgang Betz 67:93bec0baf1de 1148 tempRegValue[1] &= (~PROTOCOL0_AUTO_ACK_MASK);
Wolfgang Betz 67:93bec0baf1de 1149 }
Wolfgang Betz 67:93bec0baf1de 1150
Wolfgang Betz 67:93bec0baf1de 1151 /* Piggybacking setting */
Wolfgang Betz 67:93bec0baf1de 1152 if(xPiggybacking == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 1153 {
Wolfgang Betz 67:93bec0baf1de 1154 tempRegValue[0] |= PROTOCOL1_PIGGYBACKING_MASK;
Wolfgang Betz 67:93bec0baf1de 1155 }
Wolfgang Betz 67:93bec0baf1de 1156 else
Wolfgang Betz 67:93bec0baf1de 1157 {
Wolfgang Betz 67:93bec0baf1de 1158 tempRegValue[0] &= (~PROTOCOL1_PIGGYBACKING_MASK);
Wolfgang Betz 67:93bec0baf1de 1159 }
Wolfgang Betz 67:93bec0baf1de 1160
Wolfgang Betz 67:93bec0baf1de 1161 /* Writes data on the PROTOCOL[1:0] registers */
Wolfgang Betz 67:93bec0baf1de 1162 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 2, tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1163
Wolfgang Betz 67:93bec0baf1de 1164 }
Wolfgang Betz 67:93bec0baf1de 1165
Wolfgang Betz 67:93bec0baf1de 1166
Wolfgang Betz 67:93bec0baf1de 1167 /**
Wolfgang Betz 67:93bec0baf1de 1168 * @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
Wolfgang Betz 67:93bec0baf1de 1169 * NACK_TX is set to "1" then acknowledgment will not be required; if NACK_TX is set to "0" then acknowledgment will be
Wolfgang Betz 67:93bec0baf1de 1170 * required.
Wolfgang Betz 67:93bec0baf1de 1171 * @param xNewState new state for TX_AUTOACK.
Wolfgang Betz 67:93bec0baf1de 1172 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1173 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1174 */
Wolfgang Betz 67:93bec0baf1de 1175 void SpiritPktCommonRequireAck(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 1176 {
Wolfgang Betz 67:93bec0baf1de 1177 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1178
Wolfgang Betz 67:93bec0baf1de 1179 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 1180 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 1181
Wolfgang Betz 67:93bec0baf1de 1182 /* Reads value on the PROTOCOL0 register */
Wolfgang Betz 67:93bec0baf1de 1183 g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1184
Wolfgang Betz 67:93bec0baf1de 1185 /* Enables or disables the ack requirement option */
Wolfgang Betz 67:93bec0baf1de 1186 if(xNewState == S_DISABLE)
Wolfgang Betz 67:93bec0baf1de 1187 {
Wolfgang Betz 67:93bec0baf1de 1188 tempRegValue |= PROTOCOL0_NACK_TX_MASK;
Wolfgang Betz 67:93bec0baf1de 1189 }
Wolfgang Betz 67:93bec0baf1de 1190 else
Wolfgang Betz 67:93bec0baf1de 1191 {
Wolfgang Betz 67:93bec0baf1de 1192 tempRegValue &= ~PROTOCOL0_NACK_TX_MASK;
Wolfgang Betz 67:93bec0baf1de 1193 }
Wolfgang Betz 67:93bec0baf1de 1194
Wolfgang Betz 67:93bec0baf1de 1195 /* Writes value on the PROTOCOL0 register */
Wolfgang Betz 67:93bec0baf1de 1196 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1197
Wolfgang Betz 67:93bec0baf1de 1198 }
Wolfgang Betz 67:93bec0baf1de 1199
Wolfgang Betz 67:93bec0baf1de 1200
Wolfgang Betz 67:93bec0baf1de 1201 /**
Wolfgang Betz 67:93bec0baf1de 1202 * @brief Sets the TX sequence number to be used to start counting.
Wolfgang Betz 67:93bec0baf1de 1203 * @param cSeqNumberReload new value for Tx seq number reload.
Wolfgang Betz 67:93bec0baf1de 1204 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1205 */
Wolfgang Betz 67:93bec0baf1de 1206 void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload){
Wolfgang Betz 67:93bec0baf1de 1207 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1208
Wolfgang Betz 67:93bec0baf1de 1209 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 1210 s_assert_param(IS_PKT_SEQ_NUMBER_RELOAD(cSeqNumberReload));
Wolfgang Betz 67:93bec0baf1de 1211
Wolfgang Betz 67:93bec0baf1de 1212 /* Reads value on the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 1213 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1214
Wolfgang Betz 67:93bec0baf1de 1215 tempRegValue &= 0xE7;
Wolfgang Betz 67:93bec0baf1de 1216 tempRegValue |= (cSeqNumberReload << 3);
Wolfgang Betz 67:93bec0baf1de 1217
Wolfgang Betz 67:93bec0baf1de 1218 /* Writes value on the PROTOCOL2 register */
Wolfgang Betz 67:93bec0baf1de 1219 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1220
Wolfgang Betz 67:93bec0baf1de 1221 }
Wolfgang Betz 67:93bec0baf1de 1222
Wolfgang Betz 67:93bec0baf1de 1223
Wolfgang Betz 67:93bec0baf1de 1224 /**
Wolfgang Betz 67:93bec0baf1de 1225 * @brief Sets the TX sequence number to be used to start counting.
Wolfgang Betz 67:93bec0baf1de 1226 * @param cSeqNumberReload new value for Tx seq number reload.
Wolfgang Betz 67:93bec0baf1de 1227 * This parameter can be: S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1228 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1229 */
Wolfgang Betz 67:93bec0baf1de 1230 void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx)
Wolfgang Betz 67:93bec0baf1de 1231 {
Wolfgang Betz 67:93bec0baf1de 1232 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1233
Wolfgang Betz 67:93bec0baf1de 1234 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 1235 s_assert_param(IS_PKT_NMAX_RETX(xNMaxReTx));
Wolfgang Betz 67:93bec0baf1de 1236
Wolfgang Betz 67:93bec0baf1de 1237 /* Reads the PROTOCOL0 register value */
Wolfgang Betz 67:93bec0baf1de 1238 g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1239
Wolfgang Betz 67:93bec0baf1de 1240 /* Build the value to be written */
Wolfgang Betz 67:93bec0baf1de 1241 tempRegValue &= ~PROTOCOL0_NMAX_RETX_MASK;
Wolfgang Betz 67:93bec0baf1de 1242 tempRegValue |= xNMaxReTx;
Wolfgang Betz 67:93bec0baf1de 1243
Wolfgang Betz 67:93bec0baf1de 1244 /* Writes value on the PROTOCOL0 register */
Wolfgang Betz 67:93bec0baf1de 1245 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1246
Wolfgang Betz 67:93bec0baf1de 1247 }
Wolfgang Betz 67:93bec0baf1de 1248
Wolfgang Betz 67:93bec0baf1de 1249
Wolfgang Betz 67:93bec0baf1de 1250 /**
Wolfgang Betz 67:93bec0baf1de 1251 * @brief Returns the max number of automatic retransmission.
Wolfgang Betz 67:93bec0baf1de 1252 * @param None.
Wolfgang Betz 67:93bec0baf1de 1253 * @retval uint8_t Max number of retransmissions.
Wolfgang Betz 67:93bec0baf1de 1254 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 1255 */
Wolfgang Betz 67:93bec0baf1de 1256 uint8_t SpiritPktCommonGetNMaxReTx(void)
Wolfgang Betz 67:93bec0baf1de 1257 {
Wolfgang Betz 67:93bec0baf1de 1258 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1259
Wolfgang Betz 67:93bec0baf1de 1260 /* Reads the PROTOCOL0 register value */
Wolfgang Betz 67:93bec0baf1de 1261 g_xStatus = SpiritSpiReadRegisters(PROTOCOL0_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1262
Wolfgang Betz 67:93bec0baf1de 1263 /* Build the value to be written */
Wolfgang Betz 67:93bec0baf1de 1264 return ((tempRegValue & PROTOCOL0_NMAX_RETX_MASK)>>4);
Wolfgang Betz 67:93bec0baf1de 1265
Wolfgang Betz 67:93bec0baf1de 1266 }
Wolfgang Betz 67:93bec0baf1de 1267
Wolfgang Betz 67:93bec0baf1de 1268 /**
Wolfgang Betz 67:93bec0baf1de 1269 * @brief Returns the TX ACK request
Wolfgang Betz 67:93bec0baf1de 1270 * @param None.
Wolfgang Betz 67:93bec0baf1de 1271 * @retval uint8_t Max number of retransmissions.
Wolfgang Betz 67:93bec0baf1de 1272 * This parameter is an uint8_t.
Wolfgang Betz 67:93bec0baf1de 1273 */
Wolfgang Betz 67:93bec0baf1de 1274 SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void)
Wolfgang Betz 67:93bec0baf1de 1275 {
Wolfgang Betz 67:93bec0baf1de 1276 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1277
Wolfgang Betz 67:93bec0baf1de 1278 /* Reads the PROTOCOL0 register value */
Wolfgang Betz 67:93bec0baf1de 1279 g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1280
Wolfgang Betz 67:93bec0baf1de 1281 /* Build the value to be written */
Wolfgang Betz 67:93bec0baf1de 1282 return (SpiritFunctionalState)((tempRegValue & TX_PCKT_INFO_NACK_RX)>>2);
Wolfgang Betz 67:93bec0baf1de 1283
Wolfgang Betz 67:93bec0baf1de 1284 }
Wolfgang Betz 67:93bec0baf1de 1285
Wolfgang Betz 67:93bec0baf1de 1286
Wolfgang Betz 67:93bec0baf1de 1287 /**
Wolfgang Betz 67:93bec0baf1de 1288 * @brief Returns the source address of the received packet.
Wolfgang Betz 67:93bec0baf1de 1289 * @param None.
Wolfgang Betz 67:93bec0baf1de 1290 * @retval uint8_t Source address of the received packet.
Wolfgang Betz 67:93bec0baf1de 1291 */
Wolfgang Betz 67:93bec0baf1de 1292 uint8_t SpiritPktCommonGetReceivedSourceAddress(void)
Wolfgang Betz 67:93bec0baf1de 1293 {
Wolfgang Betz 67:93bec0baf1de 1294 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1295
Wolfgang Betz 67:93bec0baf1de 1296 /* Reads the RX_ADDR_FIELD1 register value */
Wolfgang Betz 67:93bec0baf1de 1297 g_xStatus = SpiritSpiReadRegisters(RX_ADDR_FIELD1_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1298
Wolfgang Betz 67:93bec0baf1de 1299 /* Returns value */
Wolfgang Betz 67:93bec0baf1de 1300 return tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1301
Wolfgang Betz 67:93bec0baf1de 1302 }
Wolfgang Betz 67:93bec0baf1de 1303
Wolfgang Betz 67:93bec0baf1de 1304
Wolfgang Betz 67:93bec0baf1de 1305 /**
Wolfgang Betz 67:93bec0baf1de 1306 * @brief Returns the sequence number of the received packet.
Wolfgang Betz 67:93bec0baf1de 1307 * @param None.
Wolfgang Betz 67:93bec0baf1de 1308 * @retval uint8_t Received Sequence number.
Wolfgang Betz 67:93bec0baf1de 1309 */
Wolfgang Betz 67:93bec0baf1de 1310 uint8_t SpiritPktCommonGetReceivedSeqNumber(void)
Wolfgang Betz 67:93bec0baf1de 1311 {
Wolfgang Betz 67:93bec0baf1de 1312 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1313
Wolfgang Betz 67:93bec0baf1de 1314 /* Reads the RX_PCKT_INFO register value */
Wolfgang Betz 67:93bec0baf1de 1315 g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1316
Wolfgang Betz 67:93bec0baf1de 1317 /* Obtains and returns the sequence number */
Wolfgang Betz 67:93bec0baf1de 1318 return tempRegValue & 0x03;
Wolfgang Betz 67:93bec0baf1de 1319
Wolfgang Betz 67:93bec0baf1de 1320 }
Wolfgang Betz 67:93bec0baf1de 1321
Wolfgang Betz 67:93bec0baf1de 1322
Wolfgang Betz 67:93bec0baf1de 1323 /**
Wolfgang Betz 67:93bec0baf1de 1324 * @brief Returns the Nack bit of the received packet
Wolfgang Betz 67:93bec0baf1de 1325 * @param None.
Wolfgang Betz 67:93bec0baf1de 1326 * @retval uint8_t Value of the Nack bit.
Wolfgang Betz 67:93bec0baf1de 1327 */
Wolfgang Betz 67:93bec0baf1de 1328 uint8_t SpiritPktCommonGetReceivedNackRx(void)
Wolfgang Betz 67:93bec0baf1de 1329 {
Wolfgang Betz 67:93bec0baf1de 1330 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1331
Wolfgang Betz 67:93bec0baf1de 1332 /* Reads the RX_PCKT_INFO register value */
Wolfgang Betz 67:93bec0baf1de 1333 g_xStatus = SpiritSpiReadRegisters(RX_PCKT_INFO_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1334
Wolfgang Betz 67:93bec0baf1de 1335 /* Obtains and returns the RX nack bit */
Wolfgang Betz 67:93bec0baf1de 1336 return (tempRegValue >> 2) & 0x01;
Wolfgang Betz 67:93bec0baf1de 1337
Wolfgang Betz 67:93bec0baf1de 1338 }
Wolfgang Betz 67:93bec0baf1de 1339
Wolfgang Betz 67:93bec0baf1de 1340
Wolfgang Betz 67:93bec0baf1de 1341 /**
Wolfgang Betz 67:93bec0baf1de 1342 * @brief Returns the sequence number of the transmitted packet.
Wolfgang Betz 67:93bec0baf1de 1343 * @param None.
Wolfgang Betz 67:93bec0baf1de 1344 * @retval uint8_t Sequence number of the transmitted packet.
Wolfgang Betz 67:93bec0baf1de 1345 */
Wolfgang Betz 67:93bec0baf1de 1346 uint8_t SpiritPktCommonGetTransmittedSeqNumber(void)
Wolfgang Betz 67:93bec0baf1de 1347 {
Wolfgang Betz 67:93bec0baf1de 1348 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1349
Wolfgang Betz 67:93bec0baf1de 1350 /* Reads the TX_PCKT_INFO register value */
Wolfgang Betz 67:93bec0baf1de 1351 g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1352
Wolfgang Betz 67:93bec0baf1de 1353 /* Obtains and returns the TX sequence number */
Wolfgang Betz 67:93bec0baf1de 1354 return (tempRegValue >> 4) & 0x07;
Wolfgang Betz 67:93bec0baf1de 1355
Wolfgang Betz 67:93bec0baf1de 1356 }
Wolfgang Betz 67:93bec0baf1de 1357
Wolfgang Betz 67:93bec0baf1de 1358
Wolfgang Betz 67:93bec0baf1de 1359 /**
Wolfgang Betz 67:93bec0baf1de 1360 * @brief Returns the number of retransmission done on the transmitted packet.
Wolfgang Betz 67:93bec0baf1de 1361 * @param None.
Wolfgang Betz 67:93bec0baf1de 1362 * @retval uint8_t Number of retransmissions done until now.
Wolfgang Betz 67:93bec0baf1de 1363 */
Wolfgang Betz 67:93bec0baf1de 1364 uint8_t SpiritPktCommonGetNReTx(void)
Wolfgang Betz 67:93bec0baf1de 1365 {
Wolfgang Betz 67:93bec0baf1de 1366 uint8_t tempRetValue;
Wolfgang Betz 67:93bec0baf1de 1367
Wolfgang Betz 67:93bec0baf1de 1368 /* Reads the TX_PCKT_INFO register value */
Wolfgang Betz 67:93bec0baf1de 1369 g_xStatus = SpiritSpiReadRegisters(TX_PCKT_INFO_BASE, 1, &tempRetValue);
Wolfgang Betz 67:93bec0baf1de 1370
Wolfgang Betz 67:93bec0baf1de 1371 /* Obtains and returns the number of retransmission done */
Wolfgang Betz 67:93bec0baf1de 1372 return (tempRetValue & 0x0F);
Wolfgang Betz 67:93bec0baf1de 1373
Wolfgang Betz 67:93bec0baf1de 1374 }
Wolfgang Betz 67:93bec0baf1de 1375
Wolfgang Betz 67:93bec0baf1de 1376
Wolfgang Betz 67:93bec0baf1de 1377 /**
Wolfgang Betz 67:93bec0baf1de 1378 * @brief If enabled RX packet is accepted only if the masked control field matches the
Wolfgang Betz 67:93bec0baf1de 1379 * masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF == CONTROL_MASK & RX_CONTROL_FIELD).
Wolfgang Betz 67:93bec0baf1de 1380 * @param xNewState new state for Control filtering enable bit.
Wolfgang Betz 67:93bec0baf1de 1381 * This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1382 * @retval None.
Wolfgang Betz 67:93bec0baf1de 1383 * @note This filtering control is enabled by default but the control mask is by default set to 0.
Wolfgang Betz 67:93bec0baf1de 1384 * As a matter of fact the user has to enable the control filtering bit after the packet initialization
Wolfgang Betz 67:93bec0baf1de 1385 * because the PktInit routine disables it.
Wolfgang Betz 67:93bec0baf1de 1386 */
Wolfgang Betz 67:93bec0baf1de 1387 void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState)
Wolfgang Betz 67:93bec0baf1de 1388 {
Wolfgang Betz 67:93bec0baf1de 1389 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1390
Wolfgang Betz 67:93bec0baf1de 1391 /* Check the parameters */
Wolfgang Betz 67:93bec0baf1de 1392 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
Wolfgang Betz 67:93bec0baf1de 1393
Wolfgang Betz 67:93bec0baf1de 1394
Wolfgang Betz 67:93bec0baf1de 1395 /* Modify the register value: set or reset the control bit filtering */
Wolfgang Betz 67:93bec0baf1de 1396 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1397
Wolfgang Betz 67:93bec0baf1de 1398 /* Set or reset the CONTROL filtering enabling bit */
Wolfgang Betz 67:93bec0baf1de 1399 if(xNewState == S_ENABLE)
Wolfgang Betz 67:93bec0baf1de 1400 {
Wolfgang Betz 67:93bec0baf1de 1401 tempRegValue |= PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
Wolfgang Betz 67:93bec0baf1de 1402 }
Wolfgang Betz 67:93bec0baf1de 1403 else
Wolfgang Betz 67:93bec0baf1de 1404 {
Wolfgang Betz 67:93bec0baf1de 1405 tempRegValue &= ~PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK;
Wolfgang Betz 67:93bec0baf1de 1406 }
Wolfgang Betz 67:93bec0baf1de 1407
Wolfgang Betz 67:93bec0baf1de 1408 /* Writes the new value on the PCKT_FLT_OPTIONS register */
Wolfgang Betz 67:93bec0baf1de 1409 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1410
Wolfgang Betz 67:93bec0baf1de 1411 }
Wolfgang Betz 67:93bec0baf1de 1412
Wolfgang Betz 67:93bec0baf1de 1413
Wolfgang Betz 67:93bec0baf1de 1414 /**
Wolfgang Betz 67:93bec0baf1de 1415 * @brief Returns the enable bit of the control field filtering.
Wolfgang Betz 67:93bec0baf1de 1416 * @param None.
Wolfgang Betz 67:93bec0baf1de 1417 * @retval SpiritFunctionalState This parameter can be S_ENABLE or S_DISABLE.
Wolfgang Betz 67:93bec0baf1de 1418 */
Wolfgang Betz 67:93bec0baf1de 1419 SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void)
Wolfgang Betz 67:93bec0baf1de 1420 {
Wolfgang Betz 67:93bec0baf1de 1421 uint8_t tempRegValue;
Wolfgang Betz 67:93bec0baf1de 1422
Wolfgang Betz 67:93bec0baf1de 1423 /* Reads the register value */
Wolfgang Betz 67:93bec0baf1de 1424 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue);
Wolfgang Betz 67:93bec0baf1de 1425
Wolfgang Betz 67:93bec0baf1de 1426 /* Gets the enable/disable bit in form of SpiritFunctionalState type */
Wolfgang Betz 67:93bec0baf1de 1427 if(tempRegValue & PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK)
Wolfgang Betz 67:93bec0baf1de 1428 {
Wolfgang Betz 67:93bec0baf1de 1429 return S_ENABLE;
Wolfgang Betz 67:93bec0baf1de 1430 }
Wolfgang Betz 67:93bec0baf1de 1431 else
Wolfgang Betz 67:93bec0baf1de 1432 {
Wolfgang Betz 67:93bec0baf1de 1433 return S_DISABLE;
Wolfgang Betz 67:93bec0baf1de 1434 }
Wolfgang Betz 67:93bec0baf1de 1435
Wolfgang Betz 67:93bec0baf1de 1436 }
Wolfgang Betz 67:93bec0baf1de 1437
Wolfgang Betz 67:93bec0baf1de 1438
Wolfgang Betz 67:93bec0baf1de 1439 /**
Wolfgang Betz 67:93bec0baf1de 1440 *@}
Wolfgang Betz 67:93bec0baf1de 1441 */
Wolfgang Betz 67:93bec0baf1de 1442
Wolfgang Betz 67:93bec0baf1de 1443 /**
Wolfgang Betz 67:93bec0baf1de 1444 *@}
Wolfgang Betz 67:93bec0baf1de 1445 */
Wolfgang Betz 67:93bec0baf1de 1446
Wolfgang Betz 67:93bec0baf1de 1447
Wolfgang Betz 67:93bec0baf1de 1448 /**
Wolfgang Betz 67:93bec0baf1de 1449 *@}
Wolfgang Betz 67:93bec0baf1de 1450 */
Wolfgang Betz 67:93bec0baf1de 1451
Wolfgang Betz 67:93bec0baf1de 1452
Wolfgang Betz 67:93bec0baf1de 1453 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/