<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/123437/multi-reflector-channel-sounding</link><description>Hi, 
 
 I am trying to do t rilateration using one initiator and 3 reflectors. For now I am just trying to get 2 reflectors to work. 
 Sadly I cannot get the initiator to work like I want it to. 
 
 The reflector is running zephyr/samples/bluetooth/channel_sounding</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Mon, 15 Sep 2025 09:35:12 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/123437/multi-reflector-channel-sounding" /><item><title>RE: Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/thread/548710?ContentTypeID=1</link><pubDate>Mon, 15 Sep 2025 09:35:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:5a0bcec9-53c3-4743-908f-cbf93c3962fc</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;See if it reacts the same in NCS v3.1.0. There were some issues with multiple connections and channel sounding in NCS v3.0.2.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/thread/548666?ContentTypeID=1</link><pubDate>Sun, 14 Sep 2025 09:08:57 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:21ae4a10-65d4-4330-a794-5a681c06f926</guid><dc:creator>usmanmehmood55</dc:creator><description>&lt;p&gt;Hi &lt;a href="https://devzone.nordicsemi.com/members/edvin-holmseth"&gt;Edvin&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Sorry for the late reply. I printed&amp;nbsp;the extra logs and it looks like&amp;nbsp;&lt;code&gt;ranging_data_get_complete_cb()&lt;/code&gt; is not triggering for the reflector returning 0.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;*** Booting nRF Connect SDK v3.0.2-89ba1294ac9b ***
*** Using Zephyr OS v4.0.99-f791c49f492c ***
[00:00:00.008,853] &amp;lt;inf&amp;gt; app_main: Starting Channel Sounding Initiator Sample
[00:00:00.016,653] &amp;lt;inf&amp;gt; bt_sdc_hci_driver: SoftDevice Controller build revision: 
                                            89 9a 50 8a 95 01 9c 58  fc 39 d2 c1 10 04 ee 02 |..P....X .9......
                                            64 ce 25 be                                      |d.%.             
