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);
/* 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,
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:
* 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);
}