The friendly Operating System for the Internet of Things
mrf24j40.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017 Neo Nenaco <neo@nenaco.de>
3  * Copyright (C) 2017 Koen Zandberg <koen@bergzand.net>
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser General
6  * Public License v2.1. See the file LICENSE in the top level directory for more
7  * details.
8  */
9 
26 #ifndef MRF24J40_H
27 #define MRF24J40_H
28 
29 #include <stdint.h>
30 
31 #include "board.h"
32 #include "periph/spi.h"
33 #include "periph/gpio.h"
34 #include "net/netdev.h"
35 #include "net/netdev/ieee802154.h"
36 #include "net/gnrc/nettype.h"
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
81 #define RSSI_BASE_VAL (-91)
82 
87 #define MRF24J40_PSEUDO_STATE_IDLE (0x01)
88 #define MRF24J40_PSEUDO_STATE_SLEEP (0x02)
89 #define MRF24J40_PSEUDO_STATE_RESET (0x04)
100 #define MRF24J40_OPT_CSMA (0x0100)
101 #define MRF24J40_OPT_PROMISCUOUS (0x0200)
103 #define MRF24J40_OPT_PRELOADING (0x0400)
104 #define MRF24J40_OPT_TELL_TX_START (0x0800)
106 #define MRF24J40_OPT_TELL_TX_END (0x1000)
108 #define MRF24J40_OPT_TELL_RX_START (0x2000)
110 #define MRF24J40_OPT_TELL_RX_END (0x4000)
112 #define MRF24J40_OPT_REQ_AUTO_ACK (0x8000)
117 #define MRF24J40_TASK_TX_DONE (0x01)
118 #define MRF24J40_TASK_TX_READY (0x02)
119 #define MRF24J40_TASK_RX_READY (0x04)
121 #define MRF24J40_MAX_FRAME_RETRIES (3U)
126 typedef struct mrf24j40_params {
127  spi_t spi;
128  spi_clk_t spi_clk;
129  spi_cs_t cs_pin;
130  gpio_t int_pin;
131  gpio_t reset_pin;
137 typedef struct {
144  uint8_t state;
145  uint8_t idle_state;
146  uint8_t tx_frame_len;
147  uint8_t header_len;
148  uint8_t pending;
149  uint8_t irq_flag;
158 void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params);
159 
165 void mrf24j40_reset(mrf24j40_t *dev);
166 
175 bool mrf24j40_cca(mrf24j40_t *dev);
176 
184 uint16_t mrf24j40_get_addr_short(mrf24j40_t *dev);
185 
192 void mrf24j40_set_addr_short(mrf24j40_t *dev, uint16_t addr);
193 
201 uint64_t mrf24j40_get_addr_long(mrf24j40_t *dev);
202 
209 void mrf24j40_set_addr_long(mrf24j40_t *dev, uint64_t addr);
210 
218 uint8_t mrf24j40_get_chan(mrf24j40_t *dev);
219 
226 void mrf24j40_set_chan(mrf24j40_t *dev, uint8_t chan);
227 
235 uint16_t mrf24j40_get_pan(mrf24j40_t *dev);
236 
243 void mrf24j40_set_pan(mrf24j40_t *dev, uint16_t pan);
244 
252 int16_t mrf24j40_get_txpower(mrf24j40_t *dev);
253 
265 void mrf24j40_set_txpower(mrf24j40_t *dev, int16_t txpower);
266 
275 
287 void mrf24j40_set_csma_max_retries(mrf24j40_t *dev, int8_t retries);
288 
299 void mrf24j40_set_csma_backoff_exp(mrf24j40_t *dev, uint8_t min, uint8_t max);
300 
309 
316 void mrf24j40_set_cca_threshold(mrf24j40_t *dev, int8_t value);
317 
325 void mrf24j40_set_option(mrf24j40_t *dev, uint16_t option, bool state);
326 
333 void mrf24j40_set_state(mrf24j40_t *dev, uint8_t state);
334 
340 void mrf24j40_sleep(mrf24j40_t *dev);
341 
348 
355 
366 
376 
386 
397 size_t mrf24j40_tx_load(mrf24j40_t *dev, uint8_t *data, size_t len,
398  size_t offset);
399 
405 void mrf24j40_tx_exec(mrf24j40_t *dev);
406 
407 #ifdef __cplusplus
408 }
409 #endif
410 
411 #endif /* MRF24J40_H */
412 
void mrf24j40_reset(mrf24j40_t *dev)
Trigger a hardware reset and configure radio with default values.
void mrf24j40_tx_prepare(mrf24j40_t *dev)
Prepare for sending of data.
void mrf24j40_set_option(mrf24j40_t *dev, uint16_t option, bool state)
Enable or disable driver specific options.
void mrf24j40_reset_state_machine(mrf24j40_t *dev)
Reset the internal state machine to TRX_OFF mode.
Low-level GPIO peripheral driver interface definitions.
void mrf24j40_sleep(mrf24j40_t *dev)
Put in sleep mode.
Definitions low-level network driver interface.
void mrf24j40_set_csma_backoff_exp(mrf24j40_t *dev, uint8_t min, uint8_t max)
Set the min and max backoff exponent for CSMA/CA.
void mrf24j40_tx_exec(mrf24j40_t *dev)
Trigger sending of data previously loaded into transmit buffer.
size_t mrf24j40_tx_load(mrf24j40_t *dev, uint8_t *data, size_t len, size_t offset)
Load chunks of data into the transmit buffer of the given device.
void mrf24j40_set_csma_max_retries(mrf24j40_t *dev, int8_t retries)
Set the maximum number of channel access attempts per frame (CSMA)
int16_t mrf24j40_get_txpower(mrf24j40_t *dev)
Get the configured transmission power of the given device [in dBm].
Device descriptor for MRF24J40 radio devices.
Definition: mrf24j40.h:143
Low-level SPI peripheral driver interface definition.
gpio_t spi_cs_t
Chip select pin type overlaps with gpio_t so it can be casted to this.
Definition: spi.h:113
void mrf24j40_set_state(mrf24j40_t *dev, uint8_t state)
Set the state of the given device (trigger a state change)
void mrf24j40_set_chan(mrf24j40_t *dev, uint8_t chan)
Set the channel number of the given device.
void mrf24j40_set_addr_short(mrf24j40_t *dev, uint16_t addr)
Set the short address of the given device.
uint8_t mrf24j40_get_csma_max_retries(mrf24j40_t *dev)
Get the maximum number of channel access attempts per frame (CSMA)
struct mrf24j40_params mrf24j40_params_t
struct holding all params needed for device initialization
Structure to hold driver state.
uint8_t mrf24j40_get_chan(mrf24j40_t *dev)
Get the configured channel number of the given device.
void mrf24j40_assert_awake(mrf24j40_t *dev)
Wake up from sleep mode.
Definitions for netdev common IEEE 802.15.4 code.
bool mrf24j40_cca(mrf24j40_t *dev)
Trigger a clear channel assessment.
uint64_t mrf24j40_get_addr_long(mrf24j40_t *dev)
Get the configured long address of the given device.
int8_t mrf24j40_get_cca_threshold(mrf24j40_t *dev)
Get the CCA threshold value.
Extended structure to hold IEEE 802.15.4 driver state.
uint16_t mrf24j40_get_pan(mrf24j40_t *dev)
Get the configured PAN ID of the given device.
void mrf24j40_set_cca_threshold(mrf24j40_t *dev, int8_t value)
Set the CCA threshold value.
void mrf24j40_set_pan(mrf24j40_t *dev, uint16_t pan)
Set the PAN ID of the given device.
void mrf24j40_assert_sleep(mrf24j40_t *dev)
Put in sleep mode if idle_state is sleep.
uint16_t mrf24j40_get_addr_short(mrf24j40_t *dev)
Get the short address of the given device.
void mrf24j40_software_reset(mrf24j40_t *dev)
Software Reset.
void mrf24j40_setup(mrf24j40_t *dev, const mrf24j40_params_t *params)
Setup an MRF24J40 based device state.
struct holding all params needed for device initialization
Definition: mrf24j40.h:132
Protocol type definitions.
unsigned int spi_t
Default type for SPI devices.
Definition: spi.h:105
void mrf24j40_set_txpower(mrf24j40_t *dev, int16_t txpower)
Set the transmission power of the given device [in dBm].
void mrf24j40_set_addr_long(mrf24j40_t *dev, uint64_t addr)
Set the long address of the given device.