Hi Nordic team,
This is a follow-up to my previous question here:
Can nRF52833 perform PAwR while also syncing to another PAwR device?
We are now extending our design to support multiple periodic advertisers, where our device:
-
Acts as a PAwR observer (syncs to multiple periodic advertisers)
-
Starts a connectable extended advertiser, allowing another device to connect and perform PAST (Periodic Advertising Sync Transfer)
️ Current configuration:
-
CONFIG_BT_PER_ADV_SYNC_MAX = 4
-
CONFIG_BT_MAX_CONN = 4 (initially)
With this setup, we can successfully sync to 3 periodic advertisers using bt_le_per_adv_sync_subevent() to subscribe to subevents.
Problem:
If CONFIG_BT_MAX_CONN = 4, we cannot start connectable advertising after success with 3 periodic synced . We receive this error:
*** Booting nRF Connect SDK v3.0.0-3bfc46578e42 *** *** Using Zephyr OS v4.0.99-a0e545cb437a *** [00:00:00.005,218] <inf> main_app: EUI64: 3306911FAB19632F [00:00:00.005,310] <inf> main_app: Antenna Delay TX 16309, RX 16309 [00:00:00.005,371] <inf> dw3000: RESET on gpio@50000000 pin 24 [00:00:00.005,371] <inf> dw3000: DW3000 SPI (max 32MHz) [00:00:00.008,636] <inf> dw3000: IRQ on gpio@50000000 pin 19 [00:00:00.008,636] <inf> dw3000: WAKEUP CS [00:00:00.009,857] <inf> dw3000_utils: Using Default Delay TX 16309, RX 16309 [00:00:00.016,723] <inf> main_app: DW3000_ret: 0 [00:00:00.016,723] <inf> main_app: Starting Periodic Advertising with Responses Synchronization Demo [00:00:00.016,815] <inf> bt_sdc_hci_driver: SoftDevice Controller build revision: c7 53 7d bc 06 12 f7 c0 b3 3a 3e 28 8e 56 1e d7 |.S}..... .:>(.V.. a0 be 95 b0 |.... [00:00:00.019,439] <inf> bt_hci_core: HW Platform: Nordic Semiconductor (0x0002) [00:00:00.019,470] <inf> bt_hci_core: HW Variant: nRF52x (0x0002) [00:00:00.019,470] <inf> bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 199.32083 Build 4145153724 [00:00:00.020,355] <inf> bt_hci_core: Identity: DD:0F:C1:95:12:65 (random) [00:00:00.020,385] <inf> bt_hci_core: HCI: version 6.0 (0x0e) revision 0x10e8, manufacturer 0x0059 [00:00:00.020,416] <inf> bt_hci_core: LMP: version 6.0 (0x0e) subver 0x10e8 [00:00:00.021,453] <inf> main_app: Advertise start success [00:00:00.021,484] <inf> main_app: Waiting for connected... [00:00:04.648,590] <inf> main_app: Connected, err 0x00 [00:00:04.649,902] <inf> main_app: Advertise start success [00:00:04.649,963] <inf> main_app: Waiting for periodic sync... [00:00:04.964,630] <inf> main_app: Synced to 36:85:C9:D6:F0:90 (random) with 20 subevents [00:00:04.964,904] <inf> main_app: Set sync to subevent 0 [00:00:04.964,996] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:04.965,270] <inf> main_app: Periodic sync established. [00:00:04.965,301] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:05.164,459] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:05.164,672] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:05.223,205] <inf> main_app: GATT timing update: F7:02:A5:36:9E:86 (random) subevent=0 slot=0 [00:00:05.223,449] <inf> main_app: Changed sync to subevent 0 [00:00:05.364,440] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:05.364,654] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:05.564,422] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:05.564,636] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:05.673,156] <inf> main_app: Total Synced: 1 [00:00:05.673,217] <inf> main_app: Disconnected, reason 0x13 [00:00:05.674,407] <inf> main_app: Advertise start success [00:00:05.764,404] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:05.764,617] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:05.964,385] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:05.964,599] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:06.164,367] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:06.164,581] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:06.364,349] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:06.364,562] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:06.564,331] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:06.564,544] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:06.764,312] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:06.764,526] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:06.964,294] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:06.964,508] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:07.164,276] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:07.164,489] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:07.364,257] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:07.364,501] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:07.564,239] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:07.564,422] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:07.764,221] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:07.764,526] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:07.964,202] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:07.964,447] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:08.164,184] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:08.164,428] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:08.364,166] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:08.364,410] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:08.564,147] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:08.564,392] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:08.764,129] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:08.764,373] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:08.964,111] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:08.964,355] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:09.164,093] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:09.164,337] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:09.364,074] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:09.364,288] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:09.564,056] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:09.564,361] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:09.678,710] <inf> main_app: Connected, err 0x00 [00:00:09.680,023] <inf> main_app: Advertise start success [00:00:09.764,038] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:09.764,282] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:09.964,019] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:09.964,263] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:10.153,228] <inf> main_app: Synced to 0B:F4:54:9B:97:90 (random) with 20 subevents [00:00:10.153,503] <inf> main_app: Set sync to subevent 0 [00:00:10.153,564] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:10.153,778] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:10.164,031] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:10.164,245] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:10.211,822] <inf> main_app: GATT timing update: F1:1C:7E:B3:DE:29 (random) subevent=0 slot=0 [00:00:10.212,005] <wrn> bt_hci_core: opcode 0x2084 status 0x3a [00:00:10.212,036] <err> main_app: Failed to set subevents to sync to (err -5) [00:00:10.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:10.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:10.364,013] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:10.364,227] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:10.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:10.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:10.563,995] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:10.564,208] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:10.661,834] <inf> main_app: Total Synced: 2 [00:00:10.661,895] <inf> main_app: Disconnected, reason 0x13 [00:00:10.663,085] <inf> main_app: Advertise start success [00:00:10.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:10.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:10.763,977] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:10.764,190] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:10.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:10.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:10.963,958] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:10.964,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:11.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:11.153,259] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:11.163,940] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:11.164,154] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:11.353,027] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:11.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:11.363,922] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:11.364,135] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:11.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:11.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:11.563,903] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:11.564,117] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:11.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:11.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:11.763,885] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:11.764,099] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:11.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:11.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:11.963,867] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:11.964,080] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:12.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:12.153,259] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:12.163,848] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:12.164,062] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:12.353,027] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:12.353,240] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:12.363,830] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:12.364,044] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:12.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:12.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:12.563,812] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:12.564,025] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:12.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:12.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:12.763,793] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:12.764,038] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:12.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:12.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:12.963,775] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:12.964,019] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:13.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:13.153,259] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:13.163,757] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:13.164,001] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:13.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:13.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:13.363,739] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:13.363,952] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:13.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:13.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:13.563,720] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:13.563,934] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:13.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:13.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:13.763,702] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:13.763,916] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:13.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:13.953,247] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:13.963,684] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:13.963,897] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:14.153,228] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:14.163,665] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:14.163,879] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:14.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:14.363,647] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:14.363,922] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.471,832] <inf> main_app: Connected, err 0x00 [00:00:14.473,144] <inf> main_app: Advertise start success [00:00:14.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:14.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:14.563,629] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:14.563,842] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:14.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:14.763,610] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:14.763,824] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.877,105] <inf> main_app: Synced to 1F:E1:C2:AE:30:14 (random) with 20 subevents [00:00:14.877,349] <inf> main_app: Set sync to subevent 0 [00:00:14.877,441] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:14.877,655] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:14.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:14.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:14.963,592] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:14.963,806] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:14.985,687] <inf> main_app: GATT timing update: ED:24:90:7A:60:6F (random) subevent=0 slot=0 [00:00:14.985,900] <wrn> bt_hci_core: opcode 0x2084 status 0x3a [00:00:14.985,900] <err> main_app: Failed to set subevents to sync to (err -5) [00:00:15.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:15.077,148] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:15.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:15.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:15.163,574] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:15.163,787] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:15.276,916] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:15.277,160] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:15.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:15.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:15.363,586] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:15.363,800] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:15.435,699] <inf> main_app: Total Synced: 3 [00:00:15.435,729] <inf> main_app: Disconnected, reason 0x13 [00:00:15.436,828] <wrn> bt_hci_core: opcode 0x2039 status 0x0d [00:00:15.436,828] <err> bt_adv: Failed to start advertiser [00:00:15.436,859] <inf> main_app: Failed to start extended advertising (err -12) [00:00:15.436,859] <inf> main_app: Advertise start failed [00:00:15.476,928] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:15.477,142] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:15.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:15.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:15.563,537] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:15.563,751] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:15.676,910] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:15.677,154] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:15.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:15.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:15.763,549] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:15.763,763] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:15.876,922] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:15.877,136] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:15.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:15.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:15.963,531] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:15.963,745] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:16.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:16.077,148] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:16.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:16.153,259] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:16.163,513] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:16.163,726] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:16.276,916] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:16.277,160] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:16.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:16.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:16.363,494] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:16.363,708] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:16.476,928] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:16.477,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:16.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:16.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:16.563,476] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:16.563,690] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:16.676,940] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:16.677,154] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:16.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:16.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:16.763,458] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:16.763,671] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:16.876,922] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:16.877,136] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:16.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:16.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:16.963,439] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:16.963,653] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:17.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:17.077,148] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:17.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:17.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:17.163,421] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:17.163,635] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:17.276,947] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:17.277,160] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:17.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:17.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:17.363,403] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:17.363,616] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:17.476,928] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:17.477,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:17.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:17.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:17.563,385] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:17.563,598] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:17.676,940] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:17.677,154] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:17.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:17.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:17.763,366] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:17.763,580] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:17.876,922] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:17.877,166] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:17.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:17.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:17.963,378] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:17.963,592] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:18.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:18.077,178] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:18.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:18.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:18.163,360] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:18.163,574] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:18.276,947] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:18.277,160] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:18.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:18.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:18.363,342] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:18.363,555] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:18.476,928] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:18.477,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:18.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:18.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:18.563,323] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:18.563,537] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:18.676,940] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:18.677,185] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:18.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:18.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:18.763,305] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:18.763,519] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:18.876,953] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:18.877,166] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:18.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:18.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:18.963,287] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:18.963,500] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:19.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:19.077,178] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:19.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:19.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:19.163,269] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:19.163,482] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:19.276,947] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:19.277,160] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:19.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:19.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:19.363,250] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:19.363,464] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:19.476,959] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:19.477,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:19.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:19.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:19.563,232] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:19.563,446] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:19.676,940] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:19.677,185] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:19.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:19.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:19.763,214] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:19.763,427] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:19.876,953] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:19.877,166] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:19.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:19.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:19.963,195] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:19.963,409] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:20.076,934] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:20.077,178] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:20.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:20.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:20.163,177] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:20.163,391] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:20.276,947] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:20.277,191] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:20.353,057] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:20.353,271] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:20.363,159] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:20.363,372] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:20.476,959] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:20.477,172] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:20.553,039] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:20.553,283] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:20.563,140] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:20.563,354] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:20.676,940] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:20.677,185] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:20.753,051] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:20.753,265] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:20.763,122] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:20.763,336] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED [00:00:20.876,953] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:20.877,166] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:20.953,033] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:20.953,277] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:21.076,965] <inf> main_app: Indication from 19987710E7733DA5, subevent 0, responding in slot 0 [00:00:21.077,178] <inf> main_app: Initiator 3306911FAB19632F sending Responder 19987710E7733DA5 [00:00:21.153,045] <inf> main_app: Indication from 824CD893202B3DA4, subevent 0, responding in slot 0 [00:00:21.153,289] <inf> main_app: Initiator 3306911FAB19632F sending Responder 824CD893202B3DA4 [00:00:21.163,085] <inf> main_app: Indication from 9848800670EBF9ED, subevent 0, responding in slot 0 [00:00:21.163,299] <inf> main_app: Initiator 3306911FAB19632F sending Responder 9848800670EBF9ED
But if we increase CONFIG_BT_MAX_CONN = 8, we still can start connectable advertising after synced with 3 periodic advertiser.
CONFIG_BT=y CONFIG_BT_OBSERVER=y CONFIG_BT_BROADCASTER=y CONFIG_BT_EXT_ADV=y CONFIG_BT_PER_ADV_SYNC=y CONFIG_BT_PER_ADV_SYNC_MAX=4 CONFIG_BT_DEVICE_NAME="PAwR sync sample" CONFIG_BT_MAX_CONN=4 CONFIG_BT_PERIPHERAL=y CONFIG_BT_PER_ADV_SYNC_TRANSFER_SENDER=y CONFIG_BT_PER_ADV_SYNC_TRANSFER_RECEIVER=y CONFIG_BT_PER_ADV_SYNC_RSP=y CONFIG_BT_PER_ADV_SYNC_BUF_SIZE=247 CONFIG_LOG=y CONFIG_DW3000=y CONFIG_DW3000_CHIP_DW3000=y CONFIG_SPI=y CONFIG_GPIO=y CONFIG_FLASH=y CONFIG_SPI_NOR=y CONFIG_CBPRINTF_FP_SUPPORT=y CONFIG_DK_LIBRARY=y
/* * Main application for Tag device: Multi-forklift PAwR sync + UWB TWR + per-peer slot config * * Copyright (c) 2023 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #include <zephyr/bluetooth/bluetooth.h> #include <zephyr/bluetooth/conn.h> #include <zephyr/bluetooth/gatt.h> #include <zephyr/bluetooth/uuid.h> #include <zephyr/bluetooth/hci.h> #include <zephyr/sys/util.h> #include <zephyr/sys/byteorder.h> #include <zephyr/logging/log.h> #include <zephyr/drivers/flash.h> #include <nrfx.h> #include <dk_buttons_and_leds.h> #include "peer_forklift_manager.h" #include "dw3000_utils.h" LOG_MODULE_REGISTER(main_app, CONFIG_MAIN_APP_LOG_LEVEL); #define DEVICE_NAME CONFIG_BT_DEVICE_NAME #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) uint64_t eui64_from_device = 0; static K_MUTEX_DEFINE(dw3000_mutex); static K_SEM_DEFINE(sem_connected, 0, 1); static K_SEM_DEFINE(sem_per_sync, 0, 1); static K_SEM_DEFINE(sem_per_sync_lost, 0, 1); static struct bt_conn *default_conn; static struct __packed { uint64_t eui64; uint8_t subevent; uint8_t response_slot; } pawr_timing; // ---- Manufacturer Data (Advertising Payload) ---- struct adv_mfg_data { uint16_t company_code; /* Company Identifier Code. */ uint32_t magic_number; /* Magic number for filtering */ uint8_t reserved; /* Reserved */ uint8_t node_type; /* UWB Node type */ uint64_t eui64; /* EUI64 of UWB DW3000. */ int64_t ticks; /* Ticks of system. */ } __packed; static struct adv_mfg_data mfg_data; // ---- Advertising Params ---- struct bt_le_adv_param adv_param_conn = BT_LE_ADV_PARAM_INIT(BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_USE_IDENTITY | BT_LE_ADV_OPT_CONN, BT_GAP_ADV_FAST_INT_MIN_2, BT_GAP_ADV_FAST_INT_MAX_2, NULL); struct bt_le_adv_param adv_param_noconn = BT_LE_ADV_PARAM_INIT(BT_LE_ADV_OPT_EXT_ADV | BT_LE_ADV_OPT_USE_IDENTITY, BT_GAP_ADV_FAST_INT_MIN_2, BT_GAP_ADV_FAST_INT_MAX_2, NULL); struct bt_le_adv_param *adv_param = &adv_param_conn; static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), BT_DATA(BT_DATA_MANUFACTURER_DATA, (unsigned char *)&mfg_data, sizeof(mfg_data)) }; static struct bt_le_ext_adv *adv; static void adv_work_handle(struct k_work *item); static K_WORK_DEFINE(adv_work, adv_work_handle); static void adv_connectable(void) { adv_param = &adv_param_conn; k_work_submit(&adv_work); } static void adv_non_connectable(void) { adv_param = &adv_param_noconn; k_work_submit(&adv_work); } // ---- PAwR sync callback: add peer, use per-peer subevent/slot ---- static void sync_cb(struct bt_le_per_adv_sync *sync, struct bt_le_per_adv_sync_synced_info *info) { char le_addr[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(info->addr, le_addr, sizeof(le_addr)); LOG_INF("Synced to %s with %d subevents", le_addr, info->num_subevents); struct peer_forklift_entry *peer = peer_forklift_add(sync, 0); if (peer) { peer->pawr_synced = true; peer->last_seen_ms = k_uptime_get(); // Set subevent/slot for this peer (may default to 0, can be changed later via GATT) struct bt_le_per_adv_sync_subevent_params params; uint8_t subevents[1] = { peer->subevent }; params.properties = 0; params.num_subevents = 1; params.subevents = subevents; int err = bt_le_per_adv_sync_subevent(sync, ¶ms); if (err) { LOG_ERR("Failed to set subevent %d (err %d)", subevents[0], err); } else { LOG_INF("Set sync to subevent %d", subevents[0]); } } k_sem_give(&sem_per_sync); } // ---- PAwR sync lost callback ---- static void term_cb(struct bt_le_per_adv_sync *sync, const struct bt_le_per_adv_sync_term_info *info) { char le_addr[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(info->addr, le_addr, sizeof(le_addr)); LOG_INF("Sync terminated (reason %d)", info->reason); peer_forklift_remove_by_sync(sync); k_sem_give(&sem_per_sync_lost); } // ---- PAwR Indication/Recv Callback: update peer, trigger TWR ---- static bool print_ad_field(struct bt_data *data, void *user_data) { ARG_UNUSED(user_data); LOG_DBG("Type: 0x%02X Len: %u", data->type, data->data_len); LOG_HEXDUMP_DBG(data->data, data->data_len, "response_cb"); uint64_t eui64_forklift; memcpy(&eui64_forklift, &data->data[2], sizeof(eui64_forklift)); if (user_data) { memcpy(user_data, &eui64_forklift, sizeof(eui64_forklift)); } return true; } int bt_le_per_adv_set_response_data(struct bt_le_per_adv_sync *per_adv_sync, const struct bt_le_per_adv_response_params *params, const struct net_buf_simple *data); static struct bt_le_per_adv_response_params rsp_params; NET_BUF_SIMPLE_DEFINE_STATIC(rsp_buf, 247); static void recv_cb(struct bt_le_per_adv_sync *sync, const struct bt_le_per_adv_sync_recv_info *info, struct net_buf_simple *buf) { if (!buf || !buf->len) { LOG_INF("Received empty indication: subevent %d", info->subevent); return; } struct peer_forklift_entry *peer = peer_forklift_find_by_sync(sync); if (!peer) { LOG_WRN("No peer for PAwR sync handle"); return; } // Prepare response payload net_buf_simple_reset(&rsp_buf); net_buf_simple_add_mem(&rsp_buf, buf->data, 10); net_buf_simple_add_mem(&rsp_buf, &eui64_from_device, 8); net_buf_simple_add_mem(&rsp_buf, buf->data + 18, buf->len - 18); // Update peer state, TWR schedule (from indication payload) uint64_t eui64_forklift = 0; bt_data_parse(buf, print_ad_field, &eui64_forklift); peer->eui64 = eui64_forklift; peer->last_seen_ms = k_uptime_get(); peer_forklift_schedule_twr(peer, K_NO_WAIT); // Prepare response params rsp_params.request_event = info->periodic_event_counter; rsp_params.request_subevent = info->subevent; rsp_params.response_subevent = info->subevent; rsp_params.response_slot = peer->response_slot; LOG_INF("Indication from %llX, subevent %d, responding in slot %d", peer->eui64, info->subevent, peer->response_slot); if (peer->subevent != info->subevent) { struct bt_le_per_adv_sync_subevent_params params; uint8_t subevents[1] = { peer->subevent }; params.properties = 0; params.num_subevents = 1; params.subevents = subevents; int err = bt_le_per_adv_sync_subevent(sync, ¶ms); if (err) { LOG_ERR("Failed to set subevents to sync to (err %d)", err); } else { LOG_INF("Changed sync to subevent %d", subevents[0]); } } int err = bt_le_per_adv_set_response_data(sync, &rsp_params, &rsp_buf); if (err) { LOG_ERR("Failed to send response (err %d)", err); } } // ---- Zephyr sync callback registration ---- static struct bt_le_per_adv_sync_cb sync_callbacks = { .synced = sync_cb, .term = term_cb, .recv = recv_cb, }; // ---- GATT for per-peer slot config (write timing) ---- static const struct bt_uuid_128 pawr_svc_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x12345678, 0x1234, 0x5678, 0x1234, 0x56789abcdef0)); static const struct bt_uuid_128 pawr_char_uuid = BT_UUID_INIT_128(BT_UUID_128_ENCODE(0x12345678, 0x1234, 0x5678, 0x1234, 0x56789abcdef1)); // Buffer: [0]=subevent, [1]=response_slot static ssize_t write_timing(struct bt_conn *conn, const struct bt_gatt_attr *attr, const void *buf, uint16_t len, uint16_t offset, uint8_t flags) { if (offset) { return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); } if (len != sizeof(pawr_timing)) { return BT_GATT_ERR(BT_ATT_ERR_INVALID_ATTRIBUTE_LEN); } memcpy(&pawr_timing, buf, len); // Find peer by BLE connection's address const bt_addr_le_t *addr = bt_conn_get_dst(conn); if (!addr) { LOG_ERR("Cannot get peer addr from conn!"); return BT_GATT_ERR(BT_ATT_ERR_UNLIKELY); } struct peer_forklift_entry *peer = peer_forklift_find_by_eui64(pawr_timing.eui64); if (peer) { peer->subevent = pawr_timing.subevent; peer->response_slot = pawr_timing.response_slot; char addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); LOG_INF("GATT timing update: %s subevent=%d slot=%d", addr_str, pawr_timing.subevent, pawr_timing.response_slot); // Set subevent/slot for this peer (may default to 0, can be changed later via GATT) struct bt_le_per_adv_sync_subevent_params params; uint8_t subevents[1] = { peer->subevent }; params.properties = 0; params.num_subevents = 1; params.subevents = subevents; if (peer->sync) { int err = bt_le_per_adv_sync_subevent(peer->sync, ¶ms); if (err) { LOG_ERR("Failed to set subevents to sync to (err %d)", err); } else { LOG_INF("Changed sync to subevent %d", subevents[0]); } } else { LOG_INF("Not synced yet"); } } else { char addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); LOG_WRN("GATT timing: No matching peer for conn %s", addr_str); } return len; } BT_GATT_SERVICE_DEFINE(pawr_svc, BT_GATT_PRIMARY_SERVICE(&pawr_svc_uuid.uuid), BT_GATT_CHARACTERISTIC(&pawr_char_uuid.uuid, BT_GATT_CHRC_WRITE, BT_GATT_PERM_WRITE, NULL, write_timing, NULL)); // ---- BLE connection callbacks ---- void connected(struct bt_conn *conn, uint8_t err) { LOG_INF("Connected, err 0x%02X %s", err, bt_hci_err_to_str(err)); if (err) { default_conn = NULL; return; } default_conn = bt_conn_ref(conn); adv_non_connectable(); k_sem_give(&sem_connected); } void disconnected(struct bt_conn *conn, uint8_t reason) { bt_conn_unref(default_conn); default_conn = NULL; int peer_count = peer_forklift_count(); LOG_INF("Total Synced: %d", peer_count); if (peer_count < CONFIG_BT_PER_ADV_SYNC_MAX) { adv_connectable(); } else { adv_non_connectable(); } LOG_INF("Disconnected, reason 0x%02X %s", reason, bt_hci_err_to_str(reason)); } BT_CONN_CB_DEFINE(conn_cb) = { .connected = connected, .disconnected = disconnected, }; static void adv_scanned_cb(struct bt_le_ext_adv *adv, struct bt_le_ext_adv_scanned_info *info) { LOG_DBG("Scanned Callback"); } const static struct bt_le_ext_adv_cb adv_cb = { .scanned = adv_scanned_cb, }; // ---- Advertising Start Logic ---- static int adv_start(void) { int err; struct bt_le_ext_adv_start_param ext_adv_start_param = {0}; if (adv) { err = bt_le_ext_adv_stop(adv); if (err) { LOG_INF("Failed to stop extended advertising (err %d)", err); return err; } err = bt_le_ext_adv_delete(adv); if (err) { LOG_INF("Failed to delete advertising set (err %d)", err); return err; } } mfg_data.company_code = sys_cpu_to_le16(CONFIG_BT_COMPANY_ID_NORDIC); mfg_data.magic_number = 0xDEADBEEF; mfg_data.reserved = 0; mfg_data.node_type = NODE_TYPE_TAG; mfg_data.eui64 = eui64_from_device; mfg_data.ticks = 0; err = bt_le_ext_adv_create(adv_param, &adv_cb, &adv); if (err) { LOG_INF("Failed to create advertising set (err %d)", err); return err; } err = bt_le_ext_adv_set_data(adv, ad, ARRAY_SIZE(ad), NULL, 0); if (err) { LOG_INF("Failed setting adv data (err %d)", err); return err; } err = bt_le_ext_adv_start(adv, &ext_adv_start_param); if (err) { LOG_INF("Failed to start extended advertising (err %d)", err); return err; } return err; } static void adv_work_handle(struct k_work *item) { int err = adv_start(); if (err) { LOG_INF("Advertise start failed"); return; } LOG_INF("Advertise start success"); } void read_antenna_delay_from_ext_flash(uint16_t *antenna_delay_tx, uint16_t *antenna_delay_rx) { uint16_t tx = ANTENNA_DELAY_DEFAULT; uint16_t rx = ANTENNA_DELAY_DEFAULT; #if DT_NODE_HAS_STATUS(DT_ALIAS(spi_flash0), okay) const struct device* const flash_dev = DEVICE_DT_GET(DT_ALIAS(spi_flash0)); if (!device_is_ready(flash_dev)) { LOG_ERR("%s: device not ready.", flash_dev->name); goto update_ptr; } uint8_t f_data[4]; // Read only what you need (first 4 bytes) int err = flash_read(flash_dev, 0x80000, f_data, sizeof(f_data)); if (err) { LOG_ERR("Antenna Delay read Ext Flash error %d", err); goto update_ptr; } uint32_t otp = (f_data[0] << 24) | (f_data[1] << 16) | (f_data[2] << 8) | f_data[3]; if (otp != 0x00000000 && otp != 0xFFFFFFFF) { rx = (otp >> 16) & 0xFFFFU; tx = otp & 0xFFFFU; LOG_INF("Antenna Delay TX %u, RX %u", tx, rx); } else { LOG_INF("Using Default Delay TX %u, RX %u", tx, rx); } #else goto update_ptr; #endif update_ptr: *antenna_delay_tx = tx; *antenna_delay_rx = rx; } uint64_t read_eui64_from_device() { uint64_t read_eui64_addr = 0; uint8_t eui64[8] = { 0 }; uint32_t deviceid0 = NRF_FICR->DEVICEID[0]; uint32_t deviceid1 = NRF_FICR->DEVICEID[1]; memcpy(eui64, &deviceid0, 4); memcpy(eui64 + 4, &deviceid1, 4); for (int i = 0; i < 8; i++) { read_eui64_addr |= ((uint64_t)eui64[i]) << (8 * i); } return read_eui64_addr; } void uwb_tag_twr(struct peer_forklift_entry *peer) { if (!peer) return; if (k_mutex_lock(&dw3000_mutex, K_NO_WAIT) != 0) return; bool is_ranging_success = false; double distance = 0; // dw3000_initialize(); LOG_INF("Initiator %llX sending Responder %llX", eui64_from_device ,peer->eui64); // dw3000_rx_info_t rx_info; // transmit_poll_message(rx_info, peer->eui64); // if (dw3000_rx_data(&rx_info, find_response_message, POLL_TICKS_TIMEOUT)) { // distance = dw3000_get_distance_from_response_msg(rx_info); // transmit_final_message(rx_info); // is_ranging_success = true; // } else { // LOG_WRN("Not found response message from Responder %llX", peer->eui64); // } // if (is_ranging_success) { // LOG_INF("Initiator %llX and Responder %llX Distance: %+0.12f m Time: %lld", // eui64_from_device, peer->eui64, distance, k_uptime_get() - peer->last_ranged_ms); // peer->last_ranged_ms = k_uptime_get(); // peer->last_warn_ms = (distance < WARN_DISTANCE) ? peer->last_ranged_ms : peer->last_warn_ms; // peer->last_alert_ms = (distance < ALERT_DISTANCE) ? peer->last_ranged_ms : peer->last_alert_ms; // } else { // LOG_ERR("Ranging with Responder %llX is not success", peer->eui64); // } // dw3000_sleep(); k_mutex_unlock(&dw3000_mutex); } // ---- Main entrypoint ---- int main(void) { struct bt_le_per_adv_sync_transfer_param past_param; int err; dk_leds_init(); peer_forklift_manager_init(); // Peer+TWR static init // -- UWB/dw3000 init omitted -- eui64_from_device = read_eui64_from_device(); LOG_INF("EUI64: %llX", eui64_from_device); dw3000_set_eui64(eui64_from_device); uint16_t antenna_delay_tx = 0, antenna_delay_rx = 0; read_antenna_delay_from_ext_flash(&antenna_delay_tx, &antenna_delay_rx); dw3000_set_antenna_delay(antenna_delay_tx, antenna_delay_rx); int dw300_ret = dw3000_initialize(); LOG_INF("DW3000_ret: %d", dw300_ret); // dw3000_sleep(); LOG_INF("Starting Periodic Advertising with Responses Synchronization Demo"); err = bt_enable(NULL); if (err) { LOG_ERR("Bluetooth init failed (err %d)", err); return 0; } bt_le_per_adv_sync_cb_register(&sync_callbacks); past_param.skip = 1; past_param.timeout = 50; past_param.options = BT_LE_PER_ADV_SYNC_TRANSFER_OPT_NONE; err = bt_le_per_adv_sync_transfer_subscribe(NULL, &past_param); if (err) { LOG_ERR("PAST subscribe failed (err %d)", err); return 0; } do { adv_connectable(); LOG_INF("Waiting for connected..."); err = k_sem_take(&sem_connected, K_FOREVER); if (err) { LOG_ERR("Timeout waiting for connection"); return 0; } LOG_INF("Waiting for periodic sync..."); err = k_sem_take(&sem_per_sync, K_SECONDS(10)); if (err) { LOG_ERR("Timeout waiting for sync"); continue; } LOG_INF("Periodic sync established."); err = k_sem_take(&sem_per_sync_lost, K_FOREVER); if (err) { LOG_ERR("Sync lost wait failed (err %d)", err); return 0; } LOG_INF("Periodic sync lost."); } while (true); return 0; }
Questions:
-
What is the correct and minimal set of Kconfig options required to:
-
Sync to multiple periodic
-
Start a connectable extended advertiser reliably
-
-
Are there additional memory pools or controller resources (besides CONFIG_BT_MAX_CONN) that should be increased?
Best regards,
Gear