HelloWorld_IDS01A4 mbed application for Spirit1 P2P demo.

Dependencies:   mbed

Fork of HelloWorld_IDS01A5_Program by rosarium pila

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

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

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosarium 0:2ddc0583bcec 1 /**
rosarium 0:2ddc0583bcec 2 ******************************************************************************
rosarium 0:2ddc0583bcec 3 * @file SPIRIT_Qi.c
rosarium 0:2ddc0583bcec 4 * @author VMA division - AMS
rosarium 0:2ddc0583bcec 5 * @version 3.2.2
rosarium 0:2ddc0583bcec 6 * @date 08-July-2015
rosarium 0:2ddc0583bcec 7 * @brief Configuration and management of SPIRIT QI.
rosarium 0:2ddc0583bcec 8 * @details
rosarium 0:2ddc0583bcec 9 *
rosarium 0:2ddc0583bcec 10 * @attention
rosarium 0:2ddc0583bcec 11 *
rosarium 0:2ddc0583bcec 12 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
rosarium 0:2ddc0583bcec 13 *
rosarium 0:2ddc0583bcec 14 * Redistribution and use in source and binary forms, with or without modification,
rosarium 0:2ddc0583bcec 15 * are permitted provided that the following conditions are met:
rosarium 0:2ddc0583bcec 16 * 1. Redistributions of source code must retain the above copyright notice,
rosarium 0:2ddc0583bcec 17 * this list of conditions and the following disclaimer.
rosarium 0:2ddc0583bcec 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
rosarium 0:2ddc0583bcec 19 * this list of conditions and the following disclaimer in the documentation
rosarium 0:2ddc0583bcec 20 * and/or other materials provided with the distribution.
rosarium 0:2ddc0583bcec 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
rosarium 0:2ddc0583bcec 22 * may be used to endorse or promote products derived from this software
rosarium 0:2ddc0583bcec 23 * without specific prior written permission.
rosarium 0:2ddc0583bcec 24 *
rosarium 0:2ddc0583bcec 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
rosarium 0:2ddc0583bcec 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
rosarium 0:2ddc0583bcec 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
rosarium 0:2ddc0583bcec 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
rosarium 0:2ddc0583bcec 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
rosarium 0:2ddc0583bcec 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
rosarium 0:2ddc0583bcec 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
rosarium 0:2ddc0583bcec 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
rosarium 0:2ddc0583bcec 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
rosarium 0:2ddc0583bcec 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
rosarium 0:2ddc0583bcec 35 *
rosarium 0:2ddc0583bcec 36 ******************************************************************************
rosarium 0:2ddc0583bcec 37 */
rosarium 0:2ddc0583bcec 38
rosarium 0:2ddc0583bcec 39 /* Includes ------------------------------------------------------------------*/
rosarium 0:2ddc0583bcec 40 #include "SPIRIT_Qi.h"
rosarium 0:2ddc0583bcec 41 #include "MCU_Interface.h"
rosarium 0:2ddc0583bcec 42
rosarium 0:2ddc0583bcec 43
rosarium 0:2ddc0583bcec 44
rosarium 0:2ddc0583bcec 45 /**
rosarium 0:2ddc0583bcec 46 * @addtogroup SPIRIT_Libraries
rosarium 0:2ddc0583bcec 47 * @{
rosarium 0:2ddc0583bcec 48 */
rosarium 0:2ddc0583bcec 49
rosarium 0:2ddc0583bcec 50
rosarium 0:2ddc0583bcec 51 /**
rosarium 0:2ddc0583bcec 52 * @addtogroup SPIRIT_Qi
rosarium 0:2ddc0583bcec 53 * @{
rosarium 0:2ddc0583bcec 54 */
rosarium 0:2ddc0583bcec 55
rosarium 0:2ddc0583bcec 56
rosarium 0:2ddc0583bcec 57 /**
rosarium 0:2ddc0583bcec 58 * @defgroup Qi_Private_TypesDefinitions QI Private Types Definitions
rosarium 0:2ddc0583bcec 59 * @{
rosarium 0:2ddc0583bcec 60 */
rosarium 0:2ddc0583bcec 61
rosarium 0:2ddc0583bcec 62 /**
rosarium 0:2ddc0583bcec 63 *@}
rosarium 0:2ddc0583bcec 64 */
rosarium 0:2ddc0583bcec 65
rosarium 0:2ddc0583bcec 66
rosarium 0:2ddc0583bcec 67 /**
rosarium 0:2ddc0583bcec 68 * @defgroup Qi_Private_Defines QI Private Defines
rosarium 0:2ddc0583bcec 69 * @{
rosarium 0:2ddc0583bcec 70 */
rosarium 0:2ddc0583bcec 71
rosarium 0:2ddc0583bcec 72 /**
rosarium 0:2ddc0583bcec 73 *@}
rosarium 0:2ddc0583bcec 74 */
rosarium 0:2ddc0583bcec 75
rosarium 0:2ddc0583bcec 76
rosarium 0:2ddc0583bcec 77 /**
rosarium 0:2ddc0583bcec 78 * @defgroup Qi_Private_Macros QI Private Macros
rosarium 0:2ddc0583bcec 79 * @{
rosarium 0:2ddc0583bcec 80 */
rosarium 0:2ddc0583bcec 81
rosarium 0:2ddc0583bcec 82 /**
rosarium 0:2ddc0583bcec 83 *@}
rosarium 0:2ddc0583bcec 84 */
rosarium 0:2ddc0583bcec 85
rosarium 0:2ddc0583bcec 86
rosarium 0:2ddc0583bcec 87 /**
rosarium 0:2ddc0583bcec 88 * @defgroup Qi_Private_Variables QI Private Variables
rosarium 0:2ddc0583bcec 89 * @{
rosarium 0:2ddc0583bcec 90 */
rosarium 0:2ddc0583bcec 91
rosarium 0:2ddc0583bcec 92 /**
rosarium 0:2ddc0583bcec 93 *@}
rosarium 0:2ddc0583bcec 94 */
rosarium 0:2ddc0583bcec 95
rosarium 0:2ddc0583bcec 96
rosarium 0:2ddc0583bcec 97 /**
rosarium 0:2ddc0583bcec 98 * @defgroup Qi_Private_FunctionPrototypes QI Private Function Prototypes
rosarium 0:2ddc0583bcec 99 * @{
rosarium 0:2ddc0583bcec 100 */
rosarium 0:2ddc0583bcec 101
rosarium 0:2ddc0583bcec 102 /**
rosarium 0:2ddc0583bcec 103 *@}
rosarium 0:2ddc0583bcec 104 */
rosarium 0:2ddc0583bcec 105
rosarium 0:2ddc0583bcec 106
rosarium 0:2ddc0583bcec 107 /**
rosarium 0:2ddc0583bcec 108 * @defgroup Qi_Private_Functions QI Private Functions
rosarium 0:2ddc0583bcec 109 * @{
rosarium 0:2ddc0583bcec 110 */
rosarium 0:2ddc0583bcec 111
rosarium 0:2ddc0583bcec 112 /**
rosarium 0:2ddc0583bcec 113 * @brief Enables/Disables the PQI Preamble Quality Indicator check. The running peak PQI is
rosarium 0:2ddc0583bcec 114 * compared to a threshold value and the preamble valid IRQ is asserted as soon as the threshold is passed.
rosarium 0:2ddc0583bcec 115 * @param xNewState new state for PQI check.
rosarium 0:2ddc0583bcec 116 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 117 * @retval None.
rosarium 0:2ddc0583bcec 118 */
rosarium 0:2ddc0583bcec 119 void SpiritQiPqiCheck(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 120 {
rosarium 0:2ddc0583bcec 121 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 122
rosarium 0:2ddc0583bcec 123 /* Check the parameters */
rosarium 0:2ddc0583bcec 124 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 125
rosarium 0:2ddc0583bcec 126 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 127 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 128
rosarium 0:2ddc0583bcec 129 /* Enables or disables the PQI Check bit on the QI_BASE register */
rosarium 0:2ddc0583bcec 130 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 131 {
rosarium 0:2ddc0583bcec 132 tempRegValue |= QI_PQI_MASK;
rosarium 0:2ddc0583bcec 133 }
rosarium 0:2ddc0583bcec 134 else
rosarium 0:2ddc0583bcec 135 {
rosarium 0:2ddc0583bcec 136 tempRegValue &= ~QI_PQI_MASK;
rosarium 0:2ddc0583bcec 137 }
rosarium 0:2ddc0583bcec 138
rosarium 0:2ddc0583bcec 139 /* Writes value on the QI register */
rosarium 0:2ddc0583bcec 140 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 141
rosarium 0:2ddc0583bcec 142 }
rosarium 0:2ddc0583bcec 143
rosarium 0:2ddc0583bcec 144
rosarium 0:2ddc0583bcec 145 /**
rosarium 0:2ddc0583bcec 146 * @brief Enables/Disables the Synchronization Quality Indicator check. The running peak SQI is
rosarium 0:2ddc0583bcec 147 * compared to a threshold value and the sync valid IRQ is asserted as soon as the threshold is passed.
rosarium 0:2ddc0583bcec 148 * @param xNewState new state for SQI check.
rosarium 0:2ddc0583bcec 149 * This parameter can be: S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 150 * @retval None.
rosarium 0:2ddc0583bcec 151 */
rosarium 0:2ddc0583bcec 152 void SpiritQiSqiCheck(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 153 {
rosarium 0:2ddc0583bcec 154 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 155
rosarium 0:2ddc0583bcec 156 /* Check the parameters */
rosarium 0:2ddc0583bcec 157 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 158
rosarium 0:2ddc0583bcec 159 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 160 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 161
rosarium 0:2ddc0583bcec 162 /* Enables or disables the SQI Check bit on the QI_BASE register */
rosarium 0:2ddc0583bcec 163 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 164 {
rosarium 0:2ddc0583bcec 165 tempRegValue |= QI_SQI_MASK;
rosarium 0:2ddc0583bcec 166 }
rosarium 0:2ddc0583bcec 167 else
rosarium 0:2ddc0583bcec 168 {
rosarium 0:2ddc0583bcec 169 tempRegValue &= ~QI_SQI_MASK;
rosarium 0:2ddc0583bcec 170 }
rosarium 0:2ddc0583bcec 171
rosarium 0:2ddc0583bcec 172 /* Writes value on the QI register */
rosarium 0:2ddc0583bcec 173 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 174
rosarium 0:2ddc0583bcec 175 }
rosarium 0:2ddc0583bcec 176
rosarium 0:2ddc0583bcec 177
rosarium 0:2ddc0583bcec 178 /**
rosarium 0:2ddc0583bcec 179 * @brief Sets the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
rosarium 0:2ddc0583bcec 180 * @param xPqiThr parameter of the formula above.
rosarium 0:2ddc0583bcec 181 * This variable is a @ref PqiThreshold.
rosarium 0:2ddc0583bcec 182 * @retval None.
rosarium 0:2ddc0583bcec 183 */
rosarium 0:2ddc0583bcec 184 void SpiritQiSetPqiThreshold(PqiThreshold xPqiThr)
rosarium 0:2ddc0583bcec 185 {
rosarium 0:2ddc0583bcec 186 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 187
rosarium 0:2ddc0583bcec 188 /* Check the parameters */
rosarium 0:2ddc0583bcec 189 s_assert_param(IS_PQI_THR(xPqiThr));
rosarium 0:2ddc0583bcec 190
rosarium 0:2ddc0583bcec 191 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 192 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 193
rosarium 0:2ddc0583bcec 194 /* Build the PQI threshold value to be written */
rosarium 0:2ddc0583bcec 195 tempRegValue &= 0xC3;
rosarium 0:2ddc0583bcec 196 tempRegValue |= ((uint8_t)xPqiThr);
rosarium 0:2ddc0583bcec 197
rosarium 0:2ddc0583bcec 198 /* Writes value on the QI register */
rosarium 0:2ddc0583bcec 199 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 200
rosarium 0:2ddc0583bcec 201 }
rosarium 0:2ddc0583bcec 202
rosarium 0:2ddc0583bcec 203
rosarium 0:2ddc0583bcec 204 /**
rosarium 0:2ddc0583bcec 205 * @brief Returns the PQI threshold. The preamble quality threshold is 4*PQI_TH (PQI_TH = 0..15).
rosarium 0:2ddc0583bcec 206 * @param None.
rosarium 0:2ddc0583bcec 207 * @retval PqiThreshold PQI threshold (PQI_TH of the formula above).
rosarium 0:2ddc0583bcec 208 */
rosarium 0:2ddc0583bcec 209 PqiThreshold SpiritQiGetPqiThreshold(void)
rosarium 0:2ddc0583bcec 210 {
rosarium 0:2ddc0583bcec 211 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 212
rosarium 0:2ddc0583bcec 213 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 214 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 215
rosarium 0:2ddc0583bcec 216 /* Rebuild and return the PQI threshold value */
rosarium 0:2ddc0583bcec 217 return (PqiThreshold)(tempRegValue & 0x3C);
rosarium 0:2ddc0583bcec 218
rosarium 0:2ddc0583bcec 219 }
rosarium 0:2ddc0583bcec 220
rosarium 0:2ddc0583bcec 221
rosarium 0:2ddc0583bcec 222 /**
rosarium 0:2ddc0583bcec 223 * @brief Sets the SQI threshold. The synchronization quality
rosarium 0:2ddc0583bcec 224 * threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3. When SQI_TH is 0 perfect match is required; when
rosarium 0:2ddc0583bcec 225 * SQI_TH = 1, 2, 3 then 1, 2, or 3 bit errors are respectively accepted. It is recommended that the SQI check is always
rosarium 0:2ddc0583bcec 226 * enabled.
rosarium 0:2ddc0583bcec 227 * @param xSqiThr parameter of the formula above.
rosarium 0:2ddc0583bcec 228 * This parameter is a @ref SqiThreshold.
rosarium 0:2ddc0583bcec 229 * @retval None.
rosarium 0:2ddc0583bcec 230 */
rosarium 0:2ddc0583bcec 231 void SpiritQiSetSqiThreshold(SqiThreshold xSqiThr)
rosarium 0:2ddc0583bcec 232 {
rosarium 0:2ddc0583bcec 233 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 234
rosarium 0:2ddc0583bcec 235 /* Check the parameters */
rosarium 0:2ddc0583bcec 236 s_assert_param(IS_SQI_THR(xSqiThr));
rosarium 0:2ddc0583bcec 237
rosarium 0:2ddc0583bcec 238 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 239 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 240
rosarium 0:2ddc0583bcec 241 /* Build the SQI threshold value to be written */
rosarium 0:2ddc0583bcec 242 tempRegValue &= 0x3F;
rosarium 0:2ddc0583bcec 243 tempRegValue |= ((uint8_t)xSqiThr);
rosarium 0:2ddc0583bcec 244
rosarium 0:2ddc0583bcec 245 /* Writes the new value on the QI register */
rosarium 0:2ddc0583bcec 246 g_xStatus = SpiritSpiWriteRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 247
rosarium 0:2ddc0583bcec 248 }
rosarium 0:2ddc0583bcec 249
rosarium 0:2ddc0583bcec 250
rosarium 0:2ddc0583bcec 251 /**
rosarium 0:2ddc0583bcec 252 * @brief Returns the SQI threshold. The synchronization quality threshold is equal to 8 * SYNC_LEN - 2 * SQI_TH with SQI_TH = 0..3.
rosarium 0:2ddc0583bcec 253 * @param None.
rosarium 0:2ddc0583bcec 254 * @retval SqiThreshold SQI threshold (SQI_TH of the formula above).
rosarium 0:2ddc0583bcec 255 */
rosarium 0:2ddc0583bcec 256 SqiThreshold SpiritQiGetSqiThreshold(void)
rosarium 0:2ddc0583bcec 257 {
rosarium 0:2ddc0583bcec 258 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 259
rosarium 0:2ddc0583bcec 260 /* Reads the QI register value */
rosarium 0:2ddc0583bcec 261 g_xStatus = SpiritSpiReadRegisters(QI_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 262
rosarium 0:2ddc0583bcec 263 /* Rebuild and return the SQI threshold value */
rosarium 0:2ddc0583bcec 264 return (SqiThreshold)(tempRegValue & 0xC0);
rosarium 0:2ddc0583bcec 265
rosarium 0:2ddc0583bcec 266 }
rosarium 0:2ddc0583bcec 267
rosarium 0:2ddc0583bcec 268
rosarium 0:2ddc0583bcec 269 /**
rosarium 0:2ddc0583bcec 270 * @brief Returns the PQI value.
rosarium 0:2ddc0583bcec 271 * @param None.
rosarium 0:2ddc0583bcec 272 * @retval uint8_t PQI value.
rosarium 0:2ddc0583bcec 273 */
rosarium 0:2ddc0583bcec 274 uint8_t SpiritQiGetPqi(void)
rosarium 0:2ddc0583bcec 275 {
rosarium 0:2ddc0583bcec 276 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 277
rosarium 0:2ddc0583bcec 278 /* Reads the LINK_QUALIF2 register value */
rosarium 0:2ddc0583bcec 279 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 280
rosarium 0:2ddc0583bcec 281 /* Returns the PQI value */
rosarium 0:2ddc0583bcec 282 return tempRegValue;
rosarium 0:2ddc0583bcec 283
rosarium 0:2ddc0583bcec 284 }
rosarium 0:2ddc0583bcec 285
rosarium 0:2ddc0583bcec 286
rosarium 0:2ddc0583bcec 287 /**
rosarium 0:2ddc0583bcec 288 * @brief Returns the SQI value.
rosarium 0:2ddc0583bcec 289 * @param None.
rosarium 0:2ddc0583bcec 290 * @retval uint8_t SQI value.
rosarium 0:2ddc0583bcec 291 */
rosarium 0:2ddc0583bcec 292 uint8_t SpiritQiGetSqi(void)
rosarium 0:2ddc0583bcec 293 {
rosarium 0:2ddc0583bcec 294 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 295
rosarium 0:2ddc0583bcec 296 /* Reads the register LINK_QUALIF1 value */
rosarium 0:2ddc0583bcec 297 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 298
rosarium 0:2ddc0583bcec 299 /* Rebuild and return the SQI value */
rosarium 0:2ddc0583bcec 300 return (tempRegValue & 0x7F);
rosarium 0:2ddc0583bcec 301
rosarium 0:2ddc0583bcec 302 }
rosarium 0:2ddc0583bcec 303
rosarium 0:2ddc0583bcec 304
rosarium 0:2ddc0583bcec 305 /**
rosarium 0:2ddc0583bcec 306 * @brief Returns the LQI value.
rosarium 0:2ddc0583bcec 307 * @param None.
rosarium 0:2ddc0583bcec 308 * @retval uint8_t LQI value.
rosarium 0:2ddc0583bcec 309 */
rosarium 0:2ddc0583bcec 310 uint8_t SpiritQiGetLqi(void)
rosarium 0:2ddc0583bcec 311 {
rosarium 0:2ddc0583bcec 312 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 313
rosarium 0:2ddc0583bcec 314 /* Reads the LINK_QUALIF0 register value */
rosarium 0:2ddc0583bcec 315 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF0_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 316
rosarium 0:2ddc0583bcec 317 /* Rebuild and return the LQI value */
rosarium 0:2ddc0583bcec 318 return ((tempRegValue & 0xF0)>> 4);
rosarium 0:2ddc0583bcec 319
rosarium 0:2ddc0583bcec 320 }
rosarium 0:2ddc0583bcec 321
rosarium 0:2ddc0583bcec 322
rosarium 0:2ddc0583bcec 323 /**
rosarium 0:2ddc0583bcec 324 * @brief Returns the CS status.
rosarium 0:2ddc0583bcec 325 * @param None.
rosarium 0:2ddc0583bcec 326 * @retval SpiritFlagStatus CS value (S_SET or S_RESET).
rosarium 0:2ddc0583bcec 327 */
rosarium 0:2ddc0583bcec 328 SpiritFlagStatus SpiritQiGetCs(void)
rosarium 0:2ddc0583bcec 329 {
rosarium 0:2ddc0583bcec 330 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 331
rosarium 0:2ddc0583bcec 332 /* Reads the LINK_QUALIF1 register value */
rosarium 0:2ddc0583bcec 333 g_xStatus = SpiritSpiReadRegisters(LINK_QUALIF1_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 334
rosarium 0:2ddc0583bcec 335 /* Rebuild and returns the CS status value */
rosarium 0:2ddc0583bcec 336 if((tempRegValue & 0x80) == 0)
rosarium 0:2ddc0583bcec 337 {
rosarium 0:2ddc0583bcec 338 return S_RESET;
rosarium 0:2ddc0583bcec 339 }
rosarium 0:2ddc0583bcec 340 else
rosarium 0:2ddc0583bcec 341 {
rosarium 0:2ddc0583bcec 342 return S_SET;
rosarium 0:2ddc0583bcec 343 }
rosarium 0:2ddc0583bcec 344
rosarium 0:2ddc0583bcec 345 }
rosarium 0:2ddc0583bcec 346
rosarium 0:2ddc0583bcec 347
rosarium 0:2ddc0583bcec 348 /**
rosarium 0:2ddc0583bcec 349 * @brief Returns the RSSI value. The measured power is reported in steps of half a dB from 0 to 255 and is offset in such a way that -120 dBm corresponds
rosarium 0:2ddc0583bcec 350 * to 20.
rosarium 0:2ddc0583bcec 351 * @param None.
rosarium 0:2ddc0583bcec 352 * @retval uint8_t RSSI value.
rosarium 0:2ddc0583bcec 353 */
rosarium 0:2ddc0583bcec 354 uint8_t SpiritQiGetRssi(void)
rosarium 0:2ddc0583bcec 355 {
rosarium 0:2ddc0583bcec 356 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 357
rosarium 0:2ddc0583bcec 358 /* Reads the RSSI_LEVEL register value */
rosarium 0:2ddc0583bcec 359 g_xStatus = SpiritSpiReadRegisters(RSSI_LEVEL_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 360
rosarium 0:2ddc0583bcec 361 /* Returns the RSSI value */
rosarium 0:2ddc0583bcec 362 return tempRegValue;
rosarium 0:2ddc0583bcec 363
rosarium 0:2ddc0583bcec 364 }
rosarium 0:2ddc0583bcec 365
rosarium 0:2ddc0583bcec 366
rosarium 0:2ddc0583bcec 367 /**
rosarium 0:2ddc0583bcec 368 * @brief Sets the RSSI threshold.
rosarium 0:2ddc0583bcec 369 * @param cRssiThr RSSI threshold reported in steps of half a dBm with a -130 dBm offset.
rosarium 0:2ddc0583bcec 370 * This parameter must be a uint8_t.
rosarium 0:2ddc0583bcec 371 * @retval None.
rosarium 0:2ddc0583bcec 372 */
rosarium 0:2ddc0583bcec 373 void SpiritQiSetRssiThreshold(uint8_t cRssiThr)
rosarium 0:2ddc0583bcec 374 {
rosarium 0:2ddc0583bcec 375 /* Writes the new value on the RSSI_TH register */
rosarium 0:2ddc0583bcec 376 g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &cRssiThr);
rosarium 0:2ddc0583bcec 377
rosarium 0:2ddc0583bcec 378 }
rosarium 0:2ddc0583bcec 379
rosarium 0:2ddc0583bcec 380
rosarium 0:2ddc0583bcec 381 /**
rosarium 0:2ddc0583bcec 382 * @brief Returns the RSSI threshold.
rosarium 0:2ddc0583bcec 383 * @param None.
rosarium 0:2ddc0583bcec 384 * @retval uint8_t RSSI threshold.
rosarium 0:2ddc0583bcec 385 */
rosarium 0:2ddc0583bcec 386 uint8_t SpiritQiGetRssiThreshold(void)
rosarium 0:2ddc0583bcec 387 {
rosarium 0:2ddc0583bcec 388 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 389
rosarium 0:2ddc0583bcec 390 /* Reads the RSSI_TH register value */
rosarium 0:2ddc0583bcec 391 g_xStatus = SpiritSpiReadRegisters(RSSI_TH_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 392
rosarium 0:2ddc0583bcec 393 /* Returns RSSI threshold */
rosarium 0:2ddc0583bcec 394 return tempRegValue;
rosarium 0:2ddc0583bcec 395
rosarium 0:2ddc0583bcec 396 }
rosarium 0:2ddc0583bcec 397
rosarium 0:2ddc0583bcec 398
rosarium 0:2ddc0583bcec 399 /**
rosarium 0:2ddc0583bcec 400 * @brief Computes the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5
rosarium 0:2ddc0583bcec 401 * @param nDbmValue RSSI threshold reported in dBm.
rosarium 0:2ddc0583bcec 402 * This parameter must be a sint16_t.
rosarium 0:2ddc0583bcec 403 * @retval uint8_t RSSI threshold corresponding to dBm value.
rosarium 0:2ddc0583bcec 404 */
rosarium 0:2ddc0583bcec 405 uint8_t SpiritQiComputeRssiThreshold(int nDbmValue)
rosarium 0:2ddc0583bcec 406 {
rosarium 0:2ddc0583bcec 407 /* Check the parameters */
rosarium 0:2ddc0583bcec 408 s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
rosarium 0:2ddc0583bcec 409
rosarium 0:2ddc0583bcec 410 /* Computes the RSSI threshold for register */
rosarium 0:2ddc0583bcec 411 return 2*(nDbmValue+130);
rosarium 0:2ddc0583bcec 412
rosarium 0:2ddc0583bcec 413 }
rosarium 0:2ddc0583bcec 414
rosarium 0:2ddc0583bcec 415 /**
rosarium 0:2ddc0583bcec 416 * @brief Sets the RSSI threshold from its dBm value according to the formula: (RSSI[Dbm] + 130)/0.5.
rosarium 0:2ddc0583bcec 417 * @param nDbmValue RSSI threshold reported in dBm.
rosarium 0:2ddc0583bcec 418 * This parameter must be a sint16_t.
rosarium 0:2ddc0583bcec 419 * @retval None.
rosarium 0:2ddc0583bcec 420 */
rosarium 0:2ddc0583bcec 421 void SpiritQiSetRssiThresholddBm(int nDbmValue)
rosarium 0:2ddc0583bcec 422 {
rosarium 0:2ddc0583bcec 423 uint8_t tempRegValue=2*(nDbmValue+130);
rosarium 0:2ddc0583bcec 424
rosarium 0:2ddc0583bcec 425 /* Check the parameters */
rosarium 0:2ddc0583bcec 426 s_assert_param(IS_RSSI_THR_DBM(nDbmValue));
rosarium 0:2ddc0583bcec 427
rosarium 0:2ddc0583bcec 428 /* Writes the new value on the RSSI_TH register */
rosarium 0:2ddc0583bcec 429 g_xStatus = SpiritSpiWriteRegisters(RSSI_TH_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 430
rosarium 0:2ddc0583bcec 431 }
rosarium 0:2ddc0583bcec 432
rosarium 0:2ddc0583bcec 433 /**
rosarium 0:2ddc0583bcec 434 * @brief Sets the RSSI filter gain. This parameter sets the bandwidth of a low pass IIR filter (RSSI_FLT register, allowed values 0..15), a
rosarium 0:2ddc0583bcec 435 * lower values gives a faster settling of the measurements but lower precision. The recommended value for such parameter is 14.
rosarium 0:2ddc0583bcec 436 * @param xRssiFg RSSI filter gain value.
rosarium 0:2ddc0583bcec 437 * This parameter can be any value of @ref RssiFilterGain.
rosarium 0:2ddc0583bcec 438 * @retval None.
rosarium 0:2ddc0583bcec 439 */
rosarium 0:2ddc0583bcec 440 void SpiritQiSetRssiFilterGain(RssiFilterGain xRssiFg)
rosarium 0:2ddc0583bcec 441 {
rosarium 0:2ddc0583bcec 442 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 443
rosarium 0:2ddc0583bcec 444 /* Check the parameters */
rosarium 0:2ddc0583bcec 445 s_assert_param(IS_RSSI_FILTER_GAIN(xRssiFg));
rosarium 0:2ddc0583bcec 446
rosarium 0:2ddc0583bcec 447 /* Reads the RSSI_FLT register */
rosarium 0:2ddc0583bcec 448 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 449
rosarium 0:2ddc0583bcec 450 /* Sets the specified filter gain */
rosarium 0:2ddc0583bcec 451 tempRegValue &= 0x0F;
rosarium 0:2ddc0583bcec 452 tempRegValue |= ((uint8_t)xRssiFg);
rosarium 0:2ddc0583bcec 453
rosarium 0:2ddc0583bcec 454 /* Writes the new value on the RSSI_FLT register */
rosarium 0:2ddc0583bcec 455 g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 456
rosarium 0:2ddc0583bcec 457 }
rosarium 0:2ddc0583bcec 458
rosarium 0:2ddc0583bcec 459
rosarium 0:2ddc0583bcec 460 /**
rosarium 0:2ddc0583bcec 461 * @brief Returns the RSSI filter gain.
rosarium 0:2ddc0583bcec 462 * @param None.
rosarium 0:2ddc0583bcec 463 * @retval RssiFilterGain RSSI filter gain.
rosarium 0:2ddc0583bcec 464 */
rosarium 0:2ddc0583bcec 465 RssiFilterGain SpiritQiGetRssiFilterGain(void)
rosarium 0:2ddc0583bcec 466 {
rosarium 0:2ddc0583bcec 467 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 468
rosarium 0:2ddc0583bcec 469 /* Reads the RSSI_FLT register */
rosarium 0:2ddc0583bcec 470 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 471
rosarium 0:2ddc0583bcec 472 /* Rebuild and returns the filter gain value */
rosarium 0:2ddc0583bcec 473 return (RssiFilterGain)(tempRegValue & 0xF0);
rosarium 0:2ddc0583bcec 474
rosarium 0:2ddc0583bcec 475 }
rosarium 0:2ddc0583bcec 476
rosarium 0:2ddc0583bcec 477
rosarium 0:2ddc0583bcec 478 /**
rosarium 0:2ddc0583bcec 479 * @brief Sets the CS Mode. When static carrier sensing is used (cs_mode = 0), the carrier sense signal is asserted when the measured RSSI is above the
rosarium 0:2ddc0583bcec 480 * value specified in the RSSI_TH register and is deasserted when the RSSI falls 3 dB below the same threshold.
rosarium 0:2ddc0583bcec 481 * When dynamic carrier sense is used (cs_mode = 1, 2, 3), the carrier sense signal is asserted if the signal is above the
rosarium 0:2ddc0583bcec 482 * threshold and a fast power increase of 6, 12 or 18 dB is detected; it is deasserted if a power fall of the same amplitude is
rosarium 0:2ddc0583bcec 483 * detected.
rosarium 0:2ddc0583bcec 484 * @param xCsMode CS mode selector.
rosarium 0:2ddc0583bcec 485 * This parameter can be any value of @ref CSMode.
rosarium 0:2ddc0583bcec 486 * @retval None.
rosarium 0:2ddc0583bcec 487 */
rosarium 0:2ddc0583bcec 488 void SpiritQiSetCsMode(CSMode xCsMode)
rosarium 0:2ddc0583bcec 489 {
rosarium 0:2ddc0583bcec 490 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 491
rosarium 0:2ddc0583bcec 492 /* Check the parameters */
rosarium 0:2ddc0583bcec 493 s_assert_param(IS_CS_MODE(xCsMode));
rosarium 0:2ddc0583bcec 494
rosarium 0:2ddc0583bcec 495 /* Reads the RSSI_FLT register */
rosarium 0:2ddc0583bcec 496 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 497
rosarium 0:2ddc0583bcec 498 /* Sets bit to select the CS mode */
rosarium 0:2ddc0583bcec 499 tempRegValue &= ~0x0C;
rosarium 0:2ddc0583bcec 500 tempRegValue |= ((uint8_t)xCsMode);
rosarium 0:2ddc0583bcec 501
rosarium 0:2ddc0583bcec 502 /* Writes the new value on the RSSI_FLT register */
rosarium 0:2ddc0583bcec 503 g_xStatus = SpiritSpiWriteRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 504
rosarium 0:2ddc0583bcec 505 }
rosarium 0:2ddc0583bcec 506
rosarium 0:2ddc0583bcec 507
rosarium 0:2ddc0583bcec 508 /**
rosarium 0:2ddc0583bcec 509 * @brief Returns the CS Mode.
rosarium 0:2ddc0583bcec 510 * @param None.
rosarium 0:2ddc0583bcec 511 * @retval CSMode CS mode.
rosarium 0:2ddc0583bcec 512 */
rosarium 0:2ddc0583bcec 513 CSMode SpiritQiGetCsMode(void)
rosarium 0:2ddc0583bcec 514 {
rosarium 0:2ddc0583bcec 515 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 516
rosarium 0:2ddc0583bcec 517 /* Reads the RSSI_FLT register */
rosarium 0:2ddc0583bcec 518 g_xStatus = SpiritSpiReadRegisters(RSSI_FLT_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 519
rosarium 0:2ddc0583bcec 520 /* Rebuild and returns the CS mode value */
rosarium 0:2ddc0583bcec 521 return (CSMode)(tempRegValue & 0x0C);
rosarium 0:2ddc0583bcec 522
rosarium 0:2ddc0583bcec 523 }
rosarium 0:2ddc0583bcec 524
rosarium 0:2ddc0583bcec 525 /**
rosarium 0:2ddc0583bcec 526 * @brief Enables/Disables the CS Timeout Mask. If enabled CS value contributes to timeout disabling.
rosarium 0:2ddc0583bcec 527 * @param xNewState new state for CS Timeout Mask.
rosarium 0:2ddc0583bcec 528 * This parameter can be S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 529 * @retval None.
rosarium 0:2ddc0583bcec 530 */
rosarium 0:2ddc0583bcec 531 void SpiritQiCsTimeoutMask(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 532 {
rosarium 0:2ddc0583bcec 533 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 534
rosarium 0:2ddc0583bcec 535 /* Check the parameters */
rosarium 0:2ddc0583bcec 536 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 537
rosarium 0:2ddc0583bcec 538 /* Reads the PROTOCOL2 register value */
rosarium 0:2ddc0583bcec 539 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 540
rosarium 0:2ddc0583bcec 541 /* Enables or disables the CS timeout mask */
rosarium 0:2ddc0583bcec 542 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 543 {
rosarium 0:2ddc0583bcec 544 tempRegValue |= PROTOCOL2_CS_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 545 }
rosarium 0:2ddc0583bcec 546 else
rosarium 0:2ddc0583bcec 547 {
rosarium 0:2ddc0583bcec 548 tempRegValue &= ~PROTOCOL2_CS_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 549 }
rosarium 0:2ddc0583bcec 550
rosarium 0:2ddc0583bcec 551 /* Writes the new value on the PROTOCOL2 register */
rosarium 0:2ddc0583bcec 552 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 553
rosarium 0:2ddc0583bcec 554 }
rosarium 0:2ddc0583bcec 555
rosarium 0:2ddc0583bcec 556
rosarium 0:2ddc0583bcec 557 /**
rosarium 0:2ddc0583bcec 558 * @brief Enables/Disables the PQI Timeout Mask. If enabled PQI value contributes to timeout disabling.
rosarium 0:2ddc0583bcec 559 * @param xNewState new state for PQI Timeout Mask.
rosarium 0:2ddc0583bcec 560 * This parameter can be S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 561 * @retval None.
rosarium 0:2ddc0583bcec 562 */
rosarium 0:2ddc0583bcec 563 void SpiritQiPqiTimeoutMask(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 564 {
rosarium 0:2ddc0583bcec 565 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 566
rosarium 0:2ddc0583bcec 567 /* Check the parameters */
rosarium 0:2ddc0583bcec 568 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 569
rosarium 0:2ddc0583bcec 570 /* Reads the PROTOCOL2 register */
rosarium 0:2ddc0583bcec 571 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 572
rosarium 0:2ddc0583bcec 573 /* Enables or disables the PQI timeout mask */
rosarium 0:2ddc0583bcec 574 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 575 {
rosarium 0:2ddc0583bcec 576 tempRegValue |= PROTOCOL2_PQI_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 577 }
rosarium 0:2ddc0583bcec 578 else
rosarium 0:2ddc0583bcec 579 {
rosarium 0:2ddc0583bcec 580 tempRegValue &= ~PROTOCOL2_PQI_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 581 }
rosarium 0:2ddc0583bcec 582
rosarium 0:2ddc0583bcec 583 /* Writes the new value on the PROTOCOL2 register */
rosarium 0:2ddc0583bcec 584 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 585
rosarium 0:2ddc0583bcec 586 }
rosarium 0:2ddc0583bcec 587
rosarium 0:2ddc0583bcec 588
rosarium 0:2ddc0583bcec 589 /**
rosarium 0:2ddc0583bcec 590 * @brief Enables/Disables the SQI Timeout Mask. If enabled SQI value contributes to timeout disabling.
rosarium 0:2ddc0583bcec 591 * @param xNewState new state for SQI Timeout Mask.
rosarium 0:2ddc0583bcec 592 * This parameter can be S_ENABLE or S_DISABLE.
rosarium 0:2ddc0583bcec 593 * @retval None.
rosarium 0:2ddc0583bcec 594 */
rosarium 0:2ddc0583bcec 595 void SpiritQiSqiTimeoutMask(SpiritFunctionalState xNewState)
rosarium 0:2ddc0583bcec 596 {
rosarium 0:2ddc0583bcec 597 uint8_t tempRegValue;
rosarium 0:2ddc0583bcec 598
rosarium 0:2ddc0583bcec 599 /* Check the parameters */
rosarium 0:2ddc0583bcec 600 s_assert_param(IS_SPIRIT_FUNCTIONAL_STATE(xNewState));
rosarium 0:2ddc0583bcec 601
rosarium 0:2ddc0583bcec 602 /* Reads the PROTOCOL2 register */
rosarium 0:2ddc0583bcec 603 g_xStatus = SpiritSpiReadRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 604
rosarium 0:2ddc0583bcec 605 /* Enables or disables the SQI timeout mask */
rosarium 0:2ddc0583bcec 606 if(xNewState == S_ENABLE)
rosarium 0:2ddc0583bcec 607 {
rosarium 0:2ddc0583bcec 608 tempRegValue |= PROTOCOL2_SQI_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 609 }
rosarium 0:2ddc0583bcec 610 else
rosarium 0:2ddc0583bcec 611 {
rosarium 0:2ddc0583bcec 612 tempRegValue &= ~PROTOCOL2_SQI_TIMEOUT_MASK;
rosarium 0:2ddc0583bcec 613 }
rosarium 0:2ddc0583bcec 614
rosarium 0:2ddc0583bcec 615 /* Writes the new value on the PROTOCOL2 register */
rosarium 0:2ddc0583bcec 616 g_xStatus = SpiritSpiWriteRegisters(PROTOCOL2_BASE, 1, &tempRegValue);
rosarium 0:2ddc0583bcec 617
rosarium 0:2ddc0583bcec 618 }
rosarium 0:2ddc0583bcec 619
rosarium 0:2ddc0583bcec 620
rosarium 0:2ddc0583bcec 621 /**
rosarium 0:2ddc0583bcec 622 *@}
rosarium 0:2ddc0583bcec 623 */
rosarium 0:2ddc0583bcec 624
rosarium 0:2ddc0583bcec 625 /**
rosarium 0:2ddc0583bcec 626 *@}
rosarium 0:2ddc0583bcec 627 */
rosarium 0:2ddc0583bcec 628
rosarium 0:2ddc0583bcec 629
rosarium 0:2ddc0583bcec 630 /**
rosarium 0:2ddc0583bcec 631 *@}
rosarium 0:2ddc0583bcec 632 */
rosarium 0:2ddc0583bcec 633
rosarium 0:2ddc0583bcec 634
rosarium 0:2ddc0583bcec 635
rosarium 0:2ddc0583bcec 636 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/