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).
source/libs/Contiki_STM32_Library/radio.h@82:a18c22d2b83a, 2018-02-02 (annotated)
- Committer:
- Wolfgang Betz
- Date:
- Fri Feb 02 14:13:24 2018 +0100
- Revision:
- 82:a18c22d2b83a
- Parent:
- 34:edda6a7238ec
Correct comments/documentation
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Wolfgang Betz |
34:edda6a7238ec | 1 | /* |
Wolfgang Betz |
34:edda6a7238ec | 2 | * Copyright (c) 2005, Swedish Institute of Computer Science. |
Wolfgang Betz |
34:edda6a7238ec | 3 | * All rights reserved. |
Wolfgang Betz |
34:edda6a7238ec | 4 | * |
Wolfgang Betz |
34:edda6a7238ec | 5 | * Redistribution and use in source and binary forms, with or without |
Wolfgang Betz |
34:edda6a7238ec | 6 | * modification, are permitted provided that the following conditions |
Wolfgang Betz |
34:edda6a7238ec | 7 | * are met: |
Wolfgang Betz |
34:edda6a7238ec | 8 | * 1. Redistributions of source code must retain the above copyright |
Wolfgang Betz |
34:edda6a7238ec | 9 | * notice, this list of conditions and the following disclaimer. |
Wolfgang Betz |
34:edda6a7238ec | 10 | * 2. Redistributions in binary form must reproduce the above copyright |
Wolfgang Betz |
34:edda6a7238ec | 11 | * notice, this list of conditions and the following disclaimer in the |
Wolfgang Betz |
34:edda6a7238ec | 12 | * documentation and/or other materials provided with the distribution. |
Wolfgang Betz |
34:edda6a7238ec | 13 | * 3. Neither the name of the Institute nor the names of its contributors |
Wolfgang Betz |
34:edda6a7238ec | 14 | * may be used to endorse or promote products derived from this software |
Wolfgang Betz |
34:edda6a7238ec | 15 | * without specific prior written permission. |
Wolfgang Betz |
34:edda6a7238ec | 16 | * |
Wolfgang Betz |
34:edda6a7238ec | 17 | * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND |
Wolfgang Betz |
34:edda6a7238ec | 18 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
Wolfgang Betz |
34:edda6a7238ec | 19 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
Wolfgang Betz |
34:edda6a7238ec | 20 | * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE |
Wolfgang Betz |
34:edda6a7238ec | 21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
Wolfgang Betz |
34:edda6a7238ec | 22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
Wolfgang Betz |
34:edda6a7238ec | 23 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
Wolfgang Betz |
34:edda6a7238ec | 24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
Wolfgang Betz |
34:edda6a7238ec | 25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
Wolfgang Betz |
34:edda6a7238ec | 26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
Wolfgang Betz |
34:edda6a7238ec | 27 | * SUCH DAMAGE. |
Wolfgang Betz |
34:edda6a7238ec | 28 | * |
Wolfgang Betz |
34:edda6a7238ec | 29 | * This file is part of the Contiki operating system. |
Wolfgang Betz |
34:edda6a7238ec | 30 | * |
Wolfgang Betz |
34:edda6a7238ec | 31 | */ |
Wolfgang Betz |
34:edda6a7238ec | 32 | |
Wolfgang Betz |
34:edda6a7238ec | 33 | /** |
Wolfgang Betz |
34:edda6a7238ec | 34 | * \file |
Wolfgang Betz |
34:edda6a7238ec | 35 | * Header file for the radio API |
Wolfgang Betz |
34:edda6a7238ec | 36 | * \author |
Wolfgang Betz |
34:edda6a7238ec | 37 | * Adam Dunkels <adam@sics.se> |
Wolfgang Betz |
34:edda6a7238ec | 38 | * Joakim Eriksson <joakime@sics.se> |
Wolfgang Betz |
34:edda6a7238ec | 39 | * Niclas Finne <nfi@sics.se> |
Wolfgang Betz |
34:edda6a7238ec | 40 | * Nicolas Tsiftes <nvt@sics.se> |
Wolfgang Betz |
34:edda6a7238ec | 41 | */ |
Wolfgang Betz |
34:edda6a7238ec | 42 | |
Wolfgang Betz |
34:edda6a7238ec | 43 | /** |
Wolfgang Betz |
34:edda6a7238ec | 44 | * \addtogroup dev |
Wolfgang Betz |
34:edda6a7238ec | 45 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 46 | */ |
Wolfgang Betz |
34:edda6a7238ec | 47 | |
Wolfgang Betz |
34:edda6a7238ec | 48 | /** |
Wolfgang Betz |
34:edda6a7238ec | 49 | * \defgroup radio Radio API |
Wolfgang Betz |
34:edda6a7238ec | 50 | * |
Wolfgang Betz |
34:edda6a7238ec | 51 | * The radio API module defines a set of functions that a radio device |
Wolfgang Betz |
34:edda6a7238ec | 52 | * driver must implement. |
Wolfgang Betz |
34:edda6a7238ec | 53 | * |
Wolfgang Betz |
34:edda6a7238ec | 54 | * @{ |
Wolfgang Betz |
34:edda6a7238ec | 55 | */ |
Wolfgang Betz |
34:edda6a7238ec | 56 | |
Wolfgang Betz |
34:edda6a7238ec | 57 | #ifndef RADIO_H_ |
Wolfgang Betz |
34:edda6a7238ec | 58 | #define RADIO_H_ |
Wolfgang Betz |
34:edda6a7238ec | 59 | |
Wolfgang Betz |
34:edda6a7238ec | 60 | #include <stddef.h> |
Wolfgang Betz |
34:edda6a7238ec | 61 | |
Wolfgang Betz |
34:edda6a7238ec | 62 | /** |
Wolfgang Betz |
34:edda6a7238ec | 63 | * Each radio has a set of parameters that designate the current |
Wolfgang Betz |
34:edda6a7238ec | 64 | * configuration and state of the radio. Parameters can either have |
Wolfgang Betz |
34:edda6a7238ec | 65 | * values of type radio_value_t, or, when this type is insufficient, a |
Wolfgang Betz |
34:edda6a7238ec | 66 | * generic object that is specified by a memory pointer and the size |
Wolfgang Betz |
34:edda6a7238ec | 67 | * of the object. |
Wolfgang Betz |
34:edda6a7238ec | 68 | * |
Wolfgang Betz |
34:edda6a7238ec | 69 | * The radio_value_t type is set to an integer type that can hold most |
Wolfgang Betz |
34:edda6a7238ec | 70 | * values used to configure the radio, and is therefore the most |
Wolfgang Betz |
34:edda6a7238ec | 71 | * common type used for a parameter. Certain parameters require |
Wolfgang Betz |
34:edda6a7238ec | 72 | * objects of a considerably larger size than radio_value_t, however, |
Wolfgang Betz |
34:edda6a7238ec | 73 | * and in these cases the documentation below for the parameter will |
Wolfgang Betz |
34:edda6a7238ec | 74 | * indicate this. |
Wolfgang Betz |
34:edda6a7238ec | 75 | * |
Wolfgang Betz |
34:edda6a7238ec | 76 | * All radio parameters that can vary during runtime are prefixed by |
Wolfgang Betz |
34:edda6a7238ec | 77 | * "RADIO_PARAM", whereas those "parameters" that are guaranteed to |
Wolfgang Betz |
34:edda6a7238ec | 78 | * remain immutable are prefixed by "RADIO_CONST". Each mutable |
Wolfgang Betz |
34:edda6a7238ec | 79 | * parameter has a set of valid parameter values. When attempting to |
Wolfgang Betz |
34:edda6a7238ec | 80 | * set a parameter to an invalid value, the radio will return |
Wolfgang Betz |
34:edda6a7238ec | 81 | * RADIO_RESULT_INVALID_VALUE. |
Wolfgang Betz |
34:edda6a7238ec | 82 | * |
Wolfgang Betz |
34:edda6a7238ec | 83 | * Some radios support only a subset of the defined radio parameters. |
Wolfgang Betz |
34:edda6a7238ec | 84 | * When trying to set or get such an unsupported parameter, the radio |
Wolfgang Betz |
34:edda6a7238ec | 85 | * will return RADIO_RESULT_NOT_SUPPORTED. |
Wolfgang Betz |
34:edda6a7238ec | 86 | */ |
Wolfgang Betz |
34:edda6a7238ec | 87 | |
Wolfgang Betz |
34:edda6a7238ec | 88 | typedef int radio_value_t; |
Wolfgang Betz |
34:edda6a7238ec | 89 | typedef unsigned radio_param_t; |
Wolfgang Betz |
34:edda6a7238ec | 90 | |
Wolfgang Betz |
34:edda6a7238ec | 91 | enum { |
Wolfgang Betz |
34:edda6a7238ec | 92 | |
Wolfgang Betz |
34:edda6a7238ec | 93 | /* Radio power mode determines if the radio is on |
Wolfgang Betz |
34:edda6a7238ec | 94 | (RADIO_POWER_MODE_ON) or off (RADIO_POWER_MODE_OFF). */ |
Wolfgang Betz |
34:edda6a7238ec | 95 | RADIO_PARAM_POWER_MODE, |
Wolfgang Betz |
34:edda6a7238ec | 96 | |
Wolfgang Betz |
34:edda6a7238ec | 97 | /* |
Wolfgang Betz |
34:edda6a7238ec | 98 | * Channel used for radio communication. The channel depends on the |
Wolfgang Betz |
34:edda6a7238ec | 99 | * communication standard used by the radio. The values can range |
Wolfgang Betz |
34:edda6a7238ec | 100 | * from RADIO_CONST_CHANNEL_MIN to RADIO_CONST_CHANNEL_MAX. |
Wolfgang Betz |
34:edda6a7238ec | 101 | */ |
Wolfgang Betz |
34:edda6a7238ec | 102 | RADIO_PARAM_CHANNEL, |
Wolfgang Betz |
34:edda6a7238ec | 103 | |
Wolfgang Betz |
34:edda6a7238ec | 104 | /* Personal area network identifier, which is used by the address filter. */ |
Wolfgang Betz |
34:edda6a7238ec | 105 | RADIO_PARAM_PAN_ID, |
Wolfgang Betz |
34:edda6a7238ec | 106 | |
Wolfgang Betz |
34:edda6a7238ec | 107 | /* Short address (16 bits) for the radio, which is used by the address |
Wolfgang Betz |
34:edda6a7238ec | 108 | filter. */ |
Wolfgang Betz |
34:edda6a7238ec | 109 | RADIO_PARAM_16BIT_ADDR, |
Wolfgang Betz |
34:edda6a7238ec | 110 | |
Wolfgang Betz |
34:edda6a7238ec | 111 | /* |
Wolfgang Betz |
34:edda6a7238ec | 112 | * Radio receiver mode determines if the radio has address filter |
Wolfgang Betz |
34:edda6a7238ec | 113 | * (RADIO_RX_MODE_ADDRESS_FILTER) and auto-ACK (RADIO_RX_MODE_AUTOACK) |
Wolfgang Betz |
34:edda6a7238ec | 114 | * enabled. This parameter is set as a bit mask. |
Wolfgang Betz |
34:edda6a7238ec | 115 | */ |
Wolfgang Betz |
34:edda6a7238ec | 116 | RADIO_PARAM_RX_MODE, |
Wolfgang Betz |
34:edda6a7238ec | 117 | |
Wolfgang Betz |
34:edda6a7238ec | 118 | /* |
Wolfgang Betz |
34:edda6a7238ec | 119 | * Radio transmission mode determines if the radio has send on CCA |
Wolfgang Betz |
34:edda6a7238ec | 120 | * (RADIO_TX_MODE_SEND_ON_CCA) enabled or not. This parameter is set |
Wolfgang Betz |
34:edda6a7238ec | 121 | * as a bit mask. |
Wolfgang Betz |
34:edda6a7238ec | 122 | */ |
Wolfgang Betz |
34:edda6a7238ec | 123 | RADIO_PARAM_TX_MODE, |
Wolfgang Betz |
34:edda6a7238ec | 124 | |
Wolfgang Betz |
34:edda6a7238ec | 125 | /* |
Wolfgang Betz |
34:edda6a7238ec | 126 | * Transmission power in dBm. The values can range from |
Wolfgang Betz |
34:edda6a7238ec | 127 | * RADIO_CONST_TXPOWER_MIN to RADIO_CONST_TXPOWER_MAX. |
Wolfgang Betz |
34:edda6a7238ec | 128 | * |
Wolfgang Betz |
34:edda6a7238ec | 129 | * Some radios restrict the available values to a subset of this |
Wolfgang Betz |
34:edda6a7238ec | 130 | * range. If an unavailable TXPOWER value is requested to be set, |
Wolfgang Betz |
34:edda6a7238ec | 131 | * the radio may select another TXPOWER close to the requested |
Wolfgang Betz |
34:edda6a7238ec | 132 | * one. When getting the value of this parameter, the actual value |
Wolfgang Betz |
34:edda6a7238ec | 133 | * used by the radio will be returned. |
Wolfgang Betz |
34:edda6a7238ec | 134 | */ |
Wolfgang Betz |
34:edda6a7238ec | 135 | RADIO_PARAM_TXPOWER, |
Wolfgang Betz |
34:edda6a7238ec | 136 | |
Wolfgang Betz |
34:edda6a7238ec | 137 | /* |
Wolfgang Betz |
34:edda6a7238ec | 138 | * Clear channel assessment threshold in dBm. This threshold |
Wolfgang Betz |
34:edda6a7238ec | 139 | * determines the minimum RSSI level at which the radio will assume |
Wolfgang Betz |
34:edda6a7238ec | 140 | * that there is a packet in the air. |
Wolfgang Betz |
34:edda6a7238ec | 141 | * |
Wolfgang Betz |
34:edda6a7238ec | 142 | * The CCA threshold must be set to a level above the noise floor of |
Wolfgang Betz |
34:edda6a7238ec | 143 | * the deployment. Otherwise mechanisms such as send-on-CCA and |
Wolfgang Betz |
34:edda6a7238ec | 144 | * low-power-listening duty cycling protocols may not work |
Wolfgang Betz |
34:edda6a7238ec | 145 | * correctly. Hence, the default value of the system may not be |
Wolfgang Betz |
34:edda6a7238ec | 146 | * optimal for any given deployment. |
Wolfgang Betz |
34:edda6a7238ec | 147 | */ |
Wolfgang Betz |
34:edda6a7238ec | 148 | RADIO_PARAM_CCA_THRESHOLD, |
Wolfgang Betz |
34:edda6a7238ec | 149 | |
Wolfgang Betz |
34:edda6a7238ec | 150 | /* Received signal strength indicator in dBm. */ |
Wolfgang Betz |
34:edda6a7238ec | 151 | RADIO_PARAM_RSSI, |
Wolfgang Betz |
34:edda6a7238ec | 152 | |
Wolfgang Betz |
34:edda6a7238ec | 153 | /* |
Wolfgang Betz |
34:edda6a7238ec | 154 | * Long (64 bits) address for the radio, which is used by the address filter. |
Wolfgang Betz |
34:edda6a7238ec | 155 | * The address is specified in network byte order. |
Wolfgang Betz |
34:edda6a7238ec | 156 | * |
Wolfgang Betz |
34:edda6a7238ec | 157 | * Because this parameter value is larger than what fits in radio_value_t, |
Wolfgang Betz |
34:edda6a7238ec | 158 | * it needs to be used with radio.get_object()/set_object(). |
Wolfgang Betz |
34:edda6a7238ec | 159 | */ |
Wolfgang Betz |
34:edda6a7238ec | 160 | RADIO_PARAM_64BIT_ADDR, |
Wolfgang Betz |
34:edda6a7238ec | 161 | |
Wolfgang Betz |
34:edda6a7238ec | 162 | /* Constants (read only) */ |
Wolfgang Betz |
34:edda6a7238ec | 163 | |
Wolfgang Betz |
34:edda6a7238ec | 164 | /* The lowest radio channel. */ |
Wolfgang Betz |
34:edda6a7238ec | 165 | RADIO_CONST_CHANNEL_MIN, |
Wolfgang Betz |
34:edda6a7238ec | 166 | /* The highest radio channel. */ |
Wolfgang Betz |
34:edda6a7238ec | 167 | RADIO_CONST_CHANNEL_MAX, |
Wolfgang Betz |
34:edda6a7238ec | 168 | |
Wolfgang Betz |
34:edda6a7238ec | 169 | /* The minimum transmission power in dBm. */ |
Wolfgang Betz |
34:edda6a7238ec | 170 | RADIO_CONST_TXPOWER_MIN, |
Wolfgang Betz |
34:edda6a7238ec | 171 | /* The maximum transmission power in dBm. */ |
Wolfgang Betz |
34:edda6a7238ec | 172 | RADIO_CONST_TXPOWER_MAX |
Wolfgang Betz |
34:edda6a7238ec | 173 | }; |
Wolfgang Betz |
34:edda6a7238ec | 174 | |
Wolfgang Betz |
34:edda6a7238ec | 175 | /* Radio power modes */ |
Wolfgang Betz |
34:edda6a7238ec | 176 | enum { |
Wolfgang Betz |
34:edda6a7238ec | 177 | RADIO_POWER_MODE_OFF, |
Wolfgang Betz |
34:edda6a7238ec | 178 | RADIO_POWER_MODE_ON |
Wolfgang Betz |
34:edda6a7238ec | 179 | }; |
Wolfgang Betz |
34:edda6a7238ec | 180 | |
Wolfgang Betz |
34:edda6a7238ec | 181 | /** |
Wolfgang Betz |
34:edda6a7238ec | 182 | * The radio reception mode controls address filtering and automatic |
Wolfgang Betz |
34:edda6a7238ec | 183 | * transmission of acknowledgements in the radio (if such operations |
Wolfgang Betz |
34:edda6a7238ec | 184 | * are supported by the radio). A single parameter is used to allow |
Wolfgang Betz |
34:edda6a7238ec | 185 | * setting these features simultaneously as an atomic operation. |
Wolfgang Betz |
34:edda6a7238ec | 186 | * |
Wolfgang Betz |
34:edda6a7238ec | 187 | * To enable both address filter and transmissions of automatic |
Wolfgang Betz |
34:edda6a7238ec | 188 | * acknowledgments: |
Wolfgang Betz |
34:edda6a7238ec | 189 | * |
Wolfgang Betz |
34:edda6a7238ec | 190 | * NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, |
Wolfgang Betz |
34:edda6a7238ec | 191 | * RADIO_RX_MODE_ADDRESS_FILTER | RADIO_RX_MODE_AUTOACK); |
Wolfgang Betz |
34:edda6a7238ec | 192 | */ |
Wolfgang Betz |
34:edda6a7238ec | 193 | #define RADIO_RX_MODE_ADDRESS_FILTER (1 << 0) |
Wolfgang Betz |
34:edda6a7238ec | 194 | #define RADIO_RX_MODE_AUTOACK (1 << 1) |
Wolfgang Betz |
34:edda6a7238ec | 195 | |
Wolfgang Betz |
34:edda6a7238ec | 196 | /** |
Wolfgang Betz |
34:edda6a7238ec | 197 | * The radio transmission mode controls whether transmissions should |
Wolfgang Betz |
34:edda6a7238ec | 198 | * be done using clear channel assessment (if supported by the |
Wolfgang Betz |
34:edda6a7238ec | 199 | * radio). If send-on-CCA is enabled, the radio's send function will |
Wolfgang Betz |
34:edda6a7238ec | 200 | * wait for a radio-specific time window for the channel to become |
Wolfgang Betz |
34:edda6a7238ec | 201 | * clear. If this does not happen, the send function will return |
Wolfgang Betz |
34:edda6a7238ec | 202 | * RADIO_TX_COLLISION. |
Wolfgang Betz |
34:edda6a7238ec | 203 | */ |
Wolfgang Betz |
34:edda6a7238ec | 204 | #define RADIO_TX_MODE_SEND_ON_CCA (1 << 0) |
Wolfgang Betz |
34:edda6a7238ec | 205 | |
Wolfgang Betz |
34:edda6a7238ec | 206 | /* Radio return values when setting or getting radio parameters. */ |
Wolfgang Betz |
34:edda6a7238ec | 207 | typedef enum { |
Wolfgang Betz |
34:edda6a7238ec | 208 | RADIO_RESULT_OK, |
Wolfgang Betz |
34:edda6a7238ec | 209 | RADIO_RESULT_NOT_SUPPORTED, |
Wolfgang Betz |
34:edda6a7238ec | 210 | RADIO_RESULT_INVALID_VALUE, |
Wolfgang Betz |
34:edda6a7238ec | 211 | RADIO_RESULT_ERROR |
Wolfgang Betz |
34:edda6a7238ec | 212 | } radio_result_t; |
Wolfgang Betz |
34:edda6a7238ec | 213 | |
Wolfgang Betz |
34:edda6a7238ec | 214 | /* Radio return values for transmissions. */ |
Wolfgang Betz |
34:edda6a7238ec | 215 | enum { |
Wolfgang Betz |
34:edda6a7238ec | 216 | RADIO_TX_OK, |
Wolfgang Betz |
34:edda6a7238ec | 217 | RADIO_TX_ERR, |
Wolfgang Betz |
34:edda6a7238ec | 218 | RADIO_TX_COLLISION, |
Wolfgang Betz |
34:edda6a7238ec | 219 | RADIO_TX_NOACK, |
Wolfgang Betz |
34:edda6a7238ec | 220 | }; |
Wolfgang Betz |
34:edda6a7238ec | 221 | |
Wolfgang Betz |
34:edda6a7238ec | 222 | /** |
Wolfgang Betz |
34:edda6a7238ec | 223 | * The structure of a device driver for a radio in Contiki. |
Wolfgang Betz |
34:edda6a7238ec | 224 | */ |
Wolfgang Betz |
34:edda6a7238ec | 225 | struct radio_driver { |
Wolfgang Betz |
34:edda6a7238ec | 226 | |
Wolfgang Betz |
34:edda6a7238ec | 227 | int (* init)(void); |
Wolfgang Betz |
34:edda6a7238ec | 228 | |
Wolfgang Betz |
34:edda6a7238ec | 229 | /** Prepare the radio with a packet to be sent. */ |
Wolfgang Betz |
34:edda6a7238ec | 230 | int (* prepare)(const void *payload, unsigned short payload_len); |
Wolfgang Betz |
34:edda6a7238ec | 231 | |
Wolfgang Betz |
34:edda6a7238ec | 232 | /** Send the packet that has previously been prepared. */ |
Wolfgang Betz |
34:edda6a7238ec | 233 | int (* transmit)(unsigned short transmit_len); |
Wolfgang Betz |
34:edda6a7238ec | 234 | |
Wolfgang Betz |
34:edda6a7238ec | 235 | /** Prepare & transmit a packet. */ |
Wolfgang Betz |
34:edda6a7238ec | 236 | int (* send)(const void *payload, unsigned short payload_len); |
Wolfgang Betz |
34:edda6a7238ec | 237 | |
Wolfgang Betz |
34:edda6a7238ec | 238 | /** Read a received packet into a buffer. */ |
Wolfgang Betz |
34:edda6a7238ec | 239 | int (* read)(void *buf, unsigned short buf_len); |
Wolfgang Betz |
34:edda6a7238ec | 240 | |
Wolfgang Betz |
34:edda6a7238ec | 241 | /** Perform a Clear-Channel Assessment (CCA) to find out if there is |
Wolfgang Betz |
34:edda6a7238ec | 242 | a packet in the air or not. */ |
Wolfgang Betz |
34:edda6a7238ec | 243 | int (* channel_clear)(void); |
Wolfgang Betz |
34:edda6a7238ec | 244 | |
Wolfgang Betz |
34:edda6a7238ec | 245 | /** Check if the radio driver is currently receiving a packet */ |
Wolfgang Betz |
34:edda6a7238ec | 246 | int (* receiving_packet)(void); |
Wolfgang Betz |
34:edda6a7238ec | 247 | |
Wolfgang Betz |
34:edda6a7238ec | 248 | /** Check if the radio driver has just received a packet */ |
Wolfgang Betz |
34:edda6a7238ec | 249 | int (* pending_packet)(void); |
Wolfgang Betz |
34:edda6a7238ec | 250 | |
Wolfgang Betz |
34:edda6a7238ec | 251 | /** Turn the radio on. */ |
Wolfgang Betz |
34:edda6a7238ec | 252 | int (* on)(void); |
Wolfgang Betz |
34:edda6a7238ec | 253 | |
Wolfgang Betz |
34:edda6a7238ec | 254 | /** Turn the radio off. */ |
Wolfgang Betz |
34:edda6a7238ec | 255 | int (* off)(void); |
Wolfgang Betz |
34:edda6a7238ec | 256 | |
Wolfgang Betz |
34:edda6a7238ec | 257 | /** Get a radio parameter value. */ |
Wolfgang Betz |
34:edda6a7238ec | 258 | radio_result_t (* get_value)(radio_param_t param, radio_value_t *value); |
Wolfgang Betz |
34:edda6a7238ec | 259 | |
Wolfgang Betz |
34:edda6a7238ec | 260 | /** Set a radio parameter value. */ |
Wolfgang Betz |
34:edda6a7238ec | 261 | radio_result_t (* set_value)(radio_param_t param, radio_value_t value); |
Wolfgang Betz |
34:edda6a7238ec | 262 | |
Wolfgang Betz |
34:edda6a7238ec | 263 | /** |
Wolfgang Betz |
34:edda6a7238ec | 264 | * Get a radio parameter object. The argument 'dest' must point to a |
Wolfgang Betz |
34:edda6a7238ec | 265 | * memory area of at least 'size' bytes, and this memory area will |
Wolfgang Betz |
34:edda6a7238ec | 266 | * contain the parameter object if the function succeeds. |
Wolfgang Betz |
34:edda6a7238ec | 267 | */ |
Wolfgang Betz |
34:edda6a7238ec | 268 | radio_result_t (* get_object)(radio_param_t param, void *dest, size_t size); |
Wolfgang Betz |
34:edda6a7238ec | 269 | |
Wolfgang Betz |
34:edda6a7238ec | 270 | /** |
Wolfgang Betz |
34:edda6a7238ec | 271 | * Set a radio parameter object. The memory area referred to by the |
Wolfgang Betz |
34:edda6a7238ec | 272 | * argument 'src' will not be accessed after the function returns. |
Wolfgang Betz |
34:edda6a7238ec | 273 | */ |
Wolfgang Betz |
34:edda6a7238ec | 274 | radio_result_t (* set_object)(radio_param_t param, const void *src, |
Wolfgang Betz |
34:edda6a7238ec | 275 | size_t size); |
Wolfgang Betz |
34:edda6a7238ec | 276 | |
Wolfgang Betz |
34:edda6a7238ec | 277 | }; |
Wolfgang Betz |
34:edda6a7238ec | 278 | |
Wolfgang Betz |
34:edda6a7238ec | 279 | #endif /* RADIO_H_ */ |
Wolfgang Betz |
34:edda6a7238ec | 280 | |
Wolfgang Betz |
34:edda6a7238ec | 281 | /** @} */ |
Wolfgang Betz |
34:edda6a7238ec | 282 | /** @} */ |