mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-25 14:33:52 +01:00
Merge pull request #3025 from OlegHahm/netconf_retransmit
netconf: at86rf231: configure maximum retransmits
This commit is contained in:
commit
c839e65479
@ -316,6 +316,27 @@ int16_t ng_at86rf2xx_get_txpower(ng_at86rf2xx_t *dev);
|
||||
*/
|
||||
void ng_at86rf2xx_set_txpower(ng_at86rf2xx_t *dev, int16_t txpower);
|
||||
|
||||
/**
|
||||
* @brief Get the maximum number of retransmissions
|
||||
*
|
||||
* @param[in] dev device to read from
|
||||
*
|
||||
* @return configured number of retransmissions
|
||||
*/
|
||||
uint8_t ng_at86rf2xx_get_max_retries(ng_at86rf2xx_t *dev);
|
||||
|
||||
/**
|
||||
* @brief Set the maximum number of retransmissions
|
||||
*
|
||||
* This setting specifies the number of attempts to retransmit a frame, when it
|
||||
* was not acknowledged by the recipient, before the transaction gets cancelled.
|
||||
* The maximum value is 7.
|
||||
*
|
||||
* @param[in] dev device to write to
|
||||
* @param[in] max the maximum number of retransmissions
|
||||
*/
|
||||
void ng_at86rf2xx_set_max_retries(ng_at86rf2xx_t *dev, uint8_t max);
|
||||
|
||||
/**
|
||||
* @brief Enable or disable driver specific options
|
||||
*
|
||||
|
||||
@ -291,6 +291,15 @@ extern "C" {
|
||||
#define NG_AT86RF2XX_TIMING__RESET_TO_TRX_OFF (37)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Bitfield definitions for the XAH_CTRL_0 register
|
||||
* @{
|
||||
*/
|
||||
#define NG_AT86RF2XX_XAH_CTRL_0__MAX_FRAME_RETRIES (0xF0)
|
||||
#define NG_AT86RF2XX_XAH_CTRL_0__MAX_CSMA_RETRIES (0x0E)
|
||||
#define NG_AT86RF2XX_XAH_CTRL_0__SLOTTED_OPERATION (0x01)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @brief Bitfield definitions for the XAH_CTRL_1 register
|
||||
* @{
|
||||
|
||||
@ -190,7 +190,7 @@ int16_t ng_at86rf2xx_get_txpower(ng_at86rf2xx_t *dev)
|
||||
{
|
||||
#ifdef MODULE_NG_AT86RF212B
|
||||
uint8_t txpower = ng_at86rf2xx_reg_read(dev, NG_AT86RF2XX_REG__PHY_TX_PWR);
|
||||
printf("txpower value: %x\n", txpower);
|
||||
DEBUG("txpower value: %x\n", txpower);
|
||||
return tx_pow_to_dbm(dev->freq, txpower);
|
||||
#else
|
||||
uint8_t txpower = ng_at86rf2xx_reg_read(dev, NG_AT86RF2XX_REG__PHY_TX_PWR)
|
||||
@ -235,6 +235,20 @@ void ng_at86rf2xx_set_txpower(ng_at86rf2xx_t *dev, int16_t txpower)
|
||||
#endif
|
||||
}
|
||||
|
||||
uint8_t ng_at86rf2xx_get_max_retries(ng_at86rf2xx_t *dev)
|
||||
{
|
||||
return (ng_at86rf2xx_reg_read(dev, NG_AT86RF2XX_REG__XAH_CTRL_0) >> 4);
|
||||
}
|
||||
|
||||
void ng_at86rf2xx_set_max_retries(ng_at86rf2xx_t *dev, uint8_t max)
|
||||
{
|
||||
max = (max > 7) ? 7 : max;
|
||||
uint8_t tmp = ng_at86rf2xx_reg_read(dev, NG_AT86RF2XX_REG__XAH_CTRL_0);
|
||||
tmp &= ~(NG_AT86RF2XX_XAH_CTRL_0__MAX_FRAME_RETRIES);
|
||||
tmp |= (max << 4);
|
||||
ng_at86rf2xx_reg_write(dev, NG_AT86RF2XX_REG__XAH_CTRL_0, tmp);
|
||||
}
|
||||
|
||||
void ng_at86rf2xx_set_option(ng_at86rf2xx_t *dev, uint16_t option, bool state)
|
||||
{
|
||||
uint8_t tmp;
|
||||
|
||||
@ -452,6 +452,13 @@ static int _get(ng_netdev_t *device, ng_netconf_opt_t opt,
|
||||
}
|
||||
return sizeof(ng_netconf_enable_t);
|
||||
|
||||
case NETCONF_OPT_RETRANS:
|
||||
if (max_len < sizeof(uint8_t)) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
*((uint8_t *)val) = ng_at86rf2xx_get_max_retries(dev);
|
||||
return sizeof(uint8_t);
|
||||
|
||||
case NETCONF_OPT_PROMISCUOUSMODE:
|
||||
if (dev->options & NG_AT86RF2XX_OPT_PROMISCUOUS) {
|
||||
*((ng_netconf_enable_t *)val) = NETCONF_ENABLE;
|
||||
@ -584,6 +591,13 @@ static int _set(ng_netdev_t *device, ng_netconf_opt_t opt,
|
||||
((bool *)val)[0]);
|
||||
return sizeof(ng_netconf_enable_t);
|
||||
|
||||
case NETCONF_OPT_RETRANS:
|
||||
if (len > sizeof(uint8_t)) {
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
ng_at86rf2xx_set_max_retries(dev, *((uint8_t *)val));
|
||||
return sizeof(uint8_t);
|
||||
|
||||
case NETCONF_OPT_PRELOADING:
|
||||
ng_at86rf2xx_set_option(dev, NG_AT86RF2XX_OPT_PRELOADING,
|
||||
((bool *)val)[0]);
|
||||
|
||||
@ -72,6 +72,8 @@ typedef enum {
|
||||
* the current state */
|
||||
NETCONF_OPT_AUTOACK, /**< en/disable link layer auto ACKs or read
|
||||
* the current state */
|
||||
NETCONF_OPT_RETRANS, /**< get/set the maximum number of
|
||||
retransmissions. */
|
||||
NETCONF_OPT_PROTO, /**< get/set the protocol for the layer
|
||||
* as type ng_nettype_t. */
|
||||
NETCONF_OPT_STATE, /**< get/set the state of network devices as
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user