Blob: bass.h
Blob id: a7b7741db3b73c88e533a0f345fee4fe203724a9
Size: 4.4 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * * BlueZ - Bluetooth protocol stack for Linux * * Copyright 2023-2024 NXP * */ struct bt_bass; struct bt_bcast_src; #define NUM_BCAST_RECV_STATES 2 #define BT_BASS_BCAST_CODE_SIZE 16 #define BT_BASS_BIG_SYNC_FAILED_BITMASK 0xFFFFFFFF #define BT_BASS_BCAST_SRC_LEN 15 #define BT_BASS_BCAST_SRC_SUBGROUP_LEN 5 /* Application error codes */ #define BT_BASS_ERROR_OPCODE_NOT_SUPPORTED 0x80 #define BT_BASS_ERROR_INVALID_SOURCE_ID 0x81 /* PA_Sync_State values */ #define BT_BASS_NOT_SYNCHRONIZED_TO_PA 0x00 #define BT_BASS_SYNC_INFO_RE 0x01 #define BT_BASS_SYNCHRONIZED_TO_PA 0x02 #define BT_BASS_FAILED_TO_SYNCHRONIZE_TO_PA 0x03 #define BT_BASS_NO_PAST 0x04 /* BIG_Encryption values */ #define BT_BASS_BIG_ENC_STATE_NO_ENC 0x00 #define BT_BASS_BIG_ENC_STATE_BCODE_REQ 0x01 #define BT_BASS_BIG_ENC_STATE_DEC 0x02 #define BT_BASS_BIG_ENC_STATE_BAD_CODE 0x03 /* Broadcast Audio Scan Control Point * header structure */ struct bt_bass_bcast_audio_scan_cp_hdr { uint8_t op; } __packed; #define BT_BASS_REMOTE_SCAN_STOPPED 0x00 #define BT_BASS_REMOTE_SCAN_STARTED 0x01 #define BT_BASS_ADD_SRC 0x02 #define BT_BASS_ADDR_PUBLIC 0x00 #define BT_BASS_ADDR_RANDOM 0x01 /* PA_Sync values */ #define PA_SYNC_NO_SYNC 0x00 #define PA_SYNC_PAST 0x01 #define PA_SYNC_NO_PAST 0x02 /* BIS_Sync no preference bitmask */ #define BIS_SYNC_NO_PREF 0xFFFFFFFF #define PA_INTERVAL_UNKNOWN 0xFFFF struct bt_bass_add_src_params { uint8_t addr_type; bdaddr_t addr; uint8_t sid; uint8_t bid[3]; uint8_t pa_sync; uint16_t pa_interval; uint8_t num_subgroups; uint8_t subgroup_data[]; } __packed; #define BT_BASS_MOD_SRC 0x03 struct bt_bass_mod_src_params { uint8_t id; uint8_t pa_sync; uint16_t pa_interval; uint8_t num_subgroups; uint8_t subgroup_data[]; } __packed; #define BT_BASS_SET_BCAST_CODE 0x04 struct bt_bass_set_bcast_code_params { uint8_t id; uint8_t bcast_code[BT_BASS_BCAST_CODE_SIZE]; } __packed; #define BT_BASS_REMOVE_SRC 0x05 struct bt_bass_remove_src_params { uint8_t id; } __packed; typedef void (*bt_bass_func_t)(struct bt_bass *bass, void *user_data); typedef void (*bt_bass_destroy_func_t)(void *user_data); typedef void (*bt_bass_debug_func_t)(const char *str, void *user_data); typedef void (*bt_bass_src_func_t)(uint8_t id, uint32_t bid, uint8_t enc, uint8_t state, uint32_t bis_sync, void *user_data); typedef int (*bt_bass_cp_handler_func_t)(struct bt_bcast_src *bcast_src, uint8_t op, void *params, void *user_data); struct bt_att *bt_bass_get_att(struct bt_bass *bass); struct bt_gatt_client *bt_bass_get_client(struct bt_bass *bass); unsigned int bt_bass_register(bt_bass_func_t attached, bt_bass_func_t detached, void *user_data); bool bt_bass_unregister(unsigned int id); bool bt_bass_set_debug(struct bt_bass *bass, bt_bass_debug_func_t func, void *user_data, bt_bass_destroy_func_t destroy); struct bt_bass *bt_bass_new(struct gatt_db *ldb, struct gatt_db *rdb, const bdaddr_t *adapter_bdaddr); bool bt_bass_set_user_data(struct bt_bass *bass, void *user_data); struct bt_bass *bt_bass_ref(struct bt_bass *bass); void bt_bass_unref(struct bt_bass *bass); bool bt_bass_attach(struct bt_bass *bass, struct bt_gatt_client *client); bool bt_bass_set_att(struct bt_bass *bass, struct bt_att *att); void bt_bass_detach(struct bt_bass *bass); void bt_bass_add_db(struct gatt_db *db, const bdaddr_t *adapter_bdaddr); int bt_bass_send(struct bt_bass *bass, struct bt_bass_bcast_audio_scan_cp_hdr *hdr, struct iovec *params); unsigned int bt_bass_src_register(struct bt_bass *bass, bt_bass_src_func_t cb, void *user_data, bt_bass_destroy_func_t destroy); bool bt_bass_src_unregister(struct bt_bass *bass, unsigned int id); unsigned int bt_bass_cp_handler_register(struct bt_bass *bass, bt_bass_cp_handler_func_t handler, bt_bass_destroy_func_t destroy, void *user_data); bool bt_bass_cp_handler_unregister(struct bt_bass *bass, unsigned int id); int bt_bass_set_pa_sync(struct bt_bcast_src *bcast_src, uint8_t sync_state); int bt_bass_get_pa_sync(struct bt_bcast_src *bcast_src, uint8_t *sync_state); int bt_bass_set_bis_sync(struct bt_bcast_src *bcast_src, uint8_t bis); int bt_bass_clear_bis_sync(struct bt_bcast_src *bcast_src, uint8_t bis); bool bt_bass_check_bis(struct bt_bcast_src *bcast_src, uint8_t bis); int bt_bass_set_enc(struct bt_bcast_src *bcast_src, uint8_t enc); |