1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/include/net/csma_sender.h

140 lines
4.2 KiB
C
Raw Normal View History

/*
* Copyright (C) 2015 INRIA
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
2016-06-05 13:14:29 +02:00
* @defgroup net_csma_sender CSMA/CA helper
* @ingroup net
* @brief This interface allows code from layer 2 (MAC) or higher
* to send packets with CSMA/CA, whatever the abilities and/or
* configuration of a given radio transceiver device are.
* @{
*
* @file
* @brief Interface definition for the CSMA/CA helper
*
* @author Kévin Roussel <Kevin.Roussel@inria.fr>
*/
2016-06-05 13:14:29 +02:00
#ifndef CSMA_SENDER_H_
#define CSMA_SENDER_H_
#include <stdint.h>
2016-06-05 13:14:29 +02:00
#include "net/netdev2.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Default Minimal CSMA/CA Backoff Exponent
*/
#define CSMA_SENDER_MIN_BE_DEFAULT (3U)
/**
* @brief Default Maximal CSMA/CA Backoff Exponent
*/
#define CSMA_SENDER_MAX_BE_DEFAULT (5U)
/**
* @brief Default Maximal number of retries for sending
* a given packet with the CSMA/CA method
*/
#define CSMA_SENDER_MAX_BACKOFFS_DEFAULT (4U)
/**
* @brief CSMA/CA backoff period, in microseconds
*/
#define CSMA_SENDER_BACKOFF_PERIOD_UNIT (320U)
/**
* @brief Define a different (non-standard) value for
* the CSMA macMinBE parameter.
*
* @param[in] val new value for macMinBE
*/
void csma_sender_set_min_be(uint8_t val);
/**
* @brief Define a different (non-standard) value for
* the CSMA macMaxBE parameter.
*
* @param[in] val new value for macMaxBE
*/
void csma_sender_set_max_be(uint8_t val);
/**
* @brief Define a different (non-standard) value for
* the CSMA macMaxCSMABackoffs parameter.
*
* @param[in] val new value for macMaxCSMABackoffs
*/
void csma_sender_set_max_backoffs(uint8_t val);
/**
* @brief Sends a 802.15.4 frame using the CSMA/CA method
*
* If the transceiver can (and is configured to) do hardware-assisted
* CSMA/CA, this feature is used. Otherwise, a software procedure is used.
*
* @param[in] dev netdev device, needs to be already initialized
2016-06-05 13:14:29 +02:00
* @param[in] vector pointer to the data
* @param[in] count number of elements in @p vector
*
* @return number of bytes that were actually send out
* @return -ENODEV if @p dev is invalid
* @return -ENOMSG if @p pkt is invalid
* @return -EOVERFLOW if the payload size of @p pkt exceeds the
* payload size that can be handled by the device
* @return -ECANCELED if an internal driver error occured
* @return -EBUSY if radio medium never was available
* to send the given data
*/
2016-06-05 13:14:29 +02:00
int csma_sender_csma_ca_send(netdev2_t *dev, struct iovec *vector,
unsigned count);
/**
* @brief Sends a 802.15.4 frame when medium is avaiable.
*
* This function is useful for sending packets without the whole CSMA/CA
2016-06-05 13:34:06 +02:00
* procedure, but *after* ensuring medium is available, that is after a
* successful CCA.
*
* It is especially useful for broadcasting specific packets, like beacons; or
* for many sending packets in burst.
*
* @warning **ATTENTION:** It only tries to send the given data once. If you
* want the complete CSMA/CA procedure with retries, use
* @ref csma_sender_csma_ca_send().
*
* @param[in] dev netdev device, needs to be already initialized
2016-06-05 13:14:29 +02:00
* @param[in] vector pointer to the data
* @param[in] count number of elements in @p vector
*
* @return number of bytes that were actually send out
* @return -ENODEV if @p dev is invalid
* @return -ENOMSG if @p pkt is invalid
* @return -EOVERFLOW if the payload size of @p pkt exceeds the
* payload size that can be handled by the device
* @return -ECANCELED if an internal driver error occured
* @return -EBUSY if radio medium was not available
* to send the given data
*/
2016-06-05 13:14:29 +02:00
int csma_sender_cca_send(netdev2_t *dev, struct iovec *vector, unsigned count);
#ifdef __cplusplus
}
#endif
2016-06-05 13:14:29 +02:00
#endif /* CSMA_SENDER_H_ */
/** @} */