Diff between 97a07d8485a3235cbefe9e78c5e596faf5c6be31 and 3f018d52d4ac07bd54e5e6dfd6c3b55c70ff1db2

Changed Files

File Additions Deletions Status
emulator/btdev.c +12 -6 modified

Full Patch

diff --git a/emulator/btdev.c b/emulator/btdev.c
index d545019..637f0bb 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
@@ -5940,8 +5940,14 @@ static int cmd_create_cis(struct btdev *dev, const void *data, uint8_t len)
 	return 0;
 }
 
-static uint32_t le_cis_transport_latecy(uint8_t ft, uint8_t iso_interval,
-						uint8_t sdu_interval[3])
+static uint8_t le_cis_interval(uint8_t sdu_interval[3])
+{
+	/* ISO Interval (slots of 1.25 ms) = SDU_Interval (us) */
+	return get_le24(sdu_interval) / 1250;
+}
+
+static uint32_t le_cis_latecy(uint8_t ft, uint8_t iso_interval,
+					uint8_t sdu_interval[3])
 {
 	uint32_t latency;
 	uint32_t interval = get_le24(sdu_interval);
@@ -5949,7 +5955,7 @@ static uint32_t le_cis_transport_latecy(uint8_t ft, uint8_t iso_interval,
 	/* Transport_Latency = FT × ISO_Interval - SDU_Interval */
 	latency = ft * (iso_interval * 1250) - interval;
 
-	return latency <= interval ? latency : interval;
+	return latency >= interval ? latency : interval;
 }
 
 static void le_cis_estabilished(struct btdev *dev, struct btdev_conn *conn,
@@ -5983,7 +5989,7 @@ static void le_cis_estabilished(struct btdev *dev, struct btdev_conn *conn,
 		evt.p_ft = 0x02;
 		evt.c_mtu = le_cig->cis[cis_idx].c_sdu;
 		evt.p_mtu = le_cig->cis[cis_idx].p_sdu;
-		evt.interval = (le_cig->params.c_latency + 0.625) / 1.25;
+		evt.interval = le_cis_interval(le_cig->params.c_interval);
 
 		/* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 6, Part G
 		 * page 3050:
@@ -5993,9 +5999,9 @@ static void le_cis_estabilished(struct btdev *dev, struct btdev_conn *conn,
 		 * Transport_Latency_P_To_C = CIG_Sync_Delay + FT_P_To_C ×
 		 * ISO_Interval - SDU_Interval_P_To_C
 		 */
-		put_le24(le_cis_transport_latecy(evt.c_ft, evt.interval,
+		put_le24(le_cis_latecy(evt.c_ft, evt.interval,
 				le_cig->params.c_interval), evt.c_latency);
-		put_le24(le_cis_transport_latecy(evt.p_ft, evt.interval,
+		put_le24(le_cis_latecy(evt.p_ft, evt.interval,
 				le_cig->params.p_interval), evt.p_latency);
 	}