/* @file
 * @brief Internal APIs for PACS handling
 *
 * Copyright (c) 2020 Intel Corporation
 * Copyright (c) 2022 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/bluetooth/audio/audio.h>

#define BT_AUDIO_LOCATION_MASK BIT_MASK(28)

struct bt_pac_codec {
	uint8_t  id;			/* Codec ID */
	uint16_t cid;			/* Company ID */
	uint16_t vid;			/* Vendor specific Codec ID */
} __packed;

/* TODO: Figure out the capabilities types */
#define BT_CODEC_CAP_PARAMS		0x01
#define BT_CODEC_CAP_DRM		0x0a
#define BT_CODEC_CAP_DRM_VALUE		0x0b

struct bt_pac_codec_capability {
	uint8_t  len;			/* Codec Capability length */
	uint8_t  type;			/* Codec Capability type */
	uint8_t  data[0];		/* Codec Capability data */
} __packed;

struct bt_pac_meta {
	uint8_t  len;			/* Metadata Length */
	uint8_t  value[0];		/* Metadata Value */
} __packed;

struct bt_pac {
	struct bt_pac_codec codec;	/* Codec ID */
	uint8_t  cc_len;		/* Codec Capabilities Length */
	struct bt_pac_codec_capability cc[0]; /* Codec Specific Capabilities */
	struct bt_pac_meta meta[0];	/* Metadata */
} __packed;

struct bt_pacs_read_rsp {
	uint8_t  num_pac;		/* Number of PAC Records*/
	struct bt_pac pac[0];
} __packed;

struct bt_pacs_context {
	uint16_t  snk;
	uint16_t  src;
} __packed;

void bt_pacs_add_capability(enum bt_audio_dir dir);
void bt_pacs_remove_capability(enum bt_audio_dir dir);
int bt_pacs_available_contexts_changed(void);
bool bt_pacs_context_available(enum bt_audio_dir dir, uint16_t context);
