• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

system/bt


Commit MetaInfo

修訂f3be84555a575f8ab6089a54df927364231972e3 (tree)
時間2016-10-04 03:14:07
作者Linux Build Service Account <lnxbuild@loca...>
CommiterLinux Build Service Account

Log Message

Promotion of bt.lnx.2.1-00018.

CRs Change ID Subject


1066335 Ic96205b5c304acb44eab53f4e2cb150726643bda BT: Serialize stack shutdown, state change callback and
1063890 I9afb5fec10a23725126e472c84b573dcdeacbfe0 BT: Calling HCI reset when Hardware error event occurs
1066796 I29bb6ae17dc5a83459cc5cd4c8cfc6ae59bb4504 GAP : PIN popup shown for dead legacy remotes
1070434 Ib4e8494270cea976d4549e903e78ec8b3398ec39 BT: Changing l2cap sock mutex lock type to static.
1071866 Bluetooth: split-a2dp: APTx-HD support
1068541 Ic3be9669c7cad52e0282a9947313659ef9056a02 Update Interop datatbase to prevent preferred conn updat

Change-Id: Idfe2fb86d32554d9f3ec4582d0f8611655e6a203
CRs-Fixed: 1066796, 1071866, 1070434, 1068541, 1063890, 1066335

Change Summary

差異

--- a/audio_a2dp_hw/bthost_ipc.c
+++ b/audio_a2dp_hw/bthost_ipc.c
@@ -421,8 +421,10 @@ static void* a2dp_codec_parser(uint8_t *codec_cfg, audio_format_t *codec_type)
421421 default:
422422 ERROR("Unknown channel mode");
423423 }
424- if (*codec_type == AUDIO_FORMAT_APTX_HD)
424+ if (*codec_type == AUDIO_FORMAT_APTX_HD) {
425+ p_cfg += 4;
425426 len -= 4;//ignore 4 bytes not used
427+ }
426428 if (len == 0)
427429 INFO("Codec config copied");
428430
--- a/bta/av/bta_av_main.c
+++ b/bta/av/bta_av_main.c
@@ -80,7 +80,7 @@ enum
8080 {
8181 APTX = 1,
8282 AAC,
83- APTX_HD
83+ APTXHD
8484 };
8585
8686 /* state machine states */
@@ -709,19 +709,36 @@ static void bta_av_api_register(tBTA_AV_DATA *p_data)
709709 {
710710 if((*bta_av_a2d_cos.cap)(APTX) != TRUE)
711711 {
712+ APPL_TRACE_DEBUG("%s: aptx-Classic offload codec not supported",__func__);
712713 index++;
713714 continue;
714715 }
715716 else
716- APPL_TRACE_DEBUG("%s:codec supported",__func__)
717+ APPL_TRACE_DEBUG("%s:aptx-Classic offload codec supported",__func__)
718+ } else {
719+ if (codecId == A2D_APTX_HD_CODEC_ID_BLUETOOTH &&
720+ vendorId == A2D_APTX_HD_VENDOR_ID ) {
721+ if((*bta_av_a2d_cos.cap)(APTXHD) != TRUE)
722+ {
723+ APPL_TRACE_DEBUG("%s: aptx-HD offload codec not supported",__func__)
724+ index++;
725+ continue;
726+ }
727+ else
728+ APPL_TRACE_DEBUG("%s: aptx-HD offload codec supported",__func__)
729+
730+ }
717731 }
718732 }
719733 else if (codec_type == AAC)
720734 {
721735 if ((*bta_av_a2d_cos.cap)(AAC) != TRUE)
722736 {
737+ APPL_TRACE_DEBUG("%s: AAC offload codec not supported",__func__);
723738 index++;
724739 continue;
740+ } else {
741+ APPL_TRACE_DEBUG("%s: AAC offload codec supported",__func__);
725742 }
726743 }
727744 } else if (codec_type == A2D_NON_A2DP_MEDIA_CT) {
--- a/bta/hh/bta_hh_le.c
+++ b/bta/hh/bta_hh_le.c
@@ -31,6 +31,7 @@
3131 #include "btm_api.h"
3232 #include "btm_ble_api.h"
3333 #include "btm_int.h"
34+#include "device/include/interop.h"
3435 #include "osi/include/log.h"
3536 #include "srvc_api.h"
3637 #include "stack/include/l2c_api.h"
@@ -1736,6 +1737,7 @@ void bta_hh_w4_le_read_char_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf)
17361737 {
17371738 tBTA_GATTC_READ * p_data = (tBTA_GATTC_READ *)p_buf;
17381739 UINT8 *pp ;
1740+ BD_NAME bdname;
17391741
17401742 const tBTA_GATTC_CHARACTERISTIC *p_char = BTA_GATTC_GetCharacteristic(p_dev_cb->conn_id,
17411743 p_data->handle);
@@ -1766,7 +1768,12 @@ void bta_hh_w4_le_read_char_cmpl(tBTA_HH_DEV_CB *p_dev_cb, tBTA_HH_DATA *p_buf)
17661768 tout = BTM_BLE_CONN_TIMEOUT_MIN_DEF;
17671769
17681770 BTM_BleSetPrefConnParams (p_dev_cb->addr, min, max, latency, tout);
1769- L2CA_UpdateBleConnParams(p_dev_cb->addr, min, max, latency, tout);
1771+
1772+ if (!BTM_GetRemoteDeviceName(p_dev_cb->addr, bdname) || !*bdname ||
1773+ (!interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, (const char*) bdname)))
1774+ {
1775+ L2CA_UpdateBleConnParams(p_dev_cb->addr, min, max, latency, tout);
1776+ }
17701777 }
17711778 else
17721779 {
--- a/btif/co/bta_av_co.c
+++ b/btif/co/bta_av_co.c
@@ -122,9 +122,10 @@ const tA2D_SBC_CIE bta_av_co_sbc_sink_caps =
122122 #endif
123123
124124 /* A2dp offload capabilities */
125-#define SBC 0
126-#define APTX 1
127-#define AAC 2
125+#define SBC 0
126+#define APTX 1
127+#define AAC 2
128+#define APTXHD 3
128129 /* Default SBC codec configuration */
129130 const tA2D_SBC_CIE btif_av_sbc_default_config =
130131 {
@@ -170,7 +171,11 @@ const tA2D_APTX_HD_CIE bta_av_co_aptx_hd_caps =
170171 {
171172 A2D_APTX_HD_VENDOR_ID,
172173 A2D_APTX_HD_CODEC_ID_BLUETOOTH,
174+#ifndef BTA_AV_SPLIT_A2DP_DEF_FREQ_48KHZ
173175 A2D_APTX_HD_SAMPLERATE_44100,
176+#else
177+ A2D_APTX_HD_SAMPLERATE_48000,
178+#endif
174179 A2D_APTX_HD_CHANNELS_STEREO,
175180 A2D_APTX_HD_ACL_SPRINT_RESERVED0,
176181 A2D_APTX_HD_ACL_SPRINT_RESERVED1,
@@ -183,7 +188,11 @@ const tA2D_APTX_HD_CIE btif_av_aptx_hd_default_config =
183188 {
184189 A2D_APTX_HD_VENDOR_ID,
185190 A2D_APTX_HD_CODEC_ID_BLUETOOTH,
191+#ifndef BTA_AV_SPLIT_A2DP_DEF_FREQ_48KHZ
186192 A2D_APTX_HD_SAMPLERATE_44100,
193+#else
194+ A2D_APTX_HD_SAMPLERATE_48000,
195+#endif
187196 A2D_APTX_HD_CHANNELS_STEREO,
188197 A2D_APTX_HD_ACL_SPRINT_RESERVED0,
189198 A2D_APTX_HD_ACL_SPRINT_RESERVED1,
@@ -1698,13 +1707,13 @@ static BOOLEAN bta_av_co_audio_peer_supports_codec(tBTA_AV_CO_PEER *p_peer, UINT
16981707 * multicast is not supported for aptX
16991708 */
17001709 if ((!bt_split_a2dp_enabled && isA2dAptXEnabled && (btif_av_is_multicast_supported() == FALSE)) ||
1701- (bt_split_a2dp_enabled && btif_av_is_codec_offload_supported(APTX)))
1710+ (bt_split_a2dp_enabled && (btif_av_is_codec_offload_supported(APTX)|| btif_av_is_codec_offload_supported(APTXHD))))
17021711 {
17031712 UINT16 codecId;
17041713 UINT32 vendorId;
17051714 UINT8* aptx_capabilities;
17061715
1707- if (isA2dAptXHdEnabled) {
1716+ if ((bt_split_a2dp_enabled && btif_av_is_codec_offload_supported(APTXHD)) || isA2dAptXHdEnabled) {
17081717 for (index = 0; index < p_peer->num_sup_snks; index++)
17091718 {
17101719 if (p_peer->snks[index].codec_type == A2D_NON_A2DP_MEDIA_CT)
--- a/btif/src/btif_av.c
+++ b/btif/src/btif_av.c
@@ -117,12 +117,14 @@ typedef struct
117117 BOOLEAN sbc_offload;
118118 BOOLEAN aptx_offload;
119119 BOOLEAN aac_offload;
120+ BOOLEAN aptxhd_offload;
120121 } btif_av_a2dp_offloaded_codec_cap_t;
121122
122123 typedef enum {
123124 SBC,
124125 APTX,
125126 AAC,
127+ APTXHD,
126128 }btif_av_codec_list;
127129
128130 /*****************************************************************************
@@ -299,6 +301,7 @@ const char *dump_av_codec_name(btif_av_codec_list codec)
299301 CASE_RETURN_STR(SBC)
300302 CASE_RETURN_STR(APTX)
301303 CASE_RETURN_STR(AAC)
304+ CASE_RETURN_STR(APTXHD)
302305 default: return "UNKNOWN_CODEC";
303306 }
304307 }
@@ -2247,6 +2250,11 @@ static void a2dp_offload_codec_cap_parser(const char *value)
22472250 BTIF_TRACE_ERROR("%s: AAC offload supported",__func__);
22482251 btif_av_codec_offload.aac_offload = TRUE;
22492252 }
2253+ else if (strcmp(tok,"aptxhd") == 0)
2254+ {
2255+ BTIF_TRACE_ERROR("%s: APTXHD offload supported",__func__);
2256+ btif_av_codec_offload.aptxhd_offload = TRUE;
2257+ }
22502258 tok = strtok_r(NULL, "-", &tmp_token);
22512259 };
22522260 }
@@ -3645,10 +3653,13 @@ BOOLEAN btif_av_is_codec_offload_supported(int codec)
36453653 case AAC:
36463654 ret = btif_av_codec_offload.aac_offload;
36473655 break;
3656+ case APTXHD:
3657+ ret = btif_av_codec_offload.aptxhd_offload;
3658+ break;
36483659 default:
36493660 ret = FALSE;
36503661 }
3651- BTIF_TRACE_DEBUG("btif_av_is_codec_offload_supported %s code supported = %d",dump_av_codec_name(codec),ret);
3662+ BTIF_TRACE_DEBUG("btif_av_is_codec_offload_supported %s codec supported = %d",dump_av_codec_name(codec),ret);
36523663 return ret;
36533664 }
36543665
--- a/btif/src/btif_media_task.c
+++ b/btif/src/btif_media_task.c
@@ -4312,6 +4312,8 @@ static void btif_media_send_aa_frame(uint64_t timestamp_us)
43124312 #define A2DP_CODEC_AAC 2
43134313 /* Below type is not defined in spec, it is for our convenience */
43144314 #define A2DP_CODEC_APTX 8
4315+
4316+#define A2DP_CODEC_APTX_HD 9
43154317 /* Need to check if we need a different type for APTX low latency
43164318 * or just we can handle with reducing the MTU updated in media
43174319 * channel configuration.
@@ -4324,6 +4326,7 @@ static void btif_media_send_aa_frame(uint64_t timestamp_us)
43244326 #define A2DP_TRANSPORT_STREAM_TYPE_SBC 0
43254327 #define A2DP_TRANSPORT_STREAM_TYPE_AAC 2
43264328 #define A2DP_TRANSPORT_STREAM_TYPE_APTX 8
4329+#define A2DP_TRANSPORT_STREAM_TYPE_APTX_HD 9
43274330
43284331 void disconnect_a2dp_on_vendor_start_failure()
43294332 {
@@ -4506,8 +4509,16 @@ BOOLEAN btif_media_send_vendor_selected_codec()
45064509 UINT16 index = 0;
45074510
45084511 codec_type = bta_av_co_get_current_codec();
4509- if (codec_type == A2D_NON_A2DP_MEDIA_CT)
4510- codec_type = A2DP_CODEC_APTX;
4512+ if (codec_type == A2D_NON_A2DP_MEDIA_CT) {
4513+ UINT8* ptr = bta_av_co_get_current_codecInfo();
4514+ if (ptr) {
4515+ tA2D_APTX_CIE* codecInfo = (tA2D_APTX_CIE*) &ptr[BTA_AV_CFG_START_IDX];
4516+ if (codecInfo && codecInfo->vendorId == A2D_APTX_VENDOR_ID && codecInfo->codecId == A2D_APTX_CODEC_ID_BLUETOOTH)
4517+ codec_type = A2DP_CODEC_APTX;
4518+ else if (codecInfo && codecInfo->vendorId == A2D_APTX_HD_VENDOR_ID && codecInfo->codecId == A2D_APTX_HD_CODEC_ID_BLUETOOTH)
4519+ codec_type = A2DP_CODEC_APTX_HD;
4520+ }
4521+ }
45114522
45124523 APPL_TRACE_IMP("btif_media_send_selected_codec: codec: %d", codec_type);
45134524 param[index++] = VS_QHCI_A2DP_SELECTED_CODEC;
@@ -4566,8 +4577,18 @@ BOOLEAN btif_media_send_vendor_transport_cfg()
45664577 UINT8 stream_type;
45674578 APPL_TRACE_IMP("btif_media_send_vendor_transport_cfg: codec: %d", codec_type);
45684579 stream_type = codec_type;
4569- if (codec_type == A2D_NON_A2DP_MEDIA_CT)
4570- stream_type = A2DP_TRANSPORT_STREAM_TYPE_APTX;
4580+
4581+ if (codec_type == A2D_NON_A2DP_MEDIA_CT) {
4582+ UINT8* ptr = bta_av_co_get_current_codecInfo();
4583+ if (ptr) {
4584+ tA2D_APTX_CIE* codecInfo = (tA2D_APTX_CIE*) &ptr[BTA_AV_CFG_START_IDX];
4585+ if (codecInfo && codecInfo->vendorId == A2D_APTX_VENDOR_ID && codecInfo->codecId == A2D_APTX_CODEC_ID_BLUETOOTH)
4586+ stream_type = A2DP_TRANSPORT_STREAM_TYPE_APTX;
4587+ else if (codecInfo && codecInfo->vendorId == A2D_APTX_HD_VENDOR_ID && codecInfo->codecId == A2D_APTX_HD_CODEC_ID_BLUETOOTH)
4588+ stream_type = A2DP_TRANSPORT_STREAM_TYPE_APTX_HD;
4589+ }
4590+ }
4591+
45714592 param[0] = VS_QHCI_A2DP_TRANSPORT_CONFIGURATION;
45724593 param[1] = A2DP_TRANSPORT_TYPE_SLIMBUS;
45734594 param[2] = stream_type;
--- a/btif/src/btif_sock_l2cap.c
+++ b/btif/src/btif_sock_l2cap.c
@@ -90,7 +90,7 @@ typedef struct l2cap_socket {
9090
9191 static bt_status_t btSock_start_l2cap_server_l(l2cap_socket *sock);
9292
93-static pthread_mutex_t state_lock;
93+static pthread_mutex_t state_lock = PTHREAD_MUTEX_INITIALIZER;
9494
9595 l2cap_socket *socks = NULL;
9696 static uid_set_t* uid_set = NULL;
@@ -367,7 +367,6 @@ fail_sockpair:
367367 bt_status_t btsock_l2cap_init(int handle, uid_set_t* set)
368368 {
369369 APPL_TRACE_DEBUG("%s handle = %d", __func__);
370- pthread_mutex_init(&state_lock, NULL);
371370 pthread_mutex_lock(&state_lock);
372371 pth = handle;
373372 socks = NULL;
@@ -384,7 +383,6 @@ bt_status_t btsock_l2cap_cleanup()
384383 while (socks)
385384 btsock_l2cap_free_l(socks);
386385 pthread_mutex_unlock(&state_lock);
387- pthread_mutex_destroy(&state_lock);
388386
389387 return BT_STATUS_SUCCESS;
390388 }
--- a/btif/src/stack_manager.c
+++ b/btif/src/stack_manager.c
@@ -178,7 +178,9 @@ static void event_shut_down_stack(UNUSED_ATTR void *context) {
178178 module_shut_down(get_module(CONTROLLER_MODULE)); // Doesn't do any work, just puts it in a restartable state
179179
180180 LOG_INFO(LOG_TAG, "%s finished", __func__);
181+ hack_future = future_new();
181182 btif_thread_post(event_signal_stack_down, NULL);
183+ future_await(hack_future);
182184 }
183185
184186 static void ensure_stack_is_not_running(void) {
@@ -224,6 +226,7 @@ static void event_signal_stack_up(UNUSED_ATTR void *context) {
224226
225227 static void event_signal_stack_down(UNUSED_ATTR void *context) {
226228 HAL_CBACK(bt_hal_cbacks, adapter_state_changed_cb, BT_STATE_OFF);
229+ future_ready(stack_manager_get_hack_future(), FUTURE_SUCCESS);
227230 }
228231
229232 static void ensure_manager_initialized(void) {
--- a/device/include/interop.h
+++ b/device/include/interop.h
@@ -96,6 +96,11 @@ typedef enum {
9696 //Few carkits take long time to start sending AT commands
9797 //Increase AG_CONN TIMEOUT so that AG connection go through
9898 INTEROP_INCREASE_AG_CONN_TIMEOUT,
99+
100+ // Some HOGP devices do not respond well when we switch from default LE conn parameters
101+ // to preferred conn params immediately post connection. Disable automatic switching to
102+ // preferred conn params for such devices and allow them to explicity ask for it.
103+ INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS,
99104 } interop_feature_t;
100105
101106 // Check if a given |addr| matches a known interoperability workaround as identified
--- a/device/include/interop_database.h
+++ b/device/include/interop_database.h
@@ -149,6 +149,10 @@ static const interop_name_entry_t interop_name_database[] = {
149149
150150 // HID Authentication Blacklist
151151 {"Targus BT Laser Notebook Mouse", 30, INTEROP_DISABLE_AUTH_FOR_HID_POINTING},
152+
153+ //Below devices reject connection updated with preferred
154+ {"BSMBB09DS", 9, INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS},
155+ {"ELECOM", 6, INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS},
152156 };
153157
154158 typedef struct {
--- a/device/src/interop.c
+++ b/device/src/interop.c
@@ -159,6 +159,7 @@ static const char* interop_feature_string_(const interop_feature_t feature) {
159159 CASE_RETURN_STR(INTEROP_REMOVE_HID_DIG_DESCRIPTOR)
160160 CASE_RETURN_STR(INTEROP_DISABLE_SNIFF_DURING_SCO)
161161 CASE_RETURN_STR(INTEROP_INCREASE_AG_CONN_TIMEOUT)
162+ CASE_RETURN_STR(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS)
162163 }
163164
164165 return "UNKNOWN";
--- a/stack/btm/btm_ble.c
+++ b/stack/btm/btm_ble.c
@@ -33,6 +33,7 @@
3333
3434 #include "bt_types.h"
3535 #include "bt_utils.h"
36+#include "btif/include/btif_storage.h"
3637 #include "btm_ble_api.h"
3738 #include "btm_int.h"
3839 #include "btu.h"
@@ -124,6 +125,37 @@ BOOLEAN BTM_SecAddBleDevice (BD_ADDR bd_addr, BD_NAME bd_name, tBT_DEVICE_TYPE d
124125
125126 /*******************************************************************************
126127 **
128+** Function BTM_GetRemoteDeviceName
129+**
130+** Description This function is called to get the dev name of remote device
131+** from NV
132+**
133+** Returns TRUE if success; otherwise failed.
134+**
135+*******************************************************************************/
136+BOOLEAN BTM_GetRemoteDeviceName(BD_ADDR bda, BD_NAME bd_name)
137+{
138+ BTM_TRACE_DEBUG("%s", __func__);
139+ BOOLEAN ret = FALSE;
140+ bt_bdname_t bdname;
141+ bt_property_t prop_name;
142+ bt_bdaddr_t bd_addr;
143+ bdcpy(bd_addr.address, bda);
144+
145+ BTIF_STORAGE_FILL_PROPERTY(&prop_name, BT_PROPERTY_BDNAME,
146+ sizeof(bt_bdname_t), &bdname);
147+ if (btif_storage_get_remote_device_property(
148+ &bd_addr, &prop_name) == BT_STATUS_SUCCESS)
149+ {
150+ APPL_TRACE_DEBUG("%s, NV name = %s", __func__, bdname.name);
151+ strlcpy((char*) bd_name, (char*) bdname.name, BD_NAME_LEN);
152+ ret = TRUE;
153+ }
154+ return ret;
155+}
156+
157+/*******************************************************************************
158+**
127159 ** Function BTM_SecAddBleKey
128160 **
129161 ** Description Add/modify LE device information. This function will be
@@ -2745,6 +2777,7 @@ void btm_ble_set_keep_rfu_in_auth_req(BOOLEAN keep_rfu)
27452777 btm_cb.devcb.keep_rfu_in_auth_req = keep_rfu;
27462778 }
27472779
2780+
27482781 #endif /* BTM_BLE_CONFORMANCE_TESTING */
27492782
27502783 #endif /* BLE_INCLUDED */
--- a/stack/btm/btm_dev.c
+++ b/stack/btm/btm_dev.c
@@ -297,6 +297,7 @@ void btm_sec_free_dev (tBTM_SEC_DEV_REC *p_dev_rec)
297297 {
298298 p_dev_rec->bond_type = BOND_TYPE_UNKNOWN;
299299 p_dev_rec->sec_flags = 0;
300+ p_dev_rec->sm4 = BTM_SM4_UNKNOWN;
300301
301302 #if BLE_INCLUDED == TRUE
302303 /* Clear out any saved BLE keys */
--- a/stack/btm/btm_devctl.c
+++ b/stack/btm/btm_devctl.c
@@ -226,6 +226,17 @@ void BTM_DeviceReset (UNUSED_ATTR tBTM_CMPL_CB *p_cb) {
226226 );
227227 }
228228
229+void BTM_HCI_Reset(void)
230+{
231+ /* Flush all ACL connections */
232+ btm_acl_device_down();
233+
234+ /* Clear the callback, so application would not hang on reset */
235+ btm_db_reset();
236+
237+ btsnd_hcic_reset(LOCAL_BR_EDR_CONTROLLER_ID);
238+}
239+
229240 /*******************************************************************************
230241 **
231242 ** Function BTM_IsDeviceUp
--- a/stack/btu/btu_hcif.c
+++ b/stack/btu/btu_hcif.c
@@ -1153,7 +1153,7 @@ static void btu_hcif_hardware_error_evt (UINT8 *p)
11531153
11541154 /* Reset the controller */
11551155 if (BTM_IsDeviceUp())
1156- BTM_DeviceReset (NULL);
1156+ BTM_HCI_Reset();
11571157
11581158 if(*p == 0x0f || (*p == 0x0a))
11591159 {
--- a/stack/hcic/hcicmds.c
+++ b/stack/hcic/hcicmds.c
@@ -726,6 +726,21 @@ BOOLEAN btsnd_hcic_write_def_policy_set (UINT16 settings)
726726 return (TRUE);
727727 }
728728
729+BOOLEAN btsnd_hcic_reset (UINT8 local_controller_id)
730+{
731+ BT_HDR *p = (BT_HDR *)osi_malloc(HCI_CMD_BUF_SIZE);
732+ UINT8 *pp = (UINT8 *)(p + 1);
733+
734+ p->len = HCIC_PREAMBLE_SIZE + HCIC_PARAM_SIZE_RESET;
735+ p->offset = 0;
736+
737+ UINT16_TO_STREAM (pp, HCI_RESET);
738+ UINT8_TO_STREAM (pp, HCIC_PARAM_SIZE_RESET);
739+
740+ btu_hcif_send_cmd (local_controller_id, p);
741+ return (TRUE);
742+}
743+
729744 BOOLEAN btsnd_hcic_set_event_filter (UINT8 filt_type, UINT8 filt_cond_type,
730745 UINT8 *filt_cond, UINT8 filt_cond_len)
731746 {
--- a/stack/include/btm_api.h
+++ b/stack/include/btm_api.h
@@ -1936,6 +1936,17 @@ extern void BTM_DeviceReset (tBTM_CMPL_CB *p_cb);
19361936
19371937 /*******************************************************************************
19381938 **
1939+** Function BTM_HCI_Reset
1940+**
1941+** Description This function is called to send reset command to the controller.
1942+**
1943+** Returns void
1944+**
1945+*******************************************************************************/
1946+extern void BTM_HCI_Reset (void);
1947+
1948+/*******************************************************************************
1949+**
19391950 ** Function BTM_IsDeviceUp
19401951 **
19411952 ** Description This function is called to check if the device is up.
--- a/stack/include/btm_ble_api.h
+++ b/stack/include/btm_ble_api.h
@@ -1861,6 +1861,20 @@ extern tBTM_STATUS BTM_BleGetEnergyInfo(tBTM_BLE_ENERGY_INFO_CBACK *p_ener_cback
18611861 *******************************************************************************/
18621862 extern tBTM_STATUS BTM_SetBleDataLength(BD_ADDR bd_addr, UINT16 tx_pdu_length);
18631863
1864+
1865+
1866+/*******************************************************************************
1867+**
1868+** Function BTM_GetRemoteDeviceName
1869+**
1870+** Description This function is called to get the dev name of remote device
1871+** from NV
1872+**
1873+** Returns TRUE if success; otherwise failed.
1874+**
1875+*******************************************************************************/
1876+extern BOOLEAN BTM_GetRemoteDeviceName(BD_ADDR bda, BD_NAME bdname);
1877+
18641878 #ifdef __cplusplus
18651879 }
18661880 #endif
--- a/stack/include/hcimsgs.h
+++ b/stack/include/hcimsgs.h
@@ -494,6 +494,10 @@ extern BOOLEAN btsnd_hcic_delete_stored_key (BD_ADDR bd_addr, BOOLEAN delete_all
494494 #define HCI_DELETE_KEY_ALL_FLAG_OFF 6
495495 /* Delete Stored Key */
496496
497+extern BOOLEAN btsnd_hcic_reset(UINT8 local_controller_id); /* Reset */
498+
499+#define HCIC_PARAM_SIZE_RESET 0 /* Reset */
500+
497501 /* Change Local Name */
498502 extern BOOLEAN btsnd_hcic_change_name(BD_NAME name);
499503
--- a/stack/l2cap/l2c_ble.c
+++ b/stack/l2cap/l2c_ble.c
@@ -31,6 +31,7 @@
3131 #include "btm_int.h"
3232 #include "hcimsgs.h"
3333 #include "device/include/controller.h"
34+#include "device/include/interop.h"
3435 #include "stack_config.h"
3536
3637 #if (BLE_INCLUDED == TRUE)
@@ -283,6 +284,7 @@ void l2cble_notify_le_connection (BD_ADDR bda)
283284 tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr (bda, BT_TRANSPORT_LE);
284285 tACL_CONN *p_acl = btm_bda_to_acl(bda, BT_TRANSPORT_LE) ;
285286 tL2C_CCB *p_ccb;
287+ BD_NAME bdname;
286288
287289 if (p_lcb != NULL && p_acl != NULL && p_lcb->link_state != LST_CONNECTED)
288290 {
@@ -305,7 +307,12 @@ void l2cble_notify_le_connection (BD_ADDR bda)
305307 l2c_csm_execute (p_ccb, L2CEVT_LP_CONNECT_CFM, NULL);
306308 }
307309
308- l2cble_use_preferred_conn_params(bda);
310+
311+ if (!BTM_GetRemoteDeviceName(bda, bdname) || !*bdname ||
312+ (!interop_match_name(INTEROP_DISABLE_LE_CONN_PREFERRED_PARAMS, (const char*) bdname)))
313+ {
314+ l2cble_use_preferred_conn_params(bda);
315+ }
309316 }
310317
311318 /*******************************************************************************