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