diff --git a/drivers/include/radio_driver.h b/drivers/include/radio_driver.h index ef5a59597d5cf0bbb70396a8d50b5f9b7c6c4f25..f818ff6219cd2a719195da43f56eba93e4c571ed 100644 --- a/drivers/include/radio_driver.h +++ b/drivers/include/radio_driver.h @@ -1,8 +1,9 @@ /** * Copyright (C) 2014 INRIA * - * This source code is licensed under the GNU Lesser General Public License, - * Version 2. See the file LICENSE for more details. + * This file is subject to the terms and conditions of the GNU Lesser General + * Public License. See the file LICENSE in the top level directory for more + * details. */ /** @@ -25,12 +26,21 @@ * @brief Callback function type for receiving incoming packets * from 802.15.4 radio transceiver. * - * @param[in] buf Pointer to the buffer containing the incoming - * 802.15.4 packet's raw data. - * @param[in] len Length (in bytes) of the incoming packet's raw data. - * + * @param[in] buf Pointer to the buffer containing the incoming + * 802.15.4 packet's raw data. + * @param[in] len Length (in bytes) of the incoming packet's raw data. + * @param[in] rssi Value of the Receive Signal Strength Indicator (RSSI) + * for the incoming packet. + * @param[in] lqi Value of the Link Quality Indicator (LQI) + * for the incoming packet. + * @param[in] crc_ok @c true if incoming packet's checksum (CRC) is valid; + * @c false otherwise (corrupted packet). */ -typedef void (* receive_802154_packet_callback_t)(void *buf, unsigned int len); +typedef void (* receive_802154_packet_callback_t)(void *buf, + unsigned int len, + int8_t rssi, + uint8_t lqi, + bool crc_ok); /** * @brief Kind of packet to prepare/configure for transmission. @@ -69,6 +79,12 @@ typedef enum { /** Transmission failed because of collision on radio medium */ RADIO_TX_COLLISION, + /** Wrong parameter given to TX-related functions */ + RADIO_TX_INVALID_PARAM, + + /** Too much given data to be included in a single packet */ + RADIO_TX_PACKET_TOO_LONG, + /** Transmission supposedly failed since no ACK packet has been received as response */ RADIO_TX_NOACK, @@ -108,6 +124,11 @@ typedef union { * */ typedef struct { + /** + * @brief Initialize the radio transceiver (call before first use). + */ + void (* init)(void); + /** * @brief Turn radio transceiver on. * @@ -149,13 +170,15 @@ typedef struct { * and transceiver configuration. * @param[in] len Length (in bytes) of the outgoing packet payload. * - * @return @c true if the transceiver TX buffer was loaded correctly; - * @c false otherwise (transceiver error). + * @return The outcome of this packet's transmission. + * @see radio_tx_status_t */ - bool (* load_tx)(ieee802154_packet_kind_t kind, - ieee802154_node_addr_t dest, bool use_long_addr, - bool wants_ack, - void *buf, unsigned int len); + radio_tx_status_t (* load_tx)(ieee802154_packet_kind_t kind, + ieee802154_node_addr_t dest, + bool use_long_addr, + bool wants_ack, + void *buf, + unsigned int len); /** * @brief Transmit the data loaded into the transceiver TX buffer. @@ -189,10 +212,12 @@ typedef struct { * @return The outcome of this packet's transmission. * @see radio_tx_status_t */ - radio_tx_status_t (* send)(ieee802154_packet_kind_t, - ieee802154_node_addr_t dest, bool use_long_addr, + radio_tx_status_t (* send)(ieee802154_packet_kind_t kind, + ieee802154_node_addr_t dest, + bool use_long_addr, bool wants_ack, - void *buf, unsigned int len); + void *buf, + unsigned int len); /** * @brief Define the function to be called back the radio transceiver