Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion drivers/at86rf2xx/at86rf2xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,13 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
/* enable interrupts */
at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK,
AT86RF2XX_IRQ_STATUS_MASK__TRX_END);

/* enable TX start interrupt for retry counter */
#ifdef AT86RF2XX_REG__IRQ_MASK1
at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK1,
AT86RF2XX_IRQ_STATUS_MASK1__TX_START);
#endif

/* clear interrupt flags */
at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_STATUS);

Expand Down Expand Up @@ -189,10 +196,14 @@ size_t at86rf2xx_tx_load(at86rf2xx_t *dev, const uint8_t *data,
return offset + len;
}

void at86rf2xx_tx_exec(const at86rf2xx_t *dev)
void at86rf2xx_tx_exec(at86rf2xx_t *dev)
{
netdev_t *netdev = (netdev_t *)dev;

#if AT86RF2XX_HAVE_RETRIES
dev->tx_retries = -1;
#endif

/* write frame length field in FIFO */
at86rf2xx_sram_write(dev, 0, &(dev->tx_frame_len), 1);
/* trigger sending of pre-loaded frame */
Expand Down
22 changes: 21 additions & 1 deletion drivers/at86rf2xx/at86rf2xx_netdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,7 @@ static void _isr_send_complete(at86rf2xx_t *dev, uint8_t trac_status)
return;
}
/* Only radios with the XAH_CTRL_2 register support frame retry reporting */
#if AT86RF2XX_HAVE_RETRIES
#if AT86RF2XX_HAVE_RETRIES && defined(AT86RF2XX_REG__XAH_CTRL_2)
dev->tx_retries = (at86rf2xx_reg_read(dev, AT86RF2XX_REG__XAH_CTRL_2)
& AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_MASK) >>
AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_OFFSET;
Expand Down Expand Up @@ -821,6 +821,26 @@ static void _isr(netdev_t *netdev)

#if defined(MODULE_AT86RFA1) || defined(MODULE_AT86RFR2)

/**
* @brief ISR for transceiver's TX_START interrupt
*
* In procedure TX_ARET the TRX24_TX_START interrupt is issued separately for every
* frame transmission and frame retransmission.
* Indicates the frame start of a transmitted acknowledge frame in procedure RX_AACK.
*
* Flow Diagram Manual p. 52 / 63
*/
#if AT86RF2XX_HAVE_RETRIES
ISR(TRX24_TX_START_vect){
/* __enter_isr(); is not neccessary as there is nothing which causes a
* thread_yield and the interrupt can not be interrupted by an other ISR */

at86rf2xx_t *dev = (at86rf2xx_t *) at86rfmega_dev;

dev->tx_retries++;
}
#endif

/**
* @brief ISR for transceiver's receive end interrupt
*
Expand Down
3 changes: 3 additions & 0 deletions drivers/at86rf2xx/include/at86rf2xx_registers.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ extern "C" {
#define AT86RF2XX_REG__TRX_RPC (&TRX_RPC)
#define AT86RF2XX_REG__ANT_DIV (&ANT_DIV)
#define AT86RF2XX_REG__IRQ_MASK (&IRQ_MASK)
#ifdef IRQ_MASK1
#define AT86RF2XX_REG__IRQ_MASK1 (&IRQ_MASK1)
#endif
#define AT86RF2XX_REG__IRQ_STATUS (&IRQ_STATUS)
#define AT86RF2XX_REG__IRQ_STATUS1 (&IRQ_STATUS1)
#define AT86RF2XX_REG__VREG_CTRL (&VREG_CTRL)
Expand Down
6 changes: 3 additions & 3 deletions drivers/include/at86rf2xx.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ extern "C" {
# define MIN_RX_SENSITIVITY (-101)
#endif

#if defined(DOXYGEN) || defined(MODULE_AT86RF232) || defined(MODULE_AT86RF233)
#if defined(DOXYGEN) || defined(MODULE_AT86RF232) || defined(MODULE_AT86RF233) || defined(MODULE_AT86RFR2)
/**
* @brief Frame retry counter reporting
*
Expand Down Expand Up @@ -284,7 +284,7 @@ typedef struct {
return to @ref at86rf2xx_t::idle_state */
#if AT86RF2XX_HAVE_RETRIES
/* Only radios with the XAH_CTRL_2 register support frame retry reporting */
uint8_t tx_retries; /**< Number of NOACK retransmissions */
int8_t tx_retries; /**< Number of NOACK retransmissions */
#endif
/** @} */
} at86rf2xx_t;
Expand Down Expand Up @@ -619,7 +619,7 @@ size_t at86rf2xx_tx_load(at86rf2xx_t *dev, const uint8_t *data,
*
* @param[in] dev device to trigger
*/
void at86rf2xx_tx_exec(const at86rf2xx_t *dev);
void at86rf2xx_tx_exec(at86rf2xx_t *dev);

/**
* @brief Perform one manual channel clear assessment (CCA)
Expand Down