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_Csma.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 CSMA.
JMF 0:24d3eb812fd4 8 * @details
JMF 0:24d3eb812fd4 9 * @attention
JMF 0:24d3eb812fd4 10 *
JMF 0:24d3eb812fd4 11 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
JMF 0:24d3eb812fd4 12 *
JMF 0:24d3eb812fd4 13 * Redistribution and use in source and binary forms, with or without modification,
JMF 0:24d3eb812fd4 14 * are permitted provided that the following conditions are met:
JMF 0:24d3eb812fd4 15 * 1. Redistributions of source code must retain the above copyright notice,
JMF 0:24d3eb812fd4 16 * this list of conditions and the following disclaimer.
JMF 0:24d3eb812fd4 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
JMF 0:24d3eb812fd4 18 * this list of conditions and the following disclaimer in the documentation
JMF 0:24d3eb812fd4 19 * and/or other materials provided with the distribution.
JMF 0:24d3eb812fd4 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
JMF 0:24d3eb812fd4 21 * may be used to endorse or promote products derived from this software
JMF 0:24d3eb812fd4 22 * without specific prior written permission.
JMF 0:24d3eb812fd4 23 *
JMF 0:24d3eb812fd4 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
JMF 0:24d3eb812fd4 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
JMF 0:24d3eb812fd4 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
JMF 0:24d3eb812fd4 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
JMF 0:24d3eb812fd4 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
JMF 0:24d3eb812fd4 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
JMF 0:24d3eb812fd4 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
JMF 0:24d3eb812fd4 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
JMF 0:24d3eb812fd4 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
JMF 0:24d3eb812fd4 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
JMF 0:24d3eb812fd4 34 *
JMF 0:24d3eb812fd4 35 ******************************************************************************
JMF 0:24d3eb812fd4 36 */
JMF 0:24d3eb812fd4 37
JMF 0:24d3eb812fd4 38 /* Includes ------------------------------------------------------------------*/
JMF 0:24d3eb812fd4 39 #include "SPIRIT_Csma.h"
JMF 0:24d3eb812fd4 40 #include "MCU_Interface.h"
JMF 0:24d3eb812fd4 41
JMF 0:24d3eb812fd4 42
JMF 0:24d3eb812fd4 43 /**
JMF 0:24d3eb812fd4 44 * @addtogroup SPIRIT_Libraries
JMF 0:24d3eb812fd4 45 * @{
JMF 0:24d3eb812fd4 46 */
JMF 0:24d3eb812fd4 47
JMF 0:24d3eb812fd4 48
JMF 0:24d3eb812fd4 49 /**
JMF 0:24d3eb812fd4 50 * @addtogroup SPIRIT_Csma
JMF 0:24d3eb812fd4 51 * @{
JMF 0:24d3eb812fd4 52 */
JMF 0:24d3eb812fd4 53
JMF 0:24d3eb812fd4 54
JMF 0:24d3eb812fd4 55 /**
JMF 0:24d3eb812fd4 56 * @defgroup Csma_Private_TypesDefinitions CSMA Private TypesDefinitions
JMF 0:24d3eb812fd4 57 * @{
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 Csma_Private_Defines CSMA 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 Csma_Private_Macros CSMA 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 Csma_Private_Variables CSMA 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 Csma_Private_FunctionPrototypes CSMA Private FunctionPrototypes
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 Csma_Private_Functions CSMA Private Functions
JMF 0:24d3eb812fd4 109 * @{
JMF 0:24d3eb812fd4 110 */
JMF 0:24d3eb812fd4 111
JMF 0:24d3eb812fd4 112
JMF 0:24d3eb812fd4 113 /**
JMF 0:24d3eb812fd4 114 * @brief Initializes the SPIRIT CSMA according to the specified parameters in the CsmaInit.
JMF 0:24d3eb812fd4 115 * @param pxCsmaInit Csma init structure.
JMF 0:24d3eb812fd4 116 * This parameter is a pointer to @ref CsmaInit.
JMF 0:24d3eb812fd4 117 * @retval None.
JMF 0:24d3eb812fd4 118 */
JMF 0:24d3eb812fd4 119 void SpiritCsmaInit(CsmaInit* pxCsmaInit)
JMF 0:24d3eb812fd4 120 {
JMF 0:24d3eb812fd4 121 uint8_t tempRegValue[5];
JMF 0:24d3eb812fd4 122
JMF 0:24d3eb812fd4 123 /* Check the parameters */
JMF 0:24d3eb812fd4 124 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(pxCsmaInit->xCsmaPersistentMode));
JMF 0:24d3eb812fd4 125 s_assert_param(IS_CCA_PERIOD(pxCsmaInit->xMultiplierTbit));
JMF 0:24d3eb812fd4 126 s_assert_param(IS_CSMA_LENGTH(pxCsmaInit->xCcaLength));
JMF 0:24d3eb812fd4 127 s_assert_param(IS_BU_COUNTER_SEED(pxCsmaInit->nBuCounterSeed));
JMF 0:24d3eb812fd4 128 s_assert_param(IS_BU_PRESCALER(pxCsmaInit->cBuPrescaler));
JMF 0:24d3eb812fd4 129 s_assert_param(IS_CMAX_NB(pxCsmaInit->cMaxNb));
JMF 0:24d3eb812fd4 130
JMF 0:24d3eb812fd4 131 /* CSMA BU counter seed (MSB) config */
JMF 0:24d3eb812fd4 132 tempRegValue[0] = (uint8_t)(pxCsmaInit->nBuCounterSeed >> 8);
JMF 0:24d3eb812fd4 133
JMF 0:24d3eb812fd4 134 /* CSMA BU counter seed (LSB) config */
JMF 0:24d3eb812fd4 135 tempRegValue[1] = (uint8_t) pxCsmaInit->nBuCounterSeed;
JMF 0:24d3eb812fd4 136
JMF 0:24d3eb812fd4 137 /* CSMA BU prescaler config and CCA period config */
JMF 0:24d3eb812fd4 138 tempRegValue[2] = (pxCsmaInit->cBuPrescaler << 2) | pxCsmaInit->xMultiplierTbit;
JMF 0:24d3eb812fd4 139
JMF 0:24d3eb812fd4 140 /* CSMA CCA length config and max number of back-off */
JMF 0:24d3eb812fd4 141 tempRegValue[3] = (pxCsmaInit->xCcaLength | pxCsmaInit->cMaxNb);
JMF 0:24d3eb812fd4 142
JMF 0:24d3eb812fd4 143 /* Reads the PROTOCOL1_BASE register value, to write the SEED_RELOAD and CSMA_PERS_ON fields */
JMF 0:24d3eb812fd4 144 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
JMF 0:24d3eb812fd4 145
JMF 0:24d3eb812fd4 146 /* Writes the new value for persistent mode */
JMF 0:24d3eb812fd4 147 if(pxCsmaInit->xCsmaPersistentMode==S_ENABLE)
JMF 0:24d3eb812fd4 148 {
JMF 0:24d3eb812fd4 149 tempRegValue[4] |= PROTOCOL1_CSMA_PERS_ON_MASK;
JMF 0:24d3eb812fd4 150 }
JMF 0:24d3eb812fd4 151 else
JMF 0:24d3eb812fd4 152 {
JMF 0:24d3eb812fd4 153 tempRegValue[4] &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
JMF 0:24d3eb812fd4 154 }
JMF 0:24d3eb812fd4 155
JMF 0:24d3eb812fd4 156 /* Writes PROTOCOL1_BASE register */
JMF 0:24d3eb812fd4 157 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
JMF 0:24d3eb812fd4 158
JMF 0:24d3eb812fd4 159 /* Writes CSMA_CONFIGx_BASE registers */
JMF 0:24d3eb812fd4 160 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
JMF 0:24d3eb812fd4 161
JMF 0:24d3eb812fd4 162 }
JMF 0:24d3eb812fd4 163
JMF 0:24d3eb812fd4 164
JMF 0:24d3eb812fd4 165 /**
JMF 0:24d3eb812fd4 166 * @brief Returns the fitted structure CsmaInit starting from the registers values.
JMF 0:24d3eb812fd4 167 * @param pxCsmaInit Csma structure to be fitted.
JMF 0:24d3eb812fd4 168 * This parameter is a pointer to @ref CsmaInit.
JMF 0:24d3eb812fd4 169 * @retval None.
JMF 0:24d3eb812fd4 170 */
JMF 0:24d3eb812fd4 171 void SpiritCsmaGetInfo(CsmaInit* pxCsmaInit)
JMF 0:24d3eb812fd4 172 {
JMF 0:24d3eb812fd4 173 uint8_t tempRegValue[5];
JMF 0:24d3eb812fd4 174
JMF 0:24d3eb812fd4 175 /* Reads PROTOCOL1_BASE register */
JMF 0:24d3eb812fd4 176 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue[4]);
JMF 0:24d3eb812fd4 177
JMF 0:24d3eb812fd4 178 /* Reads CSMA_CONFIGx_BASE registers */
JMF 0:24d3eb812fd4 179 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 4, tempRegValue);
JMF 0:24d3eb812fd4 180
JMF 0:24d3eb812fd4 181 /* Reads the bu counter seed */
JMF 0:24d3eb812fd4 182 pxCsmaInit->nBuCounterSeed = (uint16_t)tempRegValue[1] | ((uint16_t)(tempRegValue[0] << 8));
JMF 0:24d3eb812fd4 183
JMF 0:24d3eb812fd4 184 /* Reads the bu prescaler */
JMF 0:24d3eb812fd4 185 pxCsmaInit->cBuPrescaler = tempRegValue[2]>>2;
JMF 0:24d3eb812fd4 186
JMF 0:24d3eb812fd4 187 /* Reads the Cca period */
JMF 0:24d3eb812fd4 188 pxCsmaInit->xMultiplierTbit = (CcaPeriod)(tempRegValue[2] & 0x03);
JMF 0:24d3eb812fd4 189
JMF 0:24d3eb812fd4 190 /* Reads the Cca length */
JMF 0:24d3eb812fd4 191 pxCsmaInit->xCcaLength = (CsmaLength)(tempRegValue[3]&0xF0);
JMF 0:24d3eb812fd4 192
JMF 0:24d3eb812fd4 193 /* Reads the max number of back off */
JMF 0:24d3eb812fd4 194 pxCsmaInit->cMaxNb = tempRegValue[3] & 0x07;
JMF 0:24d3eb812fd4 195
JMF 0:24d3eb812fd4 196 /* Reads the persistent mode enable bit */
JMF 0:24d3eb812fd4 197 pxCsmaInit->xCsmaPersistentMode = (SpiritFunctionalState)((tempRegValue[4]>>1) & 0x01);
JMF 0:24d3eb812fd4 198
JMF 0:24d3eb812fd4 199 }
JMF 0:24d3eb812fd4 200
JMF 0:24d3eb812fd4 201
JMF 0:24d3eb812fd4 202 /**
JMF 0:24d3eb812fd4 203 * @brief Enables or Disables the CSMA.
JMF 0:24d3eb812fd4 204 * @param xNewState the state of the CSMA mode.
JMF 0:24d3eb812fd4 205 * This parameter can be: S_ENABLE or S_DISABLE.
JMF 0:24d3eb812fd4 206 * @retval None.
JMF 0:24d3eb812fd4 207 */
JMF 0:24d3eb812fd4 208 void SpiritCsma(SpiritFunctionalState xNewState)
JMF 0:24d3eb812fd4 209 {
JMF 0:24d3eb812fd4 210 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 211
JMF 0:24d3eb812fd4 212 /* Check the parameters */
JMF 0:24d3eb812fd4 213 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
JMF 0:24d3eb812fd4 214
JMF 0:24d3eb812fd4 215 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 216 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 217
JMF 0:24d3eb812fd4 218 /* Sets or resets the CSMA enable bit */
JMF 0:24d3eb812fd4 219 if(xNewState==S_ENABLE)
JMF 0:24d3eb812fd4 220 {
JMF 0:24d3eb812fd4 221 tempRegValue |= PROTOCOL1_CSMA_ON_MASK;
JMF 0:24d3eb812fd4 222 }
JMF 0:24d3eb812fd4 223 else
JMF 0:24d3eb812fd4 224 {
JMF 0:24d3eb812fd4 225 tempRegValue &= ~PROTOCOL1_CSMA_ON_MASK;
JMF 0:24d3eb812fd4 226 }
JMF 0:24d3eb812fd4 227
JMF 0:24d3eb812fd4 228 /* Writes the new value on the PROTOCOL1 register */
JMF 0:24d3eb812fd4 229 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 230
JMF 0:24d3eb812fd4 231 }
JMF 0:24d3eb812fd4 232
JMF 0:24d3eb812fd4 233 /**
JMF 0:24d3eb812fd4 234 * @brief Gets the CSMA mode. Says if it is enabled or disabled.
JMF 0:24d3eb812fd4 235 * @param None.
JMF 0:24d3eb812fd4 236 * @retval SpiritFunctionalState: CSMA mode.
JMF 0:24d3eb812fd4 237 */
JMF 0:24d3eb812fd4 238 SpiritFunctionalState SpiritCsmaGetCsma(void)
JMF 0:24d3eb812fd4 239 {
JMF 0:24d3eb812fd4 240 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 241
JMF 0:24d3eb812fd4 242 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 243 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 244
JMF 0:24d3eb812fd4 245 /* Return if set or reset */
JMF 0:24d3eb812fd4 246 if(tempRegValue & PROTOCOL1_CSMA_ON_MASK)
JMF 0:24d3eb812fd4 247 {
JMF 0:24d3eb812fd4 248 return S_ENABLE;
JMF 0:24d3eb812fd4 249 }
JMF 0:24d3eb812fd4 250 else
JMF 0:24d3eb812fd4 251 {
JMF 0:24d3eb812fd4 252 return S_DISABLE;
JMF 0:24d3eb812fd4 253 }
JMF 0:24d3eb812fd4 254
JMF 0:24d3eb812fd4 255 }
JMF 0:24d3eb812fd4 256
JMF 0:24d3eb812fd4 257 /**
JMF 0:24d3eb812fd4 258 * @brief Enables or Disables the persistent CSMA mode.
JMF 0:24d3eb812fd4 259 * @param xNewState the state of the persistent CSMA mode.
JMF 0:24d3eb812fd4 260 * This parameter can be: S_ENABLE or S_DISABLE.
JMF 0:24d3eb812fd4 261 * @retval None.
JMF 0:24d3eb812fd4 262 */
JMF 0:24d3eb812fd4 263 void SpiritCsmaPersistentMode(SpiritFunctionalState xNewState)
JMF 0:24d3eb812fd4 264 {
JMF 0:24d3eb812fd4 265 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 266
JMF 0:24d3eb812fd4 267 /* Check the parameters */
JMF 0:24d3eb812fd4 268 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
JMF 0:24d3eb812fd4 269
JMF 0:24d3eb812fd4 270 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 271 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 272
JMF 0:24d3eb812fd4 273 /* Enables/disables the CSMA persistent mode */
JMF 0:24d3eb812fd4 274 if(xNewState==S_ENABLE)
JMF 0:24d3eb812fd4 275 {
JMF 0:24d3eb812fd4 276 tempRegValue |= PROTOCOL1_CSMA_PERS_ON_MASK;
JMF 0:24d3eb812fd4 277 }
JMF 0:24d3eb812fd4 278 else
JMF 0:24d3eb812fd4 279 {
JMF 0:24d3eb812fd4 280 tempRegValue &= ~PROTOCOL1_CSMA_PERS_ON_MASK;
JMF 0:24d3eb812fd4 281 }
JMF 0:24d3eb812fd4 282
JMF 0:24d3eb812fd4 283 /* Writes the new vaue on the PROTOCOL1 register */
JMF 0:24d3eb812fd4 284 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 285
JMF 0:24d3eb812fd4 286 }
JMF 0:24d3eb812fd4 287
JMF 0:24d3eb812fd4 288
JMF 0:24d3eb812fd4 289 /**
JMF 0:24d3eb812fd4 290 * @brief Gets the persistent CSMA mode.
JMF 0:24d3eb812fd4 291 * @param None.
JMF 0:24d3eb812fd4 292 * @retval SpiritFunctionalState: CSMA persistent mode.
JMF 0:24d3eb812fd4 293 */
JMF 0:24d3eb812fd4 294 SpiritFunctionalState SpiritCsmaGetPersistentMode(void)
JMF 0:24d3eb812fd4 295 {
JMF 0:24d3eb812fd4 296 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 297
JMF 0:24d3eb812fd4 298 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 299 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 300
JMF 0:24d3eb812fd4 301 /* Return if set or reset */
JMF 0:24d3eb812fd4 302 if(tempRegValue & PROTOCOL1_CSMA_PERS_ON_MASK)
JMF 0:24d3eb812fd4 303 {
JMF 0:24d3eb812fd4 304 return S_ENABLE;
JMF 0:24d3eb812fd4 305 }
JMF 0:24d3eb812fd4 306 else
JMF 0:24d3eb812fd4 307 {
JMF 0:24d3eb812fd4 308 return S_DISABLE;
JMF 0:24d3eb812fd4 309 }
JMF 0:24d3eb812fd4 310
JMF 0:24d3eb812fd4 311 }
JMF 0:24d3eb812fd4 312
JMF 0:24d3eb812fd4 313
JMF 0:24d3eb812fd4 314 /**
JMF 0:24d3eb812fd4 315 * @brief Enables or Disables the seed reload mode (if enabled it reloads the back-off generator seed using the value written in the BU_COUNTER_SEED register).
JMF 0:24d3eb812fd4 316 * @param xNewState the state of the seed reload mode.
JMF 0:24d3eb812fd4 317 * This parameter can be: S_ENABLE or S_DISABLE.
JMF 0:24d3eb812fd4 318 * @retval None.
JMF 0:24d3eb812fd4 319 */
JMF 0:24d3eb812fd4 320 void SpiritCsmaSeedReloadMode(SpiritFunctionalState xNewState)
JMF 0:24d3eb812fd4 321 {
JMF 0:24d3eb812fd4 322 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 323
JMF 0:24d3eb812fd4 324 /* Check the parameters */
JMF 0:24d3eb812fd4 325 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
JMF 0:24d3eb812fd4 326
JMF 0:24d3eb812fd4 327 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 328 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 329
JMF 0:24d3eb812fd4 330 /* Enables/disables the seed reload mode */
JMF 0:24d3eb812fd4 331 if(xNewState==S_ENABLE)
JMF 0:24d3eb812fd4 332 {
JMF 0:24d3eb812fd4 333 tempRegValue |= PROTOCOL1_SEED_RELOAD_MASK;
JMF 0:24d3eb812fd4 334 }
JMF 0:24d3eb812fd4 335 else
JMF 0:24d3eb812fd4 336 {
JMF 0:24d3eb812fd4 337 tempRegValue &= ~PROTOCOL1_SEED_RELOAD_MASK;
JMF 0:24d3eb812fd4 338 }
JMF 0:24d3eb812fd4 339
JMF 0:24d3eb812fd4 340 /* Writes the new value on the PROTOCOL1 register */
JMF 0:24d3eb812fd4 341 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 342
JMF 0:24d3eb812fd4 343 }
JMF 0:24d3eb812fd4 344
JMF 0:24d3eb812fd4 345
JMF 0:24d3eb812fd4 346 /**
JMF 0:24d3eb812fd4 347 * @brief Gets the seed reload mode.
JMF 0:24d3eb812fd4 348 * @param None.
JMF 0:24d3eb812fd4 349 * @retval SpiritFunctionalState: CSMA seed reload mode.
JMF 0:24d3eb812fd4 350 */
JMF 0:24d3eb812fd4 351 SpiritFunctionalState SpiritCsmaGetSeedReloadMode(void)
JMF 0:24d3eb812fd4 352 {
JMF 0:24d3eb812fd4 353 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 354
JMF 0:24d3eb812fd4 355 /* Reads the PROTOCOL1 register value */
JMF 0:24d3eb812fd4 356 g_xStatus = SpiritSpiReadRegisters(PROTOCOL1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 357
JMF 0:24d3eb812fd4 358 /* Return if set or reset */
JMF 0:24d3eb812fd4 359 if(tempRegValue & PROTOCOL1_SEED_RELOAD_MASK)
JMF 0:24d3eb812fd4 360 {
JMF 0:24d3eb812fd4 361 return S_ENABLE;
JMF 0:24d3eb812fd4 362 }
JMF 0:24d3eb812fd4 363 else
JMF 0:24d3eb812fd4 364 {
JMF 0:24d3eb812fd4 365 return S_DISABLE;
JMF 0:24d3eb812fd4 366 }
JMF 0:24d3eb812fd4 367 }
JMF 0:24d3eb812fd4 368
JMF 0:24d3eb812fd4 369
JMF 0:24d3eb812fd4 370 /**
JMF 0:24d3eb812fd4 371 * @brief Sets the BU counter seed (BU_COUNTER_SEED register). The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
JMF 0:24d3eb812fd4 372 * @param nBuCounterSeed seed of the random number generator used to apply the BBE algorithm.
JMF 0:24d3eb812fd4 373 * This parameter is an uint16_t.
JMF 0:24d3eb812fd4 374 * @retval None.
JMF 0:24d3eb812fd4 375 */
JMF 0:24d3eb812fd4 376 void SpiritCsmaSetBuCounterSeed(uint16_t nBuCounterSeed)
JMF 0:24d3eb812fd4 377 {
JMF 0:24d3eb812fd4 378 uint8_t tempRegValue[2];
JMF 0:24d3eb812fd4 379
JMF 0:24d3eb812fd4 380 /* Check parameters */
JMF 0:24d3eb812fd4 381 s_assert_param(IS_BU_COUNTER_SEED(nBuCounterSeed));
JMF 0:24d3eb812fd4 382
JMF 0:24d3eb812fd4 383 /* Build value (MSB)*/
JMF 0:24d3eb812fd4 384 tempRegValue[0]=(uint8_t)(nBuCounterSeed>>8);
JMF 0:24d3eb812fd4 385 /* Build value (LSB) */
JMF 0:24d3eb812fd4 386 tempRegValue[1]=(uint8_t)nBuCounterSeed;
JMF 0:24d3eb812fd4 387
JMF 0:24d3eb812fd4 388 /* Writes the CSMA_CONFIG3 registers */
JMF 0:24d3eb812fd4 389 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
JMF 0:24d3eb812fd4 390
JMF 0:24d3eb812fd4 391 }
JMF 0:24d3eb812fd4 392
JMF 0:24d3eb812fd4 393 /**
JMF 0:24d3eb812fd4 394 * @brief Returns the BU counter seed (BU_COUNTER_SEED register).
JMF 0:24d3eb812fd4 395 * @param None.
JMF 0:24d3eb812fd4 396 * @retval uint16_t Seed of the random number generator used to apply the BBE algorithm.
JMF 0:24d3eb812fd4 397 */
JMF 0:24d3eb812fd4 398 uint16_t SpiritCsmaGetBuCounterSeed(void)
JMF 0:24d3eb812fd4 399 {
JMF 0:24d3eb812fd4 400 uint8_t tempRegValue[2];
JMF 0:24d3eb812fd4 401
JMF 0:24d3eb812fd4 402 /* Reads the CSMA_CONFIGx registers value */
JMF 0:24d3eb812fd4 403 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG3_BASE, 2, tempRegValue);
JMF 0:24d3eb812fd4 404
JMF 0:24d3eb812fd4 405 /* Build the counter seed and return it */
JMF 0:24d3eb812fd4 406 return ((uint16_t)tempRegValue[1] + (((uint16_t)tempRegValue[0])<<8));
JMF 0:24d3eb812fd4 407
JMF 0:24d3eb812fd4 408 }
JMF 0:24d3eb812fd4 409
JMF 0:24d3eb812fd4 410
JMF 0:24d3eb812fd4 411 /**
JMF 0:24d3eb812fd4 412 * @brief Sets the BU prescaler. The CSMA back off time is given by the formula: BO = rand(2^NB)*BU.
JMF 0:24d3eb812fd4 413 * @param cBuPrescaler used to program the back-off unit BU.
JMF 0:24d3eb812fd4 414 * This parameter is an uint8_t.
JMF 0:24d3eb812fd4 415 * @retval None.
JMF 0:24d3eb812fd4 416 */
JMF 0:24d3eb812fd4 417 void SpiritCsmaSetBuPrescaler(uint8_t cBuPrescaler)
JMF 0:24d3eb812fd4 418 {
JMF 0:24d3eb812fd4 419 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 420
JMF 0:24d3eb812fd4 421 /* Check parameters */
JMF 0:24d3eb812fd4 422 s_assert_param(IS_BU_PRESCALER(cBuPrescaler));
JMF 0:24d3eb812fd4 423
JMF 0:24d3eb812fd4 424 /* Reads the CSMA_CONFIG1 register value */
JMF 0:24d3eb812fd4 425 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 426
JMF 0:24d3eb812fd4 427 /* Build the new value for the BU prescaler */
JMF 0:24d3eb812fd4 428 tempRegValue &= 0x03;
JMF 0:24d3eb812fd4 429 tempRegValue |= (cBuPrescaler<<2);
JMF 0:24d3eb812fd4 430
JMF 0:24d3eb812fd4 431 /* Writes the new value on the CSMA_CONFIG1_BASE register */
JMF 0:24d3eb812fd4 432 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_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 Returns the BU prescaler.
JMF 0:24d3eb812fd4 439 * @param None.
JMF 0:24d3eb812fd4 440 * @retval uint8_t Value back-off unit (BU).
JMF 0:24d3eb812fd4 441 */
JMF 0:24d3eb812fd4 442 uint8_t SpiritCsmaGetBuPrescaler(void)
JMF 0:24d3eb812fd4 443 {
JMF 0:24d3eb812fd4 444 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 445
JMF 0:24d3eb812fd4 446 /* Reads the CSMA_CONFIG1 register value */
JMF 0:24d3eb812fd4 447 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 448
JMF 0:24d3eb812fd4 449 /* Build and return the BU prescaler value */
JMF 0:24d3eb812fd4 450 return (tempRegValue >> 2);
JMF 0:24d3eb812fd4 451
JMF 0:24d3eb812fd4 452 }
JMF 0:24d3eb812fd4 453
JMF 0:24d3eb812fd4 454
JMF 0:24d3eb812fd4 455 /**
JMF 0:24d3eb812fd4 456 * @brief Sets the CCA period.
JMF 0:24d3eb812fd4 457 * @param xMultiplierTbit value of CCA period to store.
JMF 0:24d3eb812fd4 458 * This parameter can be a value of @ref CcaPeriod.
JMF 0:24d3eb812fd4 459 * @retval None.
JMF 0:24d3eb812fd4 460 */
JMF 0:24d3eb812fd4 461 void SpiritCsmaSetCcaPeriod(CcaPeriod xMultiplierTbit)
JMF 0:24d3eb812fd4 462 {
JMF 0:24d3eb812fd4 463 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 464
JMF 0:24d3eb812fd4 465 /* Check the parameters */
JMF 0:24d3eb812fd4 466 s_assert_param(IS_CCA_PERIOD(xMultiplierTbit));
JMF 0:24d3eb812fd4 467
JMF 0:24d3eb812fd4 468 /* Reads the CSMA_CONFIG1 register value */
JMF 0:24d3eb812fd4 469 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 470
JMF 0:24d3eb812fd4 471 /* Build the new value setting the the CCA period */
JMF 0:24d3eb812fd4 472 tempRegValue &= 0xFC;
JMF 0:24d3eb812fd4 473 tempRegValue |= xMultiplierTbit;
JMF 0:24d3eb812fd4 474
JMF 0:24d3eb812fd4 475 /* Writes the new value on the CSMA_CONFIG1 register */
JMF 0:24d3eb812fd4 476 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 477
JMF 0:24d3eb812fd4 478 }
JMF 0:24d3eb812fd4 479
JMF 0:24d3eb812fd4 480
JMF 0:24d3eb812fd4 481 /**
JMF 0:24d3eb812fd4 482 * @brief Returns the CCA period.
JMF 0:24d3eb812fd4 483 * @param None.
JMF 0:24d3eb812fd4 484 * @retval CcaPeriod CCA period.
JMF 0:24d3eb812fd4 485 */
JMF 0:24d3eb812fd4 486 CcaPeriod SpiritCsmaGetCcaPeriod(void)
JMF 0:24d3eb812fd4 487 {
JMF 0:24d3eb812fd4 488 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 489
JMF 0:24d3eb812fd4 490 /* Reads the CSMA_CONFIG1 register value */
JMF 0:24d3eb812fd4 491 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG1_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 492
JMF 0:24d3eb812fd4 493 /* Build and return the CCA period value */
JMF 0:24d3eb812fd4 494 return (CcaPeriod)(tempRegValue & 0x03);
JMF 0:24d3eb812fd4 495
JMF 0:24d3eb812fd4 496 }
JMF 0:24d3eb812fd4 497
JMF 0:24d3eb812fd4 498
JMF 0:24d3eb812fd4 499 /**
JMF 0:24d3eb812fd4 500 * @brief Sets the CCA length.
JMF 0:24d3eb812fd4 501 * @param xCcaLength the CCA length (a value between 1 and 15 that multiplies the CCA period).
JMF 0:24d3eb812fd4 502 * This parameter can be any value of @ref CsmaLength.
JMF 0:24d3eb812fd4 503 * @retval None.
JMF 0:24d3eb812fd4 504 */
JMF 0:24d3eb812fd4 505 void SpiritCsmaSetCcaLength(CsmaLength xCcaLength)
JMF 0:24d3eb812fd4 506 {
JMF 0:24d3eb812fd4 507 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 508
JMF 0:24d3eb812fd4 509 /* Check the parameters */
JMF 0:24d3eb812fd4 510 s_assert_param(IS_CSMA_LENGTH(xCcaLength));
JMF 0:24d3eb812fd4 511
JMF 0:24d3eb812fd4 512 /* Reads the CSMA_CONFIG0 register value */
JMF 0:24d3eb812fd4 513 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 514
JMF 0:24d3eb812fd4 515 /* Build the value of CCA length to be set */
JMF 0:24d3eb812fd4 516 tempRegValue &= 0x0F;
JMF 0:24d3eb812fd4 517 tempRegValue |= xCcaLength;
JMF 0:24d3eb812fd4 518
JMF 0:24d3eb812fd4 519 /* Writes the new value on the CSMA_CONFIG0 register */
JMF 0:24d3eb812fd4 520 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 521
JMF 0:24d3eb812fd4 522 }
JMF 0:24d3eb812fd4 523
JMF 0:24d3eb812fd4 524
JMF 0:24d3eb812fd4 525 /**
JMF 0:24d3eb812fd4 526 * @brief Returns the CCA length.
JMF 0:24d3eb812fd4 527 * @param None.
JMF 0:24d3eb812fd4 528 * @retval uint8_t CCA length.
JMF 0:24d3eb812fd4 529 */
JMF 0:24d3eb812fd4 530 uint8_t SpiritCsmaGetCcaLength(void)
JMF 0:24d3eb812fd4 531 {
JMF 0:24d3eb812fd4 532 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 533
JMF 0:24d3eb812fd4 534 /* Reads the CSMA_CONFIG0 register value */
JMF 0:24d3eb812fd4 535 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 536
JMF 0:24d3eb812fd4 537 /* Build and return the CCA length */
JMF 0:24d3eb812fd4 538 return tempRegValue >> 4;
JMF 0:24d3eb812fd4 539
JMF 0:24d3eb812fd4 540 }
JMF 0:24d3eb812fd4 541
JMF 0:24d3eb812fd4 542
JMF 0:24d3eb812fd4 543 /**
JMF 0:24d3eb812fd4 544 * @brief Sets the max number of back-off. If reached Spirit stops the transmission.
JMF 0:24d3eb812fd4 545 * @param cMaxNb the max number of back-off.
JMF 0:24d3eb812fd4 546 * This parameter is an uint8_t.
JMF 0:24d3eb812fd4 547 * @retval None.
JMF 0:24d3eb812fd4 548 */
JMF 0:24d3eb812fd4 549 void SpiritCsmaSetMaxNumberBackoff(uint8_t cMaxNb)
JMF 0:24d3eb812fd4 550 {
JMF 0:24d3eb812fd4 551 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 552
JMF 0:24d3eb812fd4 553 /* Check the parameters */
JMF 0:24d3eb812fd4 554 s_assert_param(IS_CMAX_NB(cMaxNb));
JMF 0:24d3eb812fd4 555
JMF 0:24d3eb812fd4 556 /* Reads the CSMA_CONFIG0 register value */
JMF 0:24d3eb812fd4 557 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 558
JMF 0:24d3eb812fd4 559 /* Build the value of max back off to be set */
JMF 0:24d3eb812fd4 560 tempRegValue &= 0xF8;
JMF 0:24d3eb812fd4 561 tempRegValue |= cMaxNb;
JMF 0:24d3eb812fd4 562
JMF 0:24d3eb812fd4 563 /* Writes the new value on the CSMA_CONFIG0 register */
JMF 0:24d3eb812fd4 564 g_xStatus = SpiritSpiWriteRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 565 }
JMF 0:24d3eb812fd4 566
JMF 0:24d3eb812fd4 567 /**
JMF 0:24d3eb812fd4 568 * @brief Returns the max number of back-off.
JMF 0:24d3eb812fd4 569 * @param None.
JMF 0:24d3eb812fd4 570 * @retval uint8_t Max number of back-off.
JMF 0:24d3eb812fd4 571 */
JMF 0:24d3eb812fd4 572 uint8_t SpiritCsmaGetMaxNumberBackoff(void)
JMF 0:24d3eb812fd4 573 {
JMF 0:24d3eb812fd4 574 uint8_t tempRegValue;
JMF 0:24d3eb812fd4 575
JMF 0:24d3eb812fd4 576 /* Reads the CSMA_CONFIG0 register value */
JMF 0:24d3eb812fd4 577 g_xStatus = SpiritSpiReadRegisters(CSMA_CONFIG0_BASE, 1, &tempRegValue);
JMF 0:24d3eb812fd4 578
JMF 0:24d3eb812fd4 579 /* Build and return the max number of back-off */
JMF 0:24d3eb812fd4 580 return (tempRegValue & 0x07);
JMF 0:24d3eb812fd4 581
JMF 0:24d3eb812fd4 582 }
JMF 0:24d3eb812fd4 583
JMF 0:24d3eb812fd4 584
JMF 0:24d3eb812fd4 585 /**
JMF 0:24d3eb812fd4 586 *@}
JMF 0:24d3eb812fd4 587 */
JMF 0:24d3eb812fd4 588
JMF 0:24d3eb812fd4 589 /**
JMF 0:24d3eb812fd4 590 *@}
JMF 0:24d3eb812fd4 591 */
JMF 0:24d3eb812fd4 592
JMF 0:24d3eb812fd4 593
JMF 0:24d3eb812fd4 594 /**
JMF 0:24d3eb812fd4 595 *@}
JMF 0:24d3eb812fd4 596 */
JMF 0:24d3eb812fd4 597
JMF 0:24d3eb812fd4 598
JMF 0:24d3eb812fd4 599
JMF 0:24d3eb812fd4 600 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/