[00:00:00.046,083] &amp;lt;inf&amp;gt; bt_hci_core: HW Platform: Nordic Semiconductor (0x0002)
[00:00:00.054,020] &amp;lt;inf&amp;gt; bt_hci_core: HW Variant: nRF54Lx (0x0005)
[00:00:00.060,816] &amp;lt;inf&amp;gt; bt_hci_core: Firmware: Standard Bluetooth controller (0x00) Version 137.20634 Build 2617349514
[00:00:00.072,776] &amp;lt;inf&amp;gt; bt_hci_core: Identity: C6:41:B0:37:C1:9F (random)
[00:00:00.080,208] &amp;lt;inf&amp;gt; bt_hci_core: HCI: version 6.0 (0x0e) revision 0x30f3, manufacturer 0x0059
[00:00:00.089,748] &amp;lt;inf&amp;gt; bt_hci_core: LMP: version 6.0 (0x0e) subver 0x30f3
[00:00:00.097,904] &amp;lt;inf&amp;gt; app_main: Waiting for 2 reflector connections...
[00:00:00.118,260] &amp;lt;inf&amp;gt; app_main: Filters matched. Address: FF:E7:7D:64:BC:8B (random), Name: Reflector-2, connectable: 1 (current connections: 0/2)
[00:00:00.133,078] &amp;lt;inf&amp;gt; app_main: Attempting to connect to FF:E7:7D:64:BC:8B (random)
[00:00:00.226,570] &amp;lt;inf&amp;gt; app_main: Connected to FF:E7:7D:64:BC:8B (random) (err 0x00)
[00:00:00.235,124] &amp;lt;inf&amp;gt; app_main: Stored connection for reflector 0
[00:00:00.242,159] &amp;lt;inf&amp;gt; app_main: Continuing to scan for more reflectors (1/2 found)
[00:00:00.251,569] &amp;lt;inf&amp;gt; app_main: Connected to reflector 0 (1/2 total)
[00:00:00.661,267] &amp;lt;inf&amp;gt; app_main: Filters matched. Address: F6:01:EA:F1:47:51 (random), Name: Reflector-1, connectable: 1 (current connections: 1/2)
[00:00:00.676,037] &amp;lt;inf&amp;gt; app_main: Attempting to connect to F6:01:EA:F1:47:51 (random)
[00:00:00.769,638] &amp;lt;inf&amp;gt; app_main: Connected to F6:01:EA:F1:47:51 (random) (err 0x00)
[00:00:00.778,036] &amp;lt;inf&amp;gt; app_main: Stored connection for reflector 1
[00:00:00.785,108] &amp;lt;inf&amp;gt; app_main: All reflectors found, stopping scan
[00:00:00.792,741] &amp;lt;inf&amp;gt; app_main: Connected to reflector 1 (2/2 total)
[00:00:00.799,908] &amp;lt;inf&amp;gt; app_main: Setup complete for 2 reflectors, starting ranging
[00:00:00.808,246] &amp;lt;inf&amp;gt; app_main: Setting up reflector connection 0
[00:00:01.628,047] &amp;lt;inf&amp;gt; app_main: Security changed: FF:E7:7D:64:BC:8B (random) level 2
[00:00:01.728,026] &amp;lt;inf&amp;gt; app_main: MTU exchange success (498)
[00:00:02.128,032] &amp;lt;inf&amp;gt; app_main: The discovery procedure succeeded
[00:00:02.278,169] &amp;lt;inf&amp;gt; app_main: CS capability exchange completed.
[00:00:02.428,070] &amp;lt;inf&amp;gt; app_main: CS config creation complete. ID: 0
[00:00:02.628,029] &amp;lt;inf&amp;gt; app_main: CS security enabled.
[00:00:02.634,239] &amp;lt;inf&amp;gt; app_main: Reflector connection 0 setup complete
[00:00:02.641,644] &amp;lt;inf&amp;gt; app_main: Setting up reflector connection 1
[00:00:02.878,146] &amp;lt;inf&amp;gt; app_main: CS procedures enabled:
- config ID: 0
- antenna configuration index: 0
- TX power: 0 dbm
- subevent length: 28198 us
- subevents per event: 1
- subevent interval: 0
- event interval: 2
- procedure interval: 10
- procedure count: 0
- maximum procedure length: 1000
[00:00:03.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 0
[00:00:03.385,550] &amp;lt;inf&amp;gt; app_main: Security changed: F6:01:EA:F1:47:51 (random) level 2
[00:00:03.485,529] &amp;lt;inf&amp;gt; app_main: MTU exchange success (498)
[00:00:03.628,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 0 from reflector 0
[00:00:03.828,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 1
[00:00:03.885,535] &amp;lt;inf&amp;gt; app_main: The discovery procedure succeeded
[00:00:04.085,672] &amp;lt;inf&amp;gt; app_main: CS capability exchange completed.
[00:00:04.128,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 1 from reflector 0
[00:00:04.285,573] &amp;lt;inf&amp;gt; app_main: CS config creation complete. ID: 0
[00:00:04.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 2
[00:00:04.485,531] &amp;lt;inf&amp;gt; app_main: CS security enabled.
[00:00:04.491,621] &amp;lt;wrn&amp;gt; bt_hci_core: opcode 0x2094 status 0x07 
[00:00:04.498,188] &amp;lt;err&amp;gt; app_main: Failed to enable CS procedures (err -5)
[00:00:04.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 2 from reflector 0
[00:00:04.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 3
[00:00:05.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 3 from reflector 0
[00:00:05.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 4
[00:00:05.505,779] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.003325 (avg: 2.003325), phase_slope: 2.329631, rtt: 0.000000
[00:00:05.520,180] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:05.534,714] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:05.724,374] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:05.735,838] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 4 from reflector 0
[00:00:05.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 5
[00:00:06.228,024] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 5
[00:00:06.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 6
[00:00:06.541,043] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.003325 (avg: 2.003325), phase_slope: 2.516117, rtt: 0.000000
[00:00:06.555,453] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:06.569,876] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:06.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 6 from reflector 0
[00:00:06.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 7
[00:00:07.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 7 from reflector 0
[00:00:07.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 8
[00:00:07.576,084] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.895426 (avg: 1.967359), phase_slope: 2.641607, rtt: 0.000000
[00:00:07.590,986] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:07.605,402] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:07.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 8 from reflector 0
[00:00:07.878,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 9
[00:00:08.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 9 from reflector 0
[00:00:08.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 10
[00:00:08.611,604] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.813937 (avg: 1.929003), phase_slope: 2.587863, rtt: 0.000000
[00:00:08.626,014]  &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 10 from reflector 0
[1;32m&amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:08.655,077] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:08.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 11
[00:00:09.128,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 11 from reflector 0
[00:00:09.328,412] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 12
[00:00:09.661,301] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.626813 (avg: 1.868565), phase_slope: 2.730412, rtt: 0.000000
[00:00:09.675,705] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:09.690,352] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:09.724,362] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:09.735,841] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 12 from reflector 0
[00:00:09.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 13
[00:00:10.228,025] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 13
[00:00:10.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 14
[00:00:10.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 14 from reflector 0
[00:00:10.696,565] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.624049 (avg: 1.792710), phase_slope: 2.836699, rtt: 0.000000
[00:00:10.711,517] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:10.727,319] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:10.828,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 15
[00:00:11.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 15 from reflector 0
[00:00:11.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 16
[00:00:11.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 16 from reflector 0
[00:00:11.733,653] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.570854 (avg: 1.706216), phase_slope: 2.872743, rtt: 0.000000
[00:00:11.748,200] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:11.762,607] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:11.828,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 17
[00:00:12.224,275] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:12.235,748] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 17 from reflector 0
[00:00:12.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 18
[00:00:12.728,024] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 18
[00:00:12.768,821] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.633772 (avg: 1.653885), phase_slope: 2.778327, rtt: 0.000000
[00:00:12.783,522] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:12.798,097] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:12.878,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 19
[00:00:13.224,548] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:13.278,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 19 from reflector 0
[00:00:13.804,516] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.701904 (avg: 1.631479), phase_slope: 2.778607, rtt: 0.000000
[00:00:13.819,901] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path [00:00:13.828,029] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 21
0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:13.842,562] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:14.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 21 from reflector 0
[00:00:14.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 22
[00:00:14.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 22 from reflector 0
[00:00:14.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 23
[00:00:14.848,759] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.701904 (avg: 1.646497), phase_slope: 2.802526, rtt: 0.000000
[00:00:14.863,167] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:14.877,630] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:15.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 23 from reflector 0
[00:00:15.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 24
[00:00:15.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 24 from reflector 0
[00:00:15.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 25
[00:00:15.884,213] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.832022 (avg: 1.688091), phase_slope: 2.726507, rtt: 0.000000
[00:00:15.898,809] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:15.913,224] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:16.128,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 25 from reflector 0
[00:00:16.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 26
[00:00:16.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 26 from reflector 0
[00:00:16.878,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 27
[00:00:16.919,447] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.766963 (avg: 1.727313), phase_slope: 2.604568, rtt: 0.000000
[00:00:16.933,934] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:16.948,524] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:17.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 27 from reflector 0
[00:00:17.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 28
[00:00:17.724,450] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:17.735,930] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 28 from reflector 0
[00:00:17.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 29
[00:00:17.954,741] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.766963 (avg: 1.753951), phase_slope: 2.604568, rtt: 0.000000
[00:00:17.969,141] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:17.983,719] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:18.278,024] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 29
[00:00:18.428,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 30
[00:00:18.724,275] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:18.878,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 30 from reflector 0
[00:00:18.990,101] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.766963 (avg: 1.766963), phase_slope: 2.604568, rtt: 0.000000
[00:00:19.004,506] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:19.018,920] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:19.478,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 32
[00:00:19.724,625] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:19.978,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 32 from reflector 0
[00:00:20.025,143] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.766963 (avg: 1.779975), phase_slope: 2.604568, rtt: 0.000000
[00:00:20.039,953] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:20.054,363] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:20.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 34
[00:00:20.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 34 from reflector 0
[00:00:20.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 35
[00:00:21.060,565] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.736890 (avg: 1.760949), phase_slope: 2.587095, rtt: 0.000000
[00:00:21.074,982] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:21.090,610] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:21.224,450] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:21.235,931] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 35 from reflector 0
[00:00:21.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 36
[00:00:21.728,025] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 36
[00:00:21.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 37
[00:00:22.096,821] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.779429 (avg: 1.763442), phase_slope: 2.625187, rtt: 0.000000
[00:00:22.111,226] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:22.125,644] 00:00:22.128,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 37 from reflector 0
2m&amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:22.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 38
[00:00:22.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 38 from reflector 0
[00:00:22.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 39
[00:00:23.128,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 39 from reflector 0
[00:00:23.146,455] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.738612 (avg: 1.757771), phase_slope: 2.770703, rtt: 0.000000
[00:00:23.160,856] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:23.175,274] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:23.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 40
[00:00:23.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 40 from reflector 0
[00:00:23.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 41
[00:00:24.128,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 41 from reflector 0
[00:00:24.181,813] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.797165 (avg: 1.763812), phase_slope: 2.887904, rtt: 0.000000
[00:00:24.196,397] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:24.211,343] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:24.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 42
[00:00:24.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 42 from reflector 0
[00:00:24.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 43
[00:00:25.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 43 from reflector 0
[00:00:25.217,630] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.847561 (avg: 1.779931), phase_slope: 2.934223, rtt: 0.000000
[00:00:25.233,488] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:25.248,100] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:25.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 44
[00:00:25.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 44 from reflector 0
[00:00:25.828,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 45
[00:00:26.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 45 from reflector 0
[00:00:26.254,325] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.906115 (avg: 1.813776), phase_slope: 3.203472, rtt: 0.000000
[00:00:26.268,733] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:26.283,407] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:26.428,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 46
[00:00:26.724,635] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:26.828,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 46 from reflector 0
[00:00:27.289,781] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.894822 (avg: 1.836855), phase_slope: 3.298077, rtt: 0.000000
[00:00:27.304,478] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:27.319,769] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:27.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 48
[00:00:27.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 48 from reflector 0
[00:00:27.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 49
[00:00:28.178,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 49 from reflector 0
[00:00:28.325,975] 00:00:28.328,028] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 50
1;32m&amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.980858 (avg: 1.885304), phase_slope: 3.248099, rtt: 0.000000
[00:00:28.348,575] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:28.362,986] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:28.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 50 from reflector 0
[00:00:28.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 51
[00:00:29.128,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 51 from reflector 0
[00:00:29.328,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 52
[00:00:29.369,207] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.990888 (avg: 1.924049), phase_slope: 3.137689, rtt: 0.000000
[00:00:29.384,058] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:29.398,607] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:29.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 52 from reflector 0
[00:00:29.878,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 53
[00:00:30.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 53 from reflector 0
[00:00:30.378,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 54
[00:00:30.404,823] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.020164 (avg: 1.958569), phase_slope: 3.274416, rtt: 0.000000
[00:00:30.419,230] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:30.434,119] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:30.724,276] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:30.735,748] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 54 from reflector 0
[00:00:30.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 55
[00:00:31.228,025] &amp;lt;inf&amp;gt; app_main: Ranging data overwritten 55
[00:00:31.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 56
[00:00:31.440,469] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.969768 (avg: 1.971300), phase_slope: 3.263761, rtt: 0.000000
[00:00:31.454,871] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:31.469,286] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:31.678,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 56 from reflector 0
[00:00:31.878,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 57
[00:00:32.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 57 from reflector 0
[00:00:32.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 58
[00:00:32.475,477] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.969768 (avg: 1.986289), phase_slope: 3.192044, rtt: 0.000000
[00:00:32.490,809] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:32.505,222] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:32.628,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 58 from reflector 0
[00:00:32.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 59
[00:00:33.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 59 from reflector 0
[00:00:33.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 60
[00:00:33.511,445] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.940491 (avg: 1.978216), phase_slope: 3.137436, rtt: 0.000000
[00:00:33.525,848] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:33.541,388] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:33.628,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 60 from reflector 0
[00:00:33.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 61
[00:00:34.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 61 from reflector 0
[00:00:34.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 62
[00:00:34.547,605] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.973975 (avg: 1.974833), phase_slope: 3.165542, rtt: 0.000000
[00:00:34.562,012] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:34.576,433] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:34.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 62 from reflector 0
[00:00:34.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 63
[00:00:35.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 63 from reflector 0
[00:00:35.328,411] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 64
[00:00:35.583,093] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.876115 (avg: 1.946023), phase_slope: 3.266909, rtt: 0.000000
[00:00:35.597,695] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:35.612,113] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:35.628,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 64 from reflector 0
[00:00:35.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 65
[00:00:36.178,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 65 from reflector 0
[00:00:36.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 66
[00:00:36.618,325] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.876115 ([00:00:36.628,037] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 66 from reflector 0
avg: 1.927293), phase_slope: 3.258581, rtt: 0.000000
[00:00:36.647,348] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:36.661,759] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:36.828,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 67
[00:00:37.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 67 from reflector 0
[00:00:37.328,026] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 68
[00:00:37.628,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 68 from reflector 0
[00:00:37.667,959] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.004985 (avg: 1.934336), phase_slope: 3.175309, rtt: 0.000000
[00:00:37.682,665] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:37.697,230] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:37.828,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 69
[00:00:38.128,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 69 from reflector 0
[00:00:38.428,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 70
[00:00:38.703,808] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.004985 (avg: 1.947235), phase_slope: 3.175362, rtt: 0.000000
[00:00:38.718,371] &amp;lt;inf&amp;gt; app_main: Reflector 1 -[00:00:38.724,277] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
 Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:38.745,227] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:38.928,035] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 70 from reflector 0
[00:00:39.528,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 72
[00:00:39.724,538] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:39.751,446] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.004985 (avg: 1.953437), phase_slope: 3.175362, rtt: 0.000000
[00:00:39.765,860] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:39.780,453] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:40.224,188] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:40.428,034] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 72 from reflector 0
[00:00:40.786,805] &amp;lt;inf&amp;gt; app_main: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.004985 (avg: 1.979211), phase_slope: 3.175362, rtt: 0.000000
[00:00:40.801,449] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:40.816,761] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...
[00:00:40.928,025] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 75
[00:00:41.224,450] &amp;lt;dbg&amp;gt; app_main: subevent_result_cb: Dropped subevent results due to unfinished ranging data request.
[00:00:41.278,036] &amp;lt;dbg&amp;gt; app_main: ranging_data_get_complete_cb: Ranging data get completed for ranging counter 75 from reflector 0
[00:00:41.822,967] &amp;lt;inf&amp;gt; app_main: Reflector 0 - [00:00:41.828,027] &amp;lt;dbg&amp;gt; app_main: ranging_data_ready_cb: Ranging data ready 77
Distance estimates on antenna path 0: ifft: 2.004985 (avg: 2.004985), phase_slope: 3.175362, rtt: 0.000000
[00:00:41.845,601] &amp;lt;inf&amp;gt; app_main: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
[00:00:41.860,016] &amp;lt;inf&amp;gt; app_main: Sleeping for 1000 ms...&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;But it&amp;#39;s not even initiating channel sounding with the second reflector. Only one of the reflectors initiates channel sounding. Is this an SDK limitation?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Usman&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/thread/545199?ContentTypeID=1</link><pubDate>Mon, 11 Aug 2025 12:14:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:3944e151-182e-47db-9db8-77030fdf55e4</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Usman,&lt;/p&gt;
&lt;p&gt;ranging_data_get_complete_cb(), does that ever trigger for the device that returns distance = 0?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/thread/545093?ContentTypeID=1</link><pubDate>Fri, 08 Aug 2025 20:04:02 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:02518b9e-8036-4cfc-940d-9f03ac2ce710</guid><dc:creator>usmanmehmood55</dc:creator><description>&lt;p&gt;&amp;nbsp;&lt;a href="https://devzone.nordicsemi.com/members/edvin-holmseth"&gt;Edvin&lt;/a&gt;&amp;nbsp;I used the&amp;nbsp;channel_sounding_ras_reflector and a modified version of&amp;nbsp;channel_sounding_ras_initiator to support 2 reflectors.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;channel_sounding_ras_initiator main.c :&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/*
 * Copyright (c) 2024 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

/** @file
 *  @brief Channel Sounding Initiator with Ranging Requestor sample
 */

#include &amp;lt;math.h&amp;gt;
#include &amp;lt;zephyr/kernel.h&amp;gt;
#include &amp;lt;zephyr/types.h&amp;gt;
#include &amp;lt;zephyr/sys/reboot.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/cs.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/gatt.h&amp;gt;
#include &amp;lt;zephyr/bluetooth/conn.h&amp;gt;
#include &amp;lt;bluetooth/scan.h&amp;gt;
#include &amp;lt;bluetooth/services/ras.h&amp;gt;
#include &amp;lt;bluetooth/gatt_dm.h&amp;gt;
#include &amp;lt;bluetooth/cs_de.h&amp;gt;

#include &amp;lt;dk_buttons_and_leds.h&amp;gt;

#include &amp;lt;zephyr/logging/log.h&amp;gt;

LOG_MODULE_REGISTER(app_main, LOG_LEVEL_INF);

#define CON_STATUS_LED               DK_LED1
#define CS_CONFIG_ID                 0
#define NUM_MODE_0_STEPS             3
#define PROCEDURE_COUNTER_NONE       (-1)
#define DE_SLIDING_WINDOW_SIZE       (10)
#define MAX_AP                       (CONFIG_BT_RAS_MAX_ANTENNA_PATHS)
#define IFFT_RUNNING_AVERAGE_SIZE    5
#define MAX_REFLECTORS               2

#define LOCAL_PROCEDURE_MEM                                                     \
    ((BT_RAS_MAX_STEPS_PER_PROCEDURE * sizeof(struct bt_le_cs_subevent_step)) + \
     (BT_RAS_MAX_STEPS_PER_PROCEDURE * BT_RAS_MAX_STEP_DATA_LEN))

static K_SEM_DEFINE(sem_remote_capabilities_obtained, 0, 1);
static K_SEM_DEFINE(sem_config_created, 0, 1);
static K_SEM_DEFINE(sem_cs_security_enabled, 0, 1);
static K_SEM_DEFINE(sem_connected, 0, 1);
static K_SEM_DEFINE(sem_discovery_done, 0, 1);
static K_SEM_DEFINE(sem_mtu_exchange_done, 0, 1);
static K_SEM_DEFINE(sem_security, 0, 1);
static K_SEM_DEFINE(sem_local_steps, 1, 1);

static K_MUTEX_DEFINE(distance_estimate_buffer_mutex);

static struct bt_conn *connections[MAX_REFLECTORS];
static uint8_t active_connections = 0;
static bt_addr_le_t connected_devices[MAX_REFLECTORS];
static bt_addr_le_t failed_devices[10]; // Track up to 10 failed devices
static uint8_t failed_device_count = 0;
NET_BUF_SIMPLE_DEFINE_STATIC(latest_local_steps, LOCAL_PROCEDURE_MEM);
NET_BUF_SIMPLE_DEFINE_STATIC(latest_peer_steps, BT_RAS_PROCEDURE_MEM);
static int32_t most_recent_local_ranging_counter = PROCEDURE_COUNTER_NONE;
static int32_t dropped_ranging_counter = PROCEDURE_COUNTER_NONE;

static uint8_t buffer_index;
static uint8_t buffer_num_valid;
static cs_de_dist_estimates_t distance_estimate_buffer[MAX_REFLECTORS][MAX_AP][DE_SLIDING_WINDOW_SIZE];

// Running average buffer for IFFT distances
static float ifft_running_average_buffer[MAX_REFLECTORS][MAX_AP][IFFT_RUNNING_AVERAGE_SIZE];
static uint8_t ifft_running_average_index[MAX_REFLECTORS][MAX_AP];
static uint8_t ifft_running_average_count[MAX_REFLECTORS][MAX_AP];

static void store_distance_estimates(uint8_t reflector_index, cs_de_report_t *p_report)
{
    int lock_state = k_mutex_lock(&amp;amp;distance_estimate_buffer_mutex, K_FOREVER);

    __ASSERT_NO_MSG(lock_state == 0);

    for (uint8_t ap = 0; ap &amp;lt; p_report-&amp;gt;n_ap; ap++)
    {
        memcpy(&amp;amp;distance_estimate_buffer[reflector_index][ap][buffer_index],
               &amp;amp;p_report-&amp;gt;distance_estimates[ap], sizeof(cs_de_dist_estimates_t));
    }

    buffer_index = (buffer_index + 1) % DE_SLIDING_WINDOW_SIZE;

    if (buffer_num_valid &amp;lt; DE_SLIDING_WINDOW_SIZE)
    {
        buffer_num_valid++;
    }

    k_mutex_unlock(&amp;amp;distance_estimate_buffer_mutex);
}

static cs_de_dist_estimates_t get_distance(uint8_t reflector_index, uint8_t ap)
{
    cs_de_dist_estimates_t averaged_result = {};
    uint8_t num_ifft = 0;
    uint8_t num_phase_slope = 0;
    uint8_t num_rtt = 0;

    int lock_state = k_mutex_lock(&amp;amp;distance_estimate_buffer_mutex, K_FOREVER);

    __ASSERT_NO_MSG(lock_state == 0);

    for (uint8_t i = 0; i &amp;lt; buffer_num_valid; i++)
    {
        if (isfinite(distance_estimate_buffer[reflector_index][ap][i].ifft))
        {
            num_ifft++;
            averaged_result.ifft += distance_estimate_buffer[reflector_index][ap][i].ifft;
        }
        if (isfinite(distance_estimate_buffer[reflector_index][ap][i].phase_slope))
        {
            num_phase_slope++;
            averaged_result.phase_slope += distance_estimate_buffer[reflector_index][ap][i].phase_slope;
        }
        if (isfinite(distance_estimate_buffer[reflector_index][ap][i].rtt))
        {
            num_rtt++;
            averaged_result.rtt += distance_estimate_buffer[reflector_index][ap][i].rtt;
        }
    }

    k_mutex_unlock(&amp;amp;distance_estimate_buffer_mutex);

    if (num_ifft)
    {
        averaged_result.ifft /= num_ifft;
    }

    if (num_phase_slope)
    {
        averaged_result.phase_slope /= num_phase_slope;
    }

    if (num_rtt)
    {
        averaged_result.rtt /= num_rtt;
    }

    return averaged_result;
}

static float update_ifft_running_average(uint8_t reflector_index, uint8_t ap, float new_ifft_value)
{
    float sum = 0.0f;

    // Add new value to the buffer
    ifft_running_average_buffer[reflector_index][ap][ifft_running_average_index[reflector_index][ap]] = new_ifft_value;
    ifft_running_average_index[reflector_index][ap] = (ifft_running_average_index[reflector_index][ap] + 1) % IFFT_RUNNING_AVERAGE_SIZE;

    // Update count if buffer not full yet
    if (ifft_running_average_count[reflector_index][ap] &amp;lt; IFFT_RUNNING_AVERAGE_SIZE)
    {
        ifft_running_average_count[reflector_index][ap]++;
    }

    // Calculate running average
    for (uint8_t i = 0; i &amp;lt; ifft_running_average_count[reflector_index][ap]; i++)
    {
        sum += ifft_running_average_buffer[reflector_index][ap][i];
    }

    return sum / ifft_running_average_count[reflector_index][ap];
}

static void ranging_data_get_complete_cb(struct bt_conn *conn, uint16_t ranging_counter, int err)
{
    // Find which reflector this connection belongs to
    uint8_t reflector_index = 0;
    for (uint8_t i = 0; i &amp;lt; active_connections; i++)
    {
        if (connections[i] == conn)
        {
            reflector_index = i;
            break;
        }
    }

    if (err)
    {
        LOG_ERR(&amp;quot;Error when getting ranging data with ranging counter %d (err %d)&amp;quot;,
                ranging_counter, err);
        return;
    }

    LOG_DBG(&amp;quot;Ranging data get completed for ranging counter %d from reflector %d&amp;quot;,
            ranging_counter, reflector_index);

    /* This struct is static to avoid putting it on the stack (it&amp;#39;s very large) */
    static cs_de_report_t cs_de_report;

    cs_de_populate_report(&amp;amp;latest_local_steps, &amp;amp;latest_peer_steps, BT_CONN_LE_CS_ROLE_INITIATOR,
                          &amp;amp;cs_de_report);

    net_buf_simple_reset(&amp;amp;latest_local_steps);
    net_buf_simple_reset(&amp;amp;latest_peer_steps);
    k_sem_give(&amp;amp;sem_local_steps);

    cs_de_quality_t quality = cs_de_calc(&amp;amp;cs_de_report);

    if (quality == CS_DE_QUALITY_OK)
    {
        for (uint8_t ap = 0; ap &amp;lt; cs_de_report.n_ap; ap++)
        {
            if (cs_de_report.tone_quality[ap] == CS_DE_TONE_QUALITY_OK)
            {
                store_distance_estimates(reflector_index, &amp;amp;cs_de_report);
            }
        }
    }
}

static void subevent_result_cb(struct bt_conn *conn, struct bt_conn_le_cs_subevent_result *result)
{
    if (dropped_ranging_counter == result-&amp;gt;header.procedure_counter)
    {
        return;
    }

    if (most_recent_local_ranging_counter != bt_ras_rreq_get_ranging_counter(result-&amp;gt;header.procedure_counter))
    {
        int sem_state = k_sem_take(&amp;amp;sem_local_steps, K_NO_WAIT);

        if (sem_state &amp;lt; 0)
        {
            dropped_ranging_counter = result-&amp;gt;header.procedure_counter;
            LOG_DBG(&amp;quot;Dropped subevent results due to unfinished ranging data request.&amp;quot;);
            return;
        }

        most_recent_local_ranging_counter =
            bt_ras_rreq_get_ranging_counter(result-&amp;gt;header.procedure_counter);
    }

    if (result-&amp;gt;header.subevent_done_status == BT_CONN_LE_CS_SUBEVENT_ABORTED)
    {
        /* The steps from this subevent will not be used. */
    }
    else if (result-&amp;gt;step_data_buf)
    {
        if (result-&amp;gt;step_data_buf-&amp;gt;len &amp;lt;= net_buf_simple_tailroom(&amp;amp;latest_local_steps))
        {
            uint16_t len = result-&amp;gt;step_data_buf-&amp;gt;len;
            uint8_t *step_data = net_buf_simple_pull_mem(result-&amp;gt;step_data_buf, len);

            net_buf_simple_add_mem(&amp;amp;latest_local_steps, step_data, len);
        }
        else
        {
            LOG_ERR(&amp;quot;Not enough memory to store step data. (%d &amp;gt; %d)&amp;quot;,
                    latest_local_steps.len + result-&amp;gt;step_data_buf-&amp;gt;len,
                    latest_local_steps.size);
            net_buf_simple_reset(&amp;amp;latest_local_steps);
            dropped_ranging_counter = result-&amp;gt;header.procedure_counter;
            return;
        }
    }

    dropped_ranging_counter = PROCEDURE_COUNTER_NONE;

    if (result-&amp;gt;header.procedure_done_status == BT_CONN_LE_CS_PROCEDURE_COMPLETE)
    {
        most_recent_local_ranging_counter =
            bt_ras_rreq_get_ranging_counter(result-&amp;gt;header.procedure_counter);
    }
    else if (result-&amp;gt;header.procedure_done_status == BT_CONN_LE_CS_PROCEDURE_ABORTED)
    {
        LOG_WRN(&amp;quot;Procedure %u aborted&amp;quot;, result-&amp;gt;header.procedure_counter);
        net_buf_simple_reset(&amp;amp;latest_local_steps);
        k_sem_give(&amp;amp;sem_local_steps);
    }
}

static void ranging_data_ready_cb(struct bt_conn *conn, uint16_t ranging_counter)
{
    LOG_DBG(&amp;quot;Ranging data ready %i&amp;quot;, ranging_counter);

    if (ranging_counter == most_recent_local_ranging_counter)
    {
        int err = bt_ras_rreq_cp_get_ranging_data(conn, &amp;amp;latest_peer_steps,
                                                  ranging_counter,
                                                  ranging_data_get_complete_cb);
        if (err)
        {
            LOG_ERR(&amp;quot;Get ranging data failed (err %d)&amp;quot;, err);
            net_buf_simple_reset(&amp;amp;latest_local_steps);
            net_buf_simple_reset(&amp;amp;latest_peer_steps);
            k_sem_give(&amp;amp;sem_local_steps);
        }
    }
}

static void ranging_data_overwritten_cb(struct bt_conn *conn, uint16_t ranging_counter)
{
    LOG_INF(&amp;quot;Ranging data overwritten %i&amp;quot;, ranging_counter);
}

static void mtu_exchange_cb(struct bt_conn *conn, uint8_t err,
                            struct bt_gatt_exchange_params *params)
{
    if (err)
    {
        LOG_ERR(&amp;quot;MTU exchange failed (err %d)&amp;quot;, err);
        return;
    }

    LOG_INF(&amp;quot;MTU exchange success (%u)&amp;quot;, bt_gatt_get_mtu(conn));
    k_sem_give(&amp;amp;sem_mtu_exchange_done);
}

static void discovery_completed_cb(struct bt_gatt_dm *dm, void *context)
{
    int err;

    LOG_INF(&amp;quot;The discovery procedure succeeded&amp;quot;);

    struct bt_conn *conn = bt_gatt_dm_conn_get(dm);

    bt_gatt_dm_data_print(dm);

    err = bt_ras_rreq_alloc_and_assign_handles(dm, conn);
    if (err)
    {
        LOG_ERR(&amp;quot;RAS RREQ alloc init failed (err %d)&amp;quot;, err);
    }

    err = bt_gatt_dm_data_release(dm);
    if (err)
    {
        LOG_ERR(&amp;quot;Could not release the discovery data (err %d)&amp;quot;, err);
    }

    k_sem_give(&amp;amp;sem_discovery_done);
}

static void discovery_service_not_found_cb(struct bt_conn *conn, void *context)
{
    LOG_INF(&amp;quot;The service could not be found during the discovery, disconnecting&amp;quot;);
    bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);
}

static void discovery_error_found_cb(struct bt_conn *conn, int err, void *context)
{
    LOG_INF(&amp;quot;The discovery procedure failed (err %d)&amp;quot;, err);
    bt_conn_disconnect(conn, BT_HCI_ERR_REMOTE_USER_TERM_CONN);
}

static struct bt_gatt_dm_cb discovery_cb = {
    .completed = discovery_completed_cb,
    .service_not_found = discovery_service_not_found_cb,
    .error_found = discovery_error_found_cb,
};

static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_security_err err)
{
    char addr[BT_ADDR_LE_STR_LEN];

    bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));

    if (err)
    {
        LOG_ERR(&amp;quot;Security failed: %s level %u err %d %s&amp;quot;, addr, level, err,
                bt_security_err_to_str(err));
        return;
    }

    LOG_INF(&amp;quot;Security changed: %s level %u&amp;quot;, addr, level);
    k_sem_give(&amp;amp;sem_security);
}

static bool le_param_req(struct bt_conn *conn, struct bt_le_conn_param *param)
{
    /* Ignore peer parameter preferences. */
    return false;
}

static void connected_cb(struct bt_conn *conn, uint8_t err)
{
    char addr[BT_ADDR_LE_STR_LEN];

    (void)bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr));
    LOG_INF(&amp;quot;Connected to %s (err 0x%02X)&amp;quot;, addr, err);

    if (err)
    {
        bt_conn_unref(conn);
        return;
    }

    // Store the connection in the array
    if (active_connections &amp;lt; MAX_REFLECTORS)
    {
        connections[active_connections] = bt_conn_ref(conn);
        // Store the device address
        bt_addr_le_copy(&amp;amp;connected_devices[active_connections], bt_conn_get_dst(conn));
        LOG_INF(&amp;quot;Stored connection for reflector %d&amp;quot;, active_connections);
        active_connections++;

        // Continue scanning if we haven&amp;#39;t found all reflectors yet
        if (active_connections &amp;lt; MAX_REFLECTORS)
        {
            LOG_INF(&amp;quot;Continuing to scan for more reflectors (%d/%d found)&amp;quot;,
                    active_connections, MAX_REFLECTORS);
            int err = bt_scan_start(BT_SCAN_TYPE_SCAN_PASSIVE);
            if (err)
            {
                LOG_ERR(&amp;quot;Failed to restart scanning (err %d)&amp;quot;, err);
            }
        }
        else
        {
            LOG_INF(&amp;quot;All reflectors found, stopping scan&amp;quot;);
            bt_scan_stop();
        }
    }

    k_sem_give(&amp;amp;sem_connected);

    dk_set_led_on(CON_STATUS_LED);
}

static void disconnected_cb(struct bt_conn *conn, uint8_t reason)
{
    LOG_INF(&amp;quot;Disconnected (reason 0x%02X)&amp;quot;, reason);

    // Find and remove the connection from our array
    for (uint8_t i = 0; i &amp;lt; active_connections; i++)
    {
        if (connections[i] == conn)
        {
            bt_conn_unref(connections[i]);
            connections[i] = NULL;
            LOG_INF(&amp;quot;Removed connection for reflector %d&amp;quot;, i);
            break;
        }
    }

    bt_conn_unref(conn);
    dk_set_led_off(CON_STATUS_LED);

    sys_reboot(SYS_REBOOT_COLD);
}

static void remote_capabilities_cb(struct bt_conn *conn,
                                   uint8_t status,
                                   struct bt_conn_le_cs_capabilities *params)
{
    ARG_UNUSED(conn);
    ARG_UNUSED(params);

    if (status == BT_HCI_ERR_SUCCESS)
    {
        LOG_INF(&amp;quot;CS capability exchange completed.&amp;quot;);
        k_sem_give(&amp;amp;sem_remote_capabilities_obtained);
    }
    else
    {
        LOG_WRN(&amp;quot;CS capability exchange failed. (HCI status 0x%02x)&amp;quot;, status);
    }
}

static void config_create_cb(struct bt_conn *conn,
                             uint8_t status,
                             struct bt_conn_le_cs_config *config)
{
    ARG_UNUSED(conn);

    if (status == BT_HCI_ERR_SUCCESS)
    {
        LOG_INF(&amp;quot;CS config creation complete. ID: %d&amp;quot;, config-&amp;gt;id);
        k_sem_give(&amp;amp;sem_config_created);
    }
    else
    {
        LOG_WRN(&amp;quot;CS config creation failed. (HCI status 0x%02x)&amp;quot;, status);
    }
}

static void security_enable_cb(struct bt_conn *conn, uint8_t status)
{
    ARG_UNUSED(conn);

    if (status == BT_HCI_ERR_SUCCESS)
    {
        LOG_INF(&amp;quot;CS security enabled.&amp;quot;);
        k_sem_give(&amp;amp;sem_cs_security_enabled);
    }
    else
    {
        LOG_WRN(&amp;quot;CS security enable failed. (HCI status 0x%02x)&amp;quot;, status);
    }
}

static void procedure_enable_cb(struct bt_conn *conn,
                                uint8_t status,
                                struct bt_conn_le_cs_procedure_enable_complete *params)
{
    ARG_UNUSED(conn);

    if (status == BT_HCI_ERR_SUCCESS)
    {
        if (params-&amp;gt;state == 1)
        {
            LOG_INF(&amp;quot;CS procedures enabled:\n&amp;quot;
                    &amp;quot; - config ID: %u\n&amp;quot;
                    &amp;quot; - antenna configuration index: %u\n&amp;quot;
                    &amp;quot; - TX power: %d dbm\n&amp;quot;
                    &amp;quot; - subevent length: %u us\n&amp;quot;
                    &amp;quot; - subevents per event: %u\n&amp;quot;
                    &amp;quot; - subevent interval: %u\n&amp;quot;
                    &amp;quot; - event interval: %u\n&amp;quot;
                    &amp;quot; - procedure interval: %u\n&amp;quot;
                    &amp;quot; - procedure count: %u\n&amp;quot;
                    &amp;quot; - maximum procedure length: %u&amp;quot;,
                    params-&amp;gt;config_id, params-&amp;gt;tone_antenna_config_selection,
                    params-&amp;gt;selected_tx_power, params-&amp;gt;subevent_len,
                    params-&amp;gt;subevents_per_event, params-&amp;gt;subevent_interval,
                    params-&amp;gt;event_interval, params-&amp;gt;procedure_interval,
                    params-&amp;gt;procedure_count, params-&amp;gt;max_procedure_len);
        }
        else
        {
            LOG_INF(&amp;quot;CS procedures disabled.&amp;quot;);
        }
    }
    else
    {
        LOG_WRN(&amp;quot;CS procedures enable failed. (HCI status 0x%02x)&amp;quot;, status);
    }
}

static bool is_device_already_connected(const bt_addr_le_t *addr)
{
    for (uint8_t i = 0; i &amp;lt; active_connections; i++)
    {
        if (bt_addr_le_cmp(&amp;amp;connected_devices[i], addr) == 0)
        {
            return true;
        }
    }
    return false;
}

static bool is_device_already_failed(const bt_addr_le_t *addr)
{
    for (uint8_t i = 0; i &amp;lt; failed_device_count; i++)
    {
        if (bt_addr_le_cmp(&amp;amp;failed_devices[i], addr) == 0)
        {
            return true;
        }
    }
    return false;
}

static void scan_filter_match(struct bt_scan_device_info *device_info,
                              struct bt_scan_filter_match *filter_match, bool connectable)
{
    char addr[BT_ADDR_LE_STR_LEN];
    char device_name[32] = {0};

    bt_addr_le_to_str(device_info-&amp;gt;recv_info-&amp;gt;addr, addr, sizeof(addr));

    // Check if we&amp;#39;ve already connected to this device
    if (is_device_already_connected(device_info-&amp;gt;recv_info-&amp;gt;addr))
    {
        LOG_INF(&amp;quot;Skipping already connected device: %s&amp;quot;, addr);
        return;
    }

    // Check if we&amp;#39;ve already failed to connect to this device
    if (is_device_already_failed(device_info-&amp;gt;recv_info-&amp;gt;addr))
    {
        LOG_INF(&amp;quot;Skipping failed device: %s&amp;quot;, addr);
        return;
    }

    // Try to get device name from scan data
    const uint8_t *data = device_info-&amp;gt;adv_data-&amp;gt;data;
    uint8_t len = device_info-&amp;gt;adv_data-&amp;gt;len;

    for (int i = 0; i &amp;lt; len;)
    {
        uint8_t field_len = data[i];
        uint8_t field_type = data[i + 1];

        if (field_type == BT_DATA_NAME_COMPLETE)
        {
            if (field_len &amp;gt; 1 &amp;amp;&amp;amp; (i + 2 + field_len - 1) &amp;lt;= len)
            {
                memcpy(device_name, &amp;amp;data[i + 2], field_len - 1);
                device_name[field_len - 1] = &amp;#39;\0&amp;#39;;
                break;
            }
        }
        i += field_len + 1;
    }

    LOG_INF(&amp;quot;Filters matched. Address: %s, Name: %s, connectable: %d (current connections: %d/%d)&amp;quot;,
            addr, device_name[0] ? device_name : &amp;quot;Unknown&amp;quot;, connectable, active_connections, MAX_REFLECTORS);
}

static void scan_connecting_error(struct bt_scan_device_info *device_info)
{
    char addr[BT_ADDR_LE_STR_LEN];
    bt_addr_le_to_str(device_info-&amp;gt;recv_info-&amp;gt;addr, addr, sizeof(addr));

    LOG_INF(&amp;quot;Connecting failed to %s, adding to failed list&amp;quot;, addr);

    // Add to failed devices list if we have space
    if (failed_device_count &amp;lt; 10)
    {
        bt_addr_le_copy(&amp;amp;failed_devices[failed_device_count], device_info-&amp;gt;recv_info-&amp;gt;addr);
        failed_device_count++;
        LOG_INF(&amp;quot;Added %s to failed devices list (total failed: %d)&amp;quot;, addr, failed_device_count);
    }

    // Only restart scanning if we haven&amp;#39;t found all reflectors yet
    if (active_connections &amp;lt; MAX_REFLECTORS)
    {
        LOG_INF(&amp;quot;Restarting scanning for more reflectors&amp;quot;);
        // Add a small delay before restarting scan to avoid overwhelming the device
        k_sleep(K_MSEC(1000));
        int err = bt_scan_start(BT_SCAN_TYPE_SCAN_PASSIVE);
        if (err)
        {
            LOG_ERR(&amp;quot;Failed to restart scanning (err %i)&amp;quot;, err);
        }
    }
}

static void scan_connecting(struct bt_scan_device_info *device_info, struct bt_conn *conn)
{
    char addr[BT_ADDR_LE_STR_LEN];
    bt_addr_le_to_str(device_info-&amp;gt;recv_info-&amp;gt;addr, addr, sizeof(addr));

    LOG_INF(&amp;quot;Attempting to connect to %s&amp;quot;, addr);
}

BT_SCAN_CB_INIT(scan_cb, scan_filter_match, NULL, scan_connecting_error, scan_connecting);

static int scan_init(void)
{
    int err;

    struct bt_scan_init_param param = {
        .scan_param = NULL, .conn_param = BT_LE_CONN_PARAM_DEFAULT, .connect_if_match = 1};

    bt_scan_init(&amp;amp;param);
    bt_scan_cb_register(&amp;amp;scan_cb);

    err = bt_scan_filter_add(BT_SCAN_FILTER_TYPE_UUID, BT_UUID_RANGING_SERVICE);
    if (err)
    {
        LOG_ERR(&amp;quot;Scanning filters cannot be set (err %d)&amp;quot;, err);
        return err;
    }

    err = bt_scan_filter_enable(BT_SCAN_UUID_FILTER, false);
    if (err)
    {
        LOG_ERR(&amp;quot;Filters cannot be turned on (err %d)&amp;quot;, err);
        return err;
    }

    return 0;
}

BT_CONN_CB_DEFINE(conn_cb) = 
{
    .connected                               = connected_cb,
    .disconnected                            = disconnected_cb,
    .le_param_req                            = le_param_req,
    .security_changed                        = security_changed,
    .le_cs_read_remote_capabilities_complete = remote_capabilities_cb,
    .le_cs_config_complete                   = config_create_cb,
    .le_cs_security_enable_complete          = security_enable_cb,
    .le_cs_procedure_enable_complete         = procedure_enable_cb,
    .le_cs_subevent_data_available           = subevent_result_cb,
};

static void setup_reflector_connection(struct bt_conn *conn, uint8_t reflector_index)
{
    int err;

    LOG_INF(&amp;quot;Setting up reflector connection %d&amp;quot;, reflector_index);

    err = bt_conn_set_security(conn, BT_SECURITY_L2);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to encrypt connection (err %d)&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;sem_security, K_FOREVER);

    static struct bt_gatt_exchange_params mtu_exchange_params = {.func = mtu_exchange_cb};

    bt_gatt_exchange_mtu(conn, &amp;amp;mtu_exchange_params);

    k_sem_take(&amp;amp;sem_mtu_exchange_done, K_FOREVER);

    err = bt_gatt_dm_start(conn, BT_UUID_RANGING_SERVICE, &amp;amp;discovery_cb, NULL);
    if (err)
    {
        LOG_ERR(&amp;quot;Discovery failed (err %d)&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;sem_discovery_done, K_FOREVER);

    const struct bt_le_cs_set_default_settings_param default_settings = {
        .enable_initiator_role = true,
        .enable_reflector_role = false,
        .cs_sync_antenna_selection = BT_LE_CS_ANTENNA_SELECTION_OPT_REPETITIVE,
        .max_tx_power = BT_HCI_OP_LE_CS_MAX_MAX_TX_POWER,
    };

    err = bt_le_cs_set_default_settings(conn, &amp;amp;default_settings);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to configure default CS settings (err %d)&amp;quot;, err);
        return;
    }

    err = bt_ras_rreq_rd_overwritten_subscribe(conn, ranging_data_overwritten_cb);
    if (err)
    {
        LOG_ERR(&amp;quot;RAS RREQ ranging data overwritten subscribe failed (err %d)&amp;quot;, err);
        return;
    }

    err = bt_ras_rreq_rd_ready_subscribe(conn, ranging_data_ready_cb);
    if (err)
    {
        LOG_ERR(&amp;quot;RAS RREQ ranging data ready subscribe failed (err %d)&amp;quot;, err);
        return;
    }

    err = bt_ras_rreq_on_demand_rd_subscribe(conn);
    if (err)
    {
        LOG_ERR(&amp;quot;RAS RREQ On-demand ranging data subscribe failed (err %d)&amp;quot;, err);
        return;
    }

    err = bt_ras_rreq_cp_subscribe(conn);
    if (err)
    {
        LOG_ERR(&amp;quot;RAS RREQ CP subscribe failed (err %d)&amp;quot;, err);
        return;
    }

    err = bt_le_cs_read_remote_supported_capabilities(conn);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to exchange CS capabilities (err %d)&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;sem_remote_capabilities_obtained, K_FOREVER);

    struct bt_le_cs_create_config_params config_params = 
    {
        .id                     = CS_CONFIG_ID,
        .main_mode_type         = BT_CONN_LE_CS_MAIN_MODE_2,
        .sub_mode_type          = BT_CONN_LE_CS_SUB_MODE_1,
        .min_main_mode_steps    = 2,
        .max_main_mode_steps    = 5,
        .main_mode_repetition   = 0,
        .mode_0_steps           = NUM_MODE_0_STEPS,
        .role                   = BT_CONN_LE_CS_ROLE_INITIATOR,
        .rtt_type               = BT_CONN_LE_CS_RTT_TYPE_AA_ONLY,
        .cs_sync_phy            = BT_CONN_LE_CS_SYNC_1M_PHY,
        .channel_map_repetition = 3,
        .channel_selection_type = BT_CONN_LE_CS_CHSEL_TYPE_3B,
        .ch3c_shape             = BT_CONN_LE_CS_CH3C_SHAPE_HAT,
        .ch3c_jump              = 2,
    };

    bt_le_cs_set_valid_chmap_bits(config_params.channel_map);

    err = bt_le_cs_create_config(conn, &amp;amp;config_params,
                                 BT_LE_CS_CREATE_CONFIG_CONTEXT_LOCAL_AND_REMOTE);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to create CS config (err %d)&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;sem_config_created, K_FOREVER);

    err = bt_le_cs_security_enable(conn);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to start CS Security (err %d)&amp;quot;, err);
        return;
    }

    k_sem_take(&amp;amp;sem_cs_security_enabled, K_FOREVER);

    const struct bt_le_cs_set_procedure_parameters_param procedure_params =
    {
        .config_id                     = CS_CONFIG_ID,
        .max_procedure_len             = 1000,
        .min_procedure_interval        = 10,
        .max_procedure_interval        = 10,
        .max_procedure_count           = 0,
        .min_subevent_len              = 60000,
        .max_subevent_len              = 60000,
        .tone_antenna_config_selection = BT_LE_CS_TONE_ANTENNA_CONFIGURATION_A1_B1,
        .phy                           = BT_LE_CS_PROCEDURE_PHY_1M,
        .tx_power_delta                = 0x80,
        .preferred_peer_antenna        = BT_LE_CS_PROCEDURE_PREFERRED_PEER_ANTENNA_1,
        .snr_control_initiator         = BT_LE_CS_SNR_CONTROL_NOT_USED,
        .snr_control_reflector         = BT_LE_CS_SNR_CONTROL_NOT_USED,
    };

    err = bt_le_cs_set_procedure_parameters(conn, &amp;amp;procedure_params);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to set procedure parameters (err %d)&amp;quot;, err);
        return;
    }

    struct bt_le_cs_procedure_enable_param params = {
        .config_id = CS_CONFIG_ID,
        .enable = 1,
    };

    err = bt_le_cs_procedure_enable(conn, &amp;amp;params);
    if (err)
    {
        LOG_ERR(&amp;quot;Failed to enable CS procedures (err %d)&amp;quot;, err);
        return;
    }

    LOG_INF(&amp;quot;Reflector connection %d setup complete&amp;quot;, reflector_index);
}

int main(void)
{
    int err;

    LOG_INF(&amp;quot;Starting Channel Sounding Initiator Sample&amp;quot;);

    dk_leds_init();

    err = bt_enable(NULL);
    if (err)
    {
        LOG_ERR(&amp;quot;Bluetooth init failed (err %d)&amp;quot;, err);
        return 0;
    }

    err = scan_init();
    if (err)
    {
        LOG_ERR(&amp;quot;Scan init failed (err %d)&amp;quot;, err);
        return 0;
    }

    err = bt_scan_start(BT_SCAN_TYPE_SCAN_PASSIVE);
    if (err)
    {
        LOG_ERR(&amp;quot;Scanning failed to start (err %i)&amp;quot;, err);
        return 0;
    }

    // Wait for all reflector connections
    LOG_INF(&amp;quot;Waiting for %d reflector connections...&amp;quot;, MAX_REFLECTORS);

    // Add a timeout mechanism - wait up to 30 seconds for all connections
    int timeout_count = 0;
    const int max_timeout = 300;   // 30 seconds at 100ms intervals
    const int retry_interval = 50; // Retry failed devices every 5 seconds

    while (active_connections &amp;lt; MAX_REFLECTORS &amp;amp;&amp;amp; timeout_count &amp;lt; max_timeout)
    {
        // Wait for connection with timeout
        if (k_sem_take(&amp;amp;sem_connected, K_MSEC(100)) == 0)
        {
            LOG_INF(&amp;quot;Connected to reflector %d (%d/%d total)&amp;quot;,
                    active_connections - 1, active_connections, MAX_REFLECTORS);
        }
        else
        {
            timeout_count++;

            // Clear failed devices list periodically to allow retrying
            if (timeout_count % retry_interval == 0 &amp;amp;&amp;amp; failed_device_count &amp;gt; 0)
            {
                LOG_INF(&amp;quot;Clearing failed devices list to retry connections&amp;quot;);
                failed_device_count = 0;
            }

            if (timeout_count % 100 == 0)
            { // Log every 10 seconds
                LOG_INF(&amp;quot;Still waiting for reflectors... (%d/%d found, timeout: %d/%d, failed devices: %d)&amp;quot;,
                        active_connections, MAX_REFLECTORS, timeout_count, max_timeout, failed_device_count);
            }
        }
    }

    if (active_connections &amp;lt; MAX_REFLECTORS)
    {
        LOG_WRN(&amp;quot;Timeout waiting for all reflectors. Only found %d/%d&amp;quot;,
                active_connections, MAX_REFLECTORS);
        if (active_connections == 0)
        {
            LOG_ERR(&amp;quot;No reflectors found! Check if reflector devices are advertising properly.&amp;quot;);
            return 0;
        }
        LOG_INF(&amp;quot;Proceeding with available reflectors...&amp;quot;);
    }

    LOG_INF(&amp;quot;Setup complete for %d reflectors, starting ranging&amp;quot;, active_connections);

    // Setup each reflector connection
    for (uint8_t i = 0; i &amp;lt; active_connections; i++)
    {
        setup_reflector_connection(connections[i], i);
    }

    while (true)
    {
        k_sleep(K_MSEC(1000)); // Faster update rate: 100ms instead of 500ms

        // Process distance estimates for all reflectors
        for (uint8_t reflector = 0; reflector &amp;lt; active_connections; reflector++)
        {
            if (buffer_num_valid != 0)
            {
                for (uint8_t ap = 0; ap &amp;lt; MAX_AP; ap++)
                {
                    cs_de_dist_estimates_t distance_on_ap = get_distance(reflector, ap);

                    // Update running average for IFFT distance
                    float ifft_running_avg = update_ifft_running_average(reflector, ap, distance_on_ap.ifft);

                    LOG_INF(&amp;quot;Reflector %d - Distance estimates on antenna path %u: ifft: %f (avg: %f), &amp;quot;
                            &amp;quot;phase_slope: %f, rtt: %f&amp;quot;,
                            reflector, ap, (double)distance_on_ap.ifft, (double)ifft_running_avg,
                            (double)distance_on_ap.phase_slope,
                            (double)distance_on_ap.rtt);
                }
            }
        }

        LOG_INF(&amp;quot;Sleeping for 1000 ms...&amp;quot;);
    }

    return 0;
}
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;channel_sounding_ras_initiator prj.conf :&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;#
# Copyright (c) 2024 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#

CONFIG_NCS_SAMPLES_DEFAULTS=y
CONFIG_DK_LIBRARY=y

CONFIG_BT=y
CONFIG_BT_SMP=y
CONFIG_BT_CENTRAL=y
CONFIG_BT_MAX_CONN=4
CONFIG_BT_BONDABLE=n

CONFIG_BT_GATT_CLIENT=y
CONFIG_BT_GATT_DYNAMIC_DB=y

CONFIG_BT_CHANNEL_SOUNDING=y
CONFIG_BT_RAS=y
CONFIG_BT_RAS_RREQ=y

CONFIG_BT_SCAN=y
CONFIG_BT_SCAN_FILTER_ENABLE=y
CONFIG_BT_SCAN_UUID_CNT=1

# The Ranging Profile recommends a MTU of at least 247 octets.
CONFIG_BT_L2CAP_TX_MTU=498
CONFIG_BT_BUF_ACL_TX_SIZE=502
CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_ATT_PREPARE_COUNT=3
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251

# This reduces RAM usage. Additional RAM is needed to support optional
# features such as mode 3 or multiantenna. Change or remove these if
# using those features
CONFIG_BT_RAS_MODE_3_SUPPORTED=n
CONFIG_BT_RAS_MAX_ANTENNA_PATHS=1
CONFIG_BT_CTLR_SDC_CS_MAX_ANTENNA_PATHS=1
CONFIG_BT_CTLR_SDC_CS_NUM_ANTENNAS=1
CONFIG_BT_CTLR_SDC_CS_STEP_MODE3=n

# This size assumes the largest step size is mode 2 with one antenna path:
# 12 bytes * 160 steps in a subevent. Change or remove this if using mode 3
# or multiantenna.
CONFIG_BT_CHANNEL_SOUNDING_REASSEMBLY_BUFFER_SIZE=1920

# This allows CS and ACL to use different PHYs
CONFIG_BT_TRANSMIT_POWER_CONTROL=y

# This improves the performance of floating-point operations
CONFIG_FPU=y
CONFIG_FPU_SHARING=y

CONFIG_CBPRINTF_FP_SUPPORT=y

CONFIG_BT_CS_DE=y
CONFIG_BT_CS_DE_512_NFFT=y
&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The logs on initiator side :&lt;/p&gt;
&lt;p&gt;(you will notice that one of the reflectors always shows 0 in distance)&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;*** Booting nRF Connect SDK v3.0.2-89ba1294ac9b ***
*** Using Zephyr OS v4.0.99-f791c49f492c ***
I: Starting Channel Sounding Initiator Sample
I: SoftDevice Controller build revision: 
I: 89 9a 50 8a 95 01 9c 58 |..P....X
I: fc 39 d2 c1 10 04 ee 02 |.9......
I: 64 ce 25 be             |d.%.    
I: HW Platform: Nordic Semiconductor (0x0002)
I: HW Variant: nRF54Lx (0x0005)
I: Firmware: Standard Bluetooth controller (0x00) Version 137.20634 Build 2617349514
I: Identity: C6:41:B0:37:C1:9F (random)
I: HCI: version 6.0 (0x0e) revision 0x30f3, manufacturer 0x0059
I: LMP: version 6.0 (0x0e) subver 0x30f3
I: Waiting for 2 reflector connections...
I: Filters matched. Address: F6:01:EA:F1:47:51 (random), Name: Reflector-1, connectable: 1 (current connections: 0/2)
I: Attempting to connect to F6:01:EA:F1:47:51 (random)
I: Connected to F6:01:EA:F1:47:51 (random) (err 0x00)
I: Stored connection for reflector 0
I: Continuing to scan for more reflectors (1/2 found)
I: Connected to reflector 0 (1/2 total)
I: Filters matched. Address: FF:E7:7D:64:BC:8B (random), Name: Reflector-2, connectable: 1 (current connections: 1/2)
I: Attempting to connect to FF:E7:7D:64:BC:8B (random)
I: Connected to FF:E7:7D:64:BC:8B (random) (err 0x00)
I: Stored connection for reflector 1
I: All reflectors found, stopping scan
I: Connected to reflector 1 (2/2 total)
I: Setup complete for 2 reflectors, starting ranging
I: Setting up reflector connection 0
I: Security changed: F6:01:EA:F1:47:51 (random) level 2
I: MTU exchange success (498)
I: The discovery procedure succeeded
I: CS capability exchange completed.
I: CS config creation complete. ID: 0
I: CS security enabled.
I: Reflector connection 0 setup complete
I: Setting up reflector connection 1
E: Failed to encrypt connection (err -12)
I: CS procedures enabled:
 - config ID: 0
 - antenna configuration index: 0
 - TX power: 0 dbm
 - subevent length: 28198 us
 - subevents per event: 1
 - subevent interval: 0
 - event interval: 2
 - procedure interval: 10
 - procedure count: 0
 - maximum procedure length: 1000
I: Sleeping for 1000 ms...
I: Sleeping for 1000 ms...
I: Sleeping for 1000 ms...
I: Ranging data overwritten 4
I: Sleeping for 1000 ms...
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.049362 (avg: 2.049362), phase_slope: 3.913533, rtt: 7.974549
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.561703 (avg: 2.305533), phase_slope: 3.693789, rtt: 8.000714
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.342128 (avg: 2.317731), phase_slope: 3.664881, rtt: 7.925765
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.383952 (avg: 2.334286), phase_slope: 3.921384, rtt: 7.724940
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Ranging data overwritten 17
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.383952 (avg: 2.344220), phase_slope: 3.861651, rtt: 7.836896
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.383952 (avg: 2.411137), phase_slope: 3.861651, rtt: 7.836896
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.268937 (avg: 2.352584), phase_slope: 3.997900, rtt: 7.880391
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.268937 (avg: 2.337946), phase_slope: 3.997900, rtt: 7.880391
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.268937 (avg: 2.314943), phase_slope: 3.997900, rtt: 7.880391
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Ranging data overwritten 27
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.179481 (avg: 2.274049), phase_slope: 4.024032, rtt: 7.867682
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.305533 (avg: 2.258365), phase_slope: 3.985970, rtt: 7.882163
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Ranging data overwritten 31
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.305533 (avg: 2.265684), phase_slope: 3.985970, rtt: 7.882163
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.216657 (avg: 2.255228), phase_slope: 4.044756, rtt: 7.828835
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Ranging data overwritten 35
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.098157 (avg: 2.221072), phase_slope: 4.178952, rtt: 7.812559
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.873703 (avg: 2.159916), phase_slope: 4.159396, rtt: 7.735431
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Ranging data overwritten 40
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 1.873703 (avg: 2.073550), phase_slope: 4.159396, rtt: 7.735431
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000
I: Sleeping for 1000 ms...
I: Reflector 0 - Distance estimates on antenna path 0: ifft: 2.049362 (avg: 2.022316), phase_slope: 4.244737, rtt: 7.811957
I: Reflector 1 - Distance estimates on antenna path 0: ifft: 0.000000 (avg: 0.000000), phase_slope: 0.000000, rtt: 0.000000&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Logs from reflector 1:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;*** Booting nRF Connect SDK v3.0.2-89ba1294ac9b ***
*** Using Zephyr OS v4.0.99-f791c49f492c ***
I: Starting Channel Sounding Reflector Sample:  ================== Reflector-1 ================== 
I: SoftDevice Controller build revision: 
I: 89 9a 50 8a 95 01 9c 58 |..P....X
I: fc 39 d2 c1 10 04 ee 02 |.9......
I: 64 ce 25 be             |d.%.    
I: HW Platform: Nordic Semiconductor (0x0002)
I: HW Variant: nRF54Lx (0x0005)
I: Firmware: Standard Bluetooth controller (0x00) Version 137.20634 Build 2617349514
I: Identity: F6:01:EA:F1:47:51 (random)
I: HCI: version 6.0 (0x0e) revision 0x30f3, manufacturer 0x0059
I: LMP: version 6.0 (0x0e) subver 0x30f3
I: Connected to C6:41:B0:37:C1:9F (random) (err 0x00)
I: CS capability exchange completed.
I: CS config creation complete. ID: 0
I: CS security enabled.
I: CS procedures enabled.&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Logs from reflector 2:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;*** Booting nRF Connect SDK v3.0.2-89ba1294ac9b ***
*** Using Zephyr OS v4.0.99-f791c49f492c ***
I: Starting Channel Sounding Reflector Sample:  ================== Reflector-2 ================== 
I: SoftDevice Controller build revision: 
I: 89 9a 50 8a 95 01 9c 58 |..P....X
I: fc 39 d2 c1 10 04 ee 02 |.9......
I: 64 ce 25 be             |d.%.    
I: HW Platform: Nordic Semiconductor (0x0002)
I: HW Variant: nRF54Lx (0x0005)
I: Firmware: Standard Bluetooth controller (0x00) Version 137.20634 Build 2617349514
I: Identity: FF:E7:7D:64:BC:8B (random)
I: HCI: version 6.0 (0x0e) revision 0x30f3, manufacturer 0x0059
I: LMP: version 6.0 (0x0e) subver 0x30f3
I: Connected to C6:41:B0:37:C1:9F (random) (err 0x00)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;You will notice that in reflector 2, the channel sounding logs are missing. And it&amp;#39;s not always reflector 2, sometimes reflector 2 works and reflector 1 doesn&amp;#39;t. Whichever connects first works.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks for the help.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Usman&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Multi reflector channel sounding</title><link>https://devzone.nordicsemi.com/thread/544595?ContentTypeID=1</link><pubDate>Tue, 05 Aug 2025 10:48:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ada25ad1-a43b-4f15-bcd0-405a18bae751</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;Did you test the NCS\nrf\samples\bluetooth\channel_sounding_ras_initiator and channel_sounding_ras_reflector? These use an algorithm that gives a bit better accuracy.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;But your question remains the same: &amp;quot;How to do measurements on different devices?&amp;quot;&lt;/p&gt;
&lt;p&gt;What do you observe when you try to introduce the second reflector? Does your log say anything?&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>