Loading...
Searching...
No Matches
ieee802154.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016-2019 Freie Universität Berlin
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
19
20#include "net/eui_provider.h"
21#include "net/ieee802154.h"
22#if IS_USED(MODULE_IEEE802154_SECURITY)
24#endif
25#include "net/gnrc/nettype.h"
26#include "net/netopt.h"
27#include "net/netdev.h"
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
42
43#define NETDEV_IEEE802154_SEND_MASK (0x0028)
44#define NETDEV_IEEE802154_RAW (0x0002)
48#define NETDEV_IEEE802154_SRC_MODE_LONG (0x0004)
52#define NETDEV_IEEE802154_SECURITY_EN (IEEE802154_FCF_SECURITY_EN)
53
57#define NETDEV_IEEE802154_ACK_REQ (IEEE802154_FCF_ACK_REQ)
58
62#define NETDEV_IEEE802154_FRAME_PEND (IEEE802154_FCF_FRAME_PEND)
66
71#define NETDEV_RX_IEEE802154_INFO_FLAG_TIMESTAMP (0x01)
73
88
97typedef struct {
103#ifdef MODULE_GNRC
104 gnrc_nettype_t proto;
105#endif
106
110 uint16_t pan;
111
116
121 uint8_t seq;
122 uint8_t chan;
123 uint8_t page;
124 uint16_t flags;
125 int16_t txpower;
126#if IS_USED(MODULE_IEEE802154_SECURITY) || defined(DOXYGEN)
128#endif
131
136 int16_t rssi;
137 uint8_t lqi;
138 uint8_t flags;
139#if IS_USED(MODULE_NETDEV_IEEE802154_RX_TIMESTAMP)
140 uint64_t timestamp;
141#endif
143
153 uint64_t timestamp)
154{
155 (void)dest;
156 (void)timestamp;
157#if IS_USED(MODULE_NETDEV_IEEE802154_RX_TIMESTAMP)
158 dest->timestamp = timestamp;
160#endif
161}
162
175 const netdev_ieee802154_rx_info_t *info,
176 uint64_t *dest)
177{
178 (void)info;
179 (void)dest;
180#if IS_USED(MODULE_NETDEV_IEEE802154_RX_TIMESTAMP)
182 *dest = info->timestamp;
183 return 0;
184 }
185#endif
186
187 return -1;
188}
189
199
214 size_t max_len);
215
242int netdev_ieee802154_set(netdev_ieee802154_t *dev, netopt_t opt, const void *value,
243 size_t value_len);
244
257{
258 /* generate EUI-64 and short address */
259 netdev_eui64_get(&dev->netdev, (eui64_t *)&dev->long_addr);
262}
263
264#ifdef __cplusplus
265}
266#endif
267
be_uint16_t network_uint16_t
A 16 bit integer in network byte order.
Definition byteorder.h:107
Definitions low-level network driver interface.
EUI-48 and EUI-64 address provider.
struct netdev netdev_t
Forward declaration for netdev struct.
Definition netdev.h:285
struct netdev_ieee802154_rx_info netdev_ieee802154_rx_info_t
Received packet status information for IEEE 802.15.4 radios.
netdev_ieee802154_cca_mode_t
Option parameter to be used with NETOPT_CCA_MODE to set the mode of the clear channel assessment (CCA...
Definition ieee802154.h:79
#define NETDEV_RX_IEEE802154_INFO_FLAG_TIMESTAMP
Timestamp valid.
Definition ieee802154.h:71
static void netdev_ieee802154_rx_info_set_timestamp(netdev_ieee802154_rx_info_t *dest, uint64_t timestamp)
Write the given timestamp to the given RX info struct.
Definition ieee802154.h:151
int netdev_ieee802154_get(netdev_ieee802154_t *dev, netopt_t opt, void *value, size_t max_len)
Fallback function for netdev IEEE 802.15.4 devices' _get function.
static int netdev_ieee802154_rx_info_get_timestamp(const netdev_ieee802154_rx_info_t *info, uint64_t *dest)
Get the timestamp to from the RX info.
Definition ieee802154.h:174
void netdev_ieee802154_reset(netdev_ieee802154_t *dev)
Reset function for ieee802154 common fields.
static void netdev_ieee802154_setup(netdev_ieee802154_t *dev)
Configure the hardware address of a IEEE 802.15.4 devices.
Definition ieee802154.h:256
int netdev_ieee802154_set(netdev_ieee802154_t *dev, netopt_t opt, const void *value, size_t value_len)
Fallback function for netdev IEEE 802.15.4 devices' _set function.
@ NETDEV_IEEE802154_CCA_MODE_4
ALOHA.
Definition ieee802154.h:83
@ NETDEV_IEEE802154_CCA_MODE_2
Carrier sense only.
Definition ieee802154.h:81
@ NETDEV_IEEE802154_CCA_MODE_1
Energy above threshold.
Definition ieee802154.h:80
@ NETDEV_IEEE802154_CCA_MODE_6
UWB preamble sense based on the packet with the multiplexed preamble.
Definition ieee802154.h:85
@ NETDEV_IEEE802154_CCA_MODE_5
UWB preamble sense based on the SHR of a frame.
Definition ieee802154.h:84
@ NETDEV_IEEE802154_CCA_MODE_3
Carrier sense with energy above threshold.
Definition ieee802154.h:82
static void eui_short_from_eui64(eui64_t *addr_long, network_uint16_t *addr_short)
Get a short unicast address from an EUI-64.
void netdev_eui64_get(netdev_t *netdev, eui64_t *addr)
Generates an EUI-64 address for the netdev interface.
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition nettype.h:51
#define IEEE802154_SHORT_ADDRESS_LEN
IEEE 802.15.4 address lengths.
Definition ieee802154.h:44
#define IEEE802154_LONG_ADDRESS_LEN
long address (EUI-64)
Definition ieee802154.h:45
struct ieee802154_sec_context ieee802154_sec_context_t
Struct to hold IEEE 802.15.4 security information.
netopt_t
Global list of configuration options available throughout the network stack, e.g.
Definition netopt.h:44
IEEE 802.15.4 security interface.
Definition of global configuration options.
Protocol type definitions.
Received packet status information for IEEE 802.15.4 radios.
Definition ieee802154.h:135
uint8_t flags
Flags e.g.
Definition ieee802154.h:138
uint8_t lqi
LQI of a received frame.
Definition ieee802154.h:137
int16_t rssi
RSSI of a received frame in dBm.
Definition ieee802154.h:136
Extended structure to hold IEEE 802.15.4 driver state.
Definition ieee802154.h:97
uint8_t long_addr[IEEE802154_LONG_ADDRESS_LEN]
Long address in network byte order.
Definition ieee802154.h:120
uint8_t seq
sequence number
Definition ieee802154.h:121
uint16_t pan
IEEE 802.15.4 specific fields.
Definition ieee802154.h:110
uint8_t short_addr[IEEE802154_SHORT_ADDRESS_LEN]
Short address in network byte order.
Definition ieee802154.h:115
ieee802154_sec_context_t sec_ctx
security context
Definition ieee802154.h:127
netdev_t netdev
netdev_t base class
Definition ieee802154.h:98
int16_t txpower
tx power in dBm
Definition ieee802154.h:125
uint8_t chan
channel
Definition ieee802154.h:122
uint16_t flags
flags as defined above
Definition ieee802154.h:124
uint8_t page
channel page
Definition ieee802154.h:123
IEEE 802.15.4 header definitions.
Data type to represent an EUI-64.
Definition eui64.h:55