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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
/*****************************************************************************
**
** Name: a2d_sbc.h
**
** Description:Interface to low complexity subband codec (SBC)
**
** Copyright (c) 2000-2004, WIDCOMM Inc., All Rights Reserved.
** WIDCOMM Bluetooth Core. Proprietary and confidential.
**
*****************************************************************************/
#ifndef A2D_SBC_H
#define A2D_SBC_H
/*****************************************************************************
** Constants
*****************************************************************************/
/* the length of the SBC Media Payload header. */
#define A2D_SBC_MPL_HDR_LEN 1
/* the LOSC of SBC media codec capabilitiy */
#define A2D_SBC_INFO_LEN 6
/* for Codec Specific Information Element */
#define A2D_SBC_IE_SAMP_FREQ_MSK 0xF0 /* b7-b4 sampling frequency */
#define A2D_SBC_IE_SAMP_FREQ_16 0x80 /* b7:16 kHz */
#define A2D_SBC_IE_SAMP_FREQ_32 0x40 /* b6:32 kHz */
#define A2D_SBC_IE_SAMP_FREQ_44 0x20 /* b5:44.1kHz */
#define A2D_SBC_IE_SAMP_FREQ_48 0x10 /* b4:48 kHz */
#define A2D_SBC_IE_CH_MD_MSK 0x0F /* b3-b0 channel mode */
#define A2D_SBC_IE_CH_MD_MONO 0x08 /* b3: mono */
#define A2D_SBC_IE_CH_MD_DUAL 0x04 /* b2: dual */
#define A2D_SBC_IE_CH_MD_STEREO 0x02 /* b1: stereo */
#define A2D_SBC_IE_CH_MD_JOINT 0x01 /* b0: joint stereo */
#define A2D_SBC_IE_BLOCKS_MSK 0xF0 /* b7-b4 number of blocks */
#define A2D_SBC_IE_BLOCKS_4 0x80 /* 4 blocks */
#define A2D_SBC_IE_BLOCKS_8 0x40 /* 8 blocks */
#define A2D_SBC_IE_BLOCKS_12 0x20 /* 12blocks */
#define A2D_SBC_IE_BLOCKS_16 0x10 /* 16blocks */
#define A2D_SBC_IE_SUBBAND_MSK 0x0C /* b3-b2 number of subbands */
#define A2D_SBC_IE_SUBBAND_4 0x08 /* b3: 4 */
#define A2D_SBC_IE_SUBBAND_8 0x04 /* b2: 8 */
#define A2D_SBC_IE_ALLOC_MD_MSK 0x03 /* b1-b0 allocation mode */
#define A2D_SBC_IE_ALLOC_MD_S 0x02 /* b1: SNR */
#define A2D_SBC_IE_ALLOC_MD_L 0x01 /* b0: loundess */
#define A2D_SBC_IE_MIN_BITPOOL 2
#define A2D_SBC_IE_MAX_BITPOOL 250
/* for media payload header */
#define A2D_SBC_HDR_F_MSK 0x80
#define A2D_SBC_HDR_S_MSK 0x40
#define A2D_SBC_HDR_L_MSK 0x20
#define A2D_SBC_HDR_NUM_MSK 0x0F
/*****************************************************************************
** Type Definitions
*****************************************************************************/
/* data type for the SBC Codec Information Element*/
typedef struct
{
UINT8 samp_freq; /* Sampling frequency */
UINT8 ch_mode; /* Channel mode */
UINT8 block_len; /* Block length */
UINT8 num_subbands; /* Number of subbands */
UINT8 alloc_mthd; /* Allocation method */
UINT8 max_bitpool; /* Maximum bitpool */
UINT8 min_bitpool; /* Minimum bitpool */
} tA2D_SBC_CIE;
/*****************************************************************************
** External Function Declarations
*****************************************************************************/
#ifdef __cplusplus
extern "C"
{
#endif
/******************************************************************************
**
** Function A2D_SbcChkFrInit
**
** Description check if need to init the descramble control block.
**
** Returns nothing.
******************************************************************************/
A2D_API extern void A2D_SbcChkFrInit(UINT8 *p_pkt);
/******************************************************************************
**
** Function A2D_SbcDescramble
**
** Description descramble the packet.
**
** Returns nothing.
******************************************************************************/
A2D_API extern void A2D_SbcDescramble(UINT8 *p_pkt, UINT16 len);
/******************************************************************************
**
** Function A2D_BldSbcInfo
**
** Description This function is called by an application to build
** the SBC Media Codec Capabilities byte sequence
** beginning from the LOSC octet.
** Input Parameters:
** media_type: Indicates Audio, or Multimedia.
**
** p_ie: The SBC Codec Information Element information.
**
** Output Parameters:
** p_result: the resulting codec info byte sequence.
**
** Returns A2D_SUCCESS if function execution succeeded.
** Error status code, otherwise.
******************************************************************************/
A2D_API extern tA2D_STATUS A2D_BldSbcInfo(UINT8 media_type, tA2D_SBC_CIE *p_ie,
UINT8 *p_result);
/******************************************************************************
**
** Function A2D_ParsSbcInfo
**
** Description This function is called by an application to parse
** the SBC Media Codec Capabilities byte sequence
** beginning from the LOSC octet.
** Input Parameters:
** p_info: the byte sequence to parse.
**
** for_caps: TRUE, if the byte sequence is for get capabilities response.
**
** Output Parameters:
** p_ie: The SBC Codec Information Element information.
**
** Returns A2D_SUCCESS if function execution succeeded.
** Error status code, otherwise.
******************************************************************************/
A2D_API extern tA2D_STATUS A2D_ParsSbcInfo(tA2D_SBC_CIE *p_ie, UINT8 *p_info,
BOOLEAN for_caps);
/******************************************************************************
**
** Function A2D_BldSbcMplHdr
**
** Description This function is called by an application to parse
** the SBC Media Payload header.
** Input Parameters:
** frag: 1, if fragmented. 0, otherwise.
**
** start: 1, if the starting packet of a fragmented frame.
**
** last: 1, if the last packet of a fragmented frame.
**
** num: If frag is 1, this is the number of remaining fragments
** (including this fragment) of this frame.
** If frag is 0, this is the number of frames in this packet.
**
** Output Parameters:
** p_dst: the resulting media payload header byte sequence.
**
** Returns void.
******************************************************************************/
A2D_API extern void A2D_BldSbcMplHdr(UINT8 *p_dst, BOOLEAN frag, BOOLEAN start,
BOOLEAN last, UINT8 num);
/******************************************************************************
**
** Function A2D_ParsSbcMplHdr
**
** Description This function is called by an application to parse
** the SBC Media Payload header.
** Input Parameters:
** p_src: the byte sequence to parse..
**
** Output Parameters:
** frag: 1, if fragmented. 0, otherwise.
**
** start: 1, if the starting packet of a fragmented frame.
**
** last: 1, if the last packet of a fragmented frame.
**
** num: If frag is 1, this is the number of remaining fragments
** (including this fragment) of this frame.
** If frag is 0, this is the number of frames in this packet.
**
** Returns void.
******************************************************************************/
A2D_API extern void A2D_ParsSbcMplHdr(UINT8 *p_src, BOOLEAN *p_frag,
BOOLEAN *p_start, BOOLEAN *p_last,
UINT8 *p_num);
#ifdef __cplusplus
}
#endif
#endif /* A2D_SBC_H */
|