mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-25 18:57:11 +02:00
atusb/fw/mac.c: reserved code 0 and added notification of TX completion
- mac.c (queued_tx_ack, rx_done, handle_irq): on TX completion, send a a zero byte on EP 1 - mac.c (handle_irq): don't receive zero-sized frames (they're malformed anyway), so that size zero can be used to signal TX completion
This commit is contained in:
parent
23c24f65aa
commit
eeeb5599f8
@ -28,6 +28,7 @@ static uint8_t rx_buf[MAX_PSDU+2]; /* PHDR+payload+LQ */
|
|||||||
static uint8_t tx_buf[MAX_PSDU];
|
static uint8_t tx_buf[MAX_PSDU];
|
||||||
static uint8_t tx_size = 0;
|
static uint8_t tx_size = 0;
|
||||||
static int txing = 0;
|
static int txing = 0;
|
||||||
|
static int queued_tx_ack = 0;
|
||||||
|
|
||||||
|
|
||||||
static uint8_t reg_read(uint8_t reg)
|
static uint8_t reg_read(uint8_t reg)
|
||||||
@ -55,6 +56,10 @@ static void reg_write(uint8_t reg, uint8_t value)
|
|||||||
static void rx_done(void *user)
|
static void rx_done(void *user)
|
||||||
{
|
{
|
||||||
led(0);
|
led(0);
|
||||||
|
if (queued_tx_ack) {
|
||||||
|
usb_send(&eps[1], "", 1, rx_done, NULL);
|
||||||
|
queued_tx_ack = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -64,6 +69,13 @@ static int handle_irq(void)
|
|||||||
uint8_t size, i;
|
uint8_t size, i;
|
||||||
|
|
||||||
if (txing) {
|
if (txing) {
|
||||||
|
if (eps[1].state == EP_IDLE)
|
||||||
|
usb_send(&eps[1], "", 1, rx_done, NULL);
|
||||||
|
else {
|
||||||
|
if (queued_tx_ack)
|
||||||
|
panic();
|
||||||
|
queued_tx_ack = 1;
|
||||||
|
}
|
||||||
txing = 0;
|
txing = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -79,7 +91,7 @@ static int handle_irq(void)
|
|||||||
spi_begin();
|
spi_begin();
|
||||||
spi_send(AT86RF230_BUF_READ);
|
spi_send(AT86RF230_BUF_READ);
|
||||||
size = spi_recv();
|
size = spi_recv();
|
||||||
if (size & 0x80) {
|
if (!size || (size & 0x80)) {
|
||||||
spi_end();
|
spi_end();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user