Thread (84 messages) 84 messages, 2 authors, 2022-09-05

Re: [PATCH wpan-next 01/20] net: mac802154: Allow the creation of coordinator interfaces

From: Alexander Aring <aahringo@redhat.com>
Date: 2022-09-03 19:10:23

On Sat, Sep 3, 2022 at 3:07 PM Alexander Aring [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi,

On Sat, Sep 3, 2022 at 12:06 PM Miquel Raynal [off-list ref] wrote:
...
quoted
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)
quoted
AACK will send a back if a frame with ack request bit was received.
quoted
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();
data[1] = reg_read(REG_TRX_STATE) as seen above for REG_IRQ_STATUS
would be better here...

- Alex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help