CSMA: simplify routine that waits for ACK

This commit is contained in:
Simon Duquennoy 2018-05-31 01:41:24 -07:00
parent b80d113253
commit 4097883229
1 changed files with 5 additions and 15 deletions

View File

@ -196,14 +196,10 @@ send_one_packet(void *ptr)
if(is_broadcast) { if(is_broadcast) {
ret = MAC_TX_OK; ret = MAC_TX_OK;
} else { } else {
rtimer_clock_t wt;
/* Check for ack */ /* Check for ack */
wt = RTIMER_NOW();
watchdog_periodic(); /* Wait for max CSMA_ACK_WAIT_TIME */
while(RTIMER_CLOCK_LT(RTIMER_NOW(), wt + CSMA_ACK_WAIT_TIME)) { RTIMER_BUSYWAIT_UNTIL(NETSTACK_RADIO.pending_packet(), CSMA_ACK_WAIT_TIME);
watchdog_periodic();
}
ret = MAC_TX_NOACK; ret = MAC_TX_NOACK;
if(NETSTACK_RADIO.receiving_packet() || if(NETSTACK_RADIO.receiving_packet() ||
@ -212,14 +208,8 @@ send_one_packet(void *ptr)
int len; int len;
uint8_t ackbuf[CSMA_ACK_LEN]; uint8_t ackbuf[CSMA_ACK_LEN];
if(CSMA_AFTER_ACK_DETECTED_WAIT_TIME > 0) { /* Wait an additional CSMA_AFTER_ACK_DETECTED_WAIT_TIME to complete reception */
wt = RTIMER_NOW(); RTIMER_BUSYWAIT_UNTIL(NETSTACK_RADIO.pending_packet(), CSMA_AFTER_ACK_DETECTED_WAIT_TIME);
watchdog_periodic();
while(RTIMER_CLOCK_LT(RTIMER_NOW(),
wt + CSMA_AFTER_ACK_DETECTED_WAIT_TIME)) {
watchdog_periodic();
}
}
if(NETSTACK_RADIO.pending_packet()) { if(NETSTACK_RADIO.pending_packet()) {
len = NETSTACK_RADIO.read(ackbuf, CSMA_ACK_LEN); len = NETSTACK_RADIO.read(ackbuf, CSMA_ACK_LEN);