This is an automated email from the ASF dual-hosted git repository.

xiaoxiang781216 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 96a9b69b2c89aaf7a5747e970d27efac0d8a979b
Author: raiden00pl <[email protected]>
AuthorDate: Thu Oct 22 16:59:23 2026 +0200

    drivers/wireless/ieee802154/mrf24j40: number every beacon the radio sends
    
    A beacon queued like a normal frame kept the sequence number the MAC
    left for the radio, and a beacon start restarted macBSN from zero.  Set
    macBSN in every beacon and start it from a random value at reset, the
    PIB default.
    
    Assisted-by: Claude Code
    Signed-off-by: raiden00pl <[email protected]>
---
 drivers/wireless/ieee802154/mrf24j40/mrf24j40.c       | 8 ++++++++
 drivers/wireless/ieee802154/mrf24j40/mrf24j40_radif.c | 7 +++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/wireless/ieee802154/mrf24j40/mrf24j40.c 
b/drivers/wireless/ieee802154/mrf24j40/mrf24j40.c
index 8c3e28fdf7b..60f7ed58dc3 100644
--- a/drivers/wireless/ieee802154/mrf24j40/mrf24j40.c
+++ b/drivers/wireless/ieee802154/mrf24j40/mrf24j40.c
@@ -248,6 +248,14 @@ void mrf24j40_norm_setup(FAR struct mrf24j40_radio_s *dev,
 
   mrf24j40_setreg(dev->spi, MRF24J40_TXMCR, reg);
 
+  /* The radio numbers the beacons (macBSN) */
+
+  if ((frame->io_data[0] & IEEE802154_FRAMECTRL_FTYPE) ==
+      IEEE802154_FRAME_BEACON)
+    {
+      frame->io_data[2] = dev->bsn++;
+    }
+
   /* Setup the FIFO */
 
   mrf24j40_setup_fifo(dev, frame->io_data, frame->io_len,
diff --git a/drivers/wireless/ieee802154/mrf24j40/mrf24j40_radif.c 
b/drivers/wireless/ieee802154/mrf24j40/mrf24j40_radif.c
index 9a7fd3e70e9..81977c47786 100644
--- a/drivers/wireless/ieee802154/mrf24j40/mrf24j40_radif.c
+++ b/drivers/wireless/ieee802154/mrf24j40/mrf24j40_radif.c
@@ -29,6 +29,7 @@
 #include <assert.h>
 #include <errno.h>
 #include <nuttx/debug.h>
+#include <stdlib.h>
 #include <stdint.h>
 #include <stdbool.h>
 #include <string.h>
@@ -597,7 +598,10 @@ int mrf24j40_reset(FAR struct ieee802154_radio_s *radio)
     }
 
   dev->max_frame_waittime = MRF24J40_DEFAULT_MAX_FRAME_WAITTIME;
-  dev->bsn = 0;
+
+  /* macBSN starts from a random value */
+
+  dev->bsn = rand();
 
   /* Default device params */
 
@@ -776,7 +780,6 @@ int mrf24j40_beaconstart(FAR struct ieee802154_radio_s 
*radio,
 
       /* The radio layer is responsible for setting the BSN. */
 
-      dev->bsn = 0;
       mrf24j40_setreg(dev->spi, MRF24J40_BEACON_FIFO + 4, dev->bsn++);
 
       /* Set the TXBMSK (TXBCON1 0x25<7>) bit = 1 to mask the beacon

Reply via email to