HelloWorld_IDS01A4 mbed application for Spirit1 P2P demo.

Dependencies:   mbed

Fork of HelloWorld_IDS01A5_Program by rosarium pila

mbed 2.0 (a.k.a classic) HelloWorld example for Spirit1 to transfer data from one node to another.
To send the predefined data packet from the sender to the receiver, user needs to press User Button on the board. The LED on the receiver expansion board will toggle on reception of data successfully.
Data packets sent and received can be seen on USB serial terminal.

EVALUATION BOARDS RF FREQUENCY DESCRIPTION :
X-NUCLEO-IDS01A4 868 MHz 868 MHz RF expansion board based on SPIRIT1

Committer:
rosarium
Date:
Thu May 25 16:38:55 2017 +0000
Revision:
0:2ddc0583bcec
First draft version of HelloWorld_IDS01A5

Who changed what in which revision?

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