mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-29 16:31:18 +01:00
drivers/kw41zrf: make TX/RX IRQs read only
This brings the implementation in sync with the API.
This commit is contained in:
parent
fba104c2ce
commit
134f323fb1
@ -33,10 +33,6 @@ extern "C" {
|
||||
#define KW41ZRF_OPT_CSMA (0x01u) /**< use CSMA/CA algorithm for sending */
|
||||
#define KW41ZRF_OPT_PROMISCUOUS (0x02u) /**< promiscuous mode active */
|
||||
#define KW41ZRF_OPT_PRELOADING (0x04u) /**< preloading enabled */
|
||||
#define KW41ZRF_OPT_TELL_TX_START (0x08u) /**< notify MAC layer on TX start */
|
||||
#define KW41ZRF_OPT_TELL_TX_END (0x10u) /**< notify MAC layer on TX finished */
|
||||
#define KW41ZRF_OPT_TELL_RX_START (0x20u) /**< notify MAC layer on RX start */
|
||||
#define KW41ZRF_OPT_TELL_RX_END (0x40u) /**< notify MAC layer on RX finished */
|
||||
#define KW41ZRF_OPT_AUTOACK (0x80u) /**< automatic sending of ACKs */
|
||||
#define KW41ZRF_OPT_ACK_PENDING (0x81u) /**< set pending bit on auto ACKs */
|
||||
/** @} */
|
||||
|
||||
@ -96,6 +96,9 @@ int kw41zrf_init(kw41zrf_t *dev, kw41zrf_cb_t cb)
|
||||
/* Allow radio interrupts */
|
||||
kw41zrf_unmask_irqs();
|
||||
|
||||
DEBUG("[kw41zrf] enabling RX start IRQs\n");
|
||||
bit_clear32(&ZLL->PHY_CTRL, ZLL_PHY_CTRL_RX_WMRK_MSK_SHIFT);
|
||||
|
||||
DEBUG("[kw41zrf] init finished\n");
|
||||
|
||||
return 0;
|
||||
|
||||
@ -195,7 +195,6 @@ void kw41zrf_set_option(kw41zrf_t *dev, uint8_t option, uint8_t state)
|
||||
case KW41ZRF_OPT_PROMISCUOUS:
|
||||
case KW41ZRF_OPT_AUTOACK:
|
||||
case KW41ZRF_OPT_ACK_PENDING:
|
||||
case KW41ZRF_OPT_TELL_RX_START:
|
||||
LOG_ERROR("[kw41zrf] Attempt to modify option %04x while radio is sleeping\n",
|
||||
(unsigned) option);
|
||||
assert(0);
|
||||
@ -234,22 +233,6 @@ void kw41zrf_set_option(kw41zrf_t *dev, uint8_t option, uint8_t state)
|
||||
bit_set32(&ZLL->SAM_TABLE, ZLL_SAM_TABLE_ACK_FRM_PND_SHIFT);
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_RX_START:
|
||||
DEBUG("[kw41zrf] enable: TELL_RX_START\n");
|
||||
bit_clear32(&ZLL->PHY_CTRL, ZLL_PHY_CTRL_RX_WMRK_MSK_SHIFT);
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_RX_END:
|
||||
DEBUG("[kw41zrf] enable: TELL_RX_END\n");
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_TX_END:
|
||||
DEBUG("[kw41zrf] enable: TELL_TX_END\n");
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_TX_START:
|
||||
DEBUG("[kw41zrf] enable: TELL_TX_START (ignored)\n");
|
||||
|
||||
default:
|
||||
/* do nothing */
|
||||
break;
|
||||
@ -280,21 +263,6 @@ void kw41zrf_set_option(kw41zrf_t *dev, uint8_t option, uint8_t state)
|
||||
bit_clear32(&ZLL->SAM_TABLE, ZLL_SAM_TABLE_ACK_FRM_PND_SHIFT);
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_RX_START:
|
||||
DEBUG("[kw41zrf] disable: TELL_RX_START\n");
|
||||
bit_set32(&ZLL->PHY_CTRL, ZLL_PHY_CTRL_RX_WMRK_MSK_SHIFT);
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_RX_END:
|
||||
DEBUG("[kw41zrf] disable: TELL_RX_END\n");
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_TX_END:
|
||||
DEBUG("[kw41zrf] disable: TELL_TX_END\n");
|
||||
break;
|
||||
|
||||
case KW41ZRF_OPT_TELL_TX_START:
|
||||
DEBUG("[kw41zrf] disable: TELL_TX_START (ignored)\n");
|
||||
default:
|
||||
/* do nothing */
|
||||
break;
|
||||
|
||||
@ -457,27 +457,11 @@ int kw41zrf_netdev_get(netdev_t *netdev, netopt_t opt, void *value, size_t len)
|
||||
return sizeof(netopt_enable_t);
|
||||
|
||||
case NETOPT_RX_START_IRQ:
|
||||
assert(len >= sizeof(netopt_enable_t));
|
||||
*((netopt_enable_t *)value) =
|
||||
!!(dev->flags & KW41ZRF_OPT_TELL_RX_START);
|
||||
return sizeof(netopt_enable_t);
|
||||
|
||||
case NETOPT_RX_END_IRQ:
|
||||
assert(len >= sizeof(netopt_enable_t));
|
||||
*((netopt_enable_t *)value) =
|
||||
!!(dev->flags & KW41ZRF_OPT_TELL_RX_END);
|
||||
return sizeof(netopt_enable_t);
|
||||
|
||||
case NETOPT_TX_START_IRQ:
|
||||
assert(len >= sizeof(netopt_enable_t));
|
||||
*((netopt_enable_t *)value) =
|
||||
!!(dev->flags & KW41ZRF_OPT_TELL_TX_START);
|
||||
return sizeof(netopt_enable_t);
|
||||
|
||||
case NETOPT_TX_END_IRQ:
|
||||
assert(len >= sizeof(netopt_enable_t));
|
||||
*((netopt_enable_t *)value) =
|
||||
!!(dev->flags & KW41ZRF_OPT_TELL_TX_END);
|
||||
*((netopt_enable_t *)value) = NETOPT_ENABLE;
|
||||
return sizeof(netopt_enable_t);
|
||||
|
||||
case NETOPT_CSMA:
|
||||
@ -661,27 +645,6 @@ static int kw41zrf_netdev_set(netdev_t *netdev, netopt_t opt, const void *value,
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_RX_END_IRQ:
|
||||
assert(len <= sizeof(const netopt_enable_t));
|
||||
kw41zrf_set_option(dev, KW41ZRF_OPT_TELL_RX_END,
|
||||
*((const netopt_enable_t *)value));
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_TX_START_IRQ:
|
||||
assert(len <= sizeof(const netopt_enable_t));
|
||||
kw41zrf_set_option(dev, KW41ZRF_OPT_TELL_TX_START,
|
||||
*((const netopt_enable_t *)value));
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_TX_END_IRQ:
|
||||
assert(len <= sizeof(const netopt_enable_t));
|
||||
kw41zrf_set_option(dev, KW41ZRF_OPT_TELL_TX_END,
|
||||
*((const netopt_enable_t *)value));
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_CSMA_RETRIES:
|
||||
assert(len <= sizeof(uint8_t));
|
||||
dev->csma_max_backoffs = *((const uint8_t*)value);
|
||||
@ -765,13 +728,6 @@ static int kw41zrf_netdev_set(netdev_t *netdev, netopt_t opt, const void *value,
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_RX_START_IRQ:
|
||||
assert(len <= sizeof(const netopt_enable_t));
|
||||
kw41zrf_set_option(dev, KW41ZRF_OPT_TELL_RX_START,
|
||||
*((const netopt_enable_t *)value));
|
||||
res = sizeof(const netopt_enable_t);
|
||||
break;
|
||||
|
||||
case NETOPT_CSMA:
|
||||
assert(len <= sizeof(const netopt_enable_t));
|
||||
kw41zrf_set_option(dev, KW41ZRF_OPT_CSMA,
|
||||
@ -931,7 +887,7 @@ static uint32_t _isr_event_seq_t_ccairq(kw41zrf_t *dev, uint32_t irqsts)
|
||||
kw41zrf_abort_sequence(dev);
|
||||
kw41zrf_set_sequence(dev, dev->idle_seq);
|
||||
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_TX_END) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_TX_MEDIUM_BUSY);
|
||||
LOG_INFO("[kw41zrf] dropping frame after %u backoffs\n",
|
||||
dev->csma_num_backoffs);
|
||||
@ -945,7 +901,7 @@ static uint32_t _isr_event_seq_t_ccairq(kw41zrf_t *dev, uint32_t irqsts)
|
||||
ZLL_LQI_AND_RSSI_CCA1_ED_FNL_SHIFT),
|
||||
dev->csma_num_backoffs
|
||||
);
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_TX_START) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
/* TX will start automatically after CCA check succeeded */
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_TX_STARTED);
|
||||
}
|
||||
@ -962,7 +918,7 @@ static uint32_t _isr_event_seq_r(kw41zrf_t *dev, uint32_t irqsts)
|
||||
if (irqsts & ZLL_IRQSTS_RXWTRMRKIRQ_MASK) {
|
||||
DEBUG("[kw41zrf] RXWTRMRKIRQ (R)\n");
|
||||
handled_irqs |= ZLL_IRQSTS_RXWTRMRKIRQ_MASK;
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_RX_START) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_RX_STARTED);
|
||||
}
|
||||
}
|
||||
@ -1017,7 +973,7 @@ static uint32_t _isr_event_seq_r(kw41zrf_t *dev, uint32_t irqsts)
|
||||
/* Block XCVSEQ_RECEIVE until netdev->recv has been called */
|
||||
dev->recv_blocked = 1;
|
||||
kw41zrf_set_sequence(dev, dev->idle_seq);
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_RX_END) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_RX_COMPLETE);
|
||||
}
|
||||
return handled_irqs;
|
||||
@ -1045,7 +1001,7 @@ static uint32_t _isr_event_seq_t(kw41zrf_t *dev, uint32_t irqsts)
|
||||
|
||||
DEBUG("[kw41zrf] SEQIRQ (T)\n");
|
||||
handled_irqs |= ZLL_IRQSTS_SEQIRQ_MASK;
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_TX_END) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_TX_COMPLETE);
|
||||
}
|
||||
KW41ZRF_LED_TX_OFF;
|
||||
@ -1126,7 +1082,7 @@ static uint32_t _isr_event_seq_tr(kw41zrf_t *dev, uint32_t irqsts)
|
||||
assert(!kw41zrf_is_dsm());
|
||||
kw41zrf_set_sequence(dev, dev->idle_seq);
|
||||
|
||||
if (dev->flags & KW41ZRF_OPT_TELL_TX_END) {
|
||||
if (dev->netdev.netdev.event_callback) {
|
||||
if (seq_ctrl_sts & ZLL_SEQ_CTRL_STS_TC3_ABORTED_MASK) {
|
||||
LOG_DEBUG("[kw41zrf] RXACK timeout (TR)\n");
|
||||
dev->netdev.netdev.event_callback(&dev->netdev.netdev, NETDEV_EVENT_TX_NOACK);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user