1 /* 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. * Description: BT PBAP module. 14 */ 15 16 /** 17 * @defgroup bluetooth_bts_pbap_pce PBAP PCE API 18 * @ingroup bluetooth 19 * @{ 20 */ 21 22 #ifndef BTS_PBAP_H 23 #define BTS_PBAP_H 24 25 #include "bts_def.h" 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 31 /** 32 * @if Eng 33 * @brief Length of PBAP mask. 34 * @else 35 * @brief PBAP掩码长度。 36 * @endif 37 */ 38 #define PBAP_MASK_LEN 8 39 40 /** 41 * @if Eng 42 * @brief Enum of PBAP vCard format. 43 * @else 44 * @brief PBAP vCard格式取值。 45 * @endif 46 */ 47 typedef enum { 48 PBAP_FORMAT_VCARD21 = 0x00, /*!< @if Eng PBAP vCard Format V2.1 @else PBAP vCard格式v2.1 @endif */ 49 PBAP_FORMAT_VCARD30, /*!< @if Eng PBAP vCard Format V3.0 @else PBAP vCard格式v3.0 @endif */ 50 } pbap_format_vcard_t; 51 52 /** 53 * @if Eng 54 * @brief Enum of PBAP storage type. 55 * @else 56 * @brief PBAP存储位置。 57 * @endif 58 */ 59 typedef enum { 60 PBAP_REPOSITORY_LOCAL = 0x01, /*!< @if Eng PBAP Phone book repository telecom 61 @else PBAP电话簿存储位置在手机 @endif */ 62 PBAP_REPOSITORY_SIM, /*!< @if Eng PBAP Phone book repository SIM1/telecom @else PBAP电话簿存储位置在SIM卡 @endif */ 63 } pbap_repositories_t; 64 65 /** 66 * @if Eng 67 * @brief Enum of PBAP order type. 68 * @else 69 * @brief PBAP排序类型。 70 * @endif 71 */ 72 typedef enum { 73 PBAP_ORDER_INDEXED = 0x00, /*!< @if Eng PBAP order Indexed @else PBAP排序顺序为索引序 @endif */ 74 PBAP_ORDER_ALPHANUMERIC, /*!< @if Eng PBAP order Alphabetical @else PBAP排序顺序为字典序 @endif */ 75 PBAP_ORDER_PHONETIC, /*!< @if Eng PBAP order Phonetical @else PBAP排序顺序为语音序 @endif */ 76 } pbap_order_type_t; 77 78 /** 79 * @if Eng 80 * @brief Enum of search properties. 81 * @else 82 * @brief PBAP搜索属性。 83 * @endif 84 */ 85 typedef enum { 86 PBAP_SEARCH_PROPERTY_NAME = 0x00, /*!< @if Eng PBAP Search Property Name @else PBAP搜索属性为名字 @endif */ 87 PBAP_SEARCH_PROPERTY_NUMBER, /*!< @if Eng PBAP Search Property Number @else PBAP搜索属性为号码 @endif */ 88 PBAP_SEARCH_PROPERTY_SOUND, /*!< @if Eng PBAP Search Property Sound @else PBAP搜索属性为读音 @endif */ 89 } pbap_search_property_t; 90 91 /** 92 * @if Eng 93 * @brief Enum of property mask type. 94 * @else 95 * @brief PBAP属性掩码取值。 96 * @endif 97 */ 98 typedef enum { 99 PBAP_PROPERTY_MASK_VERSION = 0x00, /*!< @if Eng PBAP Property VERSION @else PBAP属性 vCard版本 @endif */ 100 PBAP_PROPERTY_MASK_FN, /*!< @if Eng PBAP Property FN @else PBAP属性 格式化名称 @endif */ 101 PBAP_PROPERTY_MASK_N, /*!< @if Eng PBAP Property N @else PBAP属性 名称的结构化表示 @endif */ 102 PBAP_PROPERTY_MASK_PHOTO, /*!< @if Eng PBAP Property PHOTO @else PBAP属性 相关图像或照片 @endif */ 103 PBAP_PROPERTY_MASK_BDAY, /*!< @if Eng PBAP Property BDAY @else PBAP属性 生日 @endif */ 104 PBAP_PROPERTY_MASK_ADR, /*!< @if Eng PBAP Property ADR @else PBAP属性 收货地址 @endif */ 105 PBAP_PROPERTY_MASK_LABEL, /*!< @if Eng PBAP Property LABEL @else PBAP属性 标签 @endif */ 106 PBAP_PROPERTY_MASK_TEL, /*!< @if Eng PBAP Property TEL @else PBAP属性 电话号码 @endif */ 107 PBAP_PROPERTY_MASK_EMAIL, /*!< @if Eng PBAP Property EMAIL @else PBAP属性 电子邮件地址 @endif */ 108 PBAP_PROPERTY_MASK_MAILER, /*!< @if Eng PBAP Property MAILER @else PBAP属性 电子邮件 @endif */ 109 PBAP_PROPERTY_MASK_RTY_MASK_TZ, /*!< @if Eng PBAP Property TZ @else PBAP属性 时区 @endif */ 110 PBAP_PROPERTY_MASK_GEO, /*!< @if Eng PBAP Property GEO @else PBAP属性 地理位置 @endif */ 111 PBAP_PROPERTY_MASK_TITLE, /*!< @if Eng PBAP Property TITLE @else PBAP属性 工作 @endif */ 112 PBAP_PROPERTY_MASK_RTY_MASK_ROLE, /*!< @if Eng PBAP Property ROLE @else PBAP属性 组织内的角色 @endif */ 113 PBAP_PROPERTY_MASK_LOGO, /*!< @if Eng PBAP Property LOGO @else PBAP属性 组织徽标 @endif */ 114 PBAP_PROPERTY_MASK_RTY_MASK_AGENT, /*!< @if Eng PBAP Property AGENT @else PBAP属性 代表人员的vCard @endif */ 115 PBAP_PROPERTY_MASK_ORG, /*!< @if Eng PBAP Property ORG @else PBAP属性 组织名称 @endif */ 116 PBAP_PROPERTY_MASK_NOTE, /*!< @if Eng PBAP Property NOTE @else PBAP属性 注释 @endif */ 117 PBAP_PROPERTY_MASK_REV, /*!< @if Eng PBAP Property REV @else PBAP属性 修订版本 @endif */ 118 PBAP_PROPERTY_MASK_SOUND, /*!< @if Eng PBAP Property SOUND @else PBAP属性 姓名读音 @endif */ 119 PBAP_PROPERTY_MASK_URL, /*!< @if Eng PBAP Property URL @else PBAP属性 统一资源定位器 @endif */ 120 PBAP_PROPERTY_MASK_UID, /*!< @if Eng PBAP Property UID @else PBAP属性 唯一标识 @endif */ 121 PBAP_PROPERTY_MASK_KEY, /*!< @if Eng PBAP Property KEY @else PBAP属性 公共加密密钥 @endif */ 122 PBAP_PROPERTY_MASK_NICKNAME, /*!< @if Eng PBAP Property NICKNAME @else PBAP属性 昵称 @endif */ 123 PBAP_PROPERTY_MASK_RTY_MASK_RTY_MASK_CATEGORIES, /*!< @if Eng PBAP Property CATEGORIES @else PBAP属性 类别 @endif */ 124 PBAP_PROPERTY_MASK_RTY_MASK_PROID, /*!< @if Eng PBAP Property PROID @else PBAP属性 产品ID @endif */ 125 PBAP_PROPERTY_MASK_CLASS, /*!< @if Eng PBAP Property CLASS @else PBAP属性 CLASS信息 @endif */ 126 PBAP_PROPERTY_MASK_RTY_MASK_RTY_MASK_SORT_STRING, /*!< @if Eng PBAP Property SORT-STRING @else PBAP属性 127 用于排序操作的字符串 @endif */ 128 PBAP_PROPERTY_MASK_X_IRMC_CALL_DATETIME, /*!< @if Eng PBAP Property X-IRMC-CALL-DATETIME 129 @else PBAP属性 时间戳 @endif */ 130 PBAP_PROPERTY_MASK_RTY_MASK_X_BT_SPEEDDIALKEY, /*!< @if Eng PBAP Property X-BT-SPEEDDIALKEY @else PBAP属性 131 快速拨号快捷方式 @endif */ 132 PBAP_PROPERTY_MASK_RTY_MASK_X_BT_UCI, /*!< @if Eng PBAP Property X-BT-UCI @else PBAP属性 统一主叫方标识符 @endif */ 133 PBAP_PROPERTY_MASK_X_BT_UID, /*!< @if Eng PBAP Property X-BT-UID @else PBAP属性 蓝牙联系人唯一标识符 @endif */ 134 PBAP_PROPERTY_MASK_FILTER = 0x27, /*!< @if Eng PBAP Property Proprietary Filter @else PBAP属性 私有过滤器 @endif */ 135 PBAP_PROPERTY_MASK_INVALID = 0xFF, 136 } pbap_property_mask_t; 137 138 /** 139 * @if Eng 140 * @brief Struct of phonebook parameters. 141 * @else 142 * @brief 电话簿参数。 143 * @endif 144 */ 145 typedef struct { 146 unsigned char property_selector[PBAP_MASK_LEN]; /*!< @if Eng property selector @else 属性选择器 @endif */ 147 unsigned char vcard_selector[PBAP_MASK_LEN]; /*!< @if Eng vCard selector @else vCard选择器 @endif */ 148 unsigned short max_list_count; /*!< @if Eng max list count @else 最大列表计数 @endif */ 149 unsigned short list_offset; /*!< @if Eng list start Offset @else 列表起始偏移量 @endif */ 150 unsigned char *name; /*!< @if Eng name @else 名称 @endif */ 151 unsigned char format; /*!< @if Eng format @else 格式 @endif */ 152 unsigned char reset_new_missed_calls; /*!< @if Eng reset new missed calls @else 重置新的未接呼叫 @endif */ 153 unsigned char vcard_selector_operator; /*!< @if Eng vCard selector operator @else vCard选择器运算符 @endif */ 154 } pbap_pce_pull_phone_book_param_t; 155 156 /** 157 * @if Eng 158 * @brief Struct of vCard list parameters. 159 * @else 160 * @brief vCard列表对象参数。 161 * @endif 162 */ 163 typedef struct { 164 unsigned char vcard_selector[PBAP_MASK_LEN]; /*!< @if Eng vCard selector @else vCard选择器 @endif */ 165 unsigned short max_list_count; /*!< @if Eng max list count @else 最大列表计数 @endif */ 166 unsigned short list_offset; /*!< @if Eng list start Offset @else 列表起始偏移量 @endif */ 167 unsigned char *name; /*!< @if Eng name @else 名称 @endif */ 168 unsigned char *search_value; /*!< @if Eng search value @else 搜索值 @endif */ 169 unsigned char search_property; /*!< @if Eng search property @else 搜索属性 @endif */ 170 unsigned char order; /*!< @if Eng order @else 顺序 @endif */ 171 unsigned char reset_new_missed_calls; /*!< @if Eng reset new missed calls @else 重置新的未接呼叫 @endif */ 172 unsigned char vcard_selector_operator; /*!< @if Eng vCard selector operator @else vCard选择器运算符 @endif */ 173 } pbap_pce_pull_vcard_listing_param_t; 174 175 /** 176 * @if Eng 177 * @brief Struct of vCard parameters. 178 * @else 179 * @brief vCard参数。 180 * @endif 181 */ 182 typedef struct { 183 unsigned char property_selector[PBAP_MASK_LEN]; /*!< @if Eng property selector @else 属性选择器 @endif */ 184 unsigned char *name; /*!< @if Eng name @else 名称 @endif */ 185 unsigned char format; /*!< @if Eng format @else 格式 @endif */ 186 } pbap_pce_pull_vcard_entry_param_t; 187 188 /** 189 * @if Eng 190 * @brief Offset of PBAP error code. 191 * @else 192 * @brief PBAP错误码偏移。 193 * @endif 194 */ 195 #define PBAP_ERROR_OFFSET 0x100 196 197 /** 198 * @if Eng 199 * @brief Enum of pbap error codes. 200 * @else 201 * @brief PBAP错误码。 202 * @endif 203 */ 204 typedef enum { 205 PBAP_ERROR_OK = PBAP_ERROR_OFFSET, /*!< @if Eng PBAP error code OK @else PBAP错误码 正常 @endif */ 206 PBAP_ERROR_BAD_REQUEST, /*!< @if Eng PBAP error code Bad Request @else PBAP错误码 错误请求 @endif */ 207 PBAP_ERROR_NOT_IMPLEMENTED, /*!< @if Eng PBAP error code Not implemented @else PBAP错误码 未执行 @endif */ 208 PBAP_ERROR_UNAUTHORIZED, /*!< @if Eng PBAP error code Unauthorized @else PBAP错误码 未授权 @endif */ 209 PBAP_ERROR_PRECONDITION_FAILED, /*!< @if Eng PBAP error code Precondition Failed 210 @else PBAP错误码 预置条件失败 @endif */ 211 PBAP_ERROR_NOT_FOUND, /*!< @if Eng PBAP error code Not Found @else PBAP错误码 未找到 @endif */ 212 PBAP_ERROR_NOT_ACCEPTABLE, /*!< @if Eng PBAP error code Not Acceptable @else PBAP错误码 不可接受 @endif */ 213 PBAP_ERROR_SERVICE_UNAVAILABLE, /*!< @if Eng PBAP error code Service unavailable 214 @else PBAP错误码 服务不可用 @endif */ 215 PBAP_ERROR_FORBIDDEN, /*!< @if Eng PBAP error code Forbidden @else PBAP错误码 禁止 @endif */ 216 } pbap_error_codes_t; 217 218 /** 219 * @if Eng 220 * @brief Callback function for connection state change. 221 * @par Description: When registered, this callback reports connection state change to upper layer application. 222 * @param [in] bd_addr The address of the remote device. See @ref bd_addr_t 223 * @param [in] state Connection state. See {@link profile_connect_state_t} 224 * @retval #void No return value. 225 * @par Dependency: 226 * @li bts_pbap.h 227 * @see pbap_pce_callbacks_t 228 * @else 229 * @brief 连接状态变化回调函数。 230 * @par 说明: 注册该回调函数之后,bluetooth调用该回调函数将连接状态变化传递给上层应用。 231 * @param [in] bd_addr 远端设备地址。见 @ref bd_addr_t 232 * @param [in] state 连接状态。见 {@link profile_connect_state_t} 233 * @retval #void 无返回值。 234 * @par 依赖: 235 * @li bts_pbap.h 236 * @see pbap_pce_callbacks_t 237 * @endif 238 */ 239 typedef void (*pbap_pce_conn_state_changed_callback)(const bd_addr_t *bd_addr, profile_connect_state_t state); 240 241 /** 242 * @if Eng 243 * @brief Callback function for phonebook size. 244 * @par Description: When registered, this callback reports phonebook size to upper layer application. 245 * @param [in] bd_addr The address of the remote device. See @ref bd_addr_t 246 * @param [in] size Phonebook size. 247 * @retval #void No return value. 248 * @par Dependency: 249 * @li bts_pbap.h 250 * @see pbap_pce_callbacks_t 251 * @else 252 * @brief 电话簿大小回调函数。 253 * @par 说明: 注册该回调函数之后,bluetooth调用该回调函数将电话簿大小传递给上层应用。 254 * @param [in] bd_addr 远端设备地址。见 @ref bd_addr_t 255 * @param [in] size 电话簿大小。 256 * @retval #void 无返回值。 257 * @par 依赖: 258 * @li bts_pbap.h 259 * @see pbap_pce_callbacks_t 260 * @endif 261 */ 262 typedef void (*pbap_pce_phone_book_size_callback)(const bd_addr_t *bd_addr, unsigned short size); 263 264 /** 265 * @if Eng 266 * @brief Callback function for transfer completion. 267 * @par Description: When registered, this callback reports transfer completion to upper layer application. 268 * @param [in] bd_addr The address of the remote device. See @ref bd_addr_t 269 * @retval #void No return value. 270 * @par Dependency: 271 * @li bts_pbap.h 272 * @see pbap_pce_callbacks_t 273 * @else 274 * @brief 传输完成回调函数。 275 * @par 说明: 注册该回调函数之后,bluetooth调用该回调函数将传输完成事件上报给应用。 276 * @param [in] bd_addr 远端设备地址。见 @ref bd_addr_t 277 * @retval #void 无返回值。 278 * @par 依赖: 279 * @li bts_pbap.h 280 * @see pbap_pce_callbacks_t 281 * @endif 282 */ 283 typedef void (*pbap_pce_trans_complete_callback)(const bd_addr_t *bd_addr); 284 285 /** 286 * @if Eng 287 * @brief Callback function for data reception. 288 * @par Description: When registered, this callback reports received data to upper layer application. 289 * @param [in] bd_addr The address of the remote device. See @ref bd_addr_t 290 * @param [in] data Received data. 291 * @param [in] len Length of data. 292 * @retval #void No return value. 293 * @par Dependency: 294 * @li bts_pbap.h 295 * @see pbap_pce_callbacks_t 296 * @else 297 * @brief 接收到数据回调函数。 298 * @par 说明: 注册该回调函数之后,bluetooth调用该回调函数将接收到的数据上报给应用。 299 * @param [in] bd_addr 远端设备地址。见 @ref bd_addr_t 300 * @param [in] data 接收到的数据。 301 * @param [in] len 数据长度。 302 * @retval #void 无返回值。 303 * @par 依赖: 304 * @li bts_pbap.h 305 * @see pbap_pce_callbacks_t 306 * @endif 307 */ 308 typedef void (*pbap_pce_receive_data_callback)(const bd_addr_t *bd_addr, const unsigned char *data, int len); 309 310 /** 311 * @if Eng 312 * @brief Callback function for error code. 313 * @par Description: When registered, this callback reports error code to upper layer application. 314 * @param [in] bd_addr The address of the remote device. See @ref bd_addr_t 315 * @param [in] code Error code. 316 * @retval #void No return value. 317 * @par Dependency: 318 * @li bts_pbap.h 319 * @see pbap_pce_callbacks_t 320 * @else 321 * @brief 上报错误码回调函数。 322 * @par 说明: 注册该回调函数之后,bluetooth调用该回调函数将错误码上报给应用。 323 * @param [in] bd_addr 远端设备地址。见 @ref bd_addr_t 324 * @param [in] code 要上报的错误码。 325 * @retval #void 无返回值。 326 * @par 依赖: 327 * @li bts_pbap.h 328 * @see pbap_pce_callbacks_t 329 * @endif 330 */ 331 typedef void (*pbap_pce_error_code_callback)(const bd_addr_t *bd_addr, int code); 332 333 /** 334 * @if Eng 335 * @brief Struct of PBAP callback functions. 336 * @else 337 * @brief PBAP回调函数接口定义。 338 * @endif 339 */ 340 typedef struct { 341 pbap_pce_conn_state_changed_callback state_changed_cb; 342 pbap_pce_phone_book_size_callback phone_book_sized_cb; 343 pbap_pce_trans_complete_callback trans_complete_cb; 344 pbap_pce_receive_data_callback receive_data_cb; 345 pbap_pce_error_code_callback error_code_cb; 346 } pbap_pce_callbacks_t; 347 348 /** 349 * @if Eng 350 * @brief Use this funtion to connect to PSE. 351 * @par Description: Use this funtion to connect to PSE. 352 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 353 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 354 * @retval #Other Error code. See @ref errcode_bt_t 355 * @par Dependency: 356 * @li bts_pbap.h 357 * @else 358 * @brief 建立与PSE的连接。 359 * @par 说明: 建立与PSE的连接。 360 * @param [in] bd_addr 待连接的设备地址。见 @ref bd_addr_t 361 * @retval #ERRCODE_BT_SUCCESS 执行成功。 362 * @retval #Other 错误码。参考 @ref errcode_bt_t 363 * @par 依赖: 364 * @li bts_pbap.h 365 * @endif 366 */ 367 int pbap_pce_connect(const bd_addr_t *bd_addr); 368 369 /** 370 * @if Eng 371 * @brief Use this funtion to disconnect from PSE. 372 * @par Description: Use this funtion to disconnect from PSE. 373 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 374 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 375 * @retval #Other Error code. See @ref errcode_bt_t 376 * @par Dependency: 377 * @li bts_pbap.h 378 * @else 379 * @brief 建立与PSE的连接。 380 * @par 说明: 建立与PSE的连接。 381 * @param [in] bd_addr 待断开连接的设备地址。见 @ref bd_addr_t 382 * @retval #ERRCODE_BT_SUCCESS 执行成功。 383 * @retval #Other 错误码。参考 @ref errcode_bt_t 384 * @par 依赖: 385 * @li bts_pbap.h 386 * @endif 387 */ 388 int pbap_pce_disconnect(const bd_addr_t *bd_addr); 389 390 /** 391 * @if Eng 392 * @brief Use this funtion to get connection state of PBAP client. 393 * @par Description: Use this funtion to get connection state of PBAP client. 394 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 395 * @retval Return connecting/connected/disconnecting/disconnected. See @ref profile_connect_state_t. 396 * @par Dependency: 397 * @li bts_pbap.h 398 * @else 399 * @brief 查询PBAP client连接状态。 400 * @par 说明: 查询PBAP client连接状态。 401 * @param [in] bd_addr 待查询的设备地址。见 @ref bd_addr_t 402 * @retval 返回值为正在连接,已连接,正在断开连接,已断开连接。参考 @ref profile_connect_state_t 403 * @par 依赖: 404 * @li bts_pbap.h 405 * @endif 406 */ 407 int pbap_pce_get_device_connect_state(const bd_addr_t *bd_addr); 408 409 /** 410 * @if Eng 411 * @brief Use this funtion to pull phonebook. 412 * @par Description: Use this funtion to pull phonebook. 413 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 414 * @param [in] param Phonebook parameters. See @ref pbap_pce_pull_phone_book_param_t 415 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 416 * @retval #Other Error code. See @ref errcode_bt_t 417 * @par Dependency: 418 * @li bts_pbap.h 419 * @else 420 * @brief 下载电话簿对象。 421 * @par 说明: 下载电话簿对象。 422 * @param [in] bd_addr 设备地址。见 @ref bd_addr_t 423 * @param [in] param 电话簿参数。见 @ref pbap_pce_pull_phone_book_param_t 424 * @retval #ERRCODE_BT_SUCCESS 执行成功。 425 * @retval #Other 错误码。参考 @ref errcode_bt_t 426 * @par 依赖: 427 * @li bts_pbap.h 428 * @endif 429 */ 430 int pbap_pce_pull_phone_book(const bd_addr_t *bd_addr, const pbap_pce_pull_phone_book_param_t *param); 431 432 /** 433 * @if Eng 434 * @brief Use this funtion to set current directory. 435 * @par Description: Use this funtion to set current directory. 436 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 437 * @param [in] name Directory name. 438 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 439 * @retval #Other Error code. See @ref errcode_bt_t See @ref errcode_bt_t 440 * @par Dependency: 441 * @li bts_pbap.h 442 * @else 443 * @brief 设置虚拟文件夹体系结构中的当前文件夹。 444 * @par 说明: 设置虚拟文件夹体系结构中的当前文件夹。 445 * @param [in] bd_addr 设备地址。见 @ref bd_addr_t 446 * @param [in] name 文件夹名称。 447 * @retval #ERRCODE_BT_SUCCESS 执行成功。 448 * @retval #Other 错误码。参考 @ref errcode_bt_t 449 * @par 依赖: 450 * @li bts_pbap.h 451 * @endif 452 */ 453 int pbap_pce_set_phone_book(const bd_addr_t *bd_addr, const unsigned char *name); 454 455 /** 456 * @if Eng 457 * @brief Use this funtion to search in the phonebook list. 458 * @par Description: Use this funtion to search in the phonebook list. 459 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 460 * @param [in] param Phonebook list parameters. See @ref pbap_pce_pull_vcard_listing_param_t 461 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 462 * @retval #Other Error code. See @ref errcode_bt_t 463 * @par Dependency: 464 * @li bts_pbap.h 465 * @else 466 * @brief 检索PSE的电话簿列表对象。 467 * @par 说明: 检索PSE的电话簿列表对象。 468 * @param [in] bd_addr 设备地址。见 @ref bd_addr_t 469 * @param [in] param 电话簿列表对象参数。见 @ref pbap_pce_pull_vcard_listing_param_t 470 * @retval #ERRCODE_BT_SUCCESS 执行成功。 471 * @retval #Other 错误码。参考 @ref errcode_bt_t 472 * @par 依赖: 473 * @li bts_pbap.h 474 * @endif 475 */ 476 int pbap_pce_pull_vcard_listing(const bd_addr_t *bd_addr, const pbap_pce_pull_vcard_listing_param_t *param); 477 478 /** 479 * @if Eng 480 * @brief Use this funtion to search for a specific vCard. 481 * @par Description: Use this funtion to search for a specific vCard. 482 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 483 * @param [in] param vCard parameters. See @ref pbap_pce_pull_vcard_entry_param_t 484 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 485 * @retval #Other Error code. See @ref errcode_bt_t 486 * @par Dependency: 487 * @li bts_pbap.h 488 * @else 489 * @brief 检索特定的vCard。 490 * @par 说明: 检索特定的vCard。 491 * @param [in] bd_addr 设备地址。见 @ref bd_addr_t 492 * @param [in] param vCard对象参数。见 @ref pbap_pce_pull_vcard_entry_param_t 493 * @retval #ERRCODE_BT_SUCCESS 执行成功。 494 * @retval #Other 错误码。参考 @ref errcode_bt_t 495 * @par 依赖: 496 * @li bts_pbap.h 497 * @endif 498 */ 499 int pbap_pce_pull_vcard_entry(const bd_addr_t *bd_addr, const pbap_pce_pull_vcard_entry_param_t *param); 500 501 /** 502 * @if Eng 503 * @brief Use this funtion to stop transferring. 504 * @par Description: Use this funtion to stop transferring. 505 * @param [in] bd_addr Address of the device. See @ref bd_addr_t 506 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 507 * @retval #Other Error code. See @ref errcode_bt_t 508 * @par Dependency: 509 * @li bts_pbap.h 510 * @else 511 * @brief 停止传输。 512 * @par 说明: 停止传输。 513 * @param [in] bd_addr 设备地址。见 @ref bd_addr_t 514 * @retval #ERRCODE_BT_SUCCESS 执行成功。 515 * @retval #Other 错误码。参考 @ref errcode_bt_t 516 * @par 依赖: 517 * @li bts_pbap.h 518 * @endif 519 */ 520 int pbap_pce_stop_trans(const bd_addr_t *bd_addr); 521 522 /** 523 * @if Eng 524 * @brief Register callback functions for PBAP. 525 * @par Description: Register callback functions for PBAP. 526 * @attention 1. This function is called in bts context,should not be blocked or do long time waiting. 527 * @attention 2. The memories of <devices> are requested and freed by the bts automatically. 528 * @param [in] func A poniter of the Callback funcs.See @ref pbap_pce_callbacks_t 529 * @retval #ERRCODE_BT_SUCCESS Excute successfully. 530 * @retval #Other Error code. See @ref errcode_bt_t 531 * @par Dependency: 532 * @li bts_pbap.h 533 * @see pbap_pce_callbacks_t 534 * @else 535 * @brief 注册PBAP回调函数。 536 * @par 说明: 注册上层应用的回调。 537 * @attention 1. 该回调函数运行于bts线程,不能阻塞或长时间等待。 538 * @attention 2. <devices>由bts申请内存,也由bts释放,回调中不应释放。 539 * @param [in] func 指向回调函数接口定义的指针。见 @ref pbap_pce_callbacks_t 540 * @retval #ERRCODE_BT_SUCCESS 执行成功。 541 * @retval #Other 错误码。参考 @ref errcode_bt_t 542 * @par 依赖: 543 * @li bts_pbap.h 544 * @see pbap_pce_callbacks_t 545 * @endif 546 */ 547 int pbap_pce_register_callbacks(pbap_pce_callbacks_t *func); 548 549 #ifdef __cplusplus 550 } 551 #endif 552 #endif /* end of bts_pbap.h */ 553