Prototype RF driver for STM Sub-1 GHz RF expansion board based on the SPSGRF-868 module for STM32 Nucleo.

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).

Committer:
Wolfgang Betz
Date:
Thu Jul 06 11:13:31 2017 +0200
Revision:
67:93bec0baf1de
Parent:
34:edda6a7238ec
Clarify some comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 67:93bec0baf1de 1 /**
Wolfgang Betz 67:93bec0baf1de 2 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 3 * @file SPIRIT_PktCommon.h
Wolfgang Betz 67:93bec0baf1de 4 * @author VMA division - AMS
Wolfgang Betz 67:93bec0baf1de 5 * @version 3.2.2
Wolfgang Betz 67:93bec0baf1de 6 * @date 08-July-2015
Wolfgang Betz 67:93bec0baf1de 7 * @brief Configuration and management of the common features of SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 8 *
Wolfgang Betz 67:93bec0baf1de 9 * @details
Wolfgang Betz 67:93bec0baf1de 10 *
Wolfgang Betz 67:93bec0baf1de 11 * This module provides all the common functions and definitions used by the
Wolfgang Betz 67:93bec0baf1de 12 * packets modules.
Wolfgang Betz 67:93bec0baf1de 13 * Here are also defined all the generic enumeration types that are redefined
Wolfgang Betz 67:93bec0baf1de 14 * in the specific packets modules, but every enumeration value is referred
Wolfgang Betz 67:93bec0baf1de 15 * to this module. So the user who wants to configure the preamble of a Basic,
Wolfgang Betz 67:93bec0baf1de 16 * or a STack packet has to use the enumeration values defined here.
Wolfgang Betz 67:93bec0baf1de 17 *
Wolfgang Betz 67:93bec0baf1de 18 * <b>Example:</b>
Wolfgang Betz 67:93bec0baf1de 19 * @code
Wolfgang Betz 67:93bec0baf1de 20 *
Wolfgang Betz 67:93bec0baf1de 21 * ...
Wolfgang Betz 67:93bec0baf1de 22 *
Wolfgang Betz 67:93bec0baf1de 23 * SpiritPktBasicSetPreambleLength(PKT_PREAMBLE_LENGTH_18BYTES);
Wolfgang Betz 67:93bec0baf1de 24 *
Wolfgang Betz 67:93bec0baf1de 25 * ...
Wolfgang Betz 67:93bec0baf1de 26 *
Wolfgang Betz 67:93bec0baf1de 27 * @endcode
Wolfgang Betz 67:93bec0baf1de 28 *
Wolfgang Betz 67:93bec0baf1de 29 * @note Is recommended for the user to not use these API directly
Wolfgang Betz 67:93bec0baf1de 30 * importing this module in his application.
Wolfgang Betz 67:93bec0baf1de 31 *
Wolfgang Betz 67:93bec0baf1de 32 *
Wolfgang Betz 67:93bec0baf1de 33 * @attention
Wolfgang Betz 67:93bec0baf1de 34 *
Wolfgang Betz 67:93bec0baf1de 35 * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
Wolfgang Betz 67:93bec0baf1de 36 *
Wolfgang Betz 67:93bec0baf1de 37 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 67:93bec0baf1de 38 * are permitted provided that the following conditions are met:
Wolfgang Betz 67:93bec0baf1de 39 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 40 * this list of conditions and the following disclaimer.
Wolfgang Betz 67:93bec0baf1de 41 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 67:93bec0baf1de 42 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 67:93bec0baf1de 43 * and/or other materials provided with the distribution.
Wolfgang Betz 67:93bec0baf1de 44 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 67:93bec0baf1de 45 * may be used to endorse or promote products derived from this software
Wolfgang Betz 67:93bec0baf1de 46 * without specific prior written permission.
Wolfgang Betz 67:93bec0baf1de 47 *
Wolfgang Betz 67:93bec0baf1de 48 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 67:93bec0baf1de 49 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 67:93bec0baf1de 50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 67:93bec0baf1de 51 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 67:93bec0baf1de 52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 67:93bec0baf1de 53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 67:93bec0baf1de 54 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 67:93bec0baf1de 55 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 67:93bec0baf1de 56 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 67:93bec0baf1de 57 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 67:93bec0baf1de 58 *
Wolfgang Betz 67:93bec0baf1de 59 ******************************************************************************
Wolfgang Betz 67:93bec0baf1de 60 */
Wolfgang Betz 67:93bec0baf1de 61
Wolfgang Betz 67:93bec0baf1de 62 /* Define to prevent recursive inclusion -------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 63 #ifndef __SPIRIT_PKT_COMMON_H
Wolfgang Betz 67:93bec0baf1de 64 #define __SPIRIT_PKT_COMMON_H
Wolfgang Betz 67:93bec0baf1de 65
Wolfgang Betz 67:93bec0baf1de 66 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 67:93bec0baf1de 67
Wolfgang Betz 67:93bec0baf1de 68 #include "SPIRIT_Regs.h"
Wolfgang Betz 67:93bec0baf1de 69 #include "SPIRIT_Types.h"
Wolfgang Betz 67:93bec0baf1de 70
Wolfgang Betz 67:93bec0baf1de 71
Wolfgang Betz 67:93bec0baf1de 72 #ifdef __cplusplus
Wolfgang Betz 67:93bec0baf1de 73 extern "C" {
Wolfgang Betz 67:93bec0baf1de 74 #endif
Wolfgang Betz 67:93bec0baf1de 75
Wolfgang Betz 67:93bec0baf1de 76
Wolfgang Betz 67:93bec0baf1de 77
Wolfgang Betz 67:93bec0baf1de 78 /**
Wolfgang Betz 67:93bec0baf1de 79 * @addtogroup SPIRIT_Libraries
Wolfgang Betz 67:93bec0baf1de 80 * @{
Wolfgang Betz 67:93bec0baf1de 81 */
Wolfgang Betz 67:93bec0baf1de 82
Wolfgang Betz 67:93bec0baf1de 83
Wolfgang Betz 67:93bec0baf1de 84 /**
Wolfgang Betz 67:93bec0baf1de 85 * @defgroup SPIRIT_PktCommon Pkt Common
Wolfgang Betz 67:93bec0baf1de 86 * @brief Configuration and management of the common features of SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 87 * @details See the file <i>@ref SPIRIT_PktCommon.h</i> for more details.
Wolfgang Betz 67:93bec0baf1de 88 * @{
Wolfgang Betz 67:93bec0baf1de 89 */
Wolfgang Betz 67:93bec0baf1de 90
Wolfgang Betz 67:93bec0baf1de 91 /**
Wolfgang Betz 67:93bec0baf1de 92 * @defgroup PktCommon_Exported_Types Pkt Common Exported Types
Wolfgang Betz 67:93bec0baf1de 93 * @{
Wolfgang Betz 67:93bec0baf1de 94 */
Wolfgang Betz 67:93bec0baf1de 95
Wolfgang Betz 67:93bec0baf1de 96
Wolfgang Betz 67:93bec0baf1de 97 /**
Wolfgang Betz 67:93bec0baf1de 98 * @brief Preamble length in bytes enumeration.
Wolfgang Betz 67:93bec0baf1de 99 */
Wolfgang Betz 67:93bec0baf1de 100 typedef enum
Wolfgang Betz 67:93bec0baf1de 101 {
Wolfgang Betz 67:93bec0baf1de 102 PKT_PREAMBLE_LENGTH_01BYTE = 0x00, /*!< Preamble length 1 byte*/
Wolfgang Betz 67:93bec0baf1de 103 PKT_PREAMBLE_LENGTH_02BYTES = 0x08, /*!< Preamble length 2 bytes */
Wolfgang Betz 67:93bec0baf1de 104 PKT_PREAMBLE_LENGTH_03BYTES = 0x10, /*!< Preamble length 3 bytes */
Wolfgang Betz 67:93bec0baf1de 105 PKT_PREAMBLE_LENGTH_04BYTES = 0x18, /*!< Preamble length 4 bytes */
Wolfgang Betz 67:93bec0baf1de 106 PKT_PREAMBLE_LENGTH_05BYTES = 0x20, /*!< Preamble length 5 bytes */
Wolfgang Betz 67:93bec0baf1de 107 PKT_PREAMBLE_LENGTH_06BYTES = 0x28, /*!< Preamble length 6 bytes */
Wolfgang Betz 67:93bec0baf1de 108 PKT_PREAMBLE_LENGTH_07BYTES = 0x30, /*!< Preamble length 7 bytes */
Wolfgang Betz 67:93bec0baf1de 109 PKT_PREAMBLE_LENGTH_08BYTES = 0x38, /*!< Preamble length 8 bytes */
Wolfgang Betz 67:93bec0baf1de 110 PKT_PREAMBLE_LENGTH_09BYTES = 0x40, /*!< Preamble length 9 bytes */
Wolfgang Betz 67:93bec0baf1de 111 PKT_PREAMBLE_LENGTH_10BYTES = 0x48, /*!< Preamble length 10 bytes */
Wolfgang Betz 67:93bec0baf1de 112 PKT_PREAMBLE_LENGTH_11BYTES = 0x50, /*!< Preamble length 11 bytes */
Wolfgang Betz 67:93bec0baf1de 113 PKT_PREAMBLE_LENGTH_12BYTES = 0x58, /*!< Preamble length 12 bytes */
Wolfgang Betz 67:93bec0baf1de 114 PKT_PREAMBLE_LENGTH_13BYTES = 0x60, /*!< Preamble length 13 bytes */
Wolfgang Betz 67:93bec0baf1de 115 PKT_PREAMBLE_LENGTH_14BYTES = 0x68, /*!< Preamble length 14 bytes */
Wolfgang Betz 67:93bec0baf1de 116 PKT_PREAMBLE_LENGTH_15BYTES = 0x70, /*!< Preamble length 15 bytes */
Wolfgang Betz 67:93bec0baf1de 117 PKT_PREAMBLE_LENGTH_16BYTES = 0x78, /*!< Preamble length 16 bytes */
Wolfgang Betz 67:93bec0baf1de 118 PKT_PREAMBLE_LENGTH_17BYTES = 0x80, /*!< Preamble length 17 bytes */
Wolfgang Betz 67:93bec0baf1de 119 PKT_PREAMBLE_LENGTH_18BYTES = 0x88, /*!< Preamble length 18 bytes */
Wolfgang Betz 67:93bec0baf1de 120 PKT_PREAMBLE_LENGTH_19BYTES = 0x90, /*!< Preamble length 19 bytes */
Wolfgang Betz 67:93bec0baf1de 121 PKT_PREAMBLE_LENGTH_20BYTES = 0x98, /*!< Preamble length 20 bytes */
Wolfgang Betz 67:93bec0baf1de 122 PKT_PREAMBLE_LENGTH_21BYTES = 0xA0, /*!< Preamble length 21 bytes */
Wolfgang Betz 67:93bec0baf1de 123 PKT_PREAMBLE_LENGTH_22BYTES = 0xA8, /*!< Preamble length 22 bytes */
Wolfgang Betz 67:93bec0baf1de 124 PKT_PREAMBLE_LENGTH_23BYTES = 0xB0, /*!< Preamble length 23 bytes */
Wolfgang Betz 67:93bec0baf1de 125 PKT_PREAMBLE_LENGTH_24BYTES = 0xB8, /*!< Preamble length 24 bytes */
Wolfgang Betz 67:93bec0baf1de 126 PKT_PREAMBLE_LENGTH_25BYTES = 0xC0, /*!< Preamble length 25 bytes */
Wolfgang Betz 67:93bec0baf1de 127 PKT_PREAMBLE_LENGTH_26BYTES = 0xC8, /*!< Preamble length 26 bytes */
Wolfgang Betz 67:93bec0baf1de 128 PKT_PREAMBLE_LENGTH_27BYTES = 0xD0, /*!< Preamble length 27 bytes */
Wolfgang Betz 67:93bec0baf1de 129 PKT_PREAMBLE_LENGTH_28BYTES = 0xD8, /*!< Preamble length 28 bytes */
Wolfgang Betz 67:93bec0baf1de 130 PKT_PREAMBLE_LENGTH_29BYTES = 0xE0, /*!< Preamble length 29 bytes */
Wolfgang Betz 67:93bec0baf1de 131 PKT_PREAMBLE_LENGTH_30BYTES = 0xE8, /*!< Preamble length 30 bytes */
Wolfgang Betz 67:93bec0baf1de 132 PKT_PREAMBLE_LENGTH_31BYTES = 0xF0, /*!< Preamble length 31 bytes */
Wolfgang Betz 67:93bec0baf1de 133 PKT_PREAMBLE_LENGTH_32BYTES = 0xF8 /*!< Preamble length 32 bytes */
Wolfgang Betz 67:93bec0baf1de 134
Wolfgang Betz 67:93bec0baf1de 135 }PktPreambleLength;
Wolfgang Betz 67:93bec0baf1de 136
Wolfgang Betz 67:93bec0baf1de 137 #define IS_PKT_PREAMBLE_LENGTH(LENGTH) ((LENGTH == PKT_PREAMBLE_LENGTH_01BYTE) || \
Wolfgang Betz 67:93bec0baf1de 138 (LENGTH == PKT_PREAMBLE_LENGTH_02BYTES) || \
Wolfgang Betz 67:93bec0baf1de 139 (LENGTH == PKT_PREAMBLE_LENGTH_03BYTES) || \
Wolfgang Betz 67:93bec0baf1de 140 (LENGTH == PKT_PREAMBLE_LENGTH_04BYTES) || \
Wolfgang Betz 67:93bec0baf1de 141 (LENGTH == PKT_PREAMBLE_LENGTH_05BYTES) || \
Wolfgang Betz 67:93bec0baf1de 142 (LENGTH == PKT_PREAMBLE_LENGTH_06BYTES) || \
Wolfgang Betz 67:93bec0baf1de 143 (LENGTH == PKT_PREAMBLE_LENGTH_07BYTES) || \
Wolfgang Betz 67:93bec0baf1de 144 (LENGTH == PKT_PREAMBLE_LENGTH_08BYTES) || \
Wolfgang Betz 67:93bec0baf1de 145 (LENGTH == PKT_PREAMBLE_LENGTH_09BYTES) || \
Wolfgang Betz 67:93bec0baf1de 146 (LENGTH == PKT_PREAMBLE_LENGTH_10BYTES) || \
Wolfgang Betz 67:93bec0baf1de 147 (LENGTH == PKT_PREAMBLE_LENGTH_11BYTES) || \
Wolfgang Betz 67:93bec0baf1de 148 (LENGTH == PKT_PREAMBLE_LENGTH_12BYTES) || \
Wolfgang Betz 67:93bec0baf1de 149 (LENGTH == PKT_PREAMBLE_LENGTH_13BYTES) || \
Wolfgang Betz 67:93bec0baf1de 150 (LENGTH == PKT_PREAMBLE_LENGTH_14BYTES) || \
Wolfgang Betz 67:93bec0baf1de 151 (LENGTH == PKT_PREAMBLE_LENGTH_15BYTES) || \
Wolfgang Betz 67:93bec0baf1de 152 (LENGTH == PKT_PREAMBLE_LENGTH_16BYTES) || \
Wolfgang Betz 67:93bec0baf1de 153 (LENGTH == PKT_PREAMBLE_LENGTH_17BYTES) || \
Wolfgang Betz 67:93bec0baf1de 154 (LENGTH == PKT_PREAMBLE_LENGTH_18BYTES) || \
Wolfgang Betz 67:93bec0baf1de 155 (LENGTH == PKT_PREAMBLE_LENGTH_19BYTES) || \
Wolfgang Betz 67:93bec0baf1de 156 (LENGTH == PKT_PREAMBLE_LENGTH_20BYTES) || \
Wolfgang Betz 67:93bec0baf1de 157 (LENGTH == PKT_PREAMBLE_LENGTH_21BYTES) || \
Wolfgang Betz 67:93bec0baf1de 158 (LENGTH == PKT_PREAMBLE_LENGTH_22BYTES) || \
Wolfgang Betz 67:93bec0baf1de 159 (LENGTH == PKT_PREAMBLE_LENGTH_23BYTES) || \
Wolfgang Betz 67:93bec0baf1de 160 (LENGTH == PKT_PREAMBLE_LENGTH_24BYTES) || \
Wolfgang Betz 67:93bec0baf1de 161 (LENGTH == PKT_PREAMBLE_LENGTH_25BYTES) || \
Wolfgang Betz 67:93bec0baf1de 162 (LENGTH == PKT_PREAMBLE_LENGTH_26BYTES) || \
Wolfgang Betz 67:93bec0baf1de 163 (LENGTH == PKT_PREAMBLE_LENGTH_27BYTES) || \
Wolfgang Betz 67:93bec0baf1de 164 (LENGTH == PKT_PREAMBLE_LENGTH_28BYTES) || \
Wolfgang Betz 67:93bec0baf1de 165 (LENGTH == PKT_PREAMBLE_LENGTH_29BYTES) || \
Wolfgang Betz 67:93bec0baf1de 166 (LENGTH == PKT_PREAMBLE_LENGTH_30BYTES) || \
Wolfgang Betz 67:93bec0baf1de 167 (LENGTH == PKT_PREAMBLE_LENGTH_31BYTES) || \
Wolfgang Betz 67:93bec0baf1de 168 (LENGTH == PKT_PREAMBLE_LENGTH_32BYTES))
Wolfgang Betz 67:93bec0baf1de 169
Wolfgang Betz 67:93bec0baf1de 170
Wolfgang Betz 67:93bec0baf1de 171
Wolfgang Betz 67:93bec0baf1de 172 /**
Wolfgang Betz 67:93bec0baf1de 173 * @brief Sync length in bytes enumeration.
Wolfgang Betz 67:93bec0baf1de 174 */
Wolfgang Betz 67:93bec0baf1de 175 typedef enum
Wolfgang Betz 67:93bec0baf1de 176 {
Wolfgang Betz 67:93bec0baf1de 177 PKT_SYNC_LENGTH_1BYTE = 0x00, /*!< Sync length 1 byte*/
Wolfgang Betz 67:93bec0baf1de 178 PKT_SYNC_LENGTH_2BYTES = 0x02, /*!< Sync length 2 bytes*/
Wolfgang Betz 67:93bec0baf1de 179 PKT_SYNC_LENGTH_3BYTES = 0x04, /*!< Sync length 3 bytes */
Wolfgang Betz 67:93bec0baf1de 180 PKT_SYNC_LENGTH_4BYTES = 0x06 , /*!< Sync length 4 bytes */
Wolfgang Betz 67:93bec0baf1de 181
Wolfgang Betz 67:93bec0baf1de 182 }PktSyncLength;
Wolfgang Betz 67:93bec0baf1de 183
Wolfgang Betz 67:93bec0baf1de 184 #define IS_PKT_SYNC_LENGTH(LENGTH) ((LENGTH == PKT_SYNC_LENGTH_1BYTE) || \
Wolfgang Betz 67:93bec0baf1de 185 (LENGTH == PKT_SYNC_LENGTH_2BYTES)|| \
Wolfgang Betz 67:93bec0baf1de 186 (LENGTH == PKT_SYNC_LENGTH_3BYTES)|| \
Wolfgang Betz 67:93bec0baf1de 187 (LENGTH == PKT_SYNC_LENGTH_4BYTES))
Wolfgang Betz 67:93bec0baf1de 188
Wolfgang Betz 67:93bec0baf1de 189
Wolfgang Betz 67:93bec0baf1de 190
Wolfgang Betz 67:93bec0baf1de 191 /**
Wolfgang Betz 67:93bec0baf1de 192 * @brief CRC length in bytes enumeration.
Wolfgang Betz 67:93bec0baf1de 193 */
Wolfgang Betz 67:93bec0baf1de 194 typedef enum
Wolfgang Betz 67:93bec0baf1de 195 {
Wolfgang Betz 67:93bec0baf1de 196 PKT_NO_CRC = 0x00, /*!< No CRC */
Wolfgang Betz 67:93bec0baf1de 197 PKT_CRC_MODE_8BITS = 0x20, /*!< CRC length 8 bits - poly: 0x07 */
Wolfgang Betz 67:93bec0baf1de 198 PKT_CRC_MODE_16BITS_1 = 0x40, /*!< CRC length 16 bits - poly: 0x8005 */
Wolfgang Betz 67:93bec0baf1de 199 PKT_CRC_MODE_16BITS_2 = 0x60, /*!< CRC length 16 bits - poly: 0x1021 */
Wolfgang Betz 67:93bec0baf1de 200 PKT_CRC_MODE_24BITS = 0x80, /*!< CRC length 24 bits - poly: 0x864CFB */
Wolfgang Betz 67:93bec0baf1de 201
Wolfgang Betz 67:93bec0baf1de 202 }PktCrcMode;
Wolfgang Betz 67:93bec0baf1de 203
Wolfgang Betz 67:93bec0baf1de 204 #define IS_PKT_CRC_MODE(MODE) ((MODE == PKT_NO_CRC) || \
Wolfgang Betz 67:93bec0baf1de 205 (MODE == PKT_CRC_MODE_8BITS) || \
Wolfgang Betz 67:93bec0baf1de 206 (MODE == PKT_CRC_MODE_16BITS_1) || \
Wolfgang Betz 67:93bec0baf1de 207 (MODE == PKT_CRC_MODE_16BITS_2) || \
Wolfgang Betz 67:93bec0baf1de 208 (MODE == PKT_CRC_MODE_24BITS))
Wolfgang Betz 67:93bec0baf1de 209
Wolfgang Betz 67:93bec0baf1de 210
Wolfgang Betz 67:93bec0baf1de 211
Wolfgang Betz 67:93bec0baf1de 212 /**
Wolfgang Betz 67:93bec0baf1de 213 * @brief Fixed or variable payload length enumeration.
Wolfgang Betz 67:93bec0baf1de 214 */
Wolfgang Betz 67:93bec0baf1de 215 typedef enum
Wolfgang Betz 67:93bec0baf1de 216 {
Wolfgang Betz 67:93bec0baf1de 217 PKT_LENGTH_FIX = 0x00, /*!< Fixed payload length */
Wolfgang Betz 67:93bec0baf1de 218 PKT_LENGTH_VAR = 0x01 /*!< Variable payload length */
Wolfgang Betz 67:93bec0baf1de 219
Wolfgang Betz 67:93bec0baf1de 220 }PktFixVarLength;
Wolfgang Betz 67:93bec0baf1de 221
Wolfgang Betz 67:93bec0baf1de 222 #define IS_PKT_FIX_VAR_LENGTH(LENGTH) ((LENGTH == PKT_LENGTH_FIX) || \
Wolfgang Betz 67:93bec0baf1de 223 (LENGTH == PKT_LENGTH_VAR))
Wolfgang Betz 67:93bec0baf1de 224
Wolfgang Betz 67:93bec0baf1de 225
Wolfgang Betz 67:93bec0baf1de 226 /**
Wolfgang Betz 67:93bec0baf1de 227 * @brief Control length in bytes enumeration for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 228 */
Wolfgang Betz 67:93bec0baf1de 229 typedef enum
Wolfgang Betz 67:93bec0baf1de 230 {
Wolfgang Betz 67:93bec0baf1de 231 PKT_CONTROL_LENGTH_0BYTES = 0x00, /*!< Control length 0 byte*/
Wolfgang Betz 67:93bec0baf1de 232 PKT_CONTROL_LENGTH_1BYTE, /*!< Control length 1 byte*/
Wolfgang Betz 67:93bec0baf1de 233 PKT_CONTROL_LENGTH_2BYTES, /*!< Control length 2 bytes*/
Wolfgang Betz 67:93bec0baf1de 234 PKT_CONTROL_LENGTH_3BYTES, /*!< Control length 3 bytes*/
Wolfgang Betz 67:93bec0baf1de 235 PKT_CONTROL_LENGTH_4BYTES /*!< Control length 4 bytes*/
Wolfgang Betz 67:93bec0baf1de 236
Wolfgang Betz 67:93bec0baf1de 237 }PktControlLength;
Wolfgang Betz 67:93bec0baf1de 238
Wolfgang Betz 67:93bec0baf1de 239 #define IS_PKT_CONTROL_LENGTH(LENGTH) ((LENGTH == PKT_CONTROL_LENGTH_0BYTES) || \
Wolfgang Betz 67:93bec0baf1de 240 (LENGTH == PKT_CONTROL_LENGTH_1BYTE) || \
Wolfgang Betz 67:93bec0baf1de 241 (LENGTH == PKT_CONTROL_LENGTH_2BYTES) || \
Wolfgang Betz 67:93bec0baf1de 242 (LENGTH == PKT_CONTROL_LENGTH_3BYTES) || \
Wolfgang Betz 67:93bec0baf1de 243 (LENGTH == PKT_CONTROL_LENGTH_4BYTES))
Wolfgang Betz 67:93bec0baf1de 244
Wolfgang Betz 67:93bec0baf1de 245 /**
Wolfgang Betz 67:93bec0baf1de 246 * @brief Sync words enumeration for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 247 */
Wolfgang Betz 67:93bec0baf1de 248 typedef enum
Wolfgang Betz 67:93bec0baf1de 249 {
Wolfgang Betz 67:93bec0baf1de 250 PKT_SYNC_WORD_1=0x01, /*!< Index of the 1st sync word*/
Wolfgang Betz 67:93bec0baf1de 251 PKT_SYNC_WORD_2, /*!< Index of the 2nd sync word*/
Wolfgang Betz 67:93bec0baf1de 252 PKT_SYNC_WORD_3, /*!< Index of the 3rd sync word*/
Wolfgang Betz 67:93bec0baf1de 253 PKT_SYNC_WORD_4 /*!< Index of the 4th sync word*/
Wolfgang Betz 67:93bec0baf1de 254
Wolfgang Betz 67:93bec0baf1de 255 }PktSyncX;
Wolfgang Betz 67:93bec0baf1de 256
Wolfgang Betz 67:93bec0baf1de 257 #define IS_PKT_SYNCx(WORD) ((WORD == PKT_SYNC_WORD_1) || \
Wolfgang Betz 67:93bec0baf1de 258 (WORD == PKT_SYNC_WORD_2) || \
Wolfgang Betz 67:93bec0baf1de 259 (WORD == PKT_SYNC_WORD_3) || \
Wolfgang Betz 67:93bec0baf1de 260 (WORD == PKT_SYNC_WORD_4))
Wolfgang Betz 67:93bec0baf1de 261
Wolfgang Betz 67:93bec0baf1de 262
Wolfgang Betz 67:93bec0baf1de 263
Wolfgang Betz 67:93bec0baf1de 264 /**
Wolfgang Betz 67:93bec0baf1de 265 * @brief Max retransmissions number enumeration for SPIRIT packets.
Wolfgang Betz 67:93bec0baf1de 266 */
Wolfgang Betz 67:93bec0baf1de 267 typedef enum
Wolfgang Betz 67:93bec0baf1de 268 {
Wolfgang Betz 67:93bec0baf1de 269 PKT_DISABLE_RETX = 0x00, /*!< No retrasmissions*/
Wolfgang Betz 67:93bec0baf1de 270 PKT_N_RETX_1 = 0x10, /*!< Max retrasmissions 1*/
Wolfgang Betz 67:93bec0baf1de 271 PKT_N_RETX_2 = 0x20, /*!< Max retrasmissions 2*/
Wolfgang Betz 67:93bec0baf1de 272 PKT_N_RETX_3 = 0x30, /*!< Max retrasmissions 3*/
Wolfgang Betz 67:93bec0baf1de 273 PKT_N_RETX_4 = 0x40, /*!< Max retrasmissions 4*/
Wolfgang Betz 67:93bec0baf1de 274 PKT_N_RETX_5 = 0x50, /*!< Max retrasmissions 5*/
Wolfgang Betz 67:93bec0baf1de 275 PKT_N_RETX_6 = 0x60, /*!< Max retrasmissions 6*/
Wolfgang Betz 67:93bec0baf1de 276 PKT_N_RETX_7 = 0x70, /*!< Max retrasmissions 7*/
Wolfgang Betz 67:93bec0baf1de 277 PKT_N_RETX_8 = 0x80, /*!< Max retrasmissions 8*/
Wolfgang Betz 67:93bec0baf1de 278 PKT_N_RETX_9 = 0x90, /*!< Max retrasmissions 9*/
Wolfgang Betz 67:93bec0baf1de 279 PKT_N_RETX_10 = 0xA0, /*!< Max retrasmissions 10*/
Wolfgang Betz 67:93bec0baf1de 280 PKT_N_RETX_11 = 0xB0, /*!< Max retrasmissions 11*/
Wolfgang Betz 67:93bec0baf1de 281 PKT_N_RETX_12 = 0xC0, /*!< Max retrasmissions 12*/
Wolfgang Betz 67:93bec0baf1de 282 PKT_N_RETX_13 = 0xD0, /*!< Max retrasmissions 13*/
Wolfgang Betz 67:93bec0baf1de 283 PKT_N_RETX_14 = 0xE0, /*!< Max retrasmissions 14*/
Wolfgang Betz 67:93bec0baf1de 284 PKT_N_RETX_15 = 0xF0 /*!< Max retrasmissions 15*/
Wolfgang Betz 67:93bec0baf1de 285
Wolfgang Betz 67:93bec0baf1de 286 }PktNMaxReTx;
Wolfgang Betz 67:93bec0baf1de 287
Wolfgang Betz 67:93bec0baf1de 288 #define IS_PKT_NMAX_RETX(N_RETX) ((N_RETX == PKT_DISABLE_RETX) || \
Wolfgang Betz 67:93bec0baf1de 289 (N_RETX == PKT_N_RETX_1) || \
Wolfgang Betz 67:93bec0baf1de 290 (N_RETX == PKT_N_RETX_2) || \
Wolfgang Betz 67:93bec0baf1de 291 (N_RETX == PKT_N_RETX_3) || \
Wolfgang Betz 67:93bec0baf1de 292 (N_RETX == PKT_N_RETX_4) || \
Wolfgang Betz 67:93bec0baf1de 293 (N_RETX == PKT_N_RETX_5) || \
Wolfgang Betz 67:93bec0baf1de 294 (N_RETX == PKT_N_RETX_6) || \
Wolfgang Betz 67:93bec0baf1de 295 (N_RETX == PKT_N_RETX_7) || \
Wolfgang Betz 67:93bec0baf1de 296 (N_RETX == PKT_N_RETX_8) || \
Wolfgang Betz 67:93bec0baf1de 297 (N_RETX == PKT_N_RETX_9) || \
Wolfgang Betz 67:93bec0baf1de 298 (N_RETX == PKT_N_RETX_10) || \
Wolfgang Betz 67:93bec0baf1de 299 (N_RETX == PKT_N_RETX_11) || \
Wolfgang Betz 67:93bec0baf1de 300 (N_RETX == PKT_N_RETX_12) || \
Wolfgang Betz 67:93bec0baf1de 301 (N_RETX == PKT_N_RETX_13) || \
Wolfgang Betz 67:93bec0baf1de 302 (N_RETX == PKT_N_RETX_14) || \
Wolfgang Betz 67:93bec0baf1de 303 (N_RETX == PKT_N_RETX_15))
Wolfgang Betz 67:93bec0baf1de 304
Wolfgang Betz 67:93bec0baf1de 305
Wolfgang Betz 67:93bec0baf1de 306 /**
Wolfgang Betz 67:93bec0baf1de 307 *@}
Wolfgang Betz 67:93bec0baf1de 308 */
Wolfgang Betz 67:93bec0baf1de 309
Wolfgang Betz 67:93bec0baf1de 310
Wolfgang Betz 67:93bec0baf1de 311 /**
Wolfgang Betz 67:93bec0baf1de 312 * @defgroup PktCommon_Exported_Constants Pkt Common Exported Constants
Wolfgang Betz 67:93bec0baf1de 313 * @{
Wolfgang Betz 67:93bec0baf1de 314 */
Wolfgang Betz 67:93bec0baf1de 315
Wolfgang Betz 67:93bec0baf1de 316 #define IS_PKT_LENGTH_WIDTH_BITS(BITS) (BITS<=16)
Wolfgang Betz 67:93bec0baf1de 317 #define IS_PKT_SEQ_NUMBER_RELOAD(SEQN) (SEQN<=3)
Wolfgang Betz 67:93bec0baf1de 318
Wolfgang Betz 67:93bec0baf1de 319 /**
Wolfgang Betz 67:93bec0baf1de 320 *@}
Wolfgang Betz 67:93bec0baf1de 321 */
Wolfgang Betz 67:93bec0baf1de 322
Wolfgang Betz 67:93bec0baf1de 323
Wolfgang Betz 67:93bec0baf1de 324 /**
Wolfgang Betz 67:93bec0baf1de 325 * @defgroup PktCommon_Exported_Macros Pkt Common Exported Macros
Wolfgang Betz 67:93bec0baf1de 326 * @{
Wolfgang Betz 67:93bec0baf1de 327 */
Wolfgang Betz 67:93bec0baf1de 328
Wolfgang Betz 67:93bec0baf1de 329
Wolfgang Betz 67:93bec0baf1de 330 /**
Wolfgang Betz 67:93bec0baf1de 331 * @brief Macro used to compute the lower part of the packet length, to write in the PCKTLEN0 register
Wolfgang Betz 67:93bec0baf1de 332 * @param nLength Length of the packet payload.
Wolfgang Betz 67:93bec0baf1de 333 * This parameter is an uint16_t.
Wolfgang Betz 67:93bec0baf1de 334 * @retval None.
Wolfgang Betz 67:93bec0baf1de 335 */
Wolfgang Betz 67:93bec0baf1de 336 #define BUILD_PCKTLEN0(nLength) ((nLength) & 0xFF)
Wolfgang Betz 67:93bec0baf1de 337
Wolfgang Betz 67:93bec0baf1de 338
Wolfgang Betz 67:93bec0baf1de 339 /**
Wolfgang Betz 67:93bec0baf1de 340 * @brief Macro used to compute the upper part of the packet length, to write the PCKTLEN1 register
Wolfgang Betz 67:93bec0baf1de 341 * @param nLength Length of the packet payload.
Wolfgang Betz 67:93bec0baf1de 342 * This parameter is an uint16_t.
Wolfgang Betz 67:93bec0baf1de 343 * @retval None.
Wolfgang Betz 67:93bec0baf1de 344 */
Wolfgang Betz 67:93bec0baf1de 345 #define BUILD_PCKTLEN1(nLength) ((nLength) >> 8)
Wolfgang Betz 67:93bec0baf1de 346
Wolfgang Betz 67:93bec0baf1de 347 /**
Wolfgang Betz 67:93bec0baf1de 348 *@}
Wolfgang Betz 67:93bec0baf1de 349 */
Wolfgang Betz 67:93bec0baf1de 350
Wolfgang Betz 67:93bec0baf1de 351
Wolfgang Betz 67:93bec0baf1de 352 /**
Wolfgang Betz 67:93bec0baf1de 353 * @defgroup PktCommon_Exported_Functions Pkt Common Exported Functions
Wolfgang Betz 67:93bec0baf1de 354 * @{
Wolfgang Betz 67:93bec0baf1de 355 */
Wolfgang Betz 67:93bec0baf1de 356
Wolfgang Betz 67:93bec0baf1de 357 void SpiritPktCommonSetControlLength(PktControlLength xControlLength);
Wolfgang Betz 67:93bec0baf1de 358 uint8_t SpiritPktCommonGetControlLength(void);
Wolfgang Betz 67:93bec0baf1de 359 void SpiritPktCommonSetPreambleLength(PktPreambleLength xPreambleLength);
Wolfgang Betz 67:93bec0baf1de 360 uint8_t SpiritPktCommonGetPreambleLength(void);
Wolfgang Betz 67:93bec0baf1de 361 void SpiritPktCommonSetSyncLength(PktSyncLength xSyncLength);
Wolfgang Betz 67:93bec0baf1de 362 uint8_t SpiritPktCommonGetSyncLength(void);
Wolfgang Betz 67:93bec0baf1de 363 void SpiritPktCommonSetFixVarLength(PktFixVarLength xFixVarLength);
Wolfgang Betz 67:93bec0baf1de 364 void SpiritPktCommonFilterOnCrc(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 365 SpiritFunctionalState SpiritPktCommonGetFilterOnCrc(void);
Wolfgang Betz 67:93bec0baf1de 366 void SpiritPktCommonSetCrcMode(PktCrcMode xCrcLength);
Wolfgang Betz 67:93bec0baf1de 367 PktCrcMode SpiritPktCommonGetCrcMode(void);
Wolfgang Betz 67:93bec0baf1de 368 void SpiritPktCommonWhitening(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 369 void SpiritPktCommonFec(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 370 void SpiritPktCommonSetSyncxWord(PktSyncX xSyncX, uint8_t cSyncWord);
Wolfgang Betz 67:93bec0baf1de 371 uint8_t SpiritPktCommonGetSyncxWord(PktSyncX xSyncX);
Wolfgang Betz 67:93bec0baf1de 372 void SpiritPktCommonSetSyncWords(uint32_t lSyncWords, PktSyncLength xSyncLength);
Wolfgang Betz 67:93bec0baf1de 373 uint32_t SpiritPktCommonGetSyncWords(PktSyncLength xSyncLength);
Wolfgang Betz 67:93bec0baf1de 374 uint8_t SpiritPktCommonGetVarLengthWidth(void);
Wolfgang Betz 67:93bec0baf1de 375 void SpiritPktCommonSetDestinationAddress(uint8_t cAddress);
Wolfgang Betz 67:93bec0baf1de 376 uint8_t SpiritPktCommonGetTransmittedDestAddress(void);
Wolfgang Betz 67:93bec0baf1de 377 void SpiritPktCommonSetMyAddress(uint8_t cAddress);
Wolfgang Betz 67:93bec0baf1de 378 uint8_t SpiritPktCommonGetMyAddress(void);
Wolfgang Betz 67:93bec0baf1de 379 void SpiritPktCommonSetBroadcastAddress(uint8_t cAddress);
Wolfgang Betz 67:93bec0baf1de 380 uint8_t SpiritPktCommonGetBroadcastAddress(void);
Wolfgang Betz 67:93bec0baf1de 381 SpiritFunctionalState SpiritPktCommonGetTxAckRequest(void);
Wolfgang Betz 67:93bec0baf1de 382 void SpiritPktCommonSetMulticastAddress(uint8_t cAddress);
Wolfgang Betz 67:93bec0baf1de 383 uint8_t SpiritPktCommonGetMulticastAddress(void);
Wolfgang Betz 67:93bec0baf1de 384 void SpiritPktCommonSetCtrlMask(uint32_t lMask);
Wolfgang Betz 67:93bec0baf1de 385 uint32_t SpiritPktCommonGetCtrlMask(void);
Wolfgang Betz 67:93bec0baf1de 386 void SpiritPktCommonSetCtrlReference(uint32_t lReference);
Wolfgang Betz 67:93bec0baf1de 387 uint32_t SpiritPktCommonGetCtrlReference(void);
Wolfgang Betz 67:93bec0baf1de 388 void SpiritPktCommonSetTransmittedCtrlField(uint32_t lField);
Wolfgang Betz 67:93bec0baf1de 389 uint32_t SpiritPktCommonGetTransmittedCtrlField(void);
Wolfgang Betz 67:93bec0baf1de 390 void SpiritPktCommonFilterOnMyAddress(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 391 void SpiritPktCommonFilterOnMulticastAddress(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 392 void SpiritPktCommonFilterOnBroadcastAddress(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 393 SpiritFunctionalState SpiritPktCommonGetFilterOnMyAddress(void);
Wolfgang Betz 67:93bec0baf1de 394 SpiritFunctionalState SpiritPktCommonGetFilterOnMulticastAddress(void);
Wolfgang Betz 67:93bec0baf1de 395 SpiritFunctionalState SpiritPktCommonGetFilterOnBroadcastAddress(void);
Wolfgang Betz 67:93bec0baf1de 396 uint8_t SpiritPktCommonGetReceivedDestAddress(void);
Wolfgang Betz 67:93bec0baf1de 397 uint32_t SpiritPktCommonGetReceivedCtrlField(void);
Wolfgang Betz 67:93bec0baf1de 398 void SpiritPktCommonGetReceivedCrcField(uint8_t* cCrcFieldVect);
Wolfgang Betz 67:93bec0baf1de 399 void SpiritPktCommonAutoAck(SpiritFunctionalState xAutoAck,SpiritFunctionalState xPiggybacking);
Wolfgang Betz 67:93bec0baf1de 400 void SpiritPktCommonRequireAck(SpiritFunctionalState xRequireAck);
Wolfgang Betz 67:93bec0baf1de 401 void SpiritPktCommonSetTransmittedSeqNumberReload(uint8_t cSeqNumberReload);
Wolfgang Betz 67:93bec0baf1de 402 void SpiritPktCommonSetNMaxReTx(PktNMaxReTx xNMaxReTx);
Wolfgang Betz 67:93bec0baf1de 403 uint8_t SpiritPktCommonGetNMaxReTx(void);
Wolfgang Betz 67:93bec0baf1de 404 uint8_t SpiritPktCommonGetReceivedDestAddress(void);
Wolfgang Betz 67:93bec0baf1de 405 uint8_t SpiritPktCommonGetReceivedSourceAddress(void);
Wolfgang Betz 67:93bec0baf1de 406 uint8_t SpiritPktCommonGetReceivedSeqNumber(void);
Wolfgang Betz 67:93bec0baf1de 407 uint8_t SpiritPktCommonGetReceivedNackRx(void);
Wolfgang Betz 67:93bec0baf1de 408 uint8_t SpiritPktCommonGetTransmittedSeqNumber(void);
Wolfgang Betz 67:93bec0baf1de 409 uint8_t SpiritPktCommonGetNReTx(void);
Wolfgang Betz 67:93bec0baf1de 410 void SpiritPktCommonFilterOnControlField(SpiritFunctionalState xNewState);
Wolfgang Betz 67:93bec0baf1de 411 SpiritFunctionalState SpiritPktCommonGetFilterOnControlField(void);
Wolfgang Betz 67:93bec0baf1de 412
Wolfgang Betz 67:93bec0baf1de 413 /**
Wolfgang Betz 67:93bec0baf1de 414 *@}
Wolfgang Betz 67:93bec0baf1de 415 */
Wolfgang Betz 67:93bec0baf1de 416
Wolfgang Betz 67:93bec0baf1de 417 /**
Wolfgang Betz 67:93bec0baf1de 418 *@}
Wolfgang Betz 67:93bec0baf1de 419 */
Wolfgang Betz 67:93bec0baf1de 420
Wolfgang Betz 67:93bec0baf1de 421
Wolfgang Betz 67:93bec0baf1de 422 /**
Wolfgang Betz 67:93bec0baf1de 423 *@}
Wolfgang Betz 67:93bec0baf1de 424 */
Wolfgang Betz 67:93bec0baf1de 425
Wolfgang Betz 67:93bec0baf1de 426 #ifdef __cplusplus
Wolfgang Betz 67:93bec0baf1de 427 }
Wolfgang Betz 67:93bec0baf1de 428 #endif
Wolfgang Betz 67:93bec0baf1de 429
Wolfgang Betz 67:93bec0baf1de 430 #endif
Wolfgang Betz 67:93bec0baf1de 431
Wolfgang Betz 67:93bec0baf1de 432 /******************* (C) COPYRIGHT 2015 STMicroelectronics *****END OF FILE****/