• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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