1 /** @file 2 * @brief Handsfree Profile Audio Gateway handling. 3 */ 4 5 /* 6 * Copyright (c) 2015-2016 Intel Corporation 7 * Copyright 2023-2024 NXP 8 * 9 * SPDX-License-Identifier: Apache-2.0 10 */ 11 #ifndef ZEPHYR_INCLUDE_BLUETOOTH_HFP_AG_H_ 12 #define ZEPHYR_INCLUDE_BLUETOOTH_HFP_AG_H_ 13 14 /** 15 * @brief Hands Free Profile - Audio Gateway (HFP-AG) 16 * @defgroup bt_hfp_ag Hands Free Profile - Audio Gateway (HFP-AG) 17 * @ingroup bluetooth 18 * @{ 19 */ 20 21 #include <zephyr/bluetooth/bluetooth.h> 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* HFP AG Indicators */ 28 enum bt_hfp_ag_indicator { 29 BT_HFP_AG_SERVICE_IND = 0, /* Service availability indicator */ 30 BT_HFP_AG_CALL_IND = 1, /* call status indicator */ 31 BT_HFP_AG_CALL_SETUP_IND = 2, /* Call set up status indicator */ 32 BT_HFP_AG_CALL_HELD_IND = 3, /* Call hold status indicator */ 33 BT_HFP_AG_SIGNAL_IND = 4, /* Signal strength indicator */ 34 BT_HFP_AG_ROAM_IND = 5, /* Roaming status indicator */ 35 BT_HFP_AG_BATTERY_IND = 6, /* Battery change indicator */ 36 BT_HFP_AG_IND_MAX /* Indicator MAX value */ 37 }; 38 39 /* HFP CODEC */ 40 #define BT_HFP_AG_CODEC_CVSD 0x01 41 #define BT_HFP_AG_CODEC_MSBC 0x02 42 #define BT_HFP_AG_CODEC_LC3_SWB 0x03 43 44 struct bt_hfp_ag; 45 46 /** @brief HFP profile AG application callback */ 47 struct bt_hfp_ag_cb { 48 /** HF AG connected callback to application 49 * 50 * If this callback is provided it will be called whenever the 51 * AG connection completes. 52 * 53 * @param ag HFP AG object. 54 */ 55 void (*connected)(struct bt_hfp_ag *ag); 56 /** HF disconnected callback to application 57 * 58 * If this callback is provided it will be called whenever the 59 * connection gets disconnected, including when a connection gets 60 * rejected or cancelled or any error in SLC establishment. 61 * 62 * @param ag HFP AG object. 63 */ 64 void (*disconnected)(struct bt_hfp_ag *ag); 65 /** HF SCO/eSCO connected Callback 66 * 67 * If this callback is provided it will be called whenever the 68 * SCO/eSCO connection completes. 69 * 70 * @param ag HFP AG object. 71 * @param sco_conn SCO/eSCO Connection object. 72 */ 73 void (*sco_connected)(struct bt_hfp_ag *ag, struct bt_conn *sco_conn); 74 /** HF SCO/eSCO disconnected Callback 75 * 76 * If this callback is provided it will be called whenever the 77 * SCO/eSCO connection gets disconnected. 78 * 79 * @param ag HFP AG object. 80 * @param sco_conn SCO/eSCO Connection object. 81 */ 82 void (*sco_disconnected)(struct bt_hfp_ag *ag); 83 84 /** HF memory dialing request Callback 85 * 86 * If this callback is provided it will be called whenever a 87 * new call is requested with memory dialing from HFP unit. 88 * Get the phone number according to the given AG memory location. 89 * 90 * @param ag HFP AG object. 91 * @param location AG memory location 92 * @param number Dailing number 93 * 94 * @return 0 in case of success or negative value in case of error. 95 */ 96 int (*memory_dial)(struct bt_hfp_ag *ag, const char *location, char **number); 97 98 /** HF outgoing Callback 99 * 100 * If this callback is provided it will be called whenever a 101 * new call is outgoing. 102 * 103 * @param ag HFP AG object. 104 * @param number Dailing number 105 */ 106 void (*outgoing)(struct bt_hfp_ag *ag, const char *number); 107 108 /** HF incoming Callback 109 * 110 * If this callback is provided it will be called whenever a 111 * new call is incoming. 112 * 113 * @param ag HFP AG object. 114 * @param number Incoming number 115 */ 116 void (*incoming)(struct bt_hfp_ag *ag, const char *number); 117 118 /** HF ringing Callback 119 * 120 * If this callback is provided it will be called whenever the 121 * call is in the ringing 122 * 123 * @param ag HFP AG object. 124 * @param in_bond true - in-bond ringing, false - No in-bond ringing 125 */ 126 void (*ringing)(struct bt_hfp_ag *ag, bool in_band); 127 128 /** HF call accept Callback 129 * 130 * If this callback is provided it will be called whenever the 131 * call is accepted. 132 * 133 * @param ag HFP AG object. 134 */ 135 void (*accept)(struct bt_hfp_ag *ag); 136 137 /** HF call reject Callback 138 * 139 * If this callback is provided it will be called whenever the 140 * call is rejected. 141 * 142 * @param ag HFP AG object. 143 */ 144 void (*reject)(struct bt_hfp_ag *ag); 145 146 /** HF call terminate Callback 147 * 148 * If this callback is provided it will be called whenever the 149 * call is terminated. 150 * 151 * @param ag HFP AG object. 152 */ 153 void (*terminate)(struct bt_hfp_ag *ag); 154 155 /** Supported codec Ids callback 156 * 157 * If this callback is provided it will be called whenever the 158 * supported codec ids are updated. 159 * 160 * @param ag HFP AG object. 161 */ 162 void (*codec)(struct bt_hfp_ag *ag, uint32_t ids); 163 }; 164 165 /** @brief Register HFP AG profile 166 * 167 * Register Handsfree profile AG callbacks to monitor the state and get the 168 * required HFP details to display. 169 * 170 * @param cb callback structure. 171 * 172 * @return 0 in case of success or negative value in case of error. 173 */ 174 int bt_hfp_ag_register(struct bt_hfp_ag_cb *cb); 175 176 /** @brief Create the hfp ag session 177 * 178 * Create the hfp ag session 179 * 180 * @param conn ACL connection object. 181 * @param ag Created HFP AG object. 182 * @param channel Peer rfcomm channel to be connected. 183 * 184 * @return 0 in case of success or negative value in case of error. 185 */ 186 int bt_hfp_ag_connect(struct bt_conn *conn, struct bt_hfp_ag **ag, uint8_t channel); 187 188 /** @brief Disconnect the hfp ag session 189 * 190 * Disconnect the hfp ag session 191 * 192 * @param ag HFP AG object. 193 * 194 * @return 0 in case of success or negative value in case of error. 195 */ 196 int bt_hfp_ag_disconnect(struct bt_hfp_ag *ag); 197 198 /** @brief Notify HFP Unit of an incoming call 199 * 200 * Notify HFP Unit of an incoming call. 201 * 202 * @param ag HFP AG object. 203 * @param number Dailing number. 204 * 205 * @return 0 in case of success or negative value in case of error. 206 */ 207 int bt_hfp_ag_remote_incoming(struct bt_hfp_ag *ag, const char *number); 208 209 /** @brief Reject the incoming call 210 * 211 * Reject the incoming call. 212 * 213 * @param ag HFP AG object. 214 * 215 * @return 0 in case of success or negative value in case of error. 216 */ 217 int bt_hfp_ag_reject(struct bt_hfp_ag *ag); 218 219 /** @brief Accept the incoming call 220 * 221 * Accept the incoming call. 222 * 223 * @param ag HFP AG object. 224 * 225 * @return 0 in case of success or negative value in case of error. 226 */ 227 int bt_hfp_ag_accept(struct bt_hfp_ag *ag); 228 229 /** @brief Terminate the active/hold call 230 * 231 * Terminate the active/hold call. 232 * 233 * @param ag HFP AG object. 234 * 235 * @return 0 in case of success or negative value in case of error. 236 */ 237 int bt_hfp_ag_terminate(struct bt_hfp_ag *ag); 238 239 /** @brief Dial a call 240 * 241 * Dial a call. 242 * 243 * @param ag HFP AG object. 244 * @param number Dailing number. 245 * 246 * @return 0 in case of success or negative value in case of error. 247 */ 248 int bt_hfp_ag_outgoing(struct bt_hfp_ag *ag, const char *number); 249 250 /** @brief Notify HFP Unit that the remote starts ringing 251 * 252 * Notify HFP Unit that the remote starts ringing. 253 * 254 * @param ag HFP AG object. 255 * 256 * @return 0 in case of success or negative value in case of error. 257 */ 258 int bt_hfp_ag_remote_ringing(struct bt_hfp_ag *ag); 259 260 /** @brief Notify HFP Unit that the remote rejects the call 261 * 262 * Notify HFP Unit that the remote rejects the call. 263 * 264 * @param ag HFP AG object. 265 * 266 * @return 0 in case of success or negative value in case of error. 267 */ 268 int bt_hfp_ag_remote_reject(struct bt_hfp_ag *ag); 269 270 /** @brief Notify HFP Unit that the remote accepts the call 271 * 272 * Notify HFP Unit that the remote accepts the call. 273 * 274 * @param ag HFP AG object. 275 * 276 * @return 0 in case of success or negative value in case of error. 277 */ 278 int bt_hfp_ag_remote_accept(struct bt_hfp_ag *ag); 279 280 /** @brief Notify HFP Unit that the remote terminates the active/hold call 281 * 282 * Notify HFP Unit that the remote terminates the active/hold call. 283 * 284 * @param ag HFP AG object. 285 * 286 * @return 0 in case of success or negative value in case of error. 287 */ 288 int bt_hfp_ag_remote_terminate(struct bt_hfp_ag *ag); 289 290 #ifdef __cplusplus 291 } 292 #endif 293 294 /** 295 * @} 296 */ 297 298 #endif /* ZEPHYR_INCLUDE_BLUETOOTH_HFP_HF_H_ */ 299