Hi, On Sat, Sep 3, 2022 at 12:06 PM Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: ... > > On the Tx side, when sending eg. an association request or an > association response, I must expect and wait for an ack. This is > what I am struggling to do. How can I know that a frame which I just > transmitted has been acked? Bonus points, how can I do that in such a > way that it will work with other devices? (hints below) > > > AACK will send a back if a frame with ack request bit was received. > > > > > say in a commit) I have seen no further updates about it so I guess > > > it's still not available. I don't see any other way to know if a > > > frame's ack has been received or not reliably. > > > > You implemented it for the at86rf230 driver (the spi one which is what > > also atusb uses). You implemented the > > > > ctx->trac = IEEE802154_NO_ACK; > > > > which signals the upper layer that if the ack request bit is set, that > > there was no ack. > > > > But yea, there is a missing feature for atusb yet which requires > > firmware changes as well. > > :'( There is a sequence handling in tx done on atusb firmware and I think it should be pretty easy to add a byte for trac status. diff --git a/atusb/fw/mac.c b/atusb/fw/mac.c index 835002c..156bd95 100644 --- a/atusb/fw/mac.c +++ b/atusb/fw/mac.c @@ -116,7 +116,7 @@ static void receive_frame(void) static bool handle_irq(void) { - uint8_t irq; + uint8_t irq, data[2]; irq = reg_read(REG_IRQ_STATUS); if (!(irq & IRQ_TRX_END)) @@ -124,7 +124,15 @@ static bool handle_irq(void) if (txing) { if (eps[1].state == EP_IDLE) { - usb_send(&eps[1], &this_seq, 1, tx_ack_done, NULL); + data[0] = tx_ack_done; + + spi_begin(); + spi_io(REG_TRX_STATE); + + data[1] = spi_recv(); + spi_end(); + + usb_send(&eps[1], &this_seq, sizeof(data), data, NULL); } else { queued_tx_ack = 1; queued_seq = this_seq; Did not test it, but maybe something in this direction? cc Werner Almesberger here, he did most of the atusb hardware and firmware. - Alex