[Model] All
[BinType] AP
[Customer] OPEN
[Issue#] N/A
[Request] Internal
[Occurrence Version] N/A
[Problem] When multiple LE connection existed, unable to connect iOS GM.
[Cause & Measure] After le disconnection, Kernel start standard advertising.
It make ANCS connection again.
[Checking Method] Connect with LE device > ANCS connection > GM launch >
weconn start role switching > ANCS connected again
[Team] Convergence BT
[Developer] Injun Yang
[Solution company] Samsung
[Change Type] Specification change
Change-Id: Iea238ebb1a08a2313c49f418bcc4c9abb04956e3
memset(&le_adv_slot[slot_id], 0x00, sizeof(bt_adapter_le_adv_slot_t));
}
memset(&le_adv_slot[slot_id], 0x00, sizeof(bt_adapter_le_adv_slot_t));
}
+gboolean _bt_hal_is_support_multi_adv(void)
+{
+ return (le_feature_info.adv_inst_max > 1 ? TRUE : FALSE);
+}
+
int _bt_hal_get_available_adv_slot_id(bt_uuid_t *uuid, gboolean use_reserved_slot)
{
int i;
int _bt_hal_get_available_adv_slot_id(bt_uuid_t *uuid, gboolean use_reserved_slot)
{
int i;
if (proxy == NULL)
return BT_STATUS_FAIL;
if (proxy == NULL)
return BT_STATUS_FAIL;
- if (le_adv_slot[adv_slot_id].is_advertising == TRUE && enable == TRUE)
+ if (le_adv_slot[adv_slot_id].is_advertising == TRUE && enable == TRUE) {
+ ERR("Already advertising inprogress. server_if %d, adv_slot_id %d",server_if, adv_slot_id);
if (le_adv_slot[adv_slot_id].initialized == TRUE &&
le_adv_slot[adv_slot_id].is_advertising == FALSE &&
if (le_adv_slot[adv_slot_id].initialized == TRUE &&
le_adv_slot[adv_slot_id].is_advertising == FALSE &&
- INFO("Enable advertising [%d] SLot Id [%d] gatt_server [%d] Is Multi? [%d]",
- enable, adv_slot_id, server_if, is_multi_adv);
+ INFO_C("### %s advertising. gatt_server [%d] adv_slot_id [%d] Is Multi? [%d]",
+ enable ? "Start":"Stop", server_if, adv_slot_id, is_multi_adv);
if (ret)
g_variant_unref(ret);
le_adv_slot[adv_slot_id].is_multi_adv = is_multi_adv;
le_adv_slot[adv_slot_id].is_advertising = enable;
if (ret)
g_variant_unref(ret);
le_adv_slot[adv_slot_id].is_multi_adv = is_multi_adv;
le_adv_slot[adv_slot_id].is_advertising = enable;
return BT_STATUS_SUCCESS;
}
return BT_STATUS_SUCCESS;
}
gboolean _bt_hal_update_le_feature_support(const char *item, const char *value,
bt_local_le_features_t *le_features);
gboolean _bt_hal_update_le_feature_support(const char *item, const char *value,
bt_local_le_features_t *le_features);
+gboolean _bt_hal_is_support_multi_adv(void);
+
int _bt_hal_get_available_adv_slot_id(bt_uuid_t *uuid, gboolean use_reserved_slot);
int _bt_hal_get_adv_slot_adv_handle(int slot_id);
int _bt_hal_get_available_adv_slot_id(bt_uuid_t *uuid, gboolean use_reserved_slot);
int _bt_hal_get_adv_slot_adv_handle(int slot_id);
gboolean is_advertising = FALSE;
DBG("+");
gboolean is_advertising = FALSE;
DBG("+");
+ if (_bt_hal_is_support_multi_adv() == TRUE) {
+ DBG("VSC adv used");
+ return BT_STATUS_SUCCESS;
+ }
+
+ /* Dependent on Kernel operation. Hold adv to prevent stopping adv on kernel */
is_advertising = _bt_hal_is_advertising_in_slot(0);
if (is_advertising) {
DBG("+ Stop current advertising");
is_advertising = _bt_hal_is_advertising_in_slot(0);
if (is_advertising) {
DBG("+ Stop current advertising");