aboutsummaryrefslogtreecommitdiff
path: root/inc/bluetooth/leaudio
diff options
context:
space:
mode:
Diffstat (limited to 'inc/bluetooth/leaudio')
-rw-r--r--inc/bluetooth/leaudio/bap.h127
-rw-r--r--inc/bluetooth/leaudio/base_data_parse.h53
-rw-r--r--inc/bluetooth/leaudio/bass_client.h80
-rw-r--r--inc/bluetooth/leaudio/bass_def.h154
-rw-r--r--inc/bluetooth/leaudio/ble_audio.h85
-rw-r--r--inc/bluetooth/leaudio/ble_audio_def.h80
-rw-r--r--inc/bluetooth/leaudio/ble_audio_flags.h56
-rw-r--r--inc/bluetooth/leaudio/ble_audio_group.h89
-rw-r--r--inc/bluetooth/leaudio/ble_audio_sync.h126
-rw-r--r--inc/bluetooth/leaudio/bt_bond_mgr.h51
-rw-r--r--inc/bluetooth/leaudio/bt_gatt_client.h192
-rw-r--r--inc/bluetooth/leaudio/cap.h86
-rw-r--r--inc/bluetooth/leaudio/codec_def.h122
-rw-r--r--inc/bluetooth/leaudio/codec_qos.h101
-rw-r--r--inc/bluetooth/leaudio/csis_def.h49
-rw-r--r--inc/bluetooth/leaudio/csis_rsi.h24
-rw-r--r--inc/bluetooth/leaudio/metadata_def.h54
-rw-r--r--inc/bluetooth/leaudio/pacs_client.h102
-rw-r--r--inc/bluetooth/leaudio/set_coordinator_client.h132
19 files changed, 1763 insertions, 0 deletions
diff --git a/inc/bluetooth/leaudio/bap.h b/inc/bluetooth/leaudio/bap.h
new file mode 100644
index 0000000..5bfe78b
--- /dev/null
+++ b/inc/bluetooth/leaudio/bap.h
@@ -0,0 +1,127 @@
+#ifndef _BAP_H_
+#define _BAP_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ble_audio_def.h"
+#include "pacs_client.h"
+#include "codec_qos.h"
+//#include "ascs_def.h"
+
+#define BAP_BROADCAST_SOURCE_ROLE 0x01
+#define BAP_BROADCAST_SINK_ROLE 0x02
+#define BAP_BROADCAST_ASSISTANT_ROLE 0x04
+#define BAP_SCAN_DELEGATOR_ROLE 0x08
+#define BAP_UNICAST_CLT_SRC_ROLE 0x10
+#define BAP_UNICAST_CLT_SNK_ROLE 0x20
+#define BAP_UNICAST_SRV_SRC_ROLE 0x40
+#define BAP_UNICAST_SRV_SNK_ROLE 0x80
+
+typedef struct
+{
+ uint8_t role_mask;
+ uint8_t brs_num; //use isoc_big_receiver_num
+
+ uint8_t snk_ase_num;
+ uint8_t src_ase_num;
+
+ bool init_gap;
+//for BAP_UNICAST_CLT_SRC_ROLE, BAP_UNICAST_CLT_SNK_ROLE
+ uint8_t isoc_cig_max_num;
+
+//for BAP_UNICAST_CLT_SRC_ROLE, BAP_UNICAST_CLT_SNK_ROLE, BAP_UNICAST_SRV_SRC_ROLE, BAP_UNICAST_SRV_SNK_ROLE
+ uint8_t isoc_cis_max_num;
+
+//for BAP_BROADCAST_SOURCE_ROLE
+ uint8_t pa_adv_num;
+ uint8_t isoc_big_broadcaster_num;
+ uint8_t isoc_bis_broadcaster_num;
+
+//for BAP_BROADCAST_SINK_ROLE and BAP_BROADCAST_ASSISTANT_ROLE
+ uint8_t pa_sync_num;
+ uint8_t isoc_big_receiver_num;
+ uint8_t isoc_bis_receiver_num;
+} T_BAP_ROLE_INFO;
+
+#if LE_AUDIO_PACS_CLIENT_SUPPORT
+#define PACS_AUDIO_AVAILABLE_CONTEXTS_EXIST 0x01
+#define PACS_AUDIO_SUPPORTED_CONTEXTS_EXIST 0x02
+#define PACS_SINK_AUDIO_LOC_EXIST 0x04
+#define PACS_SINK_PAC_EXIST 0x08
+#define PACS_SOURCE_AUDIO_LOC_EXIST 0x10
+#define PACS_SOURCE_PAC_EXIST 0x20
+
+typedef struct
+{
+ uint16_t value_exist;
+ uint8_t sink_pac_num;
+ uint8_t source_pac_num;
+ uint32_t snk_audio_loc;
+ uint32_t src_audio_loc;
+ uint16_t snk_sup_context;
+ uint16_t src_sup_context;
+ uint16_t snk_avail_context;
+ uint16_t src_avail_context;
+} T_BAP_PACS_INFO;
+
+typedef struct
+{
+ uint8_t codec_id[CODEC_ID_LEN];
+ uint16_t handle;
+ uint16_t pref_audio_contexts;
+ T_CODEC_CAP codec_cap;
+ uint32_t lc3_sup_cfg_bits;
+} T_BAP_PAC_RECORD;
+
+//LE_AUDIO_MSG_BAP_PACS_DIS_DONE
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ uint8_t sink_pac_num;
+ uint8_t source_pac_num;
+} T_BAP_PACS_DIS_DONE;
+
+//LE_AUDIO_MSG_BAP_PAC_NOTIFY
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t handle;
+} T_BAP_PAC_NOTIFY;
+
+bool bap_pacs_get_info(uint16_t conn_handle, T_BAP_PACS_INFO *p_pacs_info);
+bool bap_pacs_get_pac_record(uint16_t conn_handle, T_AUDIO_DIRECTION direction, uint8_t *p_pac_num,
+ T_BAP_PAC_RECORD *p_pac_tbl);
+bool bap_pacs_get_pac_record_by_handle(uint16_t conn_handle, uint16_t handle, uint8_t *p_pac_num,
+ T_BAP_PAC_RECORD *p_pac_tbl);
+uint32_t bap_pacs_get_lc3_snk_table_msk(uint16_t conn_handle, uint16_t prefer_context,
+ uint8_t chl_cnt,
+ uint8_t block_num);
+uint32_t bap_pacs_get_lc3_src_table_msk(uint16_t conn_handle, uint16_t prefer_context,
+ uint8_t chl_cnt,
+ uint8_t block_num);
+#endif
+
+#if LE_AUDIO_ASCS_CLIENT_SUPPORT
+#define ASE_ID_MAX_NUM 8
+//LE_AUDIO_MSG_BAP_ASCS_DIS_DONE
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ uint8_t sink_ase_num;
+ uint8_t sink_ase_id[ASE_ID_MAX_NUM];
+ uint8_t source_ase_num;
+ uint8_t source_ase_id[ASE_ID_MAX_NUM];
+} T_BAP_ASCS_DIS_DONE;
+#endif
+
+bool bap_role_init(T_BAP_ROLE_INFO *p_role_info);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/base_data_parse.h b/inc/bluetooth/leaudio/base_data_parse.h
new file mode 100644
index 0000000..2d1842c
--- /dev/null
+++ b/inc/bluetooth/leaudio/base_data_parse.h
@@ -0,0 +1,53 @@
+#ifndef _BASE_DATA_PARSE_H_
+#define _BASE_DATA_PARSE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdint.h>
+#include "codec_def.h"
+
+#if LE_AUDIO_BASE_DATA_PARSE
+
+typedef struct
+{
+ uint8_t subgroup_idx;
+ uint8_t bis_index;
+ uint8_t codec_id[CODEC_ID_LEN];
+ T_CODEC_CFG bis_codec_cfg;
+} T_BASE_DATA_BIS_PARAM;
+
+typedef struct
+{
+ uint8_t subgroup_idx;
+ uint8_t num_bis;
+ uint8_t metadata_len;
+ uint32_t bis_array;
+ uint8_t *p_metadata;
+ T_BASE_DATA_BIS_PARAM *p_bis_param;
+} T_BASE_DATA_SUBGROUP_PARAM;
+
+typedef struct
+{
+ uint8_t num_bis;
+ uint8_t num_subgroups;
+ uint32_t presentation_delay;
+ //Level2 param
+ T_BASE_DATA_SUBGROUP_PARAM *p_subgroup;
+} T_BASE_DATA_MAPPING;
+
+void base_data_print(T_BASE_DATA_MAPPING *p_mapping);
+T_BASE_DATA_MAPPING *base_data_parse_data(uint16_t pa_data_len, uint8_t *p_pa_data);
+bool base_data_cmp(T_BASE_DATA_MAPPING *p_mapping_a, T_BASE_DATA_MAPPING *p_mapping_b);
+bool base_data_get_bis_codec_cfg(T_BASE_DATA_MAPPING *p_mapping, uint8_t bis_idx,
+ T_CODEC_CFG *p_cfg);
+void base_data_free(T_BASE_DATA_MAPPING *p_mapping);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/bass_client.h b/inc/bluetooth/leaudio/bass_client.h
new file mode 100644
index 0000000..4a7c397
--- /dev/null
+++ b/inc/bluetooth/leaudio/bass_client.h
@@ -0,0 +1,80 @@
+#ifndef _BASS_CLIENT_H_
+#define _BASS_CLIENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "bass_def.h"
+#include "ble_audio_sync.h"
+//#include "broadcast_source_sm.h"
+
+#if LE_AUDIO_BASS_CLIENT_SUPPORT
+//LE_AUDIO_MSG_BASS_CLIENT_DIS_DONE
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ bool load_form_ftl;
+ uint8_t brs_char_num;
+} T_BASS_CLIENT_DIS_DONE;
+
+//LE_AUDIO_MSG_BASS_CLIENT_BRS_DATA
+typedef struct
+{
+ uint16_t conn_handle;
+ bool notify;
+ uint16_t read_cause;
+ uint8_t instance_id;
+ T_BASS_BRS_DATA *p_brs_data;
+} T_BASS_CLIENT_BRS_DATA;
+
+//LE_AUDIO_MSG_BASS_CLIENT_SYNC_INFO_REQ
+typedef struct
+{
+ uint16_t conn_handle;
+ uint8_t instance_id;
+ T_BASS_BRS_DATA *p_brs_data;
+} T_BASS_CLIENT_SYNC_INFO_REQ;
+
+//LE_AUDIO_MSG_BASS_CLIENT_CP_RESULT
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t cause;
+} T_BASS_CLIENT_CP_RESULT;
+
+//LE_AUDIO_MSG_BASS_CLIENT_CCCD
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t cause;
+} T_BASS_CLIENT_CCCD;
+
+bool bass_enable_cccd(uint16_t conn_handle);
+bool bass_read_brs_value(uint16_t conn_handle, uint8_t instance_id);
+
+bool bass_cp_remote_scan_stop(uint16_t conn_handle, bool is_req);
+bool bass_cp_remote_scan_start(uint16_t conn_handle, bool is_req);
+bool bass_cp_add_source(uint16_t conn_handle, T_BASS_CP_ADD_SOURCE *p_cp_data, bool is_req);
+bool bass_cp_modify_source(uint16_t conn_handle, T_BASS_CP_MODIFY_SOURCE *p_cp_data, bool is_req);
+bool bass_cp_set_broadcast_code(uint16_t conn_handle, T_BASS_CP_SET_BROADCAST_CODE *p_cp_data,
+ bool is_req);
+bool bass_cp_remove_source(uint16_t conn_handle, T_BASS_CP_REMOVE_SOURCE *p_cp_data, bool is_req);
+T_BASS_BRS_DATA *bass_get_brs_data(uint16_t conn_handle, uint8_t instance_id);
+
+bool bass_cp_add_source_by_sync_info(T_BLE_AUDIO_SYNC_HANDLE handle, uint16_t conn_handle,
+ T_BASS_PA_SYNC pa_sync, uint32_t bis_array, bool is_req);
+bool bass_cp_modify_source_by_sync_info(T_BLE_AUDIO_SYNC_HANDLE handle, uint16_t conn_handle,
+ uint8_t source_id,
+ T_BASS_PA_SYNC pa_sync, uint32_t bis_array, bool is_req);
+
+bool bass_transfer_syncinfo_of_remote_src(T_BLE_AUDIO_SYNC_HANDLE handle, uint16_t conn_handle,
+ T_BASS_PAST_SRV_DATA srv_data);
+
+#endif
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/bass_def.h b/inc/bluetooth/leaudio/bass_def.h
new file mode 100644
index 0000000..047ba88
--- /dev/null
+++ b/inc/bluetooth/leaudio/bass_def.h
@@ -0,0 +1,154 @@
+#ifndef _BASS_DEF_H_
+#define _BASS_DEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "gap.h"
+#include "metadata_def.h"
+#include "ble_audio_def.h"
+
+#define ATT_ERR_BASS_OPCODE_NOT_SUPPORT 0x80
+#define ATT_ERR_BASS_INVALID_SRC_ID 0x81
+
+#define BASS_FAILED_TO_SYNC_TO_BIG 0xFFFFFFFF
+#define BASS_CP_BIS_SYNC_NO_PREFER 0xFFFFFFFF
+#define BASS_PA_INTERVAL_UNKNOWN 0xFFFF
+
+#define BASS_BRS_DATA_MIN_LEN 15
+// BASS CP minimum possible total length
+#define BASS_CP_OP_MIN_LEN 1
+#define BASS_CP_OP_REMOTE_SCAN_STOP_LEN 1
+#define BASS_CP_OP_REMOTE_SCAN_START_LEN 1
+#define BASS_CP_OP_ADD_SOURCE_MIN_LEN 16
+#define BASS_CP_OP_MODIFY_SOURCE_MIN_LEN 6
+#define BASS_CP_OP_SET_BROADCAST_CODE_LEN 18
+#define BASS_CP_OP_REMOVE_SOURCE_LEN 2
+
+#define BASS_BRA_INC_BST_CODE_LEN 31
+
+#define BASS_BRS_CHAR_MAX_NUM 4
+#define GATT_UUID_BASS 0x184F
+#define BASS_UUID_CHAR_BROADCAST_AUDIO_SCAN_CP 0x2BC7
+#define BASS_UUID_CHAR_BROADCAST_RECEIVE_STATE 0x2BC8
+
+typedef enum
+{
+ PA_SYNC_STATE_NOT_SYNC = 0x00,
+ PA_SYNC_STATE_SYNCINFO_REQ = 0x01,
+ PA_SYNC_STATE_SYNC = 0x02,
+ PA_SYNC_STATE_FAILED = 0x03,
+ PA_SYNC_STATE_NO_PAST = 0x04,
+} T_PA_SYNC_STATE;
+
+typedef enum
+{
+ BIG_NOT_ENCRYPTED = 0x00,
+ BIG_BROADCAST_CODE_REQUIRED = 0x01,
+ BIG_DECRYPTING = 0x02,
+ BIG_BAD_CODE = 0x03,
+} T_BIG_ENCRYPTION_STATE;
+
+typedef enum
+{
+ BASS_CP_OP_REMOTE_SCAN_STOP = 0x00,
+ BASS_CP_OP_REMOTE_SCAN_START = 0x01,
+ BASS_CP_OP_ADD_SOURCE = 0x02,
+ BASS_CP_OP_MODIFY_SOURCE = 0x03,
+ BASS_CP_OP_SET_BROADCAST_CODE = 0x04,
+ BASS_CP_OP_REMOVE_SOURCE = 0x05,
+} T_BASS_CP_OP;
+
+typedef enum
+{
+ BASS_PA_NOT_SYNC = 0x00,
+ BASS_PA_SYNC_PAST = 0x01,
+ BASS_PA_SYNC_NO_PAST = 0x02,
+} T_BASS_PA_SYNC;
+
+typedef struct
+{
+ uint8_t adv_a_match_ext_adv; //AdvA in PAST matches AdvA in ADB_EXT_IND, 0b0=Yes, 0b1=No/Do't know
+ uint8_t adv_a_match_src;//AdvA in PAST matches Source_Address, 0b0=Yes, 0b1=No/Do't know
+ uint8_t source_id;
+} T_BASS_PAST_SRV_DATA;
+
+typedef struct
+{
+ uint32_t bis_sync;
+ uint8_t metadata_len;
+ uint8_t *p_metadata;
+} T_BASS_CP_BIS_INFO;
+
+typedef struct
+{
+ bool brs_is_used;
+ //Broadcast Receive State Field
+ uint8_t source_id;
+ uint8_t source_address_type;
+ uint8_t source_address[GAP_BD_ADDR_LEN];
+ uint8_t source_adv_sid;
+ uint8_t broadcast_id[BROADCAST_ID_LEN];
+ T_PA_SYNC_STATE pa_sync_state;
+ uint32_t bis_sync_state;
+ T_BIG_ENCRYPTION_STATE big_encryption;
+ uint8_t bad_code[BROADCAST_CODE_LEN];
+ uint8_t num_subgroups;
+ uint16_t bis_info_size;
+ T_BASS_CP_BIS_INFO *p_cp_bis_info;
+} T_BASS_BRS_DATA;
+
+typedef struct
+{
+ uint8_t advertiser_address_type;
+ uint8_t advertiser_address[GAP_BD_ADDR_LEN];
+ uint8_t advertiser_sid;
+ uint8_t broadcast_id[BROADCAST_ID_LEN];
+ T_BASS_PA_SYNC pa_sync;
+ uint16_t pa_interval;
+ uint8_t num_subgroups;
+ uint16_t bis_info_size;
+ T_BASS_CP_BIS_INFO *p_cp_bis_info;
+} T_BASS_CP_ADD_SOURCE;
+
+typedef struct
+{
+ uint8_t source_id;
+ T_BASS_PA_SYNC pa_sync;
+ uint16_t pa_interval;
+ uint8_t num_subgroups;
+ uint16_t bis_info_size;
+ T_BASS_CP_BIS_INFO *p_cp_bis_info;
+} T_BASS_CP_MODIFY_SOURCE;
+
+typedef struct
+{
+ uint8_t source_id;
+ uint8_t broadcast_code[BROADCAST_CODE_LEN];
+} T_BASS_CP_SET_BROADCAST_CODE;
+
+typedef struct
+{
+ uint8_t source_id;
+} T_BASS_CP_REMOVE_SOURCE;
+
+typedef union
+{
+ T_BASS_CP_ADD_SOURCE add_source;
+ T_BASS_CP_MODIFY_SOURCE modify_source;
+ T_BASS_CP_SET_BROADCAST_CODE set_broadcast_code;
+ T_BASS_CP_REMOVE_SOURCE remove_source;
+} T_BASS_CP_PARAM;
+
+typedef struct
+{
+ T_BASS_CP_OP opcode;
+ T_BASS_CP_PARAM param;
+} T_BASS_CP_DATA;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/ble_audio.h b/inc/bluetooth/leaudio/ble_audio.h
new file mode 100644
index 0000000..9ac02d3
--- /dev/null
+++ b/inc/bluetooth/leaudio/ble_audio.h
@@ -0,0 +1,85 @@
+#ifndef _BLE_AUDIO_H_
+#define _BLE_AUDIO_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "gap_msg.h"
+#include "gap.h"
+#include "app_msg.h"
+//#include "profile_server_def.h"
+
+typedef enum
+{
+ LE_AUDIO_MSG_GROUP_BASS = 0x0000,
+ LE_AUDIO_MSG_GROUP_BASS_CLIENT = 0x0100,
+ LE_AUDIO_MSG_GROUP_PACS = 0x0200,
+ LE_AUDIO_MSG_GROUP_PACS_CLIENT = 0x0300,
+ LE_AUDIO_MSG_GROUP_CSIS = 0x0400,
+ LE_AUDIO_MSG_GROUP_CSIS_CLIENT = 0x0500,
+
+ LE_AUDIO_MSG_GROUP_CAP = 0x2000,
+ LE_AUDIO_MSG_GROUP_BAP = 0x2100,
+} T_LE_AUDIO_MSG_GROUP;
+
+typedef enum
+{
+ //bass_client.h
+ LE_AUDIO_MSG_BASS_CLIENT_DIS_DONE = LE_AUDIO_MSG_GROUP_BASS_CLIENT | 0x00,
+ LE_AUDIO_MSG_BASS_CLIENT_CCCD = LE_AUDIO_MSG_GROUP_BASS_CLIENT | 0x01,
+ LE_AUDIO_MSG_BASS_CLIENT_CP_RESULT = LE_AUDIO_MSG_GROUP_BASS_CLIENT | 0x02,
+ LE_AUDIO_MSG_BASS_CLIENT_BRS_DATA = LE_AUDIO_MSG_GROUP_BASS_CLIENT | 0x03,
+ LE_AUDIO_MSG_BASS_CLIENT_SYNC_INFO_REQ = LE_AUDIO_MSG_GROUP_BASS_CLIENT | 0x04,
+
+ //pacs_client.h
+ LE_AUDIO_MSG_PACS_CLIENT_DIS_DONE = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x00,
+ LE_AUDIO_MSG_PACS_CLIENT_CCCD = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x01,
+ LE_AUDIO_MSG_PACS_CLIENT_WRITE_SINK_LOC_RESULT = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x02,
+ LE_AUDIO_MSG_PACS_CLIENT_WRITE_SOURCE_LOC_RESULT = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x03,
+ LE_AUDIO_MSG_PACS_CLIENT_READ_RESULT = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x04,
+ LE_AUDIO_MSG_PACS_CLIENT_NOTIFY = LE_AUDIO_MSG_GROUP_PACS_CLIENT | 0x05,
+
+ //csis_client.h
+ LE_AUDIO_MSG_CSIS_CLIENT_DIS_DONE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x00,
+ LE_AUDIO_MSG_CSIS_CLIENT_SEARCH_TIMEOUT = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x01,
+ LE_AUDIO_MSG_CSIS_CLIENT_SEARCH_DONE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x02,
+ LE_AUDIO_MSG_CSIS_CLIENT_SET_MEM_FOUND = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x04,
+ LE_AUDIO_MSG_CSIS_CLIENT_COOR_SET_DEL = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x05,
+ LE_AUDIO_MSG_CSIS_CLIENT_LOCK_REQ_DONE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x06,
+ LE_AUDIO_MSG_CSIS_CLIENT_UNLOCK_REQ_DONE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x07,
+ LE_AUDIO_MSG_CSIS_CLIENT_LOCK_STATE_CHANGE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x08,
+ LE_AUDIO_MSG_CSIS_CLIENT_READ_RESULT = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x09,
+ LE_AUDIO_MSG_CSIS_CLIENT_SIRK_CHANGE = LE_AUDIO_MSG_GROUP_CSIS_CLIENT | 0x0a,
+
+ //bap.h
+ LE_AUDIO_MSG_BAP_PACS_DIS_DONE = LE_AUDIO_MSG_GROUP_BAP | 0x00,
+ LE_AUDIO_MSG_BAP_PAC_NOTIFY = LE_AUDIO_MSG_GROUP_BAP | 0x01,
+ LE_AUDIO_MSG_BAP_ASCS_DIS_DONE = LE_AUDIO_MSG_GROUP_BAP | 0x02,
+
+ //cap.h
+ LE_AUDIO_MSG_CAP_DIS_DONE = LE_AUDIO_MSG_GROUP_CAP | 0x00,
+} T_LE_AUDIO_MSG;
+
+typedef T_APP_RESULT(*P_FUN_BLE_AUDIO_CB)(T_LE_AUDIO_MSG msg, void *buf);
+
+typedef struct
+{
+ P_FUN_BLE_AUDIO_CB p_fun_cb;
+ void *evt_queue_handle;
+ void *io_queue_handle;
+} T_BLE_AUDIO_PARAMS;
+
+bool ble_audio_init(T_BLE_AUDIO_PARAMS *p_param);
+bool ble_audio_check_remote_features(uint16_t conn_handle, uint8_t array_index,
+ uint8_t feature_mask);
+
+void ble_audio_handle_msg(T_IO_MSG *p_io_msg);
+void ble_audio_handle_gap_msg(uint16_t subtype, T_LE_GAP_MSG gap_msg);
+void ble_audio_handle_gap_cb(uint8_t cb_type, void *p_cb_data);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/ble_audio_def.h b/inc/bluetooth/leaudio/ble_audio_def.h
new file mode 100644
index 0000000..609acbf
--- /dev/null
+++ b/inc/bluetooth/leaudio/ble_audio_def.h
@@ -0,0 +1,80 @@
+#ifndef _BLE_AUDIO_DEF_H_
+#define _BLE_AUDIO_DEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#define BROADCAST_ID_LEN 3
+#define BROADCAST_CODE_LEN 16
+
+#define BROADCAST_AUDIO_ANNOUNCEMENT_SRV_UUID 0x1852
+#define BASIC_AUDIO_ANNOUNCEMENT_SRV_UUID 0x1851
+
+#define AUDIO_DEFAULT_PRESENTATION_DELAY 40000
+
+#define ADV_TARGETED_ANNOUNCEMENT 0x01
+#define ADV_GENERAL_ANNOUNCEMENT 0x00
+
+#define AUDIO_LOCATION_MONO 0x00000000
+#define AUDIO_LOCATION_FL 0x00000001
+#define AUDIO_LOCATION_FR 0x00000002
+#define AUDIO_LOCATION_FC 0x00000004
+#define AUDIO_LOCATION_LFE1 0x00000008
+#define AUDIO_LOCATION_BL 0x00000010
+#define AUDIO_LOCATION_BR 0x00000020
+#define AUDIO_LOCATION_FLC 0x00000040
+#define AUDIO_LOCATION_FRC 0x00000080
+#define AUDIO_LOCATION_BC 0x00000100
+#define AUDIO_LOCATION_LFE2 0x00000200
+#define AUDIO_LOCATION_SIL 0x00000400
+#define AUDIO_LOCATION_SIR 0x00000800
+#define AUDIO_LOCATION_TPFL 0x00001000
+#define AUDIO_LOCATION_TPFR 0x00002000
+#define AUDIO_LOCATION_TPFC 0x00004000
+#define AUDIO_LOCATION_TPC 0x00008000
+#define AUDIO_LOCATION_TPBL 0x00010000
+#define AUDIO_LOCATION_TPBR 0x00020000
+#define AUDIO_LOCATION_TPSIL 0x00040000
+#define AUDIO_LOCATION_TPSIR 0x00080000
+#define AUDIO_LOCATION_TPBC 0x00100000
+#define AUDIO_LOCATION_BTFC 0x00200000
+#define AUDIO_LOCATION_BTFL 0x00400000
+#define AUDIO_LOCATION_BTFR 0x00800000
+#define AUDIO_LOCATION_FLW 0x01000000
+#define AUDIO_LOCATION_FRW 0x02000000
+#define AUDIO_LOCATION_LS 0x04000000
+#define AUDIO_LOCATION_RS 0x08000000
+#define AUDIO_LOCATION_RFU 0xF0000000
+#define AUDIO_LOCATION_MASK 0x0FFFFFFF
+
+typedef enum
+{
+ AUDIO_UNFRAMED = 0x00,
+ AUDIO_FRAMED = 0x01,
+} T_AUDIO_FRAMING;
+
+typedef enum
+{
+ SERVER_AUDIO_SINK = 0x01,
+ SERVER_AUDIO_SOURCE = 0x02,
+} T_AUDIO_DIRECTION;
+
+typedef enum
+{
+ UNSPEC_AUDIO_INPUT = 0x00,
+ BLUETOOTH_AUDIO_INPUT = 0x01,
+ MICROPHONE_AUDIO_INPUT = 0x02,
+ ANLOG_AUDIO_INPUT = 0x03,
+ DIGITAL_AUDIO_INPUT = 0x04,
+ RADIO_AUDIO_INPUT = 0x05,
+ STREAMING_AUDIO_INPUT = 0x06,
+} T_AUDIO_INPUT_TYPE;
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/ble_audio_flags.h b/inc/bluetooth/leaudio/ble_audio_flags.h
new file mode 100644
index 0000000..9e419e2
--- /dev/null
+++ b/inc/bluetooth/leaudio/ble_audio_flags.h
@@ -0,0 +1,56 @@
+#ifndef _BLE_AUDIO_FLAGS_H_
+#define _BLE_AUDIO_FLAGS_H_
+
+#define LE_AUDIO_DEBUG 1
+
+#define MAX_BLE_LINK_NUM 2
+#define MAX_BLE_SRV_NUM 16
+
+#define LE_AUDIO_PACS_SUPPORT 0
+#define LE_AUDIO_ASCS_SUPPORT 0
+#define LE_AUDIO_BASS_SUPPORT 0
+
+#define LE_AUDIO_VCS_SUPPORT 0
+#define LE_AUDIO_VOCS_SUPPORT 0
+#define LE_AUDIO_AICS_SUPPORT 0
+#define LE_AUDIO_AICS_NUM 0
+#define LE_AUDIO_MICS_SUPPORT 0
+
+#define LE_AUDIO_CSIS_SUPPORT 0
+#define LE_AUDIO_CAS_SUPPORT 0
+
+#define LE_AUDIO_TBS_SUPPORT 0
+#define LE_AUDIO_TMAS_SUPPORT 0
+#define LE_AUDIO_HAS_SUPPORT 0
+
+#define LE_AUDIO_MCS_SERV_SUPPORT 0
+#define LE_AUDIO_OTS_SERV_SUPPORT 0
+
+#define LE_AUDIO_CAP_SUPPORT 0
+#define LE_AUDIO_BAP_SUPPORT 1
+
+#define LE_AUDIO_PACS_CLIENT_SUPPORT 1
+#define LE_AUDIO_ASCS_CLIENT_SUPPORT 0
+#define LE_AUDIO_BASS_CLIENT_SUPPORT 1
+#define LE_AUDIO_MCS_CLIENT_SUPPORT 0
+#define LE_AUDIO_OTS_CLIENT_SUPPORT 0
+
+#define LE_AUDIO_VCS_CLIENT_SUPPORT 0
+#define LE_AUDIO_VOCS_CLIENT_SUPPORT 0
+#define LE_AUDIO_AICS_CLIENT_SUPPORT 0
+#define LE_AUDIO_MICS_CLIENT_SUPPORT 0
+
+#define LE_AUDIO_CSIS_CLIENT_SUPPORT 0
+#define LE_AUDIO_TBS_CLIENT_SUPPORT 0
+#define LE_AUDIO_TMAP_CLIENT_SUPPORT 0
+#define LE_AUDIO_HAS_CLIENT_SUPPORT 0
+
+#define LE_AUDIO_BROADCAST_SOURCE_ROLE 0
+#define LE_AUDIO_BROADCAST_SINK_ROLE 0
+#define LE_AUDIO_SCAN_DELEGATOR_ROLE 0
+#define LE_AUDIO_BROADCAST_ASSISTANT_ROLE 1
+
+#define LE_AUDIO_BASE_DATA_GENERATE (LE_AUDIO_BROADCAST_SOURCE_ROLE)
+#define LE_AUDIO_BASE_DATA_PARSE (LE_AUDIO_BROADCAST_SINK_ROLE || LE_AUDIO_BROADCAST_ASSISTANT_ROLE)
+
+#endif
diff --git a/inc/bluetooth/leaudio/ble_audio_group.h b/inc/bluetooth/leaudio/ble_audio_group.h
new file mode 100644
index 0000000..67c0125
--- /dev/null
+++ b/inc/bluetooth/leaudio/ble_audio_group.h
@@ -0,0 +1,89 @@
+#ifndef _BLE_AUDIO_GROUP_H_
+#define _BLE_AUDIO_GROUP_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "gap.h"
+#include "gap_msg.h"
+
+typedef void *T_BLE_AUDIO_GROUP_HANDLE;
+typedef void *T_BLE_AUDIO_DEV_HANDLE;
+
+typedef enum
+{
+ AUDIO_GROUP_MSG_BAP_STATE = 0x01,
+ AUDIO_GROUP_MSG_BAP_SESSION_REMOVE = 0x02,
+ AUDIO_GROUP_MSG_BAP_START_QOS_CFG = 0x04,
+ AUDIO_GROUP_MSG_BAP_CREATE_CIS = 0x05,
+ AUDIO_GROUP_MSG_BAP_START_METADATA_CFG = 0x06,
+ AUDIO_GROUP_MSG_BAP_SETUP_DATA_PATH = 0x07,
+ AUDIO_GROUP_MSG_BAP_REMOVE_DATA_PATH = 0x08,
+ AUDIO_GROUP_MSG_BAP_METADATA_UPDATE = 0x09,
+ AUDIO_GROUP_MSG_BAP_CIS_DISCONN = 0x0A,
+
+ AUDIO_GROUP_MSG_DEV_CONN = 0x20,
+ AUDIO_GROUP_MSG_DEV_DISCONN = 0x21,
+} T_AUDIO_GROUP_MSG;
+
+//AUDIO_GROUP_MSG_DEV_CONN
+typedef struct
+{
+ T_BLE_AUDIO_DEV_HANDLE dev_handle;
+} T_AUDIO_GROUP_MSG_DEV_CONN;
+
+//AUDIO_GROUP_MSG_DEV_DISCONN
+typedef struct
+{
+ T_BLE_AUDIO_DEV_HANDLE dev_handle;
+ uint16_t cause;
+} T_AUDIO_GROUP_MSG_DEV_DISCONN;
+
+#if 0
+typedef enum
+{
+ AUDIO_GROUP_RESULT_SUCCESS,
+ AUDIO_GROUP_RESULT_FAILED,
+ AUDIO_GROUP_RESULT_TIMEOUT_FAILED,
+ AUDIO_GROUP_RESULT_TIMEOUT_PARTIAL_SUCCESS,
+} T_AUDIO_GROUP_RESULT;
+#endif
+
+typedef struct
+{
+ bool is_used;
+ T_BLE_AUDIO_DEV_HANDLE dev_handle;
+ T_GAP_CONN_STATE conn_state;
+ T_GAP_REMOTE_ADDR_TYPE addr_type;
+ uint8_t bd_addr[6];
+} T_AUDIO_DEV_INFO;
+
+typedef T_APP_RESULT(*P_FUN_AUDIO_GROUP_CB)(T_AUDIO_GROUP_MSG msg, T_BLE_AUDIO_GROUP_HANDLE handle,
+ void *buf);
+
+T_BLE_AUDIO_GROUP_HANDLE ble_audio_group_allocate(void);
+bool ble_audio_group_reg_cb(T_BLE_AUDIO_GROUP_HANDLE group_handle, P_FUN_AUDIO_GROUP_CB p_fun_cb);
+bool ble_audio_group_release(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+T_BLE_AUDIO_DEV_HANDLE ble_audio_group_add_dev(T_BLE_AUDIO_GROUP_HANDLE group_handle,
+ uint8_t *p_bd_addr, uint8_t addr_type);
+bool ble_audio_group_remove_dev(T_BLE_AUDIO_GROUP_HANDLE group_handle,
+ T_BLE_AUDIO_DEV_HANDLE dev_handle);
+T_BLE_AUDIO_DEV_HANDLE ble_audio_group_find_dev(T_BLE_AUDIO_GROUP_HANDLE group_handle,
+ uint8_t *bd_addr, uint8_t addr_type);
+T_BLE_AUDIO_DEV_HANDLE ble_audio_group_find_dev_by_conn_handle(T_BLE_AUDIO_GROUP_HANDLE
+ group_handle,
+ uint16_t conn_handle);
+bool ble_audio_group_get_dev_info(T_BLE_AUDIO_GROUP_HANDLE group_handle,
+ T_BLE_AUDIO_DEV_HANDLE dev_handle,
+ T_AUDIO_DEV_INFO *p_info);
+uint8_t ble_audio_group_get_used_dev_num(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+uint8_t ble_audio_group_get_dev_num(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+bool ble_audio_group_get_info(T_BLE_AUDIO_GROUP_HANDLE group_handle, uint8_t *p_dev_num,
+ T_AUDIO_DEV_INFO *p_dev_tbl);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/ble_audio_sync.h b/inc/bluetooth/leaudio/ble_audio_sync.h
new file mode 100644
index 0000000..e9b9bd3
--- /dev/null
+++ b/inc/bluetooth/leaudio/ble_audio_sync.h
@@ -0,0 +1,126 @@
+#ifndef _BLE_AUDIO_SYNC_H_
+#define _BLE_AUDIO_SYNC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if (LE_AUDIO_BROADCAST_SINK_ROLE | LE_AUDIO_BROADCAST_ASSISTANT_ROLE)
+#include "gap.h"
+#include "gap_pa_sync.h"
+#include "gap_past_recipient.h"
+#include "ble_audio_def.h"
+#include "base_data_parse.h"
+
+typedef void *T_BLE_AUDIO_SYNC_HANDLE;
+
+#define MSG_BLE_AUDIO_PA_SYNC_STATE 0x01
+#define MSG_BLE_AUDIO_PA_REPORT_INFO 0x02
+#define MSG_BLE_AUDIO_BASE_DATA_MODIFY_INFO 0x03
+#define MSG_BLE_AUDIO_PA_BIGINFO 0x04
+
+#define MSG_BLE_AUDIO_SYNC_HANDLE_RELEASED 0x20
+#define MSG_BLE_AUDIO_ADDR_UPDATE 0x21
+
+typedef enum
+{
+ BLE_AUDIO_ACTION_ROLE_IDLE = 0x00,
+ BLE_AUDIO_ACTION_ROLE_LOCAL_API = 0x01,
+#if LE_AUDIO_BASS_SUPPORT
+ BLE_AUDIO_ACTION_ROLE_BASS = 0x02,
+#endif
+} T_BLE_AUDIO_ACTION_ROLE;
+
+typedef struct
+{
+ T_BASE_DATA_MAPPING *p_base_mapping;
+} T_BLE_AUDIO_BASE_DATA_MODIFY_INFO;
+
+typedef enum
+{
+ BLE_AUDIO_PA_IDLE = 0x00,
+ BLE_AUDIO_PA_SYNC = 0x01,
+ BLE_AUDIO_PA_TERMINATE = 0x02,
+ BLE_AUDIO_PA_LOST = 0x03,
+} T_BLE_AUDIO_PA_ACTION;
+
+typedef struct
+{
+ T_GAP_PA_SYNC_STATE sync_state;
+ T_BLE_AUDIO_PA_ACTION action;
+ T_BLE_AUDIO_ACTION_ROLE action_role;
+ uint16_t cause;
+} T_BLE_AUDIO_PA_SYNC_STATE;
+
+typedef struct
+{
+ T_BLE_AUDIO_ACTION_ROLE action_role;
+} T_BLE_AUDIO_SYNC_HANDLE_RELEASED;
+
+typedef struct
+{
+ uint8_t *advertiser_address;
+} T_BLE_AUDIO_ADDR_UPDATE;
+
+typedef union
+{
+ T_BLE_AUDIO_PA_SYNC_STATE *p_pa_sync_state;
+ T_LE_PERIODIC_ADV_REPORT_INFO *p_le_periodic_adv_report_info;
+ T_BLE_AUDIO_BASE_DATA_MODIFY_INFO *p_base_data_modify_info;
+
+ T_LE_BIGINFO_ADV_REPORT_INFO *p_le_biginfo_adv_report_info;
+
+ T_BLE_AUDIO_SYNC_HANDLE_RELEASED *p_sync_handle_released;
+ T_BLE_AUDIO_ADDR_UPDATE *p_addr_update;
+} T_BLE_AUDIO_SYNC_CB_DATA;
+
+typedef struct
+{
+ uint8_t advertiser_address_type;
+ uint8_t advertiser_address[GAP_BD_ADDR_LEN];
+ uint8_t adv_sid;
+ uint8_t broadcast_id[BROADCAST_ID_LEN];
+ //PA info
+ uint8_t sync_id;
+ T_GAP_PA_SYNC_STATE pa_state;
+ uint16_t pa_interval;
+ T_BASE_DATA_MAPPING *p_base_mapping;
+ bool big_info_received;
+ T_LE_BIGINFO_ADV_REPORT_INFO big_info;
+} T_BLE_AUDIO_SYNC_INFO;
+
+typedef void(*P_FUN_BLE_AUDIO_SYNC_CB)(T_BLE_AUDIO_SYNC_HANDLE handle, uint8_t cb_type,
+ void *p_cb_data);
+
+T_BLE_AUDIO_SYNC_HANDLE ble_audio_sync_create(P_FUN_BLE_AUDIO_SYNC_CB cb_pfn,
+ uint8_t advertiser_address_type,
+ uint8_t *advertiser_address, uint8_t adv_sid,
+ uint8_t broadcast_id[BROADCAST_ID_LEN]);
+bool ble_audio_sync_update_cb(T_BLE_AUDIO_SYNC_HANDLE handle,
+ P_FUN_BLE_AUDIO_SYNC_CB cb_pfn);
+bool ble_audio_sync_update_addr(T_BLE_AUDIO_SYNC_HANDLE handle,
+ uint8_t *advertiser_address);
+
+T_BLE_AUDIO_SYNC_HANDLE ble_audio_sync_find(uint8_t advertiser_address_type,
+ uint8_t adv_sid, uint8_t broadcast_id[BROADCAST_ID_LEN]);
+bool ble_audio_sync_get_info(T_BLE_AUDIO_SYNC_HANDLE handle, T_BLE_AUDIO_SYNC_INFO *p_info);
+bool ble_audio_sync_realese(T_BLE_AUDIO_SYNC_HANDLE handle);
+
+bool ble_audio_pa_sync_establish(T_BLE_AUDIO_SYNC_HANDLE handle, uint8_t options,
+ uint8_t sync_cte_type,
+ uint16_t skip, uint16_t sync_timeout);
+bool ble_audio_pa_terminate(T_BLE_AUDIO_SYNC_HANDLE handle);
+
+bool ble_audio_set_default_past_recipient_param(
+ T_GAP_PAST_RECIPIENT_PERIODIC_ADV_SYNC_TRANSFER_PARAM *p_param);
+bool ble_audio_set_past_recipient_param(uint16_t conn_handle,
+ T_GAP_PAST_RECIPIENT_PERIODIC_ADV_SYNC_TRANSFER_PARAM *p_param);
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/bt_bond_mgr.h b/inc/bluetooth/leaudio/bt_bond_mgr.h
new file mode 100644
index 0000000..d6e7c74
--- /dev/null
+++ b/inc/bluetooth/leaudio/bt_bond_mgr.h
@@ -0,0 +1,51 @@
+/**
+*********************************************************************************************************
+* Copyright(c) 2019, Realtek Semiconductor Corporation. All rights reserved.
+*********************************************************************************************************
+*/
+
+#ifndef _BT_BOND_MGR_
+#define _BT_BOND_MGR_
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef bool (*P_BT_BOND_CHECK)(uint8_t *bd_addr, uint8_t bd_type, uint16_t conn_handle);
+
+typedef bool (*P_BT_BOND_GET_KEY)(uint8_t *bd_addr, uint8_t bd_type, uint16_t conn_handle,
+ bool remote, uint8_t *p_key_len, uint8_t *p_key);
+
+typedef uint8_t (*P_BT_BOND_GET_MAX_NUM)(bool is_le);
+
+typedef bool (*P_BT_BOND_GET_ADDR)(bool is_le, uint8_t bond_idx, uint8_t *bd_addr,
+ uint8_t *p_bd_type, uint8_t *local_bd_addr,
+ uint8_t *p_local_bd_type);
+
+typedef bool (*P_BT_BOND_SET_CCCD_FLAG)(uint8_t *bd_addr, uint8_t bd_type, uint8_t *local_bd_addr,
+ uint8_t local_bd_type,
+ uint16_t cccd_handle, uint16_t flags);
+typedef bool (*P_BT_BOND_CLEAR_CCCD_FLAG)(uint8_t *bd_addr, uint8_t bd_type, uint16_t conn_handle,
+ uint16_t cccd_handle);
+
+typedef bool (*P_BT_BOND_LE_RESOLVE_RPA)(uint8_t *unresolved_addr, uint8_t *identity_addr,
+ uint8_t *p_identity_addr_type);
+
+typedef struct
+{
+ P_BT_BOND_CHECK bond_check;
+ P_BT_BOND_GET_KEY bond_get_key;
+ P_BT_BOND_GET_MAX_NUM bond_get_max_num;
+ P_BT_BOND_GET_ADDR bond_get_addr;
+ P_BT_BOND_SET_CCCD_FLAG bond_set_cccd_flag;
+ P_BT_BOND_CLEAR_CCCD_FLAG bond_clear_cccd_flag;
+ P_BT_BOND_LE_RESOLVE_RPA bond_le_resolve_rpa;
+} T_BT_BOND_MGR;
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/inc/bluetooth/leaudio/bt_gatt_client.h b/inc/bluetooth/leaudio/bt_gatt_client.h
new file mode 100644
index 0000000..fee3389
--- /dev/null
+++ b/inc/bluetooth/leaudio/bt_gatt_client.h
@@ -0,0 +1,192 @@
+#ifndef _BT_GATT_CLIENT_H_
+#define _BT_GATT_CLIENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "gap.h"
+#include "profile_client.h"
+#include "gap_conn_le.h"
+
+
+typedef enum
+{
+ GATTC_STORAGE_STATE_IDLE = 0x00,
+ GATTC_STORAGE_STATE_DISCOVERY = 0x01,
+ GATTC_STORAGE_STATE_DONE = 0x02,
+ GATTC_STORAGE_STATE_FAILED = 0x03,
+} T_GATTC_STORAGE_STATE;
+
+#define GATT_CLT_CONFIG_DISABLE 0x00
+#define GATT_CLT_CONFIG_NOTIFICATION 0x01
+#define GATT_CLT_CONFIG_INDICATION 0x02
+#define GATT_CLT_CONFIG_ALL 0x03
+#define ATTR_INSTANCE_NUM_MAX 20
+
+typedef enum
+{
+ GATT_STORAGE_EVENT_SRV_TBL_GET_IND = 0x01,
+ GATT_STORAGE_EVENT_SRV_TBL_SET_IND = 0x02,
+} T_GATT_STORAGE_EVENT;
+
+typedef enum
+{
+ GATT_DISCOV_MODE_CLOSED = 0x00,
+ GATT_DISCOV_MODE_REG_SRV = 0x01,
+ GATT_DISCOV_MODE_ALL = 0x02,
+} T_GATT_DISCOV_MODE;
+
+//GATT_STORAGE_EVENT_SRV_TBL_GET_IND
+typedef struct
+{
+ uint8_t addr[6];
+ uint8_t remote_bd_type;
+ uint16_t data_len;
+ uint8_t *p_data;
+} T_GATT_STORAGE_SRV_TBL_GET_IND;
+
+//GATT_STORAGE_EVENT_SRV_TBL_SET_IND
+typedef struct
+{
+ uint8_t addr[6];
+ uint8_t remote_bd_type;
+ uint16_t data_len;
+ uint8_t *p_data;
+} T_GATT_STORAGE_SRV_TBL_SET_IND;
+
+typedef enum
+{
+ GATT_CLIENT_EVENT_DIS_DONE = 0x01,
+ GATT_CLIENT_EVENT_READ_RESULT = 0x02,
+ GATT_CLIENT_EVENT_WRITE_RESULT = 0x03,
+ GATT_CLIENT_EVENT_NOTIFY_IND = 0x04,
+ GATT_CLIENT_EVENT_CCCD_CFG = 0x05,
+ GATT_CLIENT_EVENT_DIS_ALL_STATE = 0x06,
+ GATT_CLIENT_EVENT_CONN_DEL = 0x07,
+} T_GATT_CLIENT_EVENT;
+
+typedef struct
+{
+ bool is_uuid16;
+ uint8_t instance_id;
+ union
+ {
+ uint16_t uuid16;
+ uint8_t uuid128[16];
+ } p;
+} T_ATTR_UUID;
+
+typedef struct
+{
+ T_GATTC_STORAGE_STATE state;
+ bool load_form_ftl;
+} T_GATT_CLIENT_DIS_ALL_DONE;
+
+typedef struct
+{
+ bool is_found;
+ bool load_form_ftl;
+ uint8_t srv_instance_num;
+} T_GATT_CLIENT_DIS_DONE;
+
+typedef struct
+{
+ bool is_cccd_desc;
+ uint8_t srv_instance_id;
+ T_ATTR_UUID char_uuid;
+ uint16_t cause;
+ uint16_t handle;
+ uint16_t value_size;
+ uint8_t *p_value;
+} T_GATT_CLIENT_READ_RESULT;
+
+typedef struct
+{
+ bool is_cccd_desc;
+ uint8_t srv_instance_id;
+ T_ATTR_UUID char_uuid;
+ uint16_t cause;
+ T_GATT_WRITE_TYPE type;
+ uint16_t handle;
+} T_GATT_CLIENT_WRITE_RESULT;
+
+typedef struct
+{
+ uint8_t srv_instance_id;
+ T_ATTR_UUID char_uuid;
+ bool notify;
+ uint16_t handle;
+ uint16_t value_size;
+ uint8_t *p_value;
+} T_GATT_CLIENT_NOTIFY_IND;
+
+typedef struct
+{
+ bool srv_cfg;
+ uint8_t srv_instance_id;
+ uint16_t cccd_data;
+ uint16_t cause;
+ T_ATTR_UUID uuid;
+} T_GATT_CLIENT_CCCD_CFG;
+
+typedef union
+{
+ T_GATT_CLIENT_DIS_DONE dis_done;
+ T_GATT_CLIENT_READ_RESULT read_result;
+ T_GATT_CLIENT_WRITE_RESULT write_result;
+ T_GATT_CLIENT_NOTIFY_IND notify_ind;
+ T_GATT_CLIENT_CCCD_CFG cccd_cfg;
+} T_GATT_CLIENT_DATA;
+
+typedef union
+{
+ T_GATT_CLIENT_DATA *p_gatt_data;
+} T_GATTC_DATA;
+
+typedef struct
+{
+ uint8_t instance_num;
+ uint8_t instance_id[ATTR_INSTANCE_NUM_MAX];
+} T_ATTR_INSTANCE;
+
+typedef T_APP_RESULT(*P_FUN_GATT_CLIENT_CB)(uint16_t conn_handle, T_GATT_CLIENT_EVENT type,
+ void *p_data);
+typedef T_APP_RESULT(*P_FUN_GATT_STORAGE_CB)(T_GATT_STORAGE_EVENT type, void *p_data);
+
+T_GAP_CAUSE gatt_client_start_discovery_all(uint16_t conn_handle, P_FUN_GATT_CLIENT_CB p_dis_cb);
+T_GAP_CAUSE gatt_client_enable_srv_cccd(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ uint8_t cccd_cfg);
+T_GAP_CAUSE gatt_client_enable_char_cccd(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ uint16_t char_uuid16, uint8_t cccd_cfg);
+T_GAP_CAUSE gatt_client_enable_uuid128_char_cccd(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ uint8_t *p_uuid128, uint8_t cccd_cfg);
+T_GAP_CAUSE gatt_client_read(uint16_t conn_handle, uint16_t handle, P_FUN_GATT_CLIENT_CB p_req_cb);
+T_GAP_CAUSE gatt_client_read_uuid(uint16_t conn_handle, uint16_t start_handle,
+ uint16_t end_handle, uint16_t uuid16, P_FUN_GATT_CLIENT_CB p_req_cb);
+T_GAP_CAUSE gatt_client_write(uint16_t conn_handle, T_GATT_WRITE_TYPE write_type,
+ uint16_t handle, uint16_t length, uint8_t *p_data, P_FUN_GATT_CLIENT_CB p_req_cb);
+
+T_GAP_CAUSE gatt_spec_client_register(T_ATTR_UUID *p_srv_uuid, P_FUN_GATT_CLIENT_CB p_fun_cb);
+
+//find info about service
+bool gatt_client_find_char_handle(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ T_ATTR_UUID *p_char_uuid, uint16_t *p_handle);
+bool gatt_client_find_primary_srv_by_include(uint16_t conn_handle, T_ATTR_UUID *p_included_srv,
+ T_ATTR_UUID *p_primary_srv);
+bool gatt_client_find_include_srv_by_primary(uint16_t conn_handle, T_ATTR_UUID *p_primary_srv,
+ T_ATTR_UUID *p_included_srv,
+ T_ATTR_INSTANCE *p_attr_instance);
+uint8_t gatt_client_get_char_num(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ T_ATTR_UUID *p_char_uuid);
+bool gatt_client_get_char_prop(uint16_t conn_handle, T_ATTR_UUID *p_srv_uuid,
+ T_ATTR_UUID *p_char_uuid, uint16_t *p_properties);
+
+bool gatt_client_init(T_GATT_DISCOV_MODE mode);
+bool gatt_storage_register(P_FUN_GATT_STORAGE_CB p_fun_cb);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/cap.h b/inc/bluetooth/leaudio/cap.h
new file mode 100644
index 0000000..ec21059
--- /dev/null
+++ b/inc/bluetooth/leaudio/cap.h
@@ -0,0 +1,86 @@
+#ifndef _CAP_H_
+#define _CAP_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ble_audio_group.h"
+#include "csis_def.h"
+
+#if LE_AUDIO_CAP_SUPPORT
+#define CAP_ACCEPTOR_ROLE 0x01
+#define CAP_INITIATOR_ROLE 0x02
+#define CAP_CAMMANDER_ROLE 0x04
+
+#define GATT_UUID_CAS 0x1853
+
+typedef struct
+{
+ uint8_t default_volume_settings;
+ uint8_t default_mute;
+ uint8_t default_mic_mute;
+} T_CAP_DEFAULT_PARAM;
+
+typedef struct
+{
+ uint8_t cap_role;
+ bool cas_client;
+ bool csip_set_coordinator;
+ uint8_t csis_num;
+ struct
+ {
+ bool enable;
+ T_CSIS_SIRK_TYPE csis_sirk_type;
+ uint8_t csis_size;
+ uint8_t csis_rank;
+ uint8_t csis_feature;
+ uint8_t *csis_sirk;
+ } cas;
+ struct
+ {
+ bool vcp_volume_controller;
+ bool micp_mic_controller;
+ uint8_t default_volume_settings;
+ uint8_t default_mute;
+ uint8_t default_mic_mute;
+ } vcp_micp;
+
+ bool ccp_call_control_client;
+ struct
+ {
+ bool ccp_call_control_server;
+ uint8_t tbs_num;
+ } tbs;
+ bool mcp_media_control_client;
+ struct
+ {
+ bool mcp_media_control_server;
+ uint8_t mcs_num;
+ uint8_t ots_num;
+ } mcs;
+} T_CAP_INIT_PARAMS;
+
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ bool load_form_ftl;
+ uint8_t srv_num;
+} T_CAP_DIS_DONE;
+
+bool cap_change_volume_by_address(uint8_t *bd_addr, uint8_t addr_type, uint8_t volume_setting);
+bool cap_change_volume(T_BLE_AUDIO_GROUP_HANDLE group_handle, uint8_t volume_setting);
+bool cap_change_mute_by_address(uint8_t *bd_addr, uint8_t addr_type, uint8_t mute);
+bool cap_change_mute(T_BLE_AUDIO_GROUP_HANDLE group_handle, uint8_t mute);
+bool cap_change_mic_mute_by_address(uint8_t *bd_addr, uint8_t addr_type, uint8_t mute);
+bool cap_change_input_gain_by_address(uint8_t *bd_addr, uint8_t addr_type, int8_t gain);
+bool cap_init(T_CAP_INIT_PARAMS *p_param);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/codec_def.h b/inc/bluetooth/leaudio/codec_def.h
new file mode 100644
index 0000000..73c052d
--- /dev/null
+++ b/inc/bluetooth/leaudio/codec_def.h
@@ -0,0 +1,122 @@
+#ifndef _CODEC_DEF_H_
+#define _CODEC_DEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define TRANSPARENT_CODEC_ID 0x03
+#define LC3_CODEC_ID 0x06
+#define VENDOR_CODEC_ID 0xFF
+#define CODEC_ID_LEN 5
+
+/* Codec_Specific_Capabilities parameters*/
+//Codec Specific Capability Types
+#define CODEC_CAP_TYPE_SUPPORTED_SAMPLING_FREQUENCIES 0x01
+#define CODEC_CAP_TYPE_SUPPORTED_FRAME_DURATIONS 0x02
+#define CODEC_CAP_TYPE_AUDIO_CHANNEL_COUNTS 0x03
+/*4 octets.
+Octet 0-1: Minimum number of octets supported per codec frame
+Octet 2-3: Maximum number of octets supported per codec frame*/
+#define CODEC_CAP_TYPE_SUPPORTED_OCTETS_PER_CODEC_FRAME 0x04
+#define CODEC_CAP_TYPE_MAX_SUPPORTED_FRAMES_PER_SDU 0x05
+
+#define SAMPLING_FREQUENCY_8K 0x0001
+#define SAMPLING_FREQUENCY_11K 0x0002
+#define SAMPLING_FREQUENCY_16K 0x0004
+#define SAMPLING_FREQUENCY_22K 0x0008
+#define SAMPLING_FREQUENCY_24K 0x0010
+#define SAMPLING_FREQUENCY_32K 0x0020
+#define SAMPLING_FREQUENCY_44_1K 0x0040
+#define SAMPLING_FREQUENCY_48K 0x0080
+#define SAMPLING_FREQUENCY_88K 0x0100
+#define SAMPLING_FREQUENCY_96K 0x0200
+#define SAMPLING_FREQUENCY_176K 0x0400
+#define SAMPLING_FREQUENCY_192K 0x0800
+#define SAMPLING_FREQUENCY_384K 0x1000
+#define SAMPLING_FREQUENCY_MASK 0x1FFF
+
+#define FRAME_DURATION_7_5_MS_BIT 0x01
+#define FRAME_DURATION_10_MS_BIT 0x02
+#define FRAME_DURATION_PREFER_7_5_MS_BIT 0x10
+#define FRAME_DURATION_PREFER_10_MS_BIT 0x20
+
+#define AUDIO_CHANNEL_COUNTS_1 0x01
+#define AUDIO_CHANNEL_COUNTS_2 0x02
+#define AUDIO_CHANNEL_COUNTS_3 0x04
+#define AUDIO_CHANNEL_COUNTS_4 0x08
+#define AUDIO_CHANNEL_COUNTS_5 0x10
+#define AUDIO_CHANNEL_COUNTS_6 0x20
+#define AUDIO_CHANNEL_COUNTS_7 0x40
+#define AUDIO_CHANNEL_COUNTS_8 0x80
+
+//Config Codec operation
+#define CODEC_CFG_TYPE_SAMPLING_FREQUENCY 0x01
+#define CODEC_CFG_TYPE_FRAME_DURATION 0x02
+#define CODEC_CFG_TYPE_AUDIO_CHANNEL_ALLOCATION 0x03
+#define CODEC_CFG_TYPE_OCTET_PER_CODEC_FRAME 0x04
+#define CODEC_CFG_TYPE_BLOCKS_PER_SDU 0x05
+
+#define SAMPLING_FREQUENCY_CFG_8K 0x01
+#define SAMPLING_FREQUENCY_CFG_11K 0x02
+#define SAMPLING_FREQUENCY_CFG_16K 0x03
+#define SAMPLING_FREQUENCY_CFG_22K 0x04
+#define SAMPLING_FREQUENCY_CFG_24K 0x05
+#define SAMPLING_FREQUENCY_CFG_32K 0x06
+#define SAMPLING_FREQUENCY_CFG_44_1K 0x07
+#define SAMPLING_FREQUENCY_CFG_48K 0x08
+#define SAMPLING_FREQUENCY_CFG_88K 0x09
+#define SAMPLING_FREQUENCY_CFG_96K 0x0A
+#define SAMPLING_FREQUENCY_CFG_176K 0x0B
+#define SAMPLING_FREQUENCY_CFG_192K 0x0C
+#define SAMPLING_FREQUENCY_CFG_384K 0x0D
+
+#define FRAME_DURATION_CFG_7_5_MS 0x00
+#define FRAME_DURATION_CFG_10_MS 0x01
+
+
+
+#define CODEC_CAP_SUPPORTED_SAMPLING_FREQUENCIES_EXIST 0x0001
+#define CODEC_CAP_SUPPORTED_FRAME_DURATIONS_EXIST 0x0002
+#define CODEC_CAP_AUDIO_CHANNEL_COUNTS_EXIST 0x0004
+#define CODEC_CAP_SUPPORTED_OCTETS_PER_CODEC_FRAME_EXIST 0x0008
+#define CODEC_CAP_MAX_SUPPORTED_FRAMES_PER_SDU_EXIST 0x0010
+
+#define CODEC_CFG_SAMPLING_FREQUENCY_EXIST 0x0001
+#define CODEC_CFG_FRAME_DURATION_EXIST 0x0002
+#define CODEC_CFG_AUDIO_CHANNEL_ALLOCATION_EXIST 0x0004
+#define CODEC_CFG_OCTET_PER_CODEC_FRAME_EXIST 0x0008
+#define CODEC_CFG_TYPE_BLOCKS_PER_SDU_EXIST 0x0010
+
+typedef struct
+{
+ uint16_t type_exist;
+ uint16_t supported_sampling_frequencies;
+ uint8_t supported_frame_durations;
+ uint8_t audio_channel_counts;
+ uint8_t max_supported_codec_frames_per_sdu;
+ uint16_t min_octets_per_codec_frame;
+ uint16_t max_octets_per_codec_frame;
+} T_CODEC_CAP;
+
+typedef struct
+{
+ uint16_t type_exist;
+ uint8_t frame_duration;
+ uint8_t sample_frequency;
+ uint8_t codec_frame_blocks_per_sdu;
+ uint16_t octets_per_codec_frame;
+ uint32_t audio_channel_allocation;
+ uint32_t presentation_delay;
+} T_CODEC_CFG;
+
+uint8_t count_bits_1(uint32_t value);
+bool codec_cap_parse(uint8_t len, uint8_t *p_data, T_CODEC_CAP *p_cap);
+bool codec_cfg_parse(uint8_t len, uint8_t *p_data, T_CODEC_CFG *p_cfg);
+bool codec_cfg_gen(uint8_t *p_len, uint8_t *p_data, T_CODEC_CFG *p_cfg);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/codec_qos.h b/inc/bluetooth/leaudio/codec_qos.h
new file mode 100644
index 0000000..82ea6dc
--- /dev/null
+++ b/inc/bluetooth/leaudio/codec_qos.h
@@ -0,0 +1,101 @@
+#ifndef _CODEC_QOS_H_
+#define _CODEC_QOS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include "ble_audio_def.h"
+#include "codec_def.h"
+
+typedef enum
+{
+ CODEC_CFG_ITEM_8_1 = 0,
+ CODEC_CFG_ITEM_8_2 = 1,
+ CODEC_CFG_ITEM_16_1 = 2,
+ CODEC_CFG_ITEM_16_2 = 3,
+ CODEC_CFG_ITEM_24_1 = 4,
+ CODEC_CFG_ITEM_24_2 = 5,
+ CODEC_CFG_ITEM_32_1 = 6,
+ CODEC_CFG_ITEM_32_2 = 7,
+ CODEC_CFG_ITEM_441_1 = 8,
+ CODEC_CFG_ITEM_441_2 = 9,
+ CODEC_CFG_ITEM_48_1 = 10,
+ CODEC_CFG_ITEM_48_2 = 11,
+ CODEC_CFG_ITEM_48_3 = 12,
+ CODEC_CFG_ITEM_48_4 = 13,
+ CODEC_CFG_ITEM_48_5 = 14,
+ CODEC_CFG_ITEM_48_6 = 15,
+ CODEC_CFG_ITEM_LC3_MAX,
+
+ CODEC_CFG_ITEM_VENDOR = 0xff,
+} T_CODEC_CFG_ITEM;
+
+
+#define CODEC_CFG_ITEM_8_1_BIT (1 << CODEC_CFG_ITEM_8_1)
+#define CODEC_CFG_ITEM_8_2_BIT (1 << CODEC_CFG_ITEM_8_2)
+#define CODEC_CFG_ITEM_16_1_BIT (1 << CODEC_CFG_ITEM_16_1)
+#define CODEC_CFG_ITEM_16_2_BIT (1 << CODEC_CFG_ITEM_16_2)
+#define CODEC_CFG_ITEM_24_1_BIT (1 << CODEC_CFG_ITEM_24_1)
+#define CODEC_CFG_ITEM_24_2_BIT (1 << CODEC_CFG_ITEM_24_2)
+#define CODEC_CFG_ITEM_32_1_BIT (1 << CODEC_CFG_ITEM_32_1)
+#define CODEC_CFG_ITEM_32_2_BIT (1 << CODEC_CFG_ITEM_32_2)
+#define CODEC_CFG_ITEM_441_1_BIT (1 << CODEC_CFG_ITEM_441_1)
+#define CODEC_CFG_ITEM_441_2_BIT (1 << CODEC_CFG_ITEM_441_2)
+#define CODEC_CFG_ITEM_48_1_BIT (1 << CODEC_CFG_ITEM_48_1)
+#define CODEC_CFG_ITEM_48_2_BIT (1 << CODEC_CFG_ITEM_48_2)
+#define CODEC_CFG_ITEM_48_3_BIT (1 << CODEC_CFG_ITEM_48_3)
+#define CODEC_CFG_ITEM_48_4_BIT (1 << CODEC_CFG_ITEM_48_4)
+#define CODEC_CFG_ITEM_48_5_BIT (1 << CODEC_CFG_ITEM_48_5)
+#define CODEC_CFG_ITEM_48_6_BIT (1 << CODEC_CFG_ITEM_48_6)
+
+#define SAMPLE_FREQ_8K_TABLE_MASK (CODEC_CFG_ITEM_8_1_BIT|CODEC_CFG_ITEM_8_2_BIT)
+#define SAMPLE_FREQ_16K_TABLE_MASK (CODEC_CFG_ITEM_16_1_BIT|CODEC_CFG_ITEM_16_2_BIT)
+#define SAMPLE_FREQ_24K_TABLE_MASK (CODEC_CFG_ITEM_24_1_BIT|CODEC_CFG_ITEM_24_2_BIT)
+#define SAMPLE_FREQ_32K_TABLE_MASK (CODEC_CFG_ITEM_32_1_BIT|CODEC_CFG_ITEM_32_2_BIT)
+#define SAMPLE_FREQ_441K_TABLE_MASK (CODEC_CFG_ITEM_441_1_BIT|CODEC_CFG_ITEM_441_2_BIT)
+#define SAMPLE_FREQ_48K_TABLE_MASK (CODEC_CFG_ITEM_48_1_BIT|CODEC_CFG_ITEM_48_2_BIT| \
+ CODEC_CFG_ITEM_48_3_BIT|CODEC_CFG_ITEM_48_4_BIT| \
+ CODEC_CFG_ITEM_48_5_BIT|CODEC_CFG_ITEM_48_6_BIT)
+
+#define FREAM_DUIATION_7_5M_TALBLE_MASK (CODEC_CFG_ITEM_8_1_BIT|CODEC_CFG_ITEM_16_1_BIT| \
+ CODEC_CFG_ITEM_24_1_BIT|CODEC_CFG_ITEM_32_1_BIT| \
+ CODEC_CFG_ITEM_441_1_BIT|CODEC_CFG_ITEM_48_1_BIT| \
+ CODEC_CFG_ITEM_48_3_BIT|CODEC_CFG_ITEM_48_5_BIT)
+#define FREAM_DUIATION_10M_TALBLE_MASK (CODEC_CFG_ITEM_8_2_BIT|CODEC_CFG_ITEM_16_2_BIT| \
+ CODEC_CFG_ITEM_24_2_BIT|CODEC_CFG_ITEM_32_2_BIT| \
+ CODEC_CFG_ITEM_441_2_BIT|CODEC_CFG_ITEM_48_2_BIT| \
+ CODEC_CFG_ITEM_48_4_BIT|CODEC_CFG_ITEM_48_6_BIT)
+
+typedef enum
+{
+ QOS_CFG_CIS_LOW_LATENCY,
+ QOS_CFG_CIS_HIG_RELIABILITY,
+ QOS_CFG_BIS_LOW_LATENCY,
+ QOS_CFG_BIS_HIG_RELIABILITY,
+} T_QOS_CFG_TYPE;
+
+typedef struct
+{
+ uint32_t sdu_interval;
+ uint8_t framing;
+ uint16_t max_sdu;
+ uint8_t retransmission_number;
+ uint16_t max_transport_latency;
+ uint32_t presentation_delay;
+} T_QOS_CFG_PREFERRED;
+
+bool codec_preferred_cfg_get(T_CODEC_CFG_ITEM item, T_CODEC_CFG *p_cfg);
+bool qos_preferred_cfg_get(T_CODEC_CFG_ITEM item, T_QOS_CFG_TYPE type, T_QOS_CFG_PREFERRED *p_qos);
+bool qos_cfg_find_by_codec_cfg(T_CODEC_CFG *p_cfg, uint8_t target_latency,
+ T_QOS_CFG_PREFERRED *p_qos);
+bool get_max_sdu_len_by_codec_cfg(T_CODEC_CFG *p_cfg, uint16_t *p_max_len);
+bool get_sdu_interval_by_codec_cfg(T_CODEC_CFG *p_cfg, uint32_t *p_sdu_int);
+bool codec_cap_get_cfg_bits(uint32_t *p_cfg_bits, T_CODEC_CAP *p_cap);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/csis_def.h b/inc/bluetooth/leaudio/csis_def.h
new file mode 100644
index 0000000..7752e7b
--- /dev/null
+++ b/inc/bluetooth/leaudio/csis_def.h
@@ -0,0 +1,49 @@
+#ifndef _CSIS_DEF_H_
+#define _CSIS_DEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define SET_MEMBER_LOCK_EXIST 0x01
+#define SET_MEMBER_SIZE_EXIST 0x02
+#define SET_MEMBER_RANK_EXIST 0x04
+#define SET_MEMBER_SIRK_NOTIFY_SUPPORT 0x10
+#define SET_MEMBER_SIZE_NOTIFY_SUPPORT 0x20
+
+#define ATT_ERR_CSIS_LOCK_DENIED 0x80
+#define ATT_ERR_CSIS_LOCK_RELEASE_NOT_ALLOWED 0x81
+#define ATT_ERR_CSIS_INVALID_LOCK_VALUE 0x82
+#define ATT_ERR_CSIS_OOB_SIRK_ONLY 0x83
+#define ATT_ERR_CSIS_LOCK_ALREADY_GRANTED 0x84
+
+//coordinated set identification service
+#define GATT_UUID_CSIS 0x1846
+
+#define CSIS_UUID_CHAR_SET_IRK 0x2B84
+#define CSIS_UUID_CHAR_SIZE 0x2B85
+#define CSIS_UUID_CHAR_LOCK 0x2B86
+#define CSIS_UUID_CHAR_RANK 0x2B87
+
+#define CSI_SIRK_LEN 16
+
+#define CSI_LOCK_DEFAULT_TIMEOUT 60000
+#define CSIP_DISCOVERY_TIMEOUT 10000
+typedef enum
+{
+ CSIS_NONE_LOCK = 0,
+ CSIS_UNLOCKED = 0x01,
+ CSIS_LOCKED = 0x02,
+} T_CSIS_LOCK;
+
+typedef enum
+{
+ CSIS_SIRK_ENC = 0x00,
+ CSIS_SIRK_PLN = 0x01,
+} T_CSIS_SIRK_TYPE;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/csis_rsi.h b/inc/bluetooth/leaudio/csis_rsi.h
new file mode 100644
index 0000000..dd131fb
--- /dev/null
+++ b/inc/bluetooth/leaudio/csis_rsi.h
@@ -0,0 +1,24 @@
+#ifndef _CSIS_RSI_H_
+#define _CSIS_RSI_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#define GAP_ADTYPE_RSI 0x2E
+
+#define CSI_RSI_LEN 6
+
+#if (LE_AUDIO_CSIS_CLIENT_SUPPORT|LE_AUDIO_CSIS_SUPPORT)
+bool csis_gen_rsi(const uint8_t *p_sirk, uint8_t *p_rsik);
+bool csis_resolve_rsi(const uint8_t *p_sirk, uint8_t *p_rsik);
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/metadata_def.h b/inc/bluetooth/leaudio/metadata_def.h
new file mode 100644
index 0000000..673b3aa
--- /dev/null
+++ b/inc/bluetooth/leaudio/metadata_def.h
@@ -0,0 +1,54 @@
+#ifndef _METADATA_DEF_H_
+#define _METADATA_DEF_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*The Preferred_Audio_Contexts LTV structure is typically included
+in the Metadata field of PAC records exposed by Unicast Servers and Broadcast Sinks. */
+#define METADATA_TYPE_PREFERRED_AUDIO_CONTEXTS 0x01
+
+/*The Streaming_Audio_Contexts LTV structure is typically included in a Metadata parameter value
+when initiating the Enable or Update Metadata ASE Control operations for unicast Audio Streams,
+or in the Metadata parameter value included in a BASE structure for broadcast Audio Streams.*/
+#define METADATA_TYPE_STREAMING_AUDIO_CONTEXTS 0x02
+/*Title and/or summary of Audio Stream content: UTF-8 format. */
+#define METADATA_TYPE_PROGRAM_INFO 0x03
+/*3-byte, lower case language code as defined in ISO 639-3. */
+#define METADATA_TYPE_LANGUAGE 0x04
+/*Array of CCID values. */
+#define METADATA_TYPE_CCCD_LIST 0x05
+/*Parental_Rating. */
+#define METADATA_TYPE_PARENTAL_RATING 0x06
+/*A UTF-8 formatted URL link used to present more information about Program_Info. */
+#define METADATA_TYPE_PROGRAM_INFO_URI 0x07
+/*Extended Metadata. */
+#define METADATA_TYPE_EXTENDED 0xFE
+/*Vendor_Specific. */
+#define METADATA_TYPE_VENDOR_SPECIFIC 0xFF
+
+
+//BAPS_Assigned_Numbers_v7, different with IOP
+#define AUDIO_CONTEXT_UNSPECIFIED 0x0001
+#define AUDIO_CONTEXT_CONVERSATIONAL 0x0002
+#define AUDIO_CONTEXT_MEDIA 0x0004
+#define AUDIO_CONTEXT_GAME 0x0008
+#define AUDIO_CONTEXT_INSTRUCTIONAL 0x0010
+#define AUDIO_CONTEXT_VOICE_ASSISTANTS 0x0020
+#define AUDIO_CONTEXT_LIVE 0x0040
+#define AUDIO_CONTEXT_SOUND_EFFECTS 0x0080
+#define AUDIO_CONTEXT_NOTIFICATIONS 0x0100
+#define AUDIO_CONTEXT_RINGTONE 0x0200
+#define AUDIO_CONTEXT_ALERTS 0x0400
+#define AUDIO_CONTEXT_EMERGENCY_ALERT 0x0800
+#define AUDIO_CONTEXT_MASK 0x0FFF
+
+#define MCS_CCID_PRE_IDX 0x80
+#define TBS_CCID_PRE_IDX 0x40
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/pacs_client.h b/inc/bluetooth/leaudio/pacs_client.h
new file mode 100644
index 0000000..4d829fd
--- /dev/null
+++ b/inc/bluetooth/leaudio/pacs_client.h
@@ -0,0 +1,102 @@
+#ifndef _PACS_CLIENT_H_
+#define _PACS_CLIENT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef enum
+{
+ PACS_OP_SINK,
+ PACS_OP_SOURCE,
+ PACS_OP_ALL
+} T_PACS_CCCD_OP_TYPE;
+
+typedef enum
+{
+ PACS_AUDIO_AVAILABLE_CONTEXTS,
+ PACS_AUDIO_SUPPORTED_CONTEXTS,
+ PACS_SINK_AUDIO_LOC,
+ PACS_SINK_PAC,
+ PACS_SOURCE_AUDIO_LOC,
+ PACS_SOURCE_PAC,
+} T_PACS_TYPE;
+
+//LE_AUDIO_MSG_PACS_CLIENT_DIS_DONE
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ bool load_form_ftl;
+ uint8_t sink_pac_num;
+ uint8_t source_pac_num;
+ bool sink_loc_writable;
+ bool sink_loc_exist;
+ bool source_loc_writable;
+ bool source_loc_exist;
+} T_PACS_CLIENT_DIS_DONE;
+
+//LE_AUDIO_MSG_PACS_CLIENT_CCCD
+typedef struct
+{
+ uint16_t conn_handle;
+ T_PACS_CCCD_OP_TYPE type;
+ uint16_t cause;
+} T_PACS_CLIENT_CCCD;
+
+//LE_AUDIO_MSG_PACS_CLIENT_WRITE_SINK_LOC_RESULT
+//LE_AUDIO_MSG_PACS_CLIENT_WRITE_SOURCE_LOC_RESULT
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t cause;
+} T_PACS_CLIENT_WRITE_RESULT;
+
+typedef struct
+{
+ bool is_complete;
+ uint16_t handle;
+ uint16_t pac_record_len;
+ uint8_t *p_record;
+} T_PAC_CHAR_DATA;
+
+typedef struct
+{
+ uint16_t sink_contexts;
+ uint16_t source_contexts;
+} T_AUDIO_CONTEXTS_DATA;
+
+typedef union
+{
+ T_AUDIO_CONTEXTS_DATA contexts_data;
+ uint32_t audio_locations;
+ T_PAC_CHAR_DATA pac_data;
+} T_PACS_DATA;
+
+//LE_AUDIO_MSG_PACS_CLIENT_READ_RESULT
+typedef struct
+{
+ uint16_t conn_handle;
+ T_PACS_TYPE type;
+ uint16_t cause;
+ T_PACS_DATA data;
+} T_PACS_CLIENT_READ_RESULT;
+
+//LE_AUDIO_MSG_PACS_CLIENT_NOTIFY
+typedef struct
+{
+ uint16_t conn_handle;
+ T_PACS_TYPE type;
+ T_PACS_DATA data;
+} T_PACS_CLIENT_NOTIFY;
+
+bool pacs_read_char_value(uint16_t conn_handle, T_PACS_TYPE type);
+bool pacs_enable_cccd(uint16_t conn_handle, T_PACS_CCCD_OP_TYPE type);
+bool pacs_write_sink_audio_locations(uint16_t conn_handle, uint32_t sink_audio_location);
+bool pacs_write_source_audio_locations(uint16_t conn_handle, uint32_t source_audio_location);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif
diff --git a/inc/bluetooth/leaudio/set_coordinator_client.h b/inc/bluetooth/leaudio/set_coordinator_client.h
new file mode 100644
index 0000000..a7124bc
--- /dev/null
+++ b/inc/bluetooth/leaudio/set_coordinator_client.h
@@ -0,0 +1,132 @@
+#ifndef _SET_COORDINATOR_TEST_H_
+#define _SET_COORDINATOR_TEST_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#if LE_AUDIO_CSIS_CLIENT_SUPPORT
+#include "csis_rsi.h"
+#include "csis_def.h"
+#include "ble_audio_group.h"
+#include "os_queue.h"
+
+#define CSIS_SIZE_UNKNOWN 0
+
+#define CSIS_LOCK_FLAG 0x01
+#define CSIS_SIRK_FLAG 0x02
+#define CSIS_SIZE_FLAG 0x04
+#define CSIS_RANK_FLAG 0x08
+
+typedef struct
+{
+ uint16_t conn_handle;
+ bool is_found;
+ bool load_form_ftl;
+ uint8_t srv_num;
+} T_CSIS_CLIENT_DIS_DONE;
+
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t cause;
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+} T_CSIS_MEMBER_LOCK_REQ_DONE;
+
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t cause;
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+} T_CSIS_MEMBER_UNLOCK_REQ_DONE;
+
+typedef struct
+{
+ uint16_t conn_handle;
+ uint16_t srv_uuid;
+ uint8_t srv_instance_id;
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+ uint8_t lock;
+} T_CSIS_MEMBER_LOCK_STATE;
+
+typedef struct
+{
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+} T_CSIS_COOR_SET_DEL;
+
+typedef struct
+{
+ uint8_t set_size;
+ uint8_t size;
+ bool search_done;
+} T_CSIS_SEARCH_RESULT;
+
+typedef struct
+{
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+ T_BLE_AUDIO_DEV_HANDLE dev_handle;
+ uint8_t bd_addr[6];
+ uint8_t addr_type;
+ uint16_t srv_uuid;
+ uint8_t rank;
+ uint8_t size;
+ uint8_t sirk[CSI_SIRK_LEN];
+} T_CSIS_SET_MEM_FOUND;
+
+typedef struct
+{
+ uint16_t cause;
+ uint16_t conn_handle;
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+ T_BLE_AUDIO_DEV_HANDLE dev_handle;
+ uint8_t bd_addr[6];
+ uint8_t addr_type;
+ uint16_t srv_uuid;
+ uint8_t srv_instance_id;
+ uint8_t char_exit;
+ uint8_t rank;
+ uint8_t size;
+ uint8_t sirk[CSI_SIRK_LEN];
+} T_CSIS_READ_RESULT;
+
+//LE_AUDIO_MSG_CSIS_CLIENT_SIRK_CHANGE
+typedef struct
+{
+ T_BLE_AUDIO_GROUP_HANDLE group_handle;
+ uint8_t sirk[CSI_SIRK_LEN];
+} T_CSIS_SIRK_CHANGE;
+
+typedef struct
+{
+ uint16_t serv_uuid;
+ uint8_t srv_instance_id;
+ uint8_t dev_num;
+ uint8_t set_mem_size;
+ uint8_t sirk[CSI_SIRK_LEN];
+} T_CSIS_GROUP_INFO;
+
+void coordinator_read_csis_chars(uint16_t conn_handle, uint8_t instance_id);
+bool csis_client_parse_ext_adv(uint8_t report_data_len, uint8_t *p_report_data,
+ uint8_t *p_bd_addr, uint8_t addr_type);
+bool set_discover_members_state(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+bool csis_client_get_info(T_BLE_AUDIO_GROUP_HANDLE group_handle, T_CSIS_GROUP_INFO *p_info);
+bool set_lock_of_coor_set(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+bool set_unlock_of_coor_set(T_BLE_AUDIO_GROUP_HANDLE group_handle);
+T_BLE_AUDIO_GROUP_HANDLE coordinator_set_find_by_rsi(uint8_t *p_rsik);
+T_BLE_AUDIO_GROUP_HANDLE coordinator_set_find_by_sirk(uint8_t *p_sirk);
+T_BLE_AUDIO_GROUP_HANDLE coordinator_set_find_by_addr(uint8_t *bd_addr, uint8_t addr_type,
+ uint16_t serv_uuid);
+T_BLE_AUDIO_DEV_HANDLE set_member_find_by_conn_handle(T_BLE_AUDIO_GROUP_HANDLE group_handle,
+ uint16_t conn_handle);
+bool coordinator_or_member_find_by_addr(uint8_t *bd_addr, uint8_t addr_type, uint16_t serv_uuid,
+ T_BLE_AUDIO_GROUP_HANDLE *p_group_handle, T_BLE_AUDIO_DEV_HANDLE *p_dev_handle);
+bool set_member_info_find_by_dev_handle(T_BLE_AUDIO_DEV_HANDLE *p_dev_handle,
+ T_CSIS_SET_MEM_FOUND *set_mem_info);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif