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:
Tue Nov 22 11:40:10 2016 +0100
Revision:
34:edda6a7238ec
Child:
67:93bec0baf1de
Perform re-naming

Who changed what in which revision?

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