155 lines
3.8 KiB
C
Raw Normal View History

2025-11-25 10:21:47 +08:00
#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