/*
 * Copyright (c) 2021 Demant
 *
 * SPDX-License-Identifier: Apache-2.0
 */

struct ll_conn;

typedef void (*ll_iso_stream_released_cb_t)(struct ll_conn *conn);


struct ll_conn_iso_stream {
	struct ll_iso_stream_hdr hdr;
	struct ll_conn_iso_group *group;
	struct lll_conn_iso_stream lll;
	uint32_t sync_delay;
	uint8_t  cis_id;
	uint8_t  terminate_reason;
	uint32_t offset;          /* Offset of CIS from ACL event in us */
	ll_iso_stream_released_cb_t released_cb; /* CIS release callback */
	uint16_t framed:1;
	uint16_t established:1;   /* 0 if CIS has not yet been established.
				   * 1 if CIS has been established and host
				   * notified.
				   */
	uint16_t teardown:1;       /* 1 if CIS teardown has been initiated */
	uint16_t trx_performed:1;  /* 1 if CIS had a transaction */
	uint16_t p_max_sdu:12;     /* Maximum SDU size P_To_C */
	uint16_t c_max_sdu:12;     /* Maximum SDU size C_To_P */
	union {
		struct {
			uint8_t  c_rtn;
			uint8_t  p_rtn;
			uint16_t instant;
		} central;
	};
	uint16_t event_expire;     /* Supervision & Connect Timeout event counter */
};

struct ll_conn_iso_group {
	struct ull_hdr            ull;
	struct lll_conn_iso_group lll;

	uint32_t sync_delay;
	uint32_t c_latency;	/* Transport_Latency_M_To_S = CIG_Sync_Delay +
				 * (FT_M_To_S) × ISO_Interval +
				 * SDU_Interval_M_To_S
				 */
	uint32_t p_latency;	/* Transport_Latency_S_To_M = CIG_Sync_Delay +
				 * (FT_S_To_M) × ISO_Interval +
				 * SDU_Interval_S_To_M
				 */
	uint32_t c_sdu_interval;
	uint32_t p_sdu_interval;
	uint32_t cig_ref_point;	/* CIG reference point timestamp (us) based on
				 * controller's clock.
				 */
	uint16_t iso_interval;
	uint8_t  cig_id;
	uint8_t  started:1;     /* 1 if CIG started and ticker is running */
	uint8_t  sca_update:4;  /* (new SCA)+1 to trigger restart of ticker */
	uint8_t  cis_count:5;   /* Number of configured CISes in this CIG */
	union {
		struct {
			uint8_t sca;
			uint8_t packing;
			uint8_t framing;
			uint8_t test:1; /* HCI_LE_Set_CIG_Parameters_Test */
		} central;
	};
};

struct node_rx_conn_iso_req {
	uint16_t cis_handle;
	uint8_t  cig_id;
	uint8_t  cis_id;
};

struct node_rx_conn_iso_estab {
	uint16_t cis_handle;
	uint8_t  status;
};
