JunMo Hong / EV-COG-AD3029LZ

Fork of stm-spirit1-rf-driver by ST

Committer:
Wolfgang Betz
Date:
Tue Oct 18 11:45:43 2016 +0200
Revision:
5:c9c5bc673c64
Parent:
0:4fb29d9ee571
First version of send()

Who changed what in which revision?

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