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 (17+BTA_DM_NUM_JV_ID) /* number of entries in bta_dm_pm_cfg except the first */ 115 #else 116 #define BTA_DM_NUM_PM_ENTRY (15+BTA_DM_NUM_JV_ID) /* number of entries in bta_dm_pm_cfg except the first */ 117 #endif 118 119 tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_CFG bta_dm_pm_cfg[] = 120 { 121 {BTA_ID_SYS, BTA_DM_NUM_PM_ENTRY, 0}, 122 {BTA_ID_AG, BTA_ALL_APP_ID, 0}, /* ag uses first spec table for app id 0 */ 123 {BTA_ID_CT, 1, 1}, /* ct (BTA_ID_CT,APP ID=1) spec table */ 124 {BTA_ID_CG, BTA_ALL_APP_ID, 1}, /* cg resue ct spec table */ 125 {BTA_ID_DG, BTA_ALL_APP_ID, 2}, /* dg spec table */ 126 {BTA_ID_AV, BTA_ALL_APP_ID, 4}, /* av spec table */ 127 {BTA_ID_FTC, BTA_ALL_APP_ID, 6}, /* ftc spec table */ 128 {BTA_ID_FTS, BTA_ALL_APP_ID, 7}, /* fts spec table */ 129 {BTA_ID_HD, BTA_ALL_APP_ID, 3}, /* hd spec table */ 130 {BTA_ID_HH, BTA_ALL_APP_ID, 5}, /* hh spec table */ 131 {BTA_ID_PBC, BTA_ALL_APP_ID, 2}, /* reuse dg spec table */ 132 {BTA_ID_PBS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 133 {BTA_ID_OPC, BTA_ALL_APP_ID, 6}, /* reuse ftc spec table */ 134 {BTA_ID_OPS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 135 {BTA_ID_MSE, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 136 {BTA_ID_JV, BTA_JV_PM_ID_1, 6}, /* app BTA_JV_PM_ID_1, reuse ftc spec table */ 137 {BTA_ID_JV, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 138 {BTA_ID_HL, BTA_ALL_APP_ID, 8} /* reuse fts spec table */ 139 #if BLE_INCLUDED == TRUE 140 ,{BTA_ID_GATTC, BTA_ALL_APP_ID, 9} /* gattc spec table */ 141 ,{BTA_ID_GATTS, BTA_ALL_APP_ID, 10} /* gatts spec table */ 142 #endif 143 }; 144 145 #if BLE_INCLUDED == TRUE /* add GATT PM entry for GATT over BR/EDR */ 146 #ifdef BTE_SIM_APP /* For Insight builds only, see the detail below */ 147 #define BTA_DM_NUM_PM_SPEC (11 + 2) /* additional two */ 148 #else 149 #define BTA_DM_NUM_PM_SPEC 11 /* additional JV*/ 150 #endif 151 #else 152 #ifdef BTE_SIM_APP /* For Insight builds only, see the detail below */ 153 #define BTA_DM_NUM_PM_SPEC (9 + 2) /* additional two */ 154 #else 155 #define BTA_DM_NUM_PM_SPEC 9 /* additional JV*/ 156 #endif 157 #endif 158 159 160 tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = 161 { 162 /* AG */ 163 { 164 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 165 #if (BTM_SSR_INCLUDED == TRUE) 166 (BTA_DM_PM_SSR2), /* the SSR entry */ 167 #endif 168 { 169 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 170 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 171 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 172 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 173 {{BTA_DM_PM_SNIFF3, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ 174 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ 175 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 176 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 177 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 178 } 179 }, 180 181 /* CT */ 182 { 183 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 184 #if (BTM_SSR_INCLUDED == TRUE) 185 (BTA_DM_PM_SSR2), /* the SSR entry */ 186 #endif 187 { 188 {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open park */ 189 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 190 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 191 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 192 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open sniff */ 193 {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close park */ 194 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 195 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 196 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 197 } 198 }, 199 200 /* DG */ 201 { 202 (BTA_DM_PM_ACTIVE), /* no power saving mode allowed */ 203 #if (BTM_SSR_INCLUDED == TRUE) 204 (BTA_DM_PM_SSR2), /* the SSR entry */ 205 #endif 206 { 207 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 208 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 209 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 210 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 211 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 212 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 213 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 214 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 215 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 216 } 217 }, 218 219 /* HD */ 220 { 221 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 222 #if (BTM_SSR_INCLUDED == TRUE) 223 (BTA_DM_PM_SSR3), /* the SSR entry */ 224 #endif 225 { 226 {{BTA_DM_PM_SNIFF4, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 227 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 228 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 229 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 230 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 231 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 232 {{BTA_DM_PM_SNIFF2, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 233 {{BTA_DM_PM_SNIFF4, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 234 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 235 } 236 }, 237 238 /* AV */ 239 { 240 (BTA_DM_PM_SNIFF), /* allow sniff */ 241 #if (BTM_SSR_INCLUDED == TRUE) 242 (BTA_DM_PM_SSR2), /* the SSR entry */ 243 #endif 244 { 245 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 246 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 247 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 248 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 249 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 250 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 251 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 252 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 253 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 254 } 255 }, 256 257 /* HH */ 258 { 259 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 260 #if (BTM_SSR_INCLUDED == TRUE) 261 (BTA_DM_PM_SSR1), /* the SSR entry */ 262 #endif 263 { 264 {{BTA_DM_PM_SNIFF2, 30000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 265 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 266 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 267 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 268 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 269 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close, used for HH suspend */ 270 {{BTA_DM_PM_SNIFF2, 30000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 271 {{BTA_DM_PM_SNIFF2, 30000}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 272 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 273 } 274 }, 275 276 /* FTC, OPC */ 277 { 278 (BTA_DM_PM_SNIFF), /* allow sniff */ 279 #if (BTM_SSR_INCLUDED == TRUE) 280 (BTA_DM_PM_SSR2), /* the SSR entry */ 281 #endif 282 { 283 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 284 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 285 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 286 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 287 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 288 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 289 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 290 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 291 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 292 } 293 }, 294 295 /* FTS, OPS */ 296 { 297 (BTA_DM_PM_SNIFF), /* allow sniff */ 298 #if (BTM_SSR_INCLUDED == TRUE) 299 (BTA_DM_PM_SSR2), /* the SSR entry */ 300 #endif 301 { 302 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 303 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 304 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 305 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 306 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 307 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 308 {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 309 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 310 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 311 } 312 }, 313 314 /* HL */ 315 { 316 (BTA_DM_PM_SNIFF), /* allow sniff */ 317 #if (BTM_SSR_INCLUDED == TRUE) 318 (BTA_DM_PM_SSR2), /* the SSR entry */ 319 #endif 320 { 321 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 322 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 323 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 324 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 325 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ 326 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ 327 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 328 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 329 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 330 } 331 } 332 333 #if BLE_INCLUDED == TRUE 334 /* GATTC */ 335 ,{ 336 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 337 #if (BTM_SSR_INCLUDED == TRUE) 338 (BTA_DM_PM_SSR2), /* the SSR entry */ 339 #endif 340 { 341 {{BTA_DM_PM_SNIFF, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 342 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 343 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 344 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 345 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 346 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 347 {{BTA_DM_PM_SNIFF, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 348 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 349 #if (AMP_INCLUDED == TRUE) 350 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ 351 #endif 352 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 353 } 354 } 355 /* GATTS */ 356 ,{ 357 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 358 #if (BTM_SSR_INCLUDED == TRUE) 359 (BTA_DM_PM_SSR2), /* the SSR entry */ 360 #endif 361 { 362 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 363 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 364 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 365 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 366 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 367 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 368 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 369 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 370 #if (AMP_INCLUDED == TRUE) 371 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ 372 #endif 373 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 374 } 375 } 376 377 #endif 378 379 #ifdef BTE_SIM_APP /* For Insight builds only */ 380 /* Entries at the end of the pm_spec table are user-defined (runtime configurable), 381 for power consumption experiments. 382 Insight finds the first user-defined entry by looking for the first BTA_DM_PM_NO_PREF. 383 The number of user_defined specs is defined by BTA_SWRAP_UD_PM_SPEC_COUNT */ 384 , 385 {BTA_DM_PM_NO_PREF}, /* pm_spec USER_DEFINED_0 */ 386 {BTA_DM_PM_NO_PREF} /* pm_spec USER_DEFINED_1 */ 387 #endif /* BTE_SIM_APP */ 388 }; 389 390 tBTA_DM_PM_TYPE_QUALIFIER tBTM_PM_PWR_MD bta_dm_pm_md[] = 391 { 392 /* more sniff parameter entries can be added for BTA_DM_PM_SNIFF3 - BTA_DM_PM_SNIFF7, if needed 393 When entries are added or removed, BTA_DM_PM_PARK_IDX needs to be updated to reflect the actual index 394 BTA_DM_PM_PARK_IDX is defined in bta_api.h and can be override by the bdroid_buildcfg.h settings. 395 The SNIFF table entries must be in the order from highest latency (biggest interval) to lowest latency. 396 If there's a conflict among the connected services, the setting with lowest latency wins. 397 */ 398 /* sniff modes: max interval, min interval, attempt, timeout */ 399 {800, 400, 4, 1, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF - A2DP */ 400 {400, 200, 4, 1, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF1 */ 401 {180, 150, 4, 1, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF2- HD idle */ 402 {150, 50, 4, 1, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF3- SCO open */ 403 { 54, 30, 4, 1, BTM_PM_MD_SNIFF}, /*for BTA_DM_PM_SNIFF4- HD active*/ 404 {800, 400, 0, 0, BTM_PM_MD_PARK} 405 406 #ifdef BTE_SIM_APP /* For Insight builds only */ 407 /* Entries at the end of the bta_dm_pm_md table are user-defined (runtime configurable), 408 for power consumption experiments. 409 Insight finds the first user-defined entry by looking for the first 'max=0'. 410 The number of user_defined specs is defined by BTA_SWRAP_UD_PM_DM_COUNT */ 411 , 412 {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_0 */ 413 {0}, /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_0 */ 414 415 {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_1 */ 416 {0} /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_1 */ 417 #endif /* BTE_SIM_APP */ 418 }; 419 420 /* 0=max_lat -> no SSR */ 421 /* the smaller of the SSR max latency wins. 422 * the entries in this table must be from highest latency (biggest interval) to lowest latency */ 423 #if (BTM_SSR_INCLUDED == TRUE) 424 tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] = 425 { 426 /*max_lat, min_rmt_to, min_loc_to*/ 427 {0, 0, 0}, /* BTA_DM_PM_SSR0 - do not use SSR */ 428 {0, 0, 2}, /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile, 429 seting default max latency and min remote timeout as 0, 430 and always read individual device preference from HH module */ 431 {1200, 2, 2}, /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/ 432 {360, 160, 2} /* BTA_DM_PM_SSR3 - HD */ 433 }; 434 435 tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec = (tBTA_DM_SSR_SPEC *)&bta_dm_ssr_spec; 436 #endif 437 438 tBTA_DM_PM_CFG *p_bta_dm_pm_cfg = (tBTA_DM_PM_CFG *)&bta_dm_pm_cfg; 439 tBTA_DM_PM_SPEC *p_bta_dm_pm_spec = (tBTA_DM_PM_SPEC *)&bta_dm_pm_spec; 440 tBTM_PM_PWR_MD *p_bta_dm_pm_md = (tBTM_PM_PWR_MD *)&bta_dm_pm_md; 441 442 /* The performance impact of EIR packet size 443 ** 444 ** When BTM_EIR_DEFAULT_FEC_REQUIRED is TRUE, 445 ** 1 to 17 bytes, DM1 is used and most robust. 446 ** 18 to 121 bytes, DM3 is used but impacts inquiry scan time with large number 447 ** of devices.(almost double with 150 users) 448 ** 122 to 224 bytes, DM5 is used but cause quite big performance loss even with 449 ** small number of users. so it is not recommended. 450 ** 225 to 240 bytes, DH5 is used without FEC but it not recommended. 451 ** (same reason of DM5) 452 ** 453 ** When BTM_EIR_DEFAULT_FEC_REQUIRED is FALSE, 454 ** 1 to 27 bytes, DH1 is used but only robust at short range. 455 ** 28 to 183 bytes, DH3 is used but only robust at short range and impacts inquiry 456 ** scan time with large number of devices. 457 ** 184 to 240 bytes, DH5 is used but it not recommended. 458 */ 459 460 #if ( BTM_EIR_SERVER_INCLUDED == TRUE ) 461 #if (BTA_EIR_CANNED_UUID_LIST == TRUE) 462 /* for example */ 463 const UINT8 bta_dm_eir_uuid16_list[] = { 0x08, 0x11, /* Headset */ 464 0x1E, 0x11, /* Handsfree */ 465 0x0E, 0x11, /* AV Remote Control */ 466 0x0B, 0x11, /* Audio Sink */ 467 }; 468 #endif 469 470 /* Extended Inquiry Response */ 471 const tBTA_DM_EIR_CONF bta_dm_eir_cfg = 472 { 473 50, /* minimum length of local name when it is shortened */ 474 /* if length of local name is longer than this and EIR has not enough */ 475 /* room for all UUID list then local name is shortened to this length */ 476 #if (BTA_EIR_CANNED_UUID_LIST == TRUE) 477 8, 478 (UINT8 *)bta_dm_eir_uuid16_list, 479 #else 480 { /* mask of UUID list in EIR */ 481 0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ 482 0xFFFFFFFF /* LSB is the first UUID of the next 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ 483 /* BTM_EIR_UUID_LKUP_TBL can be overrided */ 484 }, 485 #endif 486 NULL, /* Inquiry TX power */ 487 0, /* length of flags in bytes */ 488 NULL, /* flags for EIR */ 489 0, /* length of manufacturer specific in bytes */ 490 NULL, /* manufacturer specific */ 491 }; 492 tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg; 493 #endif 494