• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2003-2012 Broadcom Corporation
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 
19 /******************************************************************************
20  *
21  *  This file contains compile-time configurable constants for the device
22  *  manager.
23  *
24  ******************************************************************************/
25 
26 #include "bt_target.h"
27 #include "bta_sys.h"
28 #include "bta_api.h"
29 #include "bta_dm_int.h"
30 #include "bta_jv_api.h"
31 
32 #ifndef BTA_DM_LINK_POLICY_SETTINGS
33 #define BTA_DM_LINK_POLICY_SETTINGS    (HCI_ENABLE_MASTER_SLAVE_SWITCH | HCI_ENABLE_HOLD_MODE | HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE)
34 #endif
35 
36 /* page timeout in 625uS */
37 #ifndef BTA_DM_PAGE_TIMEOUT
38 #define BTA_DM_PAGE_TIMEOUT    8192
39 #endif
40 
41 /* link supervision timeout in 625uS (5 secs) */
42 #ifndef BTA_DM_LINK_TIMEOUT
43 #define BTA_DM_LINK_TIMEOUT    8000
44 #endif
45 
46 /* TRUE to avoid scatternet when av is streaming (be the master) */
47 #ifndef BTA_DM_AVOID_SCATTER_A2DP
48 #define BTA_DM_AVOID_SCATTER_A2DP    TRUE
49 #endif
50 
51 /* For Insight, PM cfg lookup tables are runtime configurable (to allow tweaking of params for power consumption measurements) */
52 #ifndef BTE_SIM_APP
53 #define tBTA_DM_PM_TYPE_QUALIFIER   const
54 #else
55 #define tBTA_DM_PM_TYPE_QUALIFIER
56 #endif
57 
58 
59 const tBTA_DM_CFG bta_dm_cfg =
60 {
61     /* mobile phone COD */
62     BTA_DM_COD,
63     /* link policy settings */
64     BTA_DM_LINK_POLICY_SETTINGS,
65     /* page timeout in 625uS */
66     BTA_DM_PAGE_TIMEOUT,
67     /* link supervision timeout in 625uS*/
68     BTA_DM_LINK_TIMEOUT,
69     /* TRUE to avoid scatternet when av is streaming (be the master) */
70     BTA_DM_AVOID_SCATTER_A2DP
71 };
72 
73 #ifndef BTA_DM_SCATTERNET
74 /* By default, allow partial scatternet */
75 #define BTA_DM_SCATTERNET BTA_DM_PARTIAL_SCATTERNET
76 #endif
77 
78 #ifndef BTA_HH_ROLE
79 /* By default, do not specify HH role (backward compatibility) */
80 #define BTA_HH_ROLE BTA_ANY_ROLE
81 #endif
82 
83 #ifndef BTA_AV_ROLE
84 /* By default, AV role (backward BTA_MASTER_ROLE_PREF) */
85 #define BTA_AV_ROLE BTA_MASTER_ROLE_PREF
86 #endif
87 
88 #define BTA_DM_NUM_RM_ENTRY    4
89 
90 /* appids for PAN used by insight sample application
91    these have to be same as defined in btui_int.h */
92 #define BTUI_PAN_ID_PANU         0
93 #define BTUI_PAN_ID_NAP          1
94 #define BTUI_PAN_ID_GN           2
95 
96 /* First element is always for SYS:
97    app_id = # of entries table, cfg is
98    device scatternet support */
99 const tBTA_DM_RM bta_dm_rm_cfg[] =
100 {
101     {BTA_ID_SYS, BTA_DM_NUM_RM_ENTRY, BTA_DM_SCATTERNET},
102     {BTA_ID_PAN, BTUI_PAN_ID_NAP, BTA_MASTER_ROLE_ONLY},
103     {BTA_ID_PAN, BTUI_PAN_ID_GN, BTA_MASTER_ROLE_ONLY},
104     {BTA_ID_HH,  BTA_ALL_APP_ID, BTA_HH_ROLE},
105     {BTA_ID_AV,  BTA_ALL_APP_ID, BTA_AV_ROLE}
106 };
107 
108 
109 tBTA_DM_CFG *p_bta_dm_cfg = (tBTA_DM_CFG *)&bta_dm_cfg;
110 
111 tBTA_DM_RM *p_bta_dm_rm_cfg = (tBTA_DM_RM *)&bta_dm_rm_cfg;
112 
113 #if BLE_INCLUDED == TRUE
114 #  define BTA_DM_NUM_PM_ENTRY         22  /* number of entries in bta_dm_pm_cfg except the first */
115 #  define BTA_DM_NUM_PM_SPEC          14  /* number of entries in bta_dm_pm_spec */
116 #else
117 #  define BTA_DM_NUM_PM_ENTRY         20  /* number of entries in bta_dm_pm_cfg except the first */
118 #  define BTA_DM_NUM_PM_SPEC          12  /* number of entries in bta_dm_pm_spec */
119 #endif
120 
121 tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_CFG bta_dm_pm_cfg[BTA_DM_NUM_PM_ENTRY + 1] =
122 {
123   {BTA_ID_SYS, BTA_DM_NUM_PM_ENTRY, 0},  /* reserved: specifies length of this table. */
124   {BTA_ID_AG,  BTA_ALL_APP_ID,      0},  /* ag uses first spec table for app id 0 */
125   {BTA_ID_CT,  1,                   1},  /* ct (BTA_ID_CT,APP ID=1) spec table */
126   {BTA_ID_CG,  BTA_ALL_APP_ID,      1},  /* cg resue ct spec table */
127   {BTA_ID_DG,  BTA_ALL_APP_ID,      2},  /* dg spec table */
128   {BTA_ID_AV,  BTA_ALL_APP_ID,      4},  /* av spec table */
129   {BTA_ID_FTC, BTA_ALL_APP_ID,      6},  /* ftc spec table */
130   {BTA_ID_FTS, BTA_ALL_APP_ID,      7},  /* fts spec table */
131   {BTA_ID_HD,  BTA_ALL_APP_ID,      3},  /* hd spec table */
132   {BTA_ID_HH,  BTA_ALL_APP_ID,      5},  /* hh spec table */
133   {BTA_ID_PBC, BTA_ALL_APP_ID,      2},  /* reuse dg spec table */
134   {BTA_ID_PBS, BTA_ALL_APP_ID,      7},  /* reuse fts spec table */
135   {BTA_ID_OPC, BTA_ALL_APP_ID,      6},  /* reuse ftc spec table */
136   {BTA_ID_OPS, BTA_ALL_APP_ID,      7},  /* reuse fts spec table */
137   {BTA_ID_MSE, BTA_ALL_APP_ID,      7},  /* reuse fts spec table */
138   {BTA_ID_JV,  BTA_JV_PM_ID_1,      6},  /* app BTA_JV_PM_ID_1, reuse ftc spec table */
139   {BTA_ID_JV,  BTA_ALL_APP_ID,      7},  /* reuse fts spec table */
140   {BTA_ID_HL,  BTA_ALL_APP_ID,      8},  /* reuse fts spec table */
141   {BTA_ID_HS,  BTA_ALL_APP_ID,      9},  /* HS spec table */
142   {BTA_ID_PAN, BTUI_PAN_ID_PANU,   10},  /* PANU spec table */
143   {BTA_ID_PAN, BTUI_PAN_ID_NAP,    11}   /* NAP spec table */
144 #if BLE_INCLUDED == TRUE
145   ,{BTA_ID_GATTC,  BTA_ALL_APP_ID,  12}   /* gattc spec table */
146   ,{BTA_ID_GATTS,  BTA_ALL_APP_ID,  13}  /* gatts spec table */
147 #endif
148 };
149 
150 tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] =
151 {
152   /* AG */
153  {
154   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                           /* allow park & sniff */
155 #if (BTM_SSR_INCLUDED == TRUE)
156   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
157 #endif
158   {
159       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff  */
160       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},   /* conn close  */
161       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app open */
162       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app close */
163       {{BTA_DM_PM_SNIFF_SCO_OPEN_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */
164       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff  */
165       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* idle */
166       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},   /* busy */
167       {{BTA_DM_PM_RETRY,  5000},   {BTA_DM_PM_NO_ACTION, 0}}    /* mode change retry */
168   }
169  },
170 
171   /* CT */
172  {
173   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                           /* allow park & sniff */
174 #if (BTM_SSR_INCLUDED == TRUE)
175   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
176 #endif
177   {
178       {{BTA_DM_PM_PARK,   5000},  {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  park */
179       {{BTA_DM_PM_NO_PREF,   0},  {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
180       {{BTA_DM_PM_NO_ACTION, 0},  {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
181       {{BTA_DM_PM_NO_ACTION, 0},  {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
182       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open sniff */
183       {{BTA_DM_PM_PARK,   5000},  {BTA_DM_PM_NO_ACTION, 0}},    /* sco close  park */
184       {{BTA_DM_PM_NO_ACTION, 0},  {BTA_DM_PM_NO_ACTION, 0}},    /* idle */
185       {{BTA_DM_PM_NO_ACTION, 0},  {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
186       {{BTA_DM_PM_RETRY,  5000},  {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
187   }
188  },
189 
190   /* DG */
191  {
192   (BTA_DM_PM_ACTIVE),                                             /* no power saving mode allowed */
193 #if (BTM_SSR_INCLUDED == TRUE)
194   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
195 #endif
196   {
197       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
198       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
199       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
200       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
201       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
202       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
203       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* idle */
204       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
205       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
206   }
207  },
208 
209    /* HD */
210  {
211   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                            /* allow park & sniff */
212 #if (BTM_SSR_INCLUDED == TRUE)
213   (BTA_DM_PM_SSR3),                                              /* the SSR entry */
214 #endif
215   {
216       {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open  sniff */
217       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
218       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
219       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
220       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
221       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
222       {{BTA_DM_PM_SNIFF_HD_IDLE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
223       {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */
224       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
225   }
226  },
227 
228    /* AV */
229  {
230   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
231 #if (BTM_SSR_INCLUDED == TRUE)
232   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
233 #endif
234   {
235       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open  sniff */
236       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
237       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
238       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
239       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
240       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
241       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
242       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
243       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
244   }
245  },
246 
247   /* HH */
248  {
249   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                            /* allow park & sniff */
250 #if (BTM_SSR_INCLUDED == TRUE)
251   (BTA_DM_PM_SSR1),                                              /* the SSR entry */
252 #endif
253   {
254       {{BTA_DM_PM_SNIFF_HH_OPEN_IDX, BTA_DM_PM_HH_OPEN_DELAY},{BTA_DM_PM_NO_ACTION, 0}}, /* conn open  sniff */
255       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
256       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
257       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
258       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
259       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close, used for HH suspend   */
260       {{BTA_DM_PM_SNIFF_HH_IDLE_IDX, BTA_DM_PM_HH_IDLE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
261       {{BTA_DM_PM_SNIFF_HH_ACTIVE_IDX, BTA_DM_PM_HH_ACTIVE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */
262       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
263   }
264  },
265 
266   /* FTC, OPC */
267  {
268   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
269 #if (BTM_SSR_INCLUDED == TRUE)
270   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
271 #endif
272   {
273       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
274       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
275       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
276       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
277       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
278       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
279       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
280       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
281       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
282   }
283  },
284 
285   /* FTS, OPS */
286  {
287   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
288 #if (BTM_SSR_INCLUDED == TRUE)
289   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
290 #endif
291   {
292       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
293       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
294       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
295       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
296       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
297       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
298       {{BTA_DM_PM_SNIFF_A2DP_IDX, BTA_FTS_OPS_IDLE_TO_SNIFF_DELAY_MS}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
299       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
300       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
301   }
302  },
303 
304    /* HL */
305  {
306   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
307 #if (BTM_SSR_INCLUDED == TRUE)
308   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
309 #endif
310   {
311       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff  */
312       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},   /* conn close  */
313       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app open */
314       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app close */
315       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* sco open, active */
316       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* sco close sniff  */
317       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* idle */
318       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},   /* busy */
319       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}    /* mode change retry */
320   }
321  },
322 
323   /* PANU */
324  {
325   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
326 #if (BTM_SSR_INCLUDED == TRUE)
327   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
328 #endif
329   {
330       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
331       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
332       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
333       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
334       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
335       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
336       {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
337       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
338       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
339   }
340  },
341 
342   /* NAP */
343  {
344   (BTA_DM_PM_SNIFF),                                             /* allow sniff */
345 #if (BTM_SSR_INCLUDED == TRUE)
346   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
347 #endif
348   {
349       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
350       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
351       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
352       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
353       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
354       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
355       {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
356       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
357       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}}     /* mode change retry */
358   }
359  },
360 
361   /* HS */
362  {
363   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                           /* allow park & sniff */
364 #if (BTM_SSR_INCLUDED == TRUE)
365   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
366 #endif
367   {
368       {{BTA_DM_PM_SNIFF,  7000},   {BTA_DM_PM_NO_ACTION, 0}},   /* conn open sniff  */
369       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},   /* conn close  */
370       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app open */
371       {{BTA_DM_PM_NO_ACTION, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* app close */
372       {{BTA_DM_PM_SNIFF3, 7000},   {BTA_DM_PM_NO_ACTION, 0}},   /* sco open, active */
373       {{BTA_DM_PM_SNIFF,  7000},   {BTA_DM_PM_NO_ACTION, 0}},   /* sco close sniff  */
374       {{BTA_DM_PM_SNIFF,  7000},   {BTA_DM_PM_NO_ACTION, 0}},   /* idle */
375       {{BTA_DM_PM_ACTIVE,    0},   {BTA_DM_PM_NO_ACTION, 0}},   /* busy */
376       {{BTA_DM_PM_RETRY,  7000},   {BTA_DM_PM_NO_ACTION, 0}}    /* mode change retry */
377   }
378  }
379 #if BLE_INCLUDED == TRUE
380     /* GATTC */
381  ,{
382   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                           /* allow park & sniff */
383 #if (BTM_SSR_INCLUDED == TRUE)
384   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
385 #endif
386   {
387       {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open  active */
388       {{BTA_DM_PM_NO_PREF,    0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
389       {{BTA_DM_PM_ACTIVE,     0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
390       {{BTA_DM_PM_NO_ACTION,  0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
391       {{BTA_DM_PM_NO_ACTION,  0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
392       {{BTA_DM_PM_NO_ACTION,  0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
393       {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */
394       {{BTA_DM_PM_ACTIVE,     0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
395 #if (AMP_INCLUDED == TRUE)
396       {{BTA_DM_PM_NO_ACTION,  0},   {BTA_DM_PM_NO_ACTION, 0}},   /* amp */
397 #endif
398       {{BTA_DM_PM_RETRY,   5000},   {BTA_DM_PM_NO_ACTION, 0}}    /* mode change retry */
399   }
400  }
401     /* GATTS */
402  ,{
403   (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK),                           /* allow park & sniff */
404 #if (BTM_SSR_INCLUDED == TRUE)
405   (BTA_DM_PM_SSR2),                                              /* the SSR entry */
406 #endif
407   {
408       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn open  active */
409       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* conn close  */
410       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app open */
411       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* app close */
412       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco open  */
413       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* sco close   */
414       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* idle */
415       {{BTA_DM_PM_NO_PREF,   0},   {BTA_DM_PM_NO_ACTION, 0}},    /* busy */
416 #if (AMP_INCLUDED == TRUE)
417       {{BTA_DM_PM_NO_PREF, 0},   {BTA_DM_PM_NO_ACTION, 0}},   /* amp */
418 #endif
419       {{BTA_DM_PM_RETRY,  5000},   {BTA_DM_PM_NO_ACTION, 0}}    /* mode change retry */
420   }
421  }
422 
423 #endif
424 
425 #ifdef BTE_SIM_APP      /* For Insight builds only */
426  /* Entries at the end of the pm_spec table are user-defined (runtime configurable),
427     for power consumption experiments.
428     Insight finds the first user-defined entry by looking for the first BTA_DM_PM_NO_PREF.
429     The number of user_defined specs is defined by BTA_SWRAP_UD_PM_SPEC_COUNT */
430  ,
431  {BTA_DM_PM_NO_PREF},               /* pm_spec USER_DEFINED_0 */
432  {BTA_DM_PM_NO_PREF}                /* pm_spec USER_DEFINED_1 */
433 #endif  /* BTE_SIM_APP */
434 };
435 
436 /* Please refer to the SNIFF table definitions in bta_api.h.
437  *
438  * Adding to or Modifying the Table
439  * Additional sniff parameter entries can be added for BTA_DM_PM_SNIFF5 - BTA_DM_PM_SNIFF7.
440  * Overrides of additional table entries can be specified in bdroid_buildcfg.h.  If additional
441  * sniff parameter entries are added or an override of an existing entry is specified in
442  * bdroid_buildcfg.h then the BTA_DM_PM_*_IDX defines in bta_api.h will need to be match the new
443  * ordering.
444  *
445  * Table Ordering
446  * Sniff Table entries must be ordered from highest latency (biggest interval) to lowest latency.
447  * If there is a conflict among the connected services the setting with the lowest latency will
448  * be selected.
449  */
450 tBTA_DM_PM_TYPE_QUALIFIER tBTM_PM_PWR_MD bta_dm_pm_md[] =
451 {
452 /* sniff modes: max interval, min interval, attempt, timeout */
453   {BTA_DM_PM_SNIFF_MAX,  BTA_DM_PM_SNIFF_MIN,  BTA_DM_PM_SNIFF_ATTEMPT,  BTA_DM_PM_SNIFF_TIMEOUT,  BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF - A2DP */
454   {BTA_DM_PM_SNIFF1_MAX, BTA_DM_PM_SNIFF1_MIN, BTA_DM_PM_SNIFF1_ATTEMPT, BTA_DM_PM_SNIFF1_TIMEOUT, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF1 */
455   {BTA_DM_PM_SNIFF2_MAX, BTA_DM_PM_SNIFF2_MIN, BTA_DM_PM_SNIFF2_ATTEMPT, BTA_DM_PM_SNIFF2_TIMEOUT, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF2- HD idle */
456   {BTA_DM_PM_SNIFF3_MAX, BTA_DM_PM_SNIFF3_MIN, BTA_DM_PM_SNIFF3_ATTEMPT, BTA_DM_PM_SNIFF3_TIMEOUT, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF3- SCO open */
457   {BTA_DM_PM_SNIFF4_MAX, BTA_DM_PM_SNIFF4_MIN, BTA_DM_PM_SNIFF4_ATTEMPT, BTA_DM_PM_SNIFF4_TIMEOUT, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF4- HD active*/
458   {BTA_DM_PM_PARK_MAX,   BTA_DM_PM_PARK_MIN,   BTA_DM_PM_PARK_ATTEMPT,   BTA_DM_PM_PARK_TIMEOUT,   BTM_PM_MD_PARK}
459 
460 #ifdef BTE_SIM_APP      /* For Insight builds only */
461   /* Entries at the end of the bta_dm_pm_md table are user-defined (runtime configurable),
462      for power consumption experiments.
463      Insight finds the first user-defined entry by looking for the first 'max=0'.
464      The number of user_defined specs is defined by BTA_SWRAP_UD_PM_DM_COUNT */
465   ,
466   {0},           /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_0 */
467   {0},           /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_0 */
468 
469   {0},           /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_1 */
470   {0}            /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_1 */
471 #endif  /* BTE_SIM_APP */
472 };
473 
474 /* 0=max_lat -> no SSR */
475 /* the smaller of the SSR max latency wins.
476  * the entries in this table must be from highest latency (biggest interval) to lowest latency */
477 #if (BTM_SSR_INCLUDED == TRUE)
478 tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] =
479 {
480     /*max_lat, min_rmt_to, min_loc_to*/
481     {0,      0, 0},     /* BTA_DM_PM_SSR0 - do not use SSR */
482     {0,      0, 2},     /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile,
483                            seting default max latency and min remote timeout as 0,
484                            and always read individual device preference from HH module */
485     {1200,   2, 2},     /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/
486     {360,  160, 2}      /* BTA_DM_PM_SSR3 - HD */
487 };
488 
489 tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec = (tBTA_DM_SSR_SPEC *)&bta_dm_ssr_spec;
490 #endif
491 
492 tBTA_DM_PM_CFG *p_bta_dm_pm_cfg = (tBTA_DM_PM_CFG *)&bta_dm_pm_cfg;
493 tBTA_DM_PM_SPEC *p_bta_dm_pm_spec = (tBTA_DM_PM_SPEC *)&bta_dm_pm_spec;
494 tBTM_PM_PWR_MD *p_bta_dm_pm_md = (tBTM_PM_PWR_MD *)&bta_dm_pm_md;
495 
496 /* The performance impact of EIR packet size
497 **
498 ** When BTM_EIR_DEFAULT_FEC_REQUIRED is TRUE,
499 ** 1 to 17 bytes,    DM1 is used and most robust.
500 ** 18 to 121 bytes,  DM3 is used but impacts inquiry scan time with large number
501 **                    of devices.(almost double with 150 users)
502 ** 122 to 224 bytes, DM5 is used but cause quite big performance loss even with
503 **                    small number of users. so it is not recommended.
504 ** 225 to 240 bytes, DH5 is used without FEC but it not recommended.
505 **                    (same reason of DM5)
506 **
507 ** When BTM_EIR_DEFAULT_FEC_REQUIRED is FALSE,
508 ** 1 to 27 bytes,    DH1 is used but only robust at short range.
509 ** 28 to 183 bytes,  DH3 is used but only robust at short range and impacts inquiry
510 **                    scan time with large number of devices.
511 ** 184 to 240 bytes, DH5 is used but it not recommended.
512 */
513 
514 #if ( BTM_EIR_SERVER_INCLUDED == TRUE )
515 #if (BTA_EIR_CANNED_UUID_LIST == TRUE)
516                                             /* for example */
517 const UINT8 bta_dm_eir_uuid16_list[] = {    0x08, 0x11, /* Headset */
518                                             0x1E, 0x11, /* Handsfree */
519                                             0x0E, 0x11, /* AV Remote Control */
520                                             0x0B, 0x11, /* Audio Sink */
521 };
522 #endif
523 
524 /* Extended Inquiry Response */
525 const tBTA_DM_EIR_CONF bta_dm_eir_cfg =
526 {
527     50,    /* minimum length of local name when it is shortened */
528            /* if length of local name is longer than this and EIR has not enough */
529            /* room for all UUID list then local name is shortened to this length */
530 #if (BTA_EIR_CANNED_UUID_LIST == TRUE)
531     8,
532     (UINT8 *)bta_dm_eir_uuid16_list,
533 #else
534     {   /* mask of UUID list in EIR */
535         0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */
536         0xFFFFFFFF  /* LSB is the first UUID of the next 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */
537         /* BTM_EIR_UUID_LKUP_TBL can be overrided */
538     },
539 #endif
540     NULL,   /* Inquiry TX power         */
541     0,      /* length of flags in bytes */
542     NULL,   /* flags for EIR */
543     0,      /* length of manufacturer specific in bytes */
544     NULL,   /* manufacturer specific */
545     0,      /* length of additional data in bytes */
546     NULL    /* additional data */
547 };
548 tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg;
549 #endif
550