diff options
Diffstat (limited to 'inc/bluetooth/leaudio/bass_def.h')
-rw-r--r-- | inc/bluetooth/leaudio/bass_def.h | 154 |
1 files changed, 154 insertions, 0 deletions
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 |