1 /****************************************************************************** 2 * Copyright (c) 2022 Telink Semiconductor (Shanghai) Co., Ltd. ("TELINK") 3 * All rights reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 *****************************************************************************/ 18 #ifndef _AUDIO_INNER_H_ 19 #define _AUDIO_INNER_H_ 20 21 #if (BLC_AUDIO_PROFILE_EN) 22 23 #define BLT_AUDIO_SINK_AES_MAX 2 24 #define BLT_AUDIO_SOURCE_AES_MAX 2 25 26 typedef enum { 27 BLT_AUDIO_BUSY_NONE = 0x0000, 28 BLT_AUDIO_BUSY_PACP = BIT(BLC_AUDIO_SERVICE_PACS), 29 BLT_AUDIO_BUSY_ASCP = BIT(BLC_AUDIO_SERVICE_ASCS), 30 BLT_AUDIO_BUSY_BASP = BIT(BLC_AUDIO_SERVICE_BASS), 31 BLT_AUDIO_BUSY_CSIP = BIT(BLC_AUDIO_SERVICE_CSIS), 32 BLT_AUDIO_BUSY_RAAP = BIT(BLC_AUDIO_SERVICE_RAAS), 33 BLT_AUDIO_BUSY_MICP = BIT(BLC_AUDIO_SERVICE_MICS), 34 BLT_AUDIO_BUSY_VCP = BIT(BLC_AUDIO_SERVICE_VCS), 35 BLT_AUDIO_BUSY_MCP = BIT(BLC_AUDIO_SERVICE_MCS), 36 BLT_AUDIO_BUSY_TBP = BIT(BLC_AUDIO_SERVICE_TBS), 37 BLT_AUDIO_BUSY_OTP = BIT(BLC_AUDIO_SERVICE_OTS), 38 39 BLT_AUDIO_BUSY_SDP = BIT(14), 40 BLT_AUDIO_BUSY_SDP_START = BIT(15), 41 } BLT_AUDIO_BUSY_ENUM; 42 43 typedef enum { 44 BLT_AUDIO_GFLAG_NONE = 0x0000, 45 BLT_AUDIO_GFLAG_PACS = BIT(0), 46 BLT_AUDIO_GFLAG_ASCS = BIT(1), 47 BLT_AUDIO_GFLAG_BACS = BIT(2), 48 BLT_AUDIO_GFLAG_CSIS = BIT(3), 49 BLT_AUDIO_GFLAG_RAAS = BIT(4), 50 BLT_AUDIO_GFLAG_MICS = BIT(5), 51 BLT_AUDIO_GFLAG_VCS = BIT(6), 52 BLT_AUDIO_GFLAG_MCS = BIT(7), 53 BLT_AUDIO_GFLAG_TBS = BIT(8), 54 BLT_AUDIO_GFLAG_OTS = BIT(9), 55 } BLT_AUDIO_GFLAGS_ENUM; 56 57 #if (BLC_AUDIO_SDP_ENABLE) 58 59 #define BLT_AUDIO_SDP_SRV_COUNT 8 60 #define BLT_AUDIO_SDP_INC_COUNT 2 61 #define BLT_AUDIO_SDP_CHAR_COUNT 12 62 #define BLT_AUDIO_SDP_OTHR_COUNT 2 63 64 typedef struct blt_audio_srv_s blt_audio_srv_t; 65 typedef struct blt_audio_sdp_s blt_audio_sdp_t; 66 typedef void (*BlcAudioSdpFindServiceFunc)(blt_audio_sdp_t *pSdp, blt_audio_srv_t *pSrv); 67 typedef void (*BlcAudioSdpInitServiceFunc)(blt_audio_sdp_t *pSdp, blt_audio_srv_t *pSrv); 68 typedef void (*BlcAudioSdpLoopHandlerFunc)(blt_audio_sdp_t *pSdp, blt_audio_srv_t *pSrv); 69 typedef void (*BlcAudioSdpOverHandlerFunc)(blt_audio_sdp_t *pSdp, blt_audio_srv_t *pSrv); 70 typedef int (*BlcAudioSdpGattHandlerFunc)(blt_audio_sdp_t *pSdp, blt_audio_srv_t *pSrv, u8 *pkt); 71 72 typedef struct { 73 u16 sHandle; 74 u16 eHandle; 75 u16 srvUUID; 76 } blt_audio_inc_t; 77 78 typedef struct { // 12Bytes 79 u16 charUUID; 80 u16 dHandle; // data handle 81 u16 othrUUID[BLT_AUDIO_SDP_OTHR_COUNT]; 82 u16 othrHandle[BLT_AUDIO_SDP_OTHR_COUNT]; 83 } blt_audio_char_t; 84 85 struct blt_audio_srv_s { 86 u8 used; // Adapter to multi same ServiceUUID. 87 u8 mode; // Refer to BLT_AUDIO_CHAR_MODE_ENUM. 88 u8 flags; // Refer to BLT_AUDIO_SRV_FLAG_ENUM. 89 u8 curChar; // 90 u16 srvUUID; 91 u16 sHandle; 92 u16 eHandle; 93 u16 oHandle; 94 BlcAudioSdpFindServiceFunc findFunc; 95 BlcAudioSdpInitServiceFunc initFunc; 96 BlcAudioSdpLoopHandlerFunc loopFunc; 97 BlcAudioSdpOverHandlerFunc overFunc; 98 BlcAudioSdpGattHandlerFunc gattFunc; 99 }; 100 101 struct blt_audio_sdp_s { 102 u8 start; 103 u8 flags; 104 u8 other; 105 u8 curSrv; 106 u16 handle; // Connect Handle 107 u16 sHandle; 108 u16 eHandle; 109 u16 oHandle; 110 u32 startTimer; 111 blt_audio_srv_t *servPtr[BLT_AUDIO_SDP_SRV_COUNT]; 112 blt_audio_inc_t includes[BLT_AUDIO_SDP_INC_COUNT]; 113 blt_audio_char_t charact[BLT_AUDIO_SDP_CHAR_COUNT]; // This will be Shared by multiple services 114 }; 115 #endif // #if (BLC_AUDIO_SDP_ENABLE) 116 117 #if (BLC_AUDIO_AICS_ENABLE) 118 typedef struct { 119 u16 flags; 120 u16 resv0; 121 u16 sHandle; 122 u16 eHandle; 123 u16 ctrlHandle; 124 u16 stateHandle; 125 u16 propeHandle; 126 u16 inputHandle; 127 u16 statusHandle; 128 u16 descHandle; 129 130 u8 gainStateValue; 131 u8 gainStateMute; 132 u8 gainStateMode; 133 u8 gainStateCount; 134 135 u8 gainPropeUnit; 136 u8 gainPropeMin; 137 u8 gainPropeMax; 138 u8 reserve1; 139 140 u8 gainType; 141 u8 gainStatus; 142 u8 stateCCC; 143 u8 statusCCC; 144 145 #if (BLC_AUDIO_AICS_DESC_ENABLE) 146 u32 descLen; 147 u8 desc[BLC_AUDIO_AICS_DESC_SIZE]; 148 #endif 149 } blt_audio_aics_t; 150 #endif // BLC_AUDIO_AICS_ENABLE 151 #if (BLC_AUDIO_VOCS_ENABLE) 152 typedef struct { 153 u16 flags; 154 u16 reserve; 155 156 u16 sHandle; 157 u16 eHandle; 158 159 u16 stateHandle; 160 u16 ctrlHandle; 161 u16 locaHandle; 162 u16 descHandle; 163 164 u8 counter; 165 u8 stateCCC; 166 u16 voffset; 167 168 u32 location; 169 170 #if (BLC_AUDIO_VOCS_DESC_ENABLE) 171 u32 descLen; 172 u8 desc[BLC_AUDIO_VOCS_DESC_SIZE]; 173 #endif 174 } blt_audio_vocs_t; 175 #endif // BLC_AUDIO_VOCS_ENABLE 176 177 #if (BLC_AUDIO_PACP_ENABLE) 178 typedef struct { 179 u16 flags; 180 u16 resv0; 181 u8 sinkPacLen; 182 u8 srcPacLen; 183 u16 avaHandle; 184 u16 srcLcaHandle; 185 u16 sinkLcaHandle; 186 u8 *pSrcPac; 187 u8 *pSrcLca; // source location 188 u8 *pSinkPac; 189 u8 *pSinkLca; // sink location 190 u8 *pAvaCtx; // avaliable Context 191 u8 *pSupCtx; // supported Context 192 } blt_audio_pacpCtrl_t; 193 #endif // #if (BLC_AUDIO_PACP_ENABLE) 194 #if (BLC_AUDIO_ASCP_ENABLE) 195 typedef struct { // 36Bytes 196 // Profile Param 16Byte 197 u8 codecId[5]; 198 u8 direction; 199 u8 frequency; 200 u8 duration; 201 u16 context; // Metadata 202 u16 frameOcts; 203 u32 location; 204 205 // Link Layer Param 16Bytes 206 u8 cigID; 207 u8 cisID; 208 u8 PHY; 209 u8 RTN; // Retransmission_Number 210 u16 maxSDU; 211 u16 latency; 212 u8 framing; 213 u8 resv000; 214 u8 delay[3]; 215 u8 interval[3]; 216 } blt_audio_aseParam_t; 217 218 typedef struct { // 4Bytes 219 u16 attHandle; 220 u16 cisHandle; 221 u16 flags; // Refer to BLT_AUDIO_ASE_FLAGS_ENUM 222 u16 ready; 223 u8 aseID; 224 u8 state; // Refer to BLT_AUDIO_ASE_STATE_ENUM 225 u16 reserve; 226 u8 *pAseCCC; 227 blt_audio_aseParam_t param; 228 } blt_audio_ascpAse_t; 229 230 typedef struct { 231 u8 flags; // For client, this is SdpExFlags. 232 u8 aseCount; 233 u16 ctrlHandle; 234 blt_audio_ascpAse_t ase[BLC_AUDIO_ASE_PER_HANDLE]; 235 } blt_audio_ascpCtrl_t; 236 #endif // #if (BLC_AUDIO_ASCP_ENABLE) 237 238 #if (BLC_AUDIO_CSIP_ENABLE) 239 typedef struct { 240 u8 flags; 241 u8 isInLock; // Is Inner Lock 242 u8 sdpFlags; 243 u8 reserve0; 244 u32 lockTimer; 245 u32 lockTimeout; // us 246 247 u16 sirkHandle; 248 u16 sizeHandle; 249 u16 lockHandle; 250 u16 rankHandle; 251 252 u8 size; 253 u8 lock; 254 u8 rank; 255 u8 lockCCC; 256 u8 SIRK[16]; 257 } blt_audio_csipCtrl_t; 258 #endif // #if (BLC_AUDIO_CSIP_ENABLE) 259 #if (BLC_AUDIO_MICP_ENABLE) 260 typedef struct { 261 u16 flags; 262 u16 sdpFlags; 263 u8 aicsCount; 264 u8 sdpCount; 265 u8 muteCCC; 266 u8 muteValue; 267 u16 reserve01; 268 u16 muteHandle; 269 #if (BLC_AUDIO_MICS_AICS_ENABLE) 270 blt_audio_aics_t aics[BLC_AUDIO_MICS_AICS_COUNT]; 271 #endif 272 } blt_audio_micpCtrl_t; 273 #endif // #if (BLC_AUDIO_MICP_ENABLE) 274 275 #if (BLC_AUDIO_VCP_ENABLE) 276 typedef struct { 277 u16 flags; 278 u16 sdpFlags; 279 u8 sdpCount; 280 u8 aicsCount; 281 u8 vocsCount; 282 u8 flagCCC; 283 u8 flagValue; 284 u8 reserve00; 285 u16 statHandle; 286 u16 flagHandle; 287 u16 ctrlHandle; 288 struct { 289 u8 mute; 290 u8 volume; 291 u8 counter; 292 u8 stateCCC; 293 } state; 294 #if (BLC_AUDIO_VCS_AICS_ENABLE) 295 blt_audio_aics_t aics[BLC_AUDIO_VCS_AICS_COUNT]; 296 #endif 297 #if (BLC_AUDIO_VOCS_ENABLE) 298 blt_audio_vocs_t vocs[BLC_AUDIO_VCS_VOCS_COUNT]; 299 #endif // BLC_AUDIO_VOCS_ENABLE 300 } blt_audio_vcpCtrl_t; 301 #endif // #if (BLC_AUDIO_VCP_ENABLE) 302 303 #if (BLC_AUDIO_MCP_ENABLE) 304 typedef struct { 305 u16 flags; 306 u8 enable; 307 u8 serial; 308 u8 isValid; 309 u8 cpOpcode; // Control Point Opcode 310 u8 resultCode; 311 u8 mediaState; 312 u8 trackIsStart; 313 u8 reserve000; 314 u16 playNameHandle; 315 u16 trackChangedHandle; 316 u16 trackTitleHandle; 317 u16 trackDurationHandle; 318 u16 trackPositionHandle; 319 u16 mediaStateHandle; 320 u16 mediaCtrlHandle; 321 u16 opcodesSuppHandle; 322 u16 CCIDHandle; 323 324 u16 trackDurationValue; 325 u32 trackPositionValue; // Should be in [0,trackDurationValue] 326 327 #if (BLC_AUDIO_MCS_EXTEND_SUPPORT_ENABLE) 328 u8 seekingSpeedValue; 329 u8 searchContrlStatus; 330 u16 seekingSpeedHandle; 331 u16 searchControlHandle; 332 u16 searchResultHandle; 333 u8 searchObjectID[6]; 334 #endif 335 } blt_audio_mcpCtrl_t; 336 #endif // BLC_AUDIO_MCP_ENABLE 337 338 // #define CHARACTERISTIC_UUID_TBS_PROVIDER_NAME //M Mandatory:Read, Notify; Optional: 339 // #define CHARACTERISTIC_UUID_TBS_CALLER_IDENTIFIER //M Mandatory:Read; Optional: 340 // #define CHARACTERISTIC_UUID_TBS_TECHNOLOGY //M Mandatory:Read, Notify; Optional: 341 // #define CHARACTERISTIC_UUID_TBS_URI_LIST //M Mandatory:Read; Optional:Notify 342 // #define CHARACTERISTIC_UUID_TBS_CURRENT_CALL_LIST //M Mandatory:Read, Notify; Optional: 343 // #define CHARACTERISTIC_UUID_TBS_CCID //M Mandatory:Read; Optional: 344 // #define CHARACTERISTIC_UUID_TBS_STATUS_FLAGS //M Mandatory:Read, Notify; Optional: 345 // #define CHARACTERISTIC_UUID_TBS_CALL_STATE //M Mandatory:Read, Notify; Optional: 346 // #define CHARACTERISTIC_UUID_TBS_CALL_CONTROL_POINT //M Mandatory:Write, Write Without Response, Notify; Optional: 347 // #define CHARACTERISTIC_UUID_TBS_CCP_OPTIONAL_OPCODES //M Mandatory:Read; Optional: 348 // #define CHARACTERISTIC_UUID_TBS_TERMINATIONO_REASON //M Mandatory:Notify; Optional: 349 // #define CHARACTERISTIC_UUID_TBS_INCOMING_CALL //M Mandatory:Read, Notify; Optional: 350 351 #if (BLC_AUDIO_TBS_ENABLE) 352 typedef struct { 353 u8 flags; 354 u8 index; 355 u8 state; 356 u8 callFlags; 357 u8 reserve001; 358 u8 termReason; 359 360 u8 uriLen; 361 u8 nameLen; 362 u8 uri[BLC_AUDIO_TBS_URL_MAX_LEN]; 363 u8 name[BLC_AUDIO_TBS_NAME_MAX_LEN]; 364 } blt_audio_tbsCall_t; 365 366 typedef struct { 367 u16 flags; 368 u8 cpOpcode; // Control Point Opcode 369 u8 callIndex; 370 u8 resultCode; 371 u8 callCount; 372 u16 reserve01; 373 u16 CCIDHandle; 374 u16 callCtrlHandle; 375 u16 inCallHandle; 376 u16 provNameHandle; 377 u16 callerIDHandle; 378 u16 callStateHandle; 379 u16 bearerTechHandle; 380 u16 CCPOpcodesHandle; 381 u16 termReasonHandle; 382 u16 curCallListHandle; 383 blt_audio_tbsCall_t call[BLC_AUDIO_TBS_CALL_COUNT]; 384 385 #if (BLC_AUDIO_TBS_EXTEND_SUPPORT_ENABLE) 386 u8 signaleStrengthValue; 387 u8 provNameLength; 388 u8 bearerTechValue; 389 u8 reserver0002; 390 u16 statusFlagsValue; 391 u16 statusFlagsHandle; 392 393 u8 provName[BLC_AUDIO_TBS_NAME_MAX_LEN]; 394 u16 inCallURIHandle; 395 u16 signaleStrengthHandle; 396 u16 signaleStrengthReportHandle; 397 u16 callFriendlyNameHandle; 398 #endif 399 } blt_audio_tbpCtrl_t; 400 #endif // BLC_AUDIO_TBS_ENABLE 401 #if (BLC_AUDIO_OTP_ENABLE) 402 #define BLC_AUDIO_OTP_FEATURE_BUFFER_LEN 64 403 #define BLC_AUDIO_OTP_NAME_BUFFER_LEN 64 404 #define BLC_AUDIO_OTP_FILTER_BUFFER_LEN 64 405 typedef struct { 406 u16 flags; 407 408 u8 oacpOpcode; 409 u8 oacpStatus; 410 411 u16 featureHandle; 412 u16 objectNameHandle; 413 u16 objectTypeHandle; 414 u16 objectSizeHandle; 415 u16 objectPropertiesHandle; 416 u16 objectActionCPHandle; 417 418 u8 featureLength; 419 u8 objectNameLength; 420 u16 objectTypeValue; 421 u32 objectSizeValue0; 422 u32 objectSizeValue1; 423 u32 objectPropertiesValue; 424 u8 featureValue[BLC_AUDIO_OTP_FEATURE_BUFFER_LEN]; 425 u8 objectNameValue[BLC_AUDIO_OTP_NAME_BUFFER_LEN]; 426 427 #if (BLC_AUDIO_OTS_EXTEND_SUPPORT_ENABLE) 428 u16 firstCreatedHandle; 429 u16 lastCreatedHandle; 430 u16 objectIDHandle; 431 u16 objectListCPHandle; 432 u16 listFilterHandle; 433 u16 objectChangedHandle; 434 435 u8 listFilterLength; 436 u8 reserve001; 437 u8 olcpOpcode; 438 u8 olcpStatus; 439 440 u8 firstCreatedValue[8]; // Valid:7 441 u8 lastCreatedValue[8]; // Valid:7 442 u8 objectIDValue[8]; // Valid:6 443 u8 listFilterValue[BLC_AUDIO_OTP_FILTER_BUFFER_LEN]; 444 #endif // BLC_AUDIO_OTS_EXTEND_SUPPORT_ENABLE 445 } blt_audio_otpCtrl_t; 446 #endif // BLC_AUDIO_OTP_ENABLE 447 448 typedef struct { 449 u8 role; // Refer to BLC_AUDIO_ROLE_ENUM 450 u8 conn; // True if used, false if not used 451 u16 busy; // Refer to BLT_AUDIO_BUSY_ENUM 452 u16 handle; // Connect Handle 453 u16 gFlags; // Global flags (this is not change). Refer to BLT_AUDIO_GFLAGS_ENUM 454 BlcAudioEventCB evtCB; 455 #if (BLC_AUDIO_PACP_ENABLE) 456 blt_audio_pacpCtrl_t pacp; 457 #endif 458 #if (BLC_AUDIO_ASCP_ENABLE) 459 blt_audio_ascpCtrl_t ascp; 460 #endif 461 #if (BLC_AUDIO_CSIP_ENABLE) 462 blt_audio_csipCtrl_t csip; 463 #endif 464 #if (BLC_AUDIO_MICP_ENABLE) 465 blt_audio_micpCtrl_t micp; 466 #endif 467 #if (BLC_AUDIO_VCP_ENABLE) 468 blt_audio_vcpCtrl_t vcp; 469 #endif 470 #if (BLC_AUDIO_MCP_ENABLE) 471 blt_audio_mcpCtrl_t mcp; 472 #endif 473 #if (BLC_AUDIO_TBS_ENABLE) 474 blt_audio_tbpCtrl_t tbp; 475 #endif 476 #if (BLC_AUDIO_OTS_ENABLE) 477 blt_audio_otpCtrl_t otp; 478 #endif 479 480 #if (BLC_AUDIO_SERVER_SDP_ENABLE) 481 blt_audio_sdp_t sdp; 482 #if !(BLC_AUDIO_MCP_ROLE_SWICH_ENABLE) 483 #if (BLC_AUDIO_MCS_ENABLE) 484 blt_audio_srv_t mcsSrv; 485 #endif // BLC_AUDIO_MCS_ENABLE 486 #endif // BLC_AUDIO_MCP_ROLE_SWICH_ENABLE 487 #if !(BLC_AUDIO_TBP_ROLE_SWICH_ENABLE) 488 #if (BLC_AUDIO_TBS_ENABLE) 489 blt_audio_srv_t tbsSrv; 490 #endif // BLC_AUDIO_TBS_ENABLE 491 #endif // BLC_AUDIO_TBP_ROLE_SWICH_ENABLE 492 #if !(BLC_AUDIO_OTP_ROLE_SWICH_ENABLE) 493 #if (BLC_AUDIO_OTS_ENABLE) 494 blt_audio_srv_t otsSrv; 495 #endif // BLC_AUDIO_OTS_ENABLE 496 #endif // BLC_AUDIO_OTP_ROLE_SWICH_ENABLE 497 #endif 498 } blt_audio_server_t; 499 500 typedef struct { 501 u8 role; // Refer to BLC_AUDIO_ROLE_ENUM 502 u8 conn; // True if used, false if not used 503 u16 busy; // Refer to BLT_AUDIO_BUSY_ENUM 504 u16 handle; // Connect Handle 505 u16 gFlags; // Global flags. Refer to BLT_AUDIO_GFLAGS_ENUM 506 BlcAudioEventCB evtCB; 507 #if (BLC_AUDIO_PACP_ENABLE) 508 blt_audio_pacpCtrl_t pacp; 509 #endif 510 #if (BLC_AUDIO_ASCP_ENABLE) 511 blt_audio_ascpCtrl_t ascp; 512 #endif 513 #if (BLC_AUDIO_CSIP_ENABLE) 514 blt_audio_csipCtrl_t csip; 515 #endif 516 #if (BLC_AUDIO_MICP_ENABLE) 517 blt_audio_micpCtrl_t micp; 518 #endif 519 #if (BLC_AUDIO_VCP_ENABLE) 520 blt_audio_vcpCtrl_t vcp; 521 #endif 522 #if (BLC_AUDIO_MCP_ENABLE) 523 blt_audio_mcpCtrl_t mcp; 524 #endif 525 #if (BLC_AUDIO_TBS_ENABLE) 526 blt_audio_tbpCtrl_t tbp; 527 #endif 528 #if (BLC_AUDIO_OTS_ENABLE) 529 blt_audio_otpCtrl_t otp; 530 #endif 531 532 #if (BLC_AUDIO_CLIENT_SDP_ENABLE) 533 blt_audio_sdp_t sdp; 534 #if (BLC_AUDIO_PACS_ENABLE) 535 blt_audio_srv_t pacsSrv; 536 #endif // BLC_AUDIO_PACS_ENABLE 537 #if (BLC_AUDIO_ASCS_ENABLE) 538 blt_audio_srv_t ascsSrv; 539 #endif // BLC_AUDIO_ASCS_ENABLE 540 #if (BLC_AUDIO_CSIS_ENABLE) 541 blt_audio_srv_t csisSrv; 542 #endif // BLC_AUDIO_CSIS_ENABLE 543 #if (BLC_AUDIO_MICS_ENABLE) 544 blt_audio_srv_t micsSrv; 545 #endif // BLC_AUDIO_CSIS_ENABLE 546 #if (BLC_AUDIO_VCS_ENABLE) 547 blt_audio_srv_t vcsSrv; 548 #endif // BLC_AUDIO_VCS_ENABLE 549 #if (BLC_AUDIO_MCP_ROLE_SWICH_ENABLE) 550 #if (BLC_AUDIO_MCS_ENABLE) 551 blt_audio_srv_t mcsSrv; 552 #endif // BLC_AUDIO_MCS_ENABLE 553 #endif 554 #if (BLC_AUDIO_TBP_ROLE_SWICH_ENABLE) 555 #if (BLC_AUDIO_TBS_ENABLE) 556 blt_audio_srv_t tbsSrv; 557 #endif // BLC_AUDIO_TBS_ENABLE 558 #endif 559 #if (BLC_AUDIO_OTP_ROLE_SWICH_ENABLE) 560 #if (BLC_AUDIO_OTS_ENABLE) 561 blt_audio_srv_t otsSrv; 562 #endif // BLC_AUDIO_OTS_ENABLE 563 #endif 564 #endif 565 } blt_audio_client_t; 566 567 typedef struct { 568 u8 role; // Refer to BLC_AUDIO_ROLE_ENUM 569 u8 conn; // True if used, false if not used 570 u16 busy; // Refer to BLT_AUDIO_BUSY_ENUM 571 u16 handle; // Connect Handle 572 u16 gFlags; // Global flags. Refer to BLT_AUDIO_GFLAGS_ENUM 573 BlcAudioEventCB evtCB; 574 #if (BLC_AUDIO_PACP_ENABLE) 575 blt_audio_pacpCtrl_t pacp; 576 #endif 577 #if (BLC_AUDIO_ASCP_ENABLE) 578 blt_audio_ascpCtrl_t ascp; 579 #endif 580 #if (BLC_AUDIO_CSIP_ENABLE) 581 blt_audio_csipCtrl_t csip; 582 #endif 583 #if (BLC_AUDIO_MICP_ENABLE) 584 blt_audio_micpCtrl_t micp; 585 #endif 586 #if (BLC_AUDIO_VCP_ENABLE) 587 blt_audio_vcpCtrl_t vcp; 588 #endif 589 #if (BLC_AUDIO_MCP_ENABLE) 590 blt_audio_mcpCtrl_t mcp; 591 #endif 592 #if (BLC_AUDIO_TBS_ENABLE) 593 blt_audio_tbpCtrl_t tbp; 594 #endif 595 #if (BLC_AUDIO_OTS_ENABLE) 596 blt_audio_otpCtrl_t otp; 597 #endif 598 } blt_audio_handle_t; 599 600 typedef struct { 601 int (*Init)(blt_audio_handle_t *pHandle); 602 int (*GattIn)(blt_audio_handle_t *pHandle, u8 *pPkt); 603 int (*SetServ)(blt_audio_handle_t *pHandle, attribute_t *pService); 604 void (*SetConn)(blt_audio_handle_t *pHandle, BLC_AUDIO_STATE_ENUM state); 605 void (*Process)(blt_audio_handle_t *pHandle); 606 } blt_audio_func_t; 607 608 #endif // BLC_AUDIO_PROFILE_EN 609 610 #endif // _AUDIO_INNER_H_ 611