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 Oct 13 15:41:39 2016 +0200
Revision:
0:4fb29d9ee571
Child:
5:c9c5bc673c64
First compiling version (without warnings)

Who changed what in which revision?

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