BLuetooth: controller: hci: fix wrong sync handle in IQ samples report
There were no assignment to iq_report->hdr.handle in the code
hence all IQ samples reports had the same handle value which
was zero.
Since the handle is related with ll_sync_set pointer the handle
value may not be set in LLL.
The best place to set handle value is thread context where
bt_hci_evt_le_connectionless_iq_report is prepared.
Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>
diff --git a/subsys/bluetooth/controller/hci/hci.c b/subsys/bluetooth/controller/hci/hci.c
index 413c4ef..3e7c264 100644
--- a/subsys/bluetooth/controller/hci/hci.c
+++ b/subsys/bluetooth/controller/hci/hci.c
@@ -47,6 +47,7 @@
#include "ll_sw/ull_adv_types.h"
#include "ll_sw/ull_scan_types.h"
#include "ll_sw/ull_sync_types.h"
+#include "ll_sw/ull_sync_internal.h"
#include "ll_sw/ull_conn_types.h"
#include "ll_sw/ull_conn_internal.h"
#include "ll_sw/ull_conn_iso_types.h"
@@ -2685,7 +2686,7 @@
{
struct bt_hci_evt_le_connectionless_iq_report *sep;
struct node_rx_iq_report *iq_report;
-
+ struct ll_sync_set *sync;
struct lll_sync *lll;
uint8_t samples_cnt;
int16_t iq_tmp;
@@ -2723,7 +2724,12 @@
rssi = RSSI_DBM_TO_DECI_DBM(iq_report->hdr.rx_ftr.rssi);
- sep->sync_handle = sys_cpu_to_le16(iq_report->hdr.handle);
+ /* Get the sync handle corresponding to the LLL context passed in the
+ * node rx footer field.
+ */
+ sync = HDR_LLL2ULL(lll);
+
+ sep->sync_handle = sys_cpu_to_le16(ull_sync_handle_get(sync));
sep->rssi = sys_cpu_to_le16(rssi);
sep->rssi_ant_id = iq_report->rssi_ant_id;
sep->cte_type = iq_report->cte_info.type;