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