Date: | 2011-09-25 21:57:44 (12 years 2 months ago) |
---|---|
Author: | Stefan Schmidt |
Commit: | 54634ded5466868fc19671fc3ebaa9836b2739e1 |
Message: | ieee802154/at86rf230: Add Automatic retransmit form the extended mode This will handle CSMA/CA for us as well as re-sending frames when no ack comes in timely. Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org> |
Files: |
drivers/ieee802154/at86rf230.c (5 diffs) |
Change Details
drivers/ieee802154/at86rf230.c | ||
---|---|---|
39 | 39 | |
40 | 40 | #include "at86rf230.h" |
41 | 41 | |
42 | //#define ENABLE_AACK | |
42 | #define ENABLE_AACK | |
43 | 43 | |
44 | 44 | struct at86rf230_local { |
45 | 45 | struct spi_device *spi; |
... | ... | |
292 | 292 | might_sleep(); |
293 | 293 | |
294 | 294 | if (state == STATE_FORCE_TX_ON) |
295 | #ifdef ENABLE_AACK | |
296 | desired_status = STATE_TX_ARET_ON; | |
297 | #else | |
295 | 298 | desired_status = STATE_TX_ON; |
299 | #endif | |
296 | 300 | else if (state == STATE_FORCE_TRX_OFF) |
297 | 301 | desired_status = STATE_TRX_OFF; |
298 | 302 | else |
... | ... | |
320 | 324 | pr_debug("%s val2 = %x\n", __func__, val); |
321 | 325 | } while (val == STATE_TRANSITION_IN_PROGRESS); |
322 | 326 | |
327 | #ifdef ENABLE_AACK | |
328 | /* Make sure we go to TX_ON before we go to STATE_TX_ARET_ON */ | |
329 | if (desired_status == STATE_TX_ARET_ON) { | |
330 | rc = at86rf230_write_subreg(lp, SR_TRX_CMD, STATE_TX_ON); | |
331 | if (rc) | |
332 | goto err; | |
333 | ||
334 | do { | |
335 | rc = at86rf230_read_subreg(lp, SR_TRX_STATUS, &val); | |
336 | if (rc) | |
337 | goto err; | |
338 | pr_debug("%s val3 = %x\n", __func__, val); | |
339 | } while (val == STATE_TRANSITION_IN_PROGRESS); | |
340 | ||
341 | rc = at86rf230_write_subreg(lp, SR_TRX_CMD, desired_status); | |
342 | if (rc) | |
343 | goto err; | |
344 | ||
345 | do { | |
346 | rc = at86rf230_read_subreg(lp, SR_TRX_STATUS, &val); | |
347 | if (rc) | |
348 | goto err; | |
349 | pr_debug("%s val4 = %x\n", __func__, val); | |
350 | } while (val == STATE_TRANSITION_IN_PROGRESS); | |
351 | } | |
352 | #endif | |
323 | 353 | |
324 | 354 | if (val == desired_status) |
325 | 355 | return 0; |
... | ... | |
415 | 445 | udelay(80); /* > 62.5 */ |
416 | 446 | gpio_set_value(lp->slp_tr, 0); |
417 | 447 | } else { |
448 | /* FIXME: Stay with STATE_BUSY_TX even if we want to got into | |
449 | * state BUSY_TX_ART. The logic with state and command matching | |
450 | * the same number breaks totally here. */ | |
418 | 451 | rc = at86rf230_write_subreg(lp, SR_TRX_CMD, STATE_BUSY_TX); |
419 | 452 | if (rc) |
420 | 453 | goto err_rx; |
... | ... | |
633 | 666 | |
634 | 667 | msleep(100); |
635 | 668 | |
669 | #ifdef ENABLE_AACK | |
670 | rc = at86rf230_write_subreg(lp, SR_TRX_CMD, STATE_TX_ARET_ON); | |
671 | #else | |
636 | 672 | rc = at86rf230_write_subreg(lp, SR_TRX_CMD, STATE_TX_ON); |
673 | #endif | |
637 | 674 | if (rc) |
638 | 675 | return rc; |
639 | 676 | msleep(1); |
Branches:
ben-wpan
ben-wpan-stefan
5396a9238205f20f811ea57898980d3ca82df0b6
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9