wifi test

Dependencies:   X_NUCLEO_IKS01A2 mbed-http

Committer:
JMF
Date:
Wed Sep 05 14:28:24 2018 +0000
Revision:
0:24d3eb812fd4
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JMF 0:24d3eb812fd4 1 /**
JMF 0:24d3eb812fd4 2 ******************************************************************************
JMF 0:24d3eb812fd4 3 * @file SPIRIT_PktBasic.c
JMF 0:24d3eb812fd4 4 * @author VMA division - AMS
JMF 0:24d3eb812fd4 5 * @version 3.2.2
JMF 0:24d3eb812fd4 6 * @date 08-July-2015
JMF 0:24d3eb812fd4 7 * @brief Configuration and management of SPIRIT Basic packets.
JMF 0:24d3eb812fd4 8 * @details
JMF 0:24d3eb812fd4 9 *
JMF 0:24d3eb812fd4 10 * @attention
JMF 0:24d3eb812fd4 11 *
JMF 0:24d3eb812fd4 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
JMF 0:24d3eb812fd4 13 *
JMF 0:24d3eb812fd4 14 * Redistribution and use in source and binary forms, with or without modification,
JMF 0:24d3eb812fd4 15 * are permitted provided that the following conditions are met:
JMF 0:24d3eb812fd4 16 * 1. Redistributions of source code must retain the above copyright notice,
JMF 0:24d3eb812fd4 17 * this list of conditions and the following disclaimer.
JMF 0:24d3eb812fd4 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
JMF 0:24d3eb812fd4 19 * this list of conditions and the following disclaimer in the documentation
JMF 0:24d3eb812fd4 20 * and/or other materials provided with the distribution.
JMF 0:24d3eb812fd4 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
JMF 0:24d3eb812fd4 22 * may be used to endorse or promote products derived from this software
JMF 0:24d3eb812fd4 23 * without specific prior written permission.
JMF 0:24d3eb812fd4 24 *
JMF 0:24d3eb812fd4 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
JMF 0:24d3eb812fd4 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
JMF 0:24d3eb812fd4 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
JMF 0:24d3eb812fd4 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
JMF 0:24d3eb812fd4 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
JMF 0:24d3eb812fd4 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
JMF 0:24d3eb812fd4 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
JMF 0:24d3eb812fd4 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
JMF 0:24d3eb812fd4 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
JMF 0:24d3eb812fd4 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
JMF 0:24d3eb812fd4 35 *
JMF 0:24d3eb812fd4 36 ******************************************************************************
JMF 0:24d3eb812fd4 37 */
JMF 0:24d3eb812fd4 38
JMF 0:24d3eb812fd4 39 /* Includes ------------------------------------------------------------------*/
JMF 0:24d3eb812fd4 40 #include "SPIRIT_PktBasic.h"
JMF 0:24d3eb812fd4 41 #include "MCU_Interface.h"
JMF 0:24d3eb812fd4 42
JMF 0:24d3eb812fd4 43
JMF 0:24d3eb812fd4 44 /**
JMF 0:24d3eb812fd4 45 * @addtogroup SPIRIT_Libraries
JMF 0:24d3eb812fd4 46 * @{
JMF 0:24d3eb812fd4 47 */
JMF 0:24d3eb812fd4 48
JMF 0:24d3eb812fd4 49
JMF 0:24d3eb812fd4 50 /**
JMF 0:24d3eb812fd4 51 * @addtogroup SPIRIT_PktBasic
JMF 0:24d3eb812fd4 52 * @{
JMF 0:24d3eb812fd4 53 */
JMF 0:24d3eb812fd4 54
JMF 0:24d3eb812fd4 55
JMF 0:24d3eb812fd4 56 /**
JMF 0:24d3eb812fd4 57 * @defgroup PktBasic_Private_TypesDefinitions Pkt Basic Private Types Definitions
JMF 0:24d3eb812fd4 58 * @{
JMF 0:24d3eb812fd4 59 */
JMF 0:24d3eb812fd4 60
JMF 0:24d3eb812fd4 61 /**
JMF 0:24d3eb812fd4 62 *@}
JMF 0:24d3eb812fd4 63 */
JMF 0:24d3eb812fd4 64
JMF 0:24d3eb812fd4 65
JMF 0:24d3eb812fd4 66 /**
JMF 0:24d3eb812fd4 67 * @defgroup PktBasic_Private_Defines Pkt Basic Private Defines
JMF 0:24d3eb812fd4 68 * @{
JMF 0:24d3eb812fd4 69 */
JMF 0:24d3eb812fd4 70
JMF 0:24d3eb812fd4 71 /**
JMF 0:24d3eb812fd4 72 *@}
JMF 0:24d3eb812fd4 73 */
JMF 0:24d3eb812fd4 74
JMF 0:24d3eb812fd4 75
JMF 0:24d3eb812fd4 76 /**
JMF 0:24d3eb812fd4 77 * @defgroup PktBasic_Private_Macros Pkt Basic Private Macros
JMF 0:24d3eb812fd4 78 * @{
JMF 0:24d3eb812fd4 79 */
JMF 0:24d3eb812fd4 80
JMF 0:24d3eb812fd4 81 /**
JMF 0:24d3eb812fd4 82 *@}
JMF 0:24d3eb812fd4 83 */
JMF 0:24d3eb812fd4 84
JMF 0:24d3eb812fd4 85
JMF 0:24d3eb812fd4 86 /**
JMF 0:24d3eb812fd4 87 * @defgroup PktBasic_Private_Variables Pkt Basic Private Variables
JMF 0:24d3eb812fd4 88 * @{
JMF 0:24d3eb812fd4 89 */
JMF 0:24d3eb812fd4 90
JMF 0:24d3eb812fd4 91 /**
JMF 0:24d3eb812fd4 92 *@}
JMF 0:24d3eb812fd4 93 */
JMF 0:24d3eb812fd4 94
JMF 0:24d3eb812fd4 95
JMF 0:24d3eb812fd4 96
JMF 0:24d3eb812fd4 97 /**
JMF 0:24d3eb812fd4 98 * @defgroup PktBasic_Private_FunctionPrototypes Pkt Basic Private Function Prototypes
JMF 0:24d3eb812fd4 99 * @{
JMF 0:24d3eb812fd4 100 */
JMF 0:24d3eb812fd4 101
JMF 0:24d3eb812fd4 102 /**
JMF 0:24d3eb812fd4 103 *@}
JMF 0:24d3eb812fd4 104 */
JMF 0:24d3eb812fd4 105
JMF 0:24d3eb812fd4 106
JMF 0:24d3eb812fd4 107 /**
JMF 0:24d3eb812fd4 108 * @defgroup PktBasic_Private_Functions Pkt Basic Private Functions
JMF 0:24d3eb812fd4 109 * @{
JMF 0:24d3eb812fd4 110 */
JMF 0:24d3eb812fd4 111
JMF 0:24d3eb812fd4 112 /**
JMF 0:24d3eb812fd4 113 * @brief Initializes the SPIRIT Basic packet according to the specified parameters in the PktBasicInit struct.
JMF 0:24d3eb812fd4 114 * Notice that this function sets the autofiltering option on CRC if it is set to any value different from BASIC_NO_CRC.
JMF 0:24d3eb812fd4 115 * @param pxPktBasicInit Basic packet init structure.
JMF 0:24d3eb812fd4 116 * This parameter is a pointer to @ref PktBasicInit.
JMF 0:24d3eb812fd4 117 * @retval None.
JMF 0:24d3eb812fd4 118 */
JMF 0:24d3eb812fd4 119 void SpiritPktBasicInit(PktBasicInit* pxPktBasicInit)
JMF 0:24d3eb812fd4 120 {
JMF 0:24d3eb812fd4 121 uint8_t tempRegValue[4], i;
JMF 0:24d3eb812fd4 122
JMF 0:24d3eb812fd4 123 /* Check the parameters */
JMF 0:24d3eb812fd4 124 s_assert_param(IS_BASIC_PREAMBLE_LENGTH(pxPktBasicInit->xPreambleLength));
JMF 0:24d3eb812fd4 125 s_assert_param(IS_BASIC_SYNC_LENGTH(pxPktBasicInit->xSyncLength));
JMF 0:24d3eb812fd4 126 s_assert_param(IS_BASIC_CRC_MODE(pxPktBasicInit->xCrcMode));
JMF 0:24d3eb812fd4 127 s_assert_param(IS_BASIC_LENGTH_WIDTH_BITS(pxPktBasicInit->cPktLengthWidth));
JMF 0:24d3eb812fd4 128 s_assert_param(IS_BASIC_FIX_VAR_LENGTH(pxPktBasicInit->xFixVarLength));
JMF 0:24d3eb812fd4 129 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xAddressField));
JMF 0:24d3eb812fd4 130 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xFec));
JMF 0:24d3eb812fd4 131 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicInit->xDataWhitening));
JMF 0:24d3eb812fd4 132 s_assert_param(IS_BASIC_CONTROL_LENGTH(pxPktBasicInit->xControlLength));
JMF 0:24d3eb812fd4 133
JMF 0:24d3eb812fd4 134 /* Reads the PROTOCOL1 register */
JMF 0:24d3eb812fd4 135 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 136
JMF 0:24d3eb812fd4 137 /* Mask a reserved bit */
JMF 0:24d3eb812fd4 138 tempRegValue[0] &= ~0x20;
JMF 0:24d3eb812fd4 139
JMF 0:24d3eb812fd4 140 /* Always set the automatic packet filtering */
JMF 0:24d3eb812fd4 141 tempRegValue[0] |= PROTOCOL1_AUTO_PCKT_FLT_MASK;
JMF 0:24d3eb812fd4 142
JMF 0:24d3eb812fd4 143 /* Writes the value on register */
JMF 0:24d3eb812fd4 144 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 145
JMF 0:24d3eb812fd4 146 /* Reads the PCKT_FLT_OPTIONS register */
JMF 0:24d3eb812fd4 147 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 148
JMF 0:24d3eb812fd4 149 /* Always reset the control and source filtering (also if it is not present in basic) */
JMF 0:24d3eb812fd4 150 tempRegValue[0] &= ~(PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK | PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK);
JMF 0:24d3eb812fd4 151
JMF 0:24d3eb812fd4 152 /* Writes the value on register */
JMF 0:24d3eb812fd4 153 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 154
JMF 0:24d3eb812fd4 155 if(pxPktBasicInit->xAddressField == S_ENABLE)
JMF 0:24d3eb812fd4 156 {
JMF 0:24d3eb812fd4 157 tempRegValue[0]=0x08;
JMF 0:24d3eb812fd4 158 }
JMF 0:24d3eb812fd4 159 else
JMF 0:24d3eb812fd4 160 {
JMF 0:24d3eb812fd4 161 tempRegValue[0]=0x00;
JMF 0:24d3eb812fd4 162 }
JMF 0:24d3eb812fd4 163 /* Address and control length setting */
JMF 0:24d3eb812fd4 164 tempRegValue[0] |= ((uint8_t) pxPktBasicInit->xControlLength);
JMF 0:24d3eb812fd4 165
JMF 0:24d3eb812fd4 166 /* Packet format and width length setting */
JMF 0:24d3eb812fd4 167 pxPktBasicInit->cPktLengthWidth == 0 ? pxPktBasicInit->cPktLengthWidth=1 : pxPktBasicInit->cPktLengthWidth;
JMF 0:24d3eb812fd4 168 tempRegValue[1] = ((uint8_t) PCKTCTRL3_PCKT_FRMT_BASIC) | ((uint8_t)(pxPktBasicInit->cPktLengthWidth-1));
JMF 0:24d3eb812fd4 169
JMF 0:24d3eb812fd4 170 /* Preamble, sync and fixed or variable length setting */
JMF 0:24d3eb812fd4 171 tempRegValue[2] = ((uint8_t) pxPktBasicInit->xPreambleLength) | ((uint8_t) pxPktBasicInit->xSyncLength) |
JMF 0:24d3eb812fd4 172 ((uint8_t) pxPktBasicInit->xFixVarLength);
JMF 0:24d3eb812fd4 173
JMF 0:24d3eb812fd4 174 /* CRC length, whitening and FEC setting */
JMF 0:24d3eb812fd4 175 tempRegValue[3] = (uint8_t) pxPktBasicInit->xCrcMode;
JMF 0:24d3eb812fd4 176
JMF 0:24d3eb812fd4 177 if(pxPktBasicInit->xDataWhitening == S_ENABLE)
JMF 0:24d3eb812fd4 178 {
JMF 0:24d3eb812fd4 179 tempRegValue[3] |= PCKTCTRL1_WHIT_MASK;
JMF 0:24d3eb812fd4 180 }
JMF 0:24d3eb812fd4 181
JMF 0:24d3eb812fd4 182 if(pxPktBasicInit->xFec == S_ENABLE)
JMF 0:24d3eb812fd4 183 {
JMF 0:24d3eb812fd4 184 tempRegValue[3] |= PCKTCTRL1_FEC_MASK;
JMF 0:24d3eb812fd4 185 }
JMF 0:24d3eb812fd4 186
JMF 0:24d3eb812fd4 187 /* Writes registers */
JMF 0:24d3eb812fd4 188 SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 4, tempRegValue);
JMF 0:24d3eb812fd4 189
JMF 0:24d3eb812fd4 190 /* Sync words setting */
JMF 0:24d3eb812fd4 191 for(i=0;i<4;i++)
JMF 0:24d3eb812fd4 192 {
JMF 0:24d3eb812fd4 193 if(i<3-(pxPktBasicInit->xSyncLength >>1))
JMF 0:24d3eb812fd4 194 {
JMF 0:24d3eb812fd4 195 tempRegValue[i]=0;
JMF 0:24d3eb812fd4 196 }
JMF 0:24d3eb812fd4 197 else
JMF 0:24d3eb812fd4 198 {
JMF 0:24d3eb812fd4 199 tempRegValue[i] = (uint8_t)(pxPktBasicInit->lSyncWords>>(8*i));
JMF 0:24d3eb812fd4 200 }
JMF 0:24d3eb812fd4 201 }
JMF 0:24d3eb812fd4 202
JMF 0:24d3eb812fd4 203 /* Sets CRC check bit */
JMF 0:24d3eb812fd4 204 if(pxPktBasicInit->xCrcMode == PKT_NO_CRC)
JMF 0:24d3eb812fd4 205 {
JMF 0:24d3eb812fd4 206 SpiritPktBasicFilterOnCrc(S_DISABLE);
JMF 0:24d3eb812fd4 207 }
JMF 0:24d3eb812fd4 208 else
JMF 0:24d3eb812fd4 209 {
JMF 0:24d3eb812fd4 210 SpiritPktBasicFilterOnCrc(S_ENABLE);
JMF 0:24d3eb812fd4 211 }
JMF 0:24d3eb812fd4 212
JMF 0:24d3eb812fd4 213
JMF 0:24d3eb812fd4 214 g_xStatus = SpiritSpiWriteRegisters(SYNC4_BASE, 4, tempRegValue);
JMF 0:24d3eb812fd4 215
JMF 0:24d3eb812fd4 216 }
JMF 0:24d3eb812fd4 217
JMF 0:24d3eb812fd4 218
JMF 0:24d3eb812fd4 219 /**
JMF 0:24d3eb812fd4 220 * @brief Returns the SPIRIT Basic packet structure according to the specified parameters in the registers.
JMF 0:24d3eb812fd4 221 * @param pxPktBasicInit Basic packet init structure.
JMF 0:24d3eb812fd4 222 * This parameter is a pointer to @ref PktBasicInit.
JMF 0:24d3eb812fd4 223 * @retval None.
JMF 0:24d3eb812fd4 224 */
JMF 0:24d3eb812fd4 225 void SpiritPktBasicGetInfo(PktBasicInit* pxPktBasicInit)
JMF 0:24d3eb812fd4 226 {
JMF 0:24d3eb812fd4 227 uint8_t tempRegValue[10];
JMF 0:24d3eb812fd4 228
JMF 0:24d3eb812fd4 229 /* Reads registers */
JMF 0:24d3eb812fd4 230 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 10, tempRegValue);
JMF 0:24d3eb812fd4 231
JMF 0:24d3eb812fd4 232 /* Length width */
JMF 0:24d3eb812fd4 233 pxPktBasicInit->cPktLengthWidth=(tempRegValue[1] & 0x0F)+1;
JMF 0:24d3eb812fd4 234
JMF 0:24d3eb812fd4 235 /* Address field */
JMF 0:24d3eb812fd4 236 pxPktBasicInit->xAddressField=(SpiritFunctionalState)((tempRegValue[0]>>3) & 0x01);
JMF 0:24d3eb812fd4 237
JMF 0:24d3eb812fd4 238 /* Control length */
JMF 0:24d3eb812fd4 239 pxPktBasicInit->xControlLength=(BasicControlLength)(tempRegValue[0] & 0x07);
JMF 0:24d3eb812fd4 240
JMF 0:24d3eb812fd4 241 /* CRC mode */
JMF 0:24d3eb812fd4 242 pxPktBasicInit->xCrcMode=(BasicCrcMode)(tempRegValue[3] & 0xE0);
JMF 0:24d3eb812fd4 243
JMF 0:24d3eb812fd4 244 /* Whitening */
JMF 0:24d3eb812fd4 245 pxPktBasicInit->xDataWhitening=(SpiritFunctionalState)((tempRegValue[3] >> 4) & 0x01);
JMF 0:24d3eb812fd4 246
JMF 0:24d3eb812fd4 247 /* FEC */
JMF 0:24d3eb812fd4 248 pxPktBasicInit->xFec=(SpiritFunctionalState)(tempRegValue[3] & 0x01);
JMF 0:24d3eb812fd4 249
JMF 0:24d3eb812fd4 250 /* FIX or VAR bit */
JMF 0:24d3eb812fd4 251 pxPktBasicInit->xFixVarLength=(BasicFixVarLength)(tempRegValue[2] & 0x01);
JMF 0:24d3eb812fd4 252
JMF 0:24d3eb812fd4 253 /* Preamble length */
JMF 0:24d3eb812fd4 254 pxPktBasicInit->xPreambleLength=(BasicPreambleLength)(tempRegValue[2] & 0xF8);
JMF 0:24d3eb812fd4 255
JMF 0:24d3eb812fd4 256 /* Sync length */
JMF 0:24d3eb812fd4 257 pxPktBasicInit->xSyncLength=(BasicSyncLength)(tempRegValue[2] & 0x06);
JMF 0:24d3eb812fd4 258
JMF 0:24d3eb812fd4 259 /* sync Words */
JMF 0:24d3eb812fd4 260 pxPktBasicInit->lSyncWords=0;
JMF 0:24d3eb812fd4 261 for(uint8_t i=0 ; i<4 ; i++)
JMF 0:24d3eb812fd4 262 {
JMF 0:24d3eb812fd4 263 if(i>2-(((uint8_t)pxPktBasicInit->xSyncLength) >>1))
JMF 0:24d3eb812fd4 264 {
JMF 0:24d3eb812fd4 265 pxPktBasicInit->lSyncWords |= (uint32_t)(tempRegValue[i+6])<<(8*i);
JMF 0:24d3eb812fd4 266 }
JMF 0:24d3eb812fd4 267 }
JMF 0:24d3eb812fd4 268
JMF 0:24d3eb812fd4 269 }
JMF 0:24d3eb812fd4 270
JMF 0:24d3eb812fd4 271
JMF 0:24d3eb812fd4 272 /**
JMF 0:24d3eb812fd4 273 * @brief Initializes the SPIRIT Basic packet addresses according to the specified
JMF 0:24d3eb812fd4 274 * parameters in the PktBasicAddressesInit struct.
JMF 0:24d3eb812fd4 275 * @param pxPktBasicAddresses Basic packet addresses init structure.
JMF 0:24d3eb812fd4 276 * This parameter is a pointer to @ref PktBasicAddresses.
JMF 0:24d3eb812fd4 277 * @retval None.
JMF 0:24d3eb812fd4 278 */
JMF 0:24d3eb812fd4 279 void SpiritPktBasicAddressesInit(PktBasicAddressesInit* pxPktBasicAddresses)
JMF 0:24d3eb812fd4 280 {
JMF 0:24d3eb812fd4 281 uint8_t tempRegValue[3];
JMF 0:24d3eb812fd4 282
JMF 0:24d3eb812fd4 283 /* Check the parameters */
JMF 0:24d3eb812fd4 284 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnMyAddress));
JMF 0:24d3eb812fd4 285 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnMulticastAddress));
JMF 0:24d3eb812fd4 286 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxPktBasicAddresses->xFilterOnBroadcastAddress));
JMF 0:24d3eb812fd4 287
JMF 0:24d3eb812fd4 288
JMF 0:24d3eb812fd4 289 /* Reads the PCKT_FLT_OPTIONS ragister */
JMF 0:24d3eb812fd4 290 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 291
JMF 0:24d3eb812fd4 292 /* Enables or disables filtering on my address */
JMF 0:24d3eb812fd4 293 if(pxPktBasicAddresses->xFilterOnMyAddress == S_ENABLE)
JMF 0:24d3eb812fd4 294 {
JMF 0:24d3eb812fd4 295 tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
JMF 0:24d3eb812fd4 296 }
JMF 0:24d3eb812fd4 297 else
JMF 0:24d3eb812fd4 298 {
JMF 0:24d3eb812fd4 299 tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
JMF 0:24d3eb812fd4 300 }
JMF 0:24d3eb812fd4 301
JMF 0:24d3eb812fd4 302 /* Enables or disables filtering on multicast address */
JMF 0:24d3eb812fd4 303 if(pxPktBasicAddresses->xFilterOnMulticastAddress == S_ENABLE)
JMF 0:24d3eb812fd4 304 {
JMF 0:24d3eb812fd4 305 tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
JMF 0:24d3eb812fd4 306 }
JMF 0:24d3eb812fd4 307 else
JMF 0:24d3eb812fd4 308 {
JMF 0:24d3eb812fd4 309 tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
JMF 0:24d3eb812fd4 310 }
JMF 0:24d3eb812fd4 311
JMF 0:24d3eb812fd4 312 /* Enables or disables filtering on broadcast address */
JMF 0:24d3eb812fd4 313 if(pxPktBasicAddresses->xFilterOnBroadcastAddress == S_ENABLE)
JMF 0:24d3eb812fd4 314 {
JMF 0:24d3eb812fd4 315 tempRegValue[0] |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
JMF 0:24d3eb812fd4 316 }
JMF 0:24d3eb812fd4 317 else
JMF 0:24d3eb812fd4 318 {
JMF 0:24d3eb812fd4 319 tempRegValue[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
JMF 0:24d3eb812fd4 320 }
JMF 0:24d3eb812fd4 321
JMF 0:24d3eb812fd4 322 /* Writes the new value on the PCKT_FLT_OPTIONS register */
JMF 0:24d3eb812fd4 323 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 324
JMF 0:24d3eb812fd4 325 /* Fills the array with the addresses passed in the structure */
JMF 0:24d3eb812fd4 326 tempRegValue[0] = pxPktBasicAddresses->cBroadcastAddress;
JMF 0:24d3eb812fd4 327 tempRegValue[1] = pxPktBasicAddresses->cMulticastAddress;
JMF 0:24d3eb812fd4 328 tempRegValue[2] = pxPktBasicAddresses->cMyAddress;
JMF 0:24d3eb812fd4 329
JMF 0:24d3eb812fd4 330 /* Writes values on the PCKT_FLT_GOALS registers */
JMF 0:24d3eb812fd4 331 g_xStatus = SpiritSpiWriteRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
JMF 0:24d3eb812fd4 332
JMF 0:24d3eb812fd4 333
JMF 0:24d3eb812fd4 334 }
JMF 0:24d3eb812fd4 335
JMF 0:24d3eb812fd4 336
JMF 0:24d3eb812fd4 337 /**
JMF 0:24d3eb812fd4 338 * @brief Returns the SPIRIT Basic packet addresses structure according to the specified
JMF 0:24d3eb812fd4 339 * parameters in the registers.
JMF 0:24d3eb812fd4 340 * @param pxPktBasicAddresses Basic packet addresses init structure.
JMF 0:24d3eb812fd4 341 * This parameter is a pointer to @ref PktBasicAddresses.
JMF 0:24d3eb812fd4 342 * @retval None.
JMF 0:24d3eb812fd4 343 */
JMF 0:24d3eb812fd4 344 void SpiritPktBasicGetAddressesInfo(PktBasicAddressesInit* pxPktBasicAddresses)
JMF 0:24d3eb812fd4 345 {
JMF 0:24d3eb812fd4 346 uint8_t tempRegValue[3];
JMF 0:24d3eb812fd4 347
JMF 0:24d3eb812fd4 348 /* Reads values on the PCKT_FLT_GOALS registers */
JMF 0:24d3eb812fd4 349 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_GOALS_BROADCAST_BASE, 3, tempRegValue);
JMF 0:24d3eb812fd4 350
JMF 0:24d3eb812fd4 351 /* Fit the structure with the read addresses */
JMF 0:24d3eb812fd4 352 pxPktBasicAddresses->cBroadcastAddress = tempRegValue[0];
JMF 0:24d3eb812fd4 353 pxPktBasicAddresses->cMulticastAddress = tempRegValue[1];
JMF 0:24d3eb812fd4 354 pxPktBasicAddresses->cMyAddress = tempRegValue[2];
JMF 0:24d3eb812fd4 355
JMF 0:24d3eb812fd4 356 g_xStatus = SpiritSpiReadRegisters(PCKT_FLT_OPTIONS_BASE, 1, &tempRegValue[0]);
JMF 0:24d3eb812fd4 357
JMF 0:24d3eb812fd4 358 /* Fit the structure with the read filtering bits */
JMF 0:24d3eb812fd4 359 pxPktBasicAddresses->xFilterOnBroadcastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 1) & 0x01);
JMF 0:24d3eb812fd4 360 pxPktBasicAddresses->xFilterOnMulticastAddress = (SpiritFunctionalState)((tempRegValue[0] >> 2) & 0x01);
JMF 0:24d3eb812fd4 361 pxPktBasicAddresses->xFilterOnMyAddress = (SpiritFunctionalState)((tempRegValue[0] >> 3) & 0x01);
JMF 0:24d3eb812fd4 362
JMF 0:24d3eb812fd4 363 }
JMF 0:24d3eb812fd4 364
JMF 0:24d3eb812fd4 365
JMF 0:24d3eb812fd4 366 /**
JMF 0:24d3eb812fd4 367 * @brief Configures the Basic packet format as packet used by SPIRIT.
JMF 0:24d3eb812fd4 368 * @param None.
JMF 0:24d3eb812fd4 369 * @retval None.
JMF 0:24d3eb812fd4 370 */
JMF 0:24d3eb812fd4 371 void SpiritPktBasicSetFormat(void)
JMF 0:24d3eb812fd4 372 {
JMF 0:24d3eb812fd4 373 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 374
JMF 0:24d3eb812fd4 375 /* Reads the register value */
JMF 0:24d3eb812fd4 376 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 377
JMF 0:24d3eb812fd4 378 /* Build the new value. Also set to 0 the direct RX mode bits */
JMF 0:24d3eb812fd4 379 tempRegValue &= 0x0F;
JMF 0:24d3eb812fd4 380 tempRegValue |= (uint8_t)PCKTCTRL3_PCKT_FRMT_BASIC;
JMF 0:24d3eb812fd4 381
JMF 0:24d3eb812fd4 382 /* Writes the value on the PCKTCTRL3 register */
JMF 0:24d3eb812fd4 383 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 384
JMF 0:24d3eb812fd4 385 /* Reads the PCKTCTRL1_BASE register */
JMF 0:24d3eb812fd4 386 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 387
JMF 0:24d3eb812fd4 388 /* Build the new value. Set to 0 the direct TX mode bits */
JMF 0:24d3eb812fd4 389 tempRegValue &= 0xF3;
JMF 0:24d3eb812fd4 390
JMF 0:24d3eb812fd4 391 /* Writes the value on the PCKTCTRL1 register */
JMF 0:24d3eb812fd4 392 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 393
JMF 0:24d3eb812fd4 394 /* Reads the PROTOCOL1 register */
JMF 0:24d3eb812fd4 395 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 396
JMF 0:24d3eb812fd4 397 /* Mask a reserved bit */
JMF 0:24d3eb812fd4 398 tempRegValue &= ~0x20;
JMF 0:24d3eb812fd4 399
JMF 0:24d3eb812fd4 400 /* Writes the value on register */
JMF 0:24d3eb812fd4 401 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 402 }
JMF 0:24d3eb812fd4 403
JMF 0:24d3eb812fd4 404
JMF 0:24d3eb812fd4 405 /**
JMF 0:24d3eb812fd4 406 * @brief Sets the address length for SPIRIT Basic packets.
JMF 0:24d3eb812fd4 407 * @param xAddressField length of ADDRESS in bytes.
JMF 0:24d3eb812fd4 408 * This parameter can be: S_ENABLE or S_DISABLE.
JMF 0:24d3eb812fd4 409 * @retval None.
JMF 0:24d3eb812fd4 410 */
JMF 0:24d3eb812fd4 411 void SpiritPktBasicAddressField(SpiritFunctionalState xAddressField)
JMF 0:24d3eb812fd4 412 {
JMF 0:24d3eb812fd4 413 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 414
JMF 0:24d3eb812fd4 415 /* Check the parameters */
JMF 0:24d3eb812fd4 416 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xAddressField));
JMF 0:24d3eb812fd4 417
JMF 0:24d3eb812fd4 418 /* Reads the PCKTCTRL4 register value */
JMF 0:24d3eb812fd4 419 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 420
JMF 0:24d3eb812fd4 421 /* Build the address length for the register */
JMF 0:24d3eb812fd4 422 if(xAddressField==S_ENABLE)
JMF 0:24d3eb812fd4 423 {
JMF 0:24d3eb812fd4 424 tempRegValue |= 0x08;
JMF 0:24d3eb812fd4 425 }
JMF 0:24d3eb812fd4 426 else
JMF 0:24d3eb812fd4 427 {
JMF 0:24d3eb812fd4 428 tempRegValue &= 0x07;
JMF 0:24d3eb812fd4 429 }
JMF 0:24d3eb812fd4 430
JMF 0:24d3eb812fd4 431 /* Writes the new value on the PCKTCTRL4 register */
JMF 0:24d3eb812fd4 432 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 433
JMF 0:24d3eb812fd4 434 }
JMF 0:24d3eb812fd4 435
JMF 0:24d3eb812fd4 436
JMF 0:24d3eb812fd4 437 /**
JMF 0:24d3eb812fd4 438 * @brief Specifies if the Address field for SPIRIT Basic packets is enabled or disabled.
JMF 0:24d3eb812fd4 439 * @param None.
JMF 0:24d3eb812fd4 440 * @retval SpiritFunctionalState Notifies if the address field is enabled or disabled.
JMF 0:24d3eb812fd4 441 */
JMF 0:24d3eb812fd4 442 SpiritFunctionalState SpiritPktBasicGetAddressField(void)
JMF 0:24d3eb812fd4 443 {
JMF 0:24d3eb812fd4 444 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 445
JMF 0:24d3eb812fd4 446 /* Reads the PCKTCTRL4 register value */
JMF 0:24d3eb812fd4 447 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL4_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 448
JMF 0:24d3eb812fd4 449 /* Returns the address field value */
JMF 0:24d3eb812fd4 450 if(tempRegValue & PCKTCTRL4_ADDRESS_LEN_MASK)
JMF 0:24d3eb812fd4 451 {
JMF 0:24d3eb812fd4 452 return S_ENABLE;
JMF 0:24d3eb812fd4 453 }
JMF 0:24d3eb812fd4 454 else
JMF 0:24d3eb812fd4 455 {
JMF 0:24d3eb812fd4 456 return S_DISABLE;
JMF 0:24d3eb812fd4 457 }
JMF 0:24d3eb812fd4 458
JMF 0:24d3eb812fd4 459 }
JMF 0:24d3eb812fd4 460
JMF 0:24d3eb812fd4 461
JMF 0:24d3eb812fd4 462 /**
JMF 0:24d3eb812fd4 463 * @brief Sets the payload length for SPIRIT Basic packets. Since the packet length
JMF 0:24d3eb812fd4 464 * depends from the address and the control field size, this
JMF 0:24d3eb812fd4 465 * function reads the correspondent registers in order to determine
JMF 0:24d3eb812fd4 466 * the correct packet length to be written.
JMF 0:24d3eb812fd4 467 * @param nPayloadLength payload length in bytes.
JMF 0:24d3eb812fd4 468 * This parameter is an uint16_t.
JMF 0:24d3eb812fd4 469 * @retval None.
JMF 0:24d3eb812fd4 470 */
JMF 0:24d3eb812fd4 471 void SpiritPktBasicSetPayloadLength(uint16_t nPayloadLength)
JMF 0:24d3eb812fd4 472 {
JMF 0:24d3eb812fd4 473 uint8_t tempRegValue[2];
JMF 0:24d3eb812fd4 474 uint16_t overSize=0;
JMF 0:24d3eb812fd4 475
JMF 0:24d3eb812fd4 476 /* Computes the oversize (address + control) size */
JMF 0:24d3eb812fd4 477 if(SpiritPktBasicGetAddressField())
JMF 0:24d3eb812fd4 478 {
JMF 0:24d3eb812fd4 479 overSize=1;
JMF 0:24d3eb812fd4 480 }
JMF 0:24d3eb812fd4 481 overSize += (uint16_t) SpiritPktBasicGetControlLength();
JMF 0:24d3eb812fd4 482
JMF 0:24d3eb812fd4 483 /* Computes PCKTLEN0 value from nPayloadLength */
JMF 0:24d3eb812fd4 484 tempRegValue[1]=BASIC_BUILD_PCKTLEN0(nPayloadLength+overSize);
JMF 0:24d3eb812fd4 485 /* Computes PCKTLEN1 value from nPayloadLength */
JMF 0:24d3eb812fd4 486 tempRegValue[0]=BASIC_BUILD_PCKTLEN1(nPayloadLength+overSize);
JMF 0:24d3eb812fd4 487
JMF 0:24d3eb812fd4 488 /* Writes data on the PCKTLEN1/0 register */
JMF 0:24d3eb812fd4 489 g_xStatus = SpiritSpiWriteRegisters(PCKTLEN1_BASE, 2, tempRegValue);
JMF 0:24d3eb812fd4 490
JMF 0:24d3eb812fd4 491 }
JMF 0:24d3eb812fd4 492
JMF 0:24d3eb812fd4 493
JMF 0:24d3eb812fd4 494 /**
JMF 0:24d3eb812fd4 495 * @brief Returns the payload length for SPIRIT Basic packets. Since the
JMF 0:24d3eb812fd4 496 * packet length depends from the address and the control
JMF 0:24d3eb812fd4 497 * field size, this function reads the correspondent
JMF 0:24d3eb812fd4 498 * registers in order to determine the correct payload length
JMF 0:24d3eb812fd4 499 * to be returned.
JMF 0:24d3eb812fd4 500 * @param None.
JMF 0:24d3eb812fd4 501 * @retval uint16_t Payload length in bytes.
JMF 0:24d3eb812fd4 502 */
JMF 0:24d3eb812fd4 503 uint16_t SpiritPktBasicGetPayloadLength(void)
JMF 0:24d3eb812fd4 504 {
JMF 0:24d3eb812fd4 505 uint8_t tempRegValue[2];
JMF 0:24d3eb812fd4 506 uint16_t overSize=0;
JMF 0:24d3eb812fd4 507
JMF 0:24d3eb812fd4 508 /* Computes the oversize (address + control) size */
JMF 0:24d3eb812fd4 509 if(SpiritPktBasicGetAddressField())
JMF 0:24d3eb812fd4 510 {
JMF 0:24d3eb812fd4 511 overSize=1;
JMF 0:24d3eb812fd4 512 }
JMF 0:24d3eb812fd4 513 overSize += (uint16_t) SpiritPktBasicGetControlLength();
JMF 0:24d3eb812fd4 514
JMF 0:24d3eb812fd4 515 /* Reads the packet length registers */
JMF 0:24d3eb812fd4 516 g_xStatus = SpiritSpiReadRegisters(PCKTLEN1_BASE, 2, tempRegValue);
JMF 0:24d3eb812fd4 517
JMF 0:24d3eb812fd4 518 /* Returns the packet length */
JMF 0:24d3eb812fd4 519 return ((((uint16_t)tempRegValue[0])<<8) + (uint16_t) tempRegValue[1]) - overSize;
JMF 0:24d3eb812fd4 520 }
JMF 0:24d3eb812fd4 521
JMF 0:24d3eb812fd4 522 /**
JMF 0:24d3eb812fd4 523 * @brief Returns the packet length field of the received packet.
JMF 0:24d3eb812fd4 524 * @param None.
JMF 0:24d3eb812fd4 525 * @retval uint16_t Packet length.
JMF 0:24d3eb812fd4 526 */
JMF 0:24d3eb812fd4 527 uint16_t SpiritPktBasicGetReceivedPktLength(void)
JMF 0:24d3eb812fd4 528 {
JMF 0:24d3eb812fd4 529 uint8_t tempRegValue[2];
JMF 0:24d3eb812fd4 530 uint16_t overSize=0;
JMF 0:24d3eb812fd4 531
JMF 0:24d3eb812fd4 532 /* Computes the oversize (address + control) size */
JMF 0:24d3eb812fd4 533 if(SpiritPktBasicGetAddressField())
JMF 0:24d3eb812fd4 534 {
JMF 0:24d3eb812fd4 535 overSize=1;
JMF 0:24d3eb812fd4 536 }
JMF 0:24d3eb812fd4 537 overSize += (uint16_t) SpiritPktBasicGetControlLength();
JMF 0:24d3eb812fd4 538
JMF 0:24d3eb812fd4 539 /* Reads the RX_PCKT_LENx registers value */
JMF 0:24d3eb812fd4 540 g_xStatus = SpiritSpiReadRegisters(RX_PCKT_LEN1_BASE, 2, tempRegValue);
JMF 0:24d3eb812fd4 541
JMF 0:24d3eb812fd4 542 /* Rebuild and return the length field */
JMF 0:24d3eb812fd4 543 return (((((uint16_t) tempRegValue[0]) << 8) + (uint16_t) tempRegValue[1]) - overSize);
JMF 0:24d3eb812fd4 544 }
JMF 0:24d3eb812fd4 545
JMF 0:24d3eb812fd4 546 /**
JMF 0:24d3eb812fd4 547 * @brief Computes and sets the variable payload length for SPIRIT Basic packets.
JMF 0:24d3eb812fd4 548 * @param nMaxPayloadLength payload length in bytes.
JMF 0:24d3eb812fd4 549 * This parameter is an uint16_t.
JMF 0:24d3eb812fd4 550 * @param xAddressField Enable or Disable Address Field.
JMF 0:24d3eb812fd4 551 * This parameter can be S_ENABLE or S_DISABLE.
JMF 0:24d3eb812fd4 552 * @param xControlLength Control length in bytes.
JMF 0:24d3eb812fd4 553 * This parameter can be any value of @ref BasicControlLength.
JMF 0:24d3eb812fd4 554 * @retval None.
JMF 0:24d3eb812fd4 555 */
JMF 0:24d3eb812fd4 556 void SpiritPktBasicSetVarLengthWidth(uint16_t nMaxPayloadLength, SpiritFunctionalState xAddressField, BasicControlLength xControlLength)
JMF 0:24d3eb812fd4 557 {
JMF 0:24d3eb812fd4 558 uint8_t tempRegValue,
JMF 0:24d3eb812fd4 559 addressLength,
JMF 0:24d3eb812fd4 560 i;
JMF 0:24d3eb812fd4 561 uint32_t packetLength;
JMF 0:24d3eb812fd4 562
JMF 0:24d3eb812fd4 563 /* Sets the address length according to xAddressField */
JMF 0:24d3eb812fd4 564 if(xAddressField == S_ENABLE)
JMF 0:24d3eb812fd4 565 {
JMF 0:24d3eb812fd4 566 addressLength=1;
JMF 0:24d3eb812fd4 567 }
JMF 0:24d3eb812fd4 568 else
JMF 0:24d3eb812fd4 569 {
JMF 0:24d3eb812fd4 570 addressLength=0;
JMF 0:24d3eb812fd4 571 }
JMF 0:24d3eb812fd4 572
JMF 0:24d3eb812fd4 573 /* packet length = payload length + address length + control length */
JMF 0:24d3eb812fd4 574 packetLength=nMaxPayloadLength+addressLength+xControlLength;
JMF 0:24d3eb812fd4 575
JMF 0:24d3eb812fd4 576 /* Computes the number of bits */
JMF 0:24d3eb812fd4 577 for(i=0;i<16;i++)
JMF 0:24d3eb812fd4 578 {
JMF 0:24d3eb812fd4 579 if(packetLength == 0) break;
JMF 0:24d3eb812fd4 580 {
JMF 0:24d3eb812fd4 581 packetLength >>= 1;
JMF 0:24d3eb812fd4 582 }
JMF 0:24d3eb812fd4 583 }
JMF 0:24d3eb812fd4 584 i==0 ? i=1 : i;
JMF 0:24d3eb812fd4 585
JMF 0:24d3eb812fd4 586 /* Reads the PCKTCTRL3 register value */
JMF 0:24d3eb812fd4 587 g_xStatus = SpiritSpiReadRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 588
JMF 0:24d3eb812fd4 589 /* Build value for the length width */
JMF 0:24d3eb812fd4 590 tempRegValue &= ~PCKTCTRL3_LEN_WID_MASK;
JMF 0:24d3eb812fd4 591 tempRegValue |= (uint8_t)(i-1);
JMF 0:24d3eb812fd4 592
JMF 0:24d3eb812fd4 593 /* Writes the PCKTCTRL3 register value */
JMF 0:24d3eb812fd4 594 g_xStatus = SpiritSpiWriteRegisters(PCKTCTRL3_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 595
JMF 0:24d3eb812fd4 596 }
JMF 0:24d3eb812fd4 597
JMF 0:24d3eb812fd4 598
JMF 0:24d3eb812fd4 599
JMF 0:24d3eb812fd4 600 /**
JMF 0:24d3eb812fd4 601 *@}
JMF 0:24d3eb812fd4 602 */
JMF 0:24d3eb812fd4 603
JMF 0:24d3eb812fd4 604 /**
JMF 0:24d3eb812fd4 605 *@}
JMF 0:24d3eb812fd4 606 */
JMF 0:24d3eb812fd4 607
JMF 0:24d3eb812fd4 608
JMF 0:24d3eb812fd4 609 /**
JMF 0:24d3eb812fd4 610 *@}
JMF 0:24d3eb812fd4 611 */
JMF 0:24d3eb812fd4 612
JMF 0:24d3eb812fd4 613
JMF 0:24d3eb812fd4 614
JMF 0:24d3eb812fd4 615 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/