drivers/at86rf2xx: make TX/RX IRQs read only
This brings the implementation in sync with the API.
This commit is contained in:
parent
08063bebfe
commit
1d0ee42046
@ -169,6 +169,7 @@ static void at86rf2xx_enable_smart_idle(at86rf2xx_t *dev)
|
|||||||
|
|
||||||
void at86rf2xx_reset(at86rf2xx_t *dev)
|
void at86rf2xx_reset(at86rf2xx_t *dev)
|
||||||
{
|
{
|
||||||
|
uint8_t tmp;
|
||||||
netdev_ieee802154_reset(&dev->netdev);
|
netdev_ieee802154_reset(&dev->netdev);
|
||||||
|
|
||||||
/* Reset state machine to ensure a known state */
|
/* Reset state machine to ensure a known state */
|
||||||
@ -204,7 +205,7 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
|
|||||||
|
|
||||||
#if !defined(MODULE_AT86RFA1) && !defined(MODULE_AT86RFR2)
|
#if !defined(MODULE_AT86RFA1) && !defined(MODULE_AT86RFR2)
|
||||||
/* don't populate masked interrupt flags to IRQ_STATUS register */
|
/* don't populate masked interrupt flags to IRQ_STATUS register */
|
||||||
uint8_t tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_CTRL_1);
|
tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__TRX_CTRL_1);
|
||||||
tmp &= ~(AT86RF2XX_TRX_CTRL_1_MASK__IRQ_MASK_MODE);
|
tmp &= ~(AT86RF2XX_TRX_CTRL_1_MASK__IRQ_MASK_MODE);
|
||||||
at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_CTRL_1, tmp);
|
at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_CTRL_1, tmp);
|
||||||
#endif
|
#endif
|
||||||
@ -243,6 +244,11 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
|
|||||||
/* go into RX state */
|
/* go into RX state */
|
||||||
at86rf2xx_set_state(dev, AT86RF2XX_PHY_STATE_RX);
|
at86rf2xx_set_state(dev, AT86RF2XX_PHY_STATE_RX);
|
||||||
|
|
||||||
|
/* Enable RX start IRQ */
|
||||||
|
tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_MASK);
|
||||||
|
tmp |= AT86RF2XX_IRQ_STATUS_MASK__RX_START;
|
||||||
|
at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK, tmp);
|
||||||
|
|
||||||
DEBUG("at86rf2xx_reset(): reset complete.\n");
|
DEBUG("at86rf2xx_reset(): reset complete.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -292,8 +298,7 @@ void at86rf2xx_tx_exec(at86rf2xx_t *dev)
|
|||||||
/* trigger sending of pre-loaded frame */
|
/* trigger sending of pre-loaded frame */
|
||||||
at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_STATE,
|
at86rf2xx_reg_write(dev, AT86RF2XX_REG__TRX_STATE,
|
||||||
AT86RF2XX_TRX_STATE__TX_START);
|
AT86RF2XX_TRX_STATE__TX_START);
|
||||||
if (netdev->event_callback &&
|
if (netdev->event_callback) {
|
||||||
(dev->flags & AT86RF2XX_OPT_TELL_TX_START)) {
|
|
||||||
netdev->event_callback(netdev, NETDEV_EVENT_TX_STARTED);
|
netdev->event_callback(netdev, NETDEV_EVENT_TX_STARTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -446,14 +446,6 @@ void at86rf2xx_set_option(at86rf2xx_t *dev, uint16_t option, bool state)
|
|||||||
: (tmp | AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK);
|
: (tmp | AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK);
|
||||||
at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp);
|
at86rf2xx_reg_write(dev, AT86RF2XX_REG__CSMA_SEED_1, tmp);
|
||||||
break;
|
break;
|
||||||
case AT86RF2XX_OPT_TELL_RX_START:
|
|
||||||
DEBUG("[at86rf2xx] opt: %s SFD IRQ\n",
|
|
||||||
(state ? "enable" : "disable"));
|
|
||||||
tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__IRQ_MASK);
|
|
||||||
tmp = (state) ? (tmp | AT86RF2XX_IRQ_STATUS_MASK__RX_START)
|
|
||||||
: (tmp & ~AT86RF2XX_IRQ_STATUS_MASK__RX_START);
|
|
||||||
at86rf2xx_reg_write(dev, AT86RF2XX_REG__IRQ_MASK, tmp);
|
|
||||||
break;
|
|
||||||
case AT86RF2XX_OPT_ACK_PENDING:
|
case AT86RF2XX_OPT_ACK_PENDING:
|
||||||
DEBUG("[at86rf2xx] opt: enabling pending ACKs\n");
|
DEBUG("[at86rf2xx] opt: enabling pending ACKs\n");
|
||||||
tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1);
|
tmp = at86rf2xx_reg_read(dev, AT86RF2XX_REG__CSMA_SEED_1);
|
||||||
|
|||||||
@ -346,23 +346,10 @@ static int _get(netdev_t *netdev, netopt_t opt, void *val, size_t max_len)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NETOPT_RX_START_IRQ:
|
case NETOPT_RX_START_IRQ:
|
||||||
*((netopt_enable_t *)val) =
|
|
||||||
!!(dev->flags & AT86RF2XX_OPT_TELL_RX_START);
|
|
||||||
return sizeof(netopt_enable_t);
|
|
||||||
|
|
||||||
case NETOPT_RX_END_IRQ:
|
case NETOPT_RX_END_IRQ:
|
||||||
*((netopt_enable_t *)val) =
|
|
||||||
!!(dev->flags & AT86RF2XX_OPT_TELL_RX_END);
|
|
||||||
return sizeof(netopt_enable_t);
|
|
||||||
|
|
||||||
case NETOPT_TX_START_IRQ:
|
case NETOPT_TX_START_IRQ:
|
||||||
*((netopt_enable_t *)val) =
|
|
||||||
!!(dev->flags & AT86RF2XX_OPT_TELL_TX_START);
|
|
||||||
return sizeof(netopt_enable_t);
|
|
||||||
|
|
||||||
case NETOPT_TX_END_IRQ:
|
case NETOPT_TX_END_IRQ:
|
||||||
*((netopt_enable_t *)val) =
|
*((netopt_enable_t *)val) = NETOPT_ENABLE;
|
||||||
!!(dev->flags & AT86RF2XX_OPT_TELL_TX_END);
|
|
||||||
return sizeof(netopt_enable_t);
|
return sizeof(netopt_enable_t);
|
||||||
|
|
||||||
case NETOPT_CSMA:
|
case NETOPT_CSMA:
|
||||||
@ -601,30 +588,6 @@ static int _set(netdev_t *netdev, netopt_t opt, const void *val, size_t len)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NETOPT_RX_START_IRQ:
|
|
||||||
at86rf2xx_set_option(dev, AT86RF2XX_OPT_TELL_RX_START,
|
|
||||||
((const bool *)val)[0]);
|
|
||||||
res = sizeof(netopt_enable_t);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NETOPT_RX_END_IRQ:
|
|
||||||
at86rf2xx_set_option(dev, AT86RF2XX_OPT_TELL_RX_END,
|
|
||||||
((const bool *)val)[0]);
|
|
||||||
res = sizeof(netopt_enable_t);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NETOPT_TX_START_IRQ:
|
|
||||||
at86rf2xx_set_option(dev, AT86RF2XX_OPT_TELL_TX_START,
|
|
||||||
((const bool *)val)[0]);
|
|
||||||
res = sizeof(netopt_enable_t);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NETOPT_TX_END_IRQ:
|
|
||||||
at86rf2xx_set_option(dev, AT86RF2XX_OPT_TELL_TX_END,
|
|
||||||
((const bool *)val)[0]);
|
|
||||||
res = sizeof(netopt_enable_t);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case NETOPT_CSMA:
|
case NETOPT_CSMA:
|
||||||
if (!IS_ACTIVE(AT86RF2XX_BASIC_MODE)) {
|
if (!IS_ACTIVE(AT86RF2XX_BASIC_MODE)) {
|
||||||
at86rf2xx_set_option(dev, AT86RF2XX_OPT_CSMA,
|
at86rf2xx_set_option(dev, AT86RF2XX_OPT_CSMA,
|
||||||
@ -716,7 +679,7 @@ static void _isr_send_complete(at86rf2xx_t *dev, uint8_t trac_status)
|
|||||||
|
|
||||||
DEBUG("[at86rf2xx] EVT - TX_END\n");
|
DEBUG("[at86rf2xx] EVT - TX_END\n");
|
||||||
|
|
||||||
if (netdev->event_callback && (dev->flags & AT86RF2XX_OPT_TELL_TX_END)) {
|
if (netdev->event_callback) {
|
||||||
switch (trac_status) {
|
switch (trac_status) {
|
||||||
#ifdef MODULE_OPENTHREAD
|
#ifdef MODULE_OPENTHREAD
|
||||||
case AT86RF2XX_TRX_STATE__TRAC_SUCCESS:
|
case AT86RF2XX_TRX_STATE__TRAC_SUCCESS:
|
||||||
@ -752,6 +715,9 @@ static void _isr_send_complete(at86rf2xx_t *dev, uint8_t trac_status)
|
|||||||
static inline void _isr_recv_complete(netdev_t *netdev)
|
static inline void _isr_recv_complete(netdev_t *netdev)
|
||||||
{
|
{
|
||||||
at86rf2xx_t *dev = (at86rf2xx_t *)netdev;
|
at86rf2xx_t *dev = (at86rf2xx_t *)netdev;
|
||||||
|
if (!netdev->event_callback) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (IS_ACTIVE(AT86RF2XX_BASIC_MODE)) {
|
if (IS_ACTIVE(AT86RF2XX_BASIC_MODE)) {
|
||||||
uint8_t phy_status = at86rf2xx_reg_read(dev, AT86RF2XX_REG__PHY_RSSI);
|
uint8_t phy_status = at86rf2xx_reg_read(dev, AT86RF2XX_REG__PHY_RSSI);
|
||||||
bool crc_ok = phy_status & AT86RF2XX_PHY_RSSI_MASK__RX_CRC_VALID;
|
bool crc_ok = phy_status & AT86RF2XX_PHY_RSSI_MASK__RX_CRC_VALID;
|
||||||
@ -803,9 +769,6 @@ static void _isr(netdev_t *netdev)
|
|||||||
if ((state == AT86RF2XX_PHY_STATE_RX)
|
if ((state == AT86RF2XX_PHY_STATE_RX)
|
||||||
|| (state == AT86RF2XX_PHY_STATE_RX_BUSY)) {
|
|| (state == AT86RF2XX_PHY_STATE_RX_BUSY)) {
|
||||||
DEBUG("[at86rf2xx] EVT - RX_END\n");
|
DEBUG("[at86rf2xx] EVT - RX_END\n");
|
||||||
if (!(dev->flags & AT86RF2XX_OPT_TELL_RX_END)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_isr_recv_complete(netdev);
|
_isr_recv_complete(netdev);
|
||||||
|
|
||||||
|
|||||||
@ -177,21 +177,11 @@ extern "C" {
|
|||||||
* @name Internal device option flags
|
* @name Internal device option flags
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define AT86RF2XX_OPT_TELL_TX_START (0x0001) /**< notify MAC layer on TX
|
|
||||||
* start */
|
|
||||||
#define AT86RF2XX_OPT_TELL_TX_END (0x0002) /**< notify MAC layer on TX
|
|
||||||
* finished */
|
|
||||||
#define AT86RF2XX_OPT_TELL_RX_START (0x0004) /**< notify MAC layer on RX
|
|
||||||
* start */
|
|
||||||
#define AT86RF2XX_OPT_TELL_RX_END (0x0008) /**< notify MAC layer on RX
|
|
||||||
* finished */
|
|
||||||
#define AT86RF2XX_OPT_CSMA (0x0010) /**< CSMA active */
|
#define AT86RF2XX_OPT_CSMA (0x0010) /**< CSMA active */
|
||||||
#define AT86RF2XX_OPT_PROMISCUOUS (0x0020) /**< promiscuous mode
|
#define AT86RF2XX_OPT_PROMISCUOUS (0x0020) /**< promiscuous mode active */
|
||||||
* active */
|
|
||||||
#define AT86RF2XX_OPT_PRELOADING (0x0040) /**< preloading enabled */
|
#define AT86RF2XX_OPT_PRELOADING (0x0040) /**< preloading enabled */
|
||||||
#define AT86RF2XX_OPT_AUTOACK (0x0080) /**< Auto ACK active */
|
#define AT86RF2XX_OPT_AUTOACK (0x0080) /**< Auto ACK active */
|
||||||
#define AT86RF2XX_OPT_ACK_PENDING (0x0100) /**< ACK frames with data
|
#define AT86RF2XX_OPT_ACK_PENDING (0x0100) /**< ACK frames with data pending */
|
||||||
* pending */
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user