| /* |
| * Copyright (c) 2016 Intel Corporation. |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /** |
| * @file |
| * @brief Public IEEE 802.15.4 Radio API |
| */ |
| |
| #ifndef __IEEE802154_RADIO_H__ |
| #define __IEEE802154_RADIO_H__ |
| |
| #include <device.h> |
| #include <net/net_if.h> |
| |
| struct ieee802154_radio_api { |
| /** |
| * Mandatory to get in first position. |
| * A network device should indeed provide a pointer on such |
| * net_if_api structure. So we make current structure pointer |
| * that can be casted to a net_if_api structure pointer. |
| */ |
| struct net_if_api iface_api; |
| |
| /** Clear Channel Assesment - Check channel's activity */ |
| int (*cca)(struct device *dev); |
| |
| /** Set current channel */ |
| int (*set_channel)(struct device *dev, uint16_t channel); |
| |
| /** Set current PAN id */ |
| int (*set_pan_id)(struct device *dev, uint16_t pan_id); |
| |
| /** Set current device's short address */ |
| int (*set_short_addr)(struct device *dev, uint16_t short_addr); |
| |
| /** Set current devices's full length address */ |
| int (*set_ieee_addr)(struct device *dev, const uint8_t *ieee_addr); |
| |
| /** Set TX power level in dbm */ |
| int (*set_txpower)(struct device *dev, int16_t dbm); |
| |
| /** Transmit a buffer */ |
| int (*tx)(struct device *dev, struct net_buf *buf); |
| |
| /** Start the device */ |
| int (*start)(struct device *dev); |
| |
| /** Stop the device */ |
| int (*stop)(struct device *dev); |
| |
| /** Get latest Link Quality Information */ |
| uint8_t (*get_lqi)(struct device *dev); |
| } __packed; |
| |
| /** |
| * @brief Radio driver sending function that hw drivers should use |
| * |
| * @details This function should be used to fill in struct net_if's send pointer. |
| * |
| * @param iface A valid pointer on a network interface to send from |
| * @param buf A valid pointer on a buffer to send |
| * |
| * @return 0 on success, negative value otherwise |
| */ |
| extern int ieee802154_radio_send(struct net_if *iface, |
| struct net_buf *buf); |
| |
| /** |
| * @brief Radio driver ACK handling function that hw drivers should use |
| * |
| * @details ACK handling requires fast handling and thus such function |
| * helps to hook direcly the hw drivers to the radio driver. |
| * |
| * @param iface A valid pointer on a network interface that received the packet |
| * @param buf A valid pointer on a buffer to check |
| * |
| * @return NET_OK if it was handled, NET_CONTINUE otherwise |
| */ |
| extern enum net_verdict ieee802154_radio_handle_ack(struct net_if *iface, |
| struct net_buf *buf); |
| |
| /** |
| * @brief Initialize L2 stack for a given interface |
| * |
| * @param iface A valid pointer on a network interface |
| */ |
| void ieee802154_init(struct net_if *iface); |
| |
| #endif /* __IEEE802154_RADIO_H__ */ |