Merge "Remove unused file gki_inet.h and BIG_ENDIAN macro." into klp-wireless-dev
diff --git a/audio_a2dp_hw/Android.mk b/audio_a2dp_hw/Android.mk
index db4b7a3..fb509e7 100644
--- a/audio_a2dp_hw/Android.mk
+++ b/audio_a2dp_hw/Android.mk
@@ -7,6 +7,8 @@
LOCAL_C_INCLUDES+= . $(LOCAL_PATH)/../utils/include
+LOCAL_CFLAGS += -std=c99
+
LOCAL_SHARED_LIBRARIES := \
libcutils liblog
diff --git a/bta/Android.mk b/bta/Android.mk
index bca6c08..65eb952 100644
--- a/bta/Android.mk
+++ b/bta/Android.mk
@@ -8,7 +8,7 @@
LOCAL_CFLAGS += \
-DBOARD_HAVE_BLUETOOTH_BCM
endif
-LOCAL_CFLAGS += -DBUILDCFG $(bdroid_CFLAGS)
+LOCAL_CFLAGS += -DBUILDCFG $(bdroid_CFLAGS) -std=c99
LOCAL_PRELINK_MODULE:=false
LOCAL_SRC_FILES:= \
diff --git a/bta/gatt/bta_gattc_act.c b/bta/gatt/bta_gattc_act.c
index bdf1429..f980c0b 100644
--- a/bta/gatt/bta_gattc_act.c
+++ b/bta/gatt/bta_gattc_act.c
@@ -69,7 +69,8 @@
{
BTA_GATTC_API_READ_EVT,
BTA_GATTC_API_WRITE_EVT,
- BTA_GATTC_API_EXEC_EVT
+ BTA_GATTC_API_EXEC_EVT,
+ BTA_GATTC_API_CFG_MTU_EVT
};
#if (BT_TRACE_VERBOSE == TRUE)
@@ -349,7 +350,8 @@
bta_gattc_send_open_cback(p_clreg,
BTA_GATT_NO_RESOURCES,
p_msg->api_conn.remote_bda,
- BTA_GATT_INVALID_CONN_ID);
+ BTA_GATT_INVALID_CONN_ID,
+ 0);
}
}
else
@@ -473,7 +475,8 @@
bta_gattc_send_open_cback(p_clcb->p_rcb,
BTA_GATT_OK,
p_clcb->bda,
- p_clcb->bta_conn_id);
+ p_clcb->bta_conn_id,
+ 0);
}
/*******************************************************************************
**
@@ -491,7 +494,8 @@
bta_gattc_send_open_cback(p_clcb->p_rcb,
BTA_GATT_ERROR,
p_clcb->bda,
- p_clcb->bta_conn_id);
+ p_clcb->bta_conn_id,
+ 0);
/* open failure, remove clcb */
bta_gattc_clcb_dealloc(p_clcb);
@@ -579,7 +583,7 @@
/* open failure, report OPEN_EVT */
if (status != BTA_GATT_OK)
{
- bta_gattc_send_open_cback(p_clreg, status, p_data->remote_bda, BTA_GATT_INVALID_CONN_ID);
+ bta_gattc_send_open_cback(p_clreg, status, p_data->remote_bda, BTA_GATT_INVALID_CONN_ID, 0);
}
}
/*******************************************************************************
@@ -687,6 +691,10 @@
}
p_clcb->p_srcb->connected = TRUE;
+
+ if (p_clcb->p_srcb->mtu == 0)
+ p_clcb->p_srcb->mtu = GATT_DEF_BLE_MTU_SIZE;
+
/* start database cache if needed */
if (p_clcb->p_srcb->p_srvc_cache == NULL ||
p_clcb->p_srcb->state != BTA_GATTC_SERV_IDLE)
@@ -719,7 +727,8 @@
bta_gattc_send_open_cback(p_clcb->p_rcb,
BTA_GATT_OK,
p_clcb->bda,
- p_clcb->bta_conn_id);
+ p_clcb->bta_conn_id,
+ p_clcb->p_srcb->mtu);
}
}
/*******************************************************************************
@@ -877,6 +886,38 @@
p_clcb->status = BTA_GATT_CANCEL;
p_clcb->auto_update = BTA_GATTC_DISC_WAITING;
}
+
+/*******************************************************************************
+**
+** Function bta_gattc_cfg_mtu
+**
+** Description Configure MTU size on the GATT connection.
+**
+** Returns None.
+**
+*******************************************************************************/
+void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
+{
+ tBTA_GATTC_OP_CMPL op_cmpl;
+ tBTA_GATT_STATUS status;
+
+ if (bta_gattc_enqueue(p_clcb, p_data))
+ {
+ status = GATTC_ConfigureMTU (p_clcb->bta_conn_id, p_data->api_mtu.mtu);
+
+ /* if failed, return callback here */
+ if (status != GATT_SUCCESS && status != GATT_CMD_STARTED)
+ {
+ memset(&op_cmpl, 0, sizeof(tBTA_GATTC_OP_CMPL));
+
+ op_cmpl.status = status;
+ op_cmpl.op_code = GATTC_OPTYPE_CONFIG;
+ op_cmpl.p_cmpl = NULL;
+
+ bta_gattc_sm_execute(p_clcb, BTA_GATTC_OP_CMPL_EVT, (tBTA_GATTC_DATA *)&op_cmpl);
+ }
+ }
+}
/*******************************************************************************
**
** Function bta_gattc_start_discover
@@ -1352,6 +1393,35 @@
( *p_clcb->p_rcb->p_cback)(BTA_GATTC_EXEC_EVT, &cb_data);
}
+
+/*******************************************************************************
+**
+** Function bta_gattc_cfg_mtu_cmpl
+**
+** Description configure MTU operation complete
+**
+** Returns None.
+**
+*******************************************************************************/
+void bta_gattc_cfg_mtu_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_OP_CMPL *p_data)
+{
+ tBTA_GATTC cb_data;
+
+ utl_freebuf((void **)&p_clcb->p_q_cmd);
+
+
+ if (p_data->p_cmpl && p_data->status == BTA_GATT_OK)
+ p_clcb->p_srcb->mtu = p_data->p_cmpl->mtu;
+
+ /* configure MTU complete, callback */
+ p_clcb->status = p_data->status;
+ cb_data.cfg_mtu.conn_id = p_clcb->bta_conn_id;
+ cb_data.cfg_mtu.status = p_data->status;
+ cb_data.cfg_mtu.mtu = p_clcb->p_srcb->mtu;
+
+ (*p_clcb->p_rcb->p_cback) (BTA_GATTC_CFG_MTU_EVT, &cb_data);
+
+}
/*******************************************************************************
**
** Function bta_gattc_op_cmpl
@@ -1409,11 +1479,9 @@
else if (op == GATTC_OPTYPE_EXE_WRITE)
bta_gattc_exec_cmpl(p_clcb, &p_data->op_cmpl);
- /*
- else if (op == GATTC_OPTYPE_CONFIG) // API to be added
- {
- }
- */
+
+ else if (op == GATTC_OPTYPE_CONFIG)
+ bta_gattc_cfg_mtu_cmpl(p_clcb, &p_data->op_cmpl);
}
}
/*******************************************************************************
diff --git a/bta/gatt/bta_gattc_api.c b/bta/gatt/bta_gattc_api.c
index d264458..0bc87ec 100644
--- a/bta/gatt/bta_gattc_api.c
+++ b/bta/gatt/bta_gattc_api.c
@@ -224,6 +224,34 @@
}
/*******************************************************************************
**
+** Function BTA_GATTC_ConfigureMTU
+**
+** Description Configure the MTU size in the GATT channel. This can be done
+** only once per connection.
+**
+** Parameters conn_id: connection ID.
+** mtu: desired MTU size to use.
+**
+** Returns void
+**
+*******************************************************************************/
+void BTA_GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu)
+{
+ tBTA_GATTC_API_CFG_MTU *p_buf;
+
+ if ((p_buf = (tBTA_GATTC_API_CFG_MTU *) GKI_getbuf(sizeof(tBTA_GATTC_API_CFG_MTU))) != NULL)
+ {
+ p_buf->hdr.event = BTA_GATTC_API_CFG_MTU_EVT;
+ p_buf->hdr.layer_specific = conn_id;
+
+ p_buf->mtu = mtu;
+
+ bta_sys_sendmsg(p_buf);
+ }
+ return;
+}
+/*******************************************************************************
+**
** Function BTA_GATTC_ServiceSearchRequest
**
** Description This function is called to request a GATT service discovery
diff --git a/bta/gatt/bta_gattc_int.h b/bta/gatt/bta_gattc_int.h
index 255090d..4f192cb 100644
--- a/bta/gatt/bta_gattc_int.h
+++ b/bta/gatt/bta_gattc_int.h
@@ -45,6 +45,7 @@
BTA_GATTC_API_READ_EVT,
BTA_GATTC_API_WRITE_EVT,
BTA_GATTC_API_EXEC_EVT,
+ BTA_GATTC_API_CFG_MTU_EVT,
BTA_GATTC_API_CLOSE_EVT,
@@ -188,6 +189,13 @@
BOOLEAN start;
} tBTA_GATTC_API_LISTEN;
+
+typedef struct
+{
+ BT_HDR hdr;
+ UINT16 mtu;
+}tBTA_GATTC_API_CFG_MTU;
+
typedef struct
{
BT_HDR hdr;
@@ -217,6 +225,7 @@
tBTA_GATTC_API_CONFIRM api_confirm;
tBTA_GATTC_API_EXEC api_exec;
tBTA_GATTC_API_READ_MULTI api_read_multi;
+ tBTA_GATTC_API_CFG_MTU api_mtu;
tBTA_GATTC_OP_CMPL op_cmpl;
tBTA_GATTC_CI_EVT ci_open;
tBTA_GATTC_CI_EVT ci_save;
@@ -327,6 +336,7 @@
UINT8 srvc_hdl_chg; /* service handle change indication pending */
UINT16 attr_index; /* cahce NV saving/loading attribute index */
+ UINT16 mtu;
} tBTA_GATTC_SERV;
#ifndef BTA_GATTC_NOTIF_REG_MAX
@@ -481,8 +491,9 @@
extern void bta_gattc_init_bk_conn(tBTA_GATTC_API_OPEN *p_data, tBTA_GATTC_RCB *p_clreg);
extern void bta_gattc_cancel_bk_conn(tBTA_GATTC_API_CANCEL_OPEN *p_data);
extern void bta_gattc_send_open_cback( tBTA_GATTC_RCB *p_clreg, tBTA_GATT_STATUS status,
- BD_ADDR remote_bda, UINT16 conn_id);
+ BD_ADDR remote_bda, UINT16 conn_id, UINT16 mtu);
extern void bta_gattc_process_api_refresh(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg);
+extern void bta_gattc_cfg_mtu(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data);
#if BLE_INCLUDED == TRUE
extern void bta_gattc_listen(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg);
extern void bta_gattc_broadcast(tBTA_GATTC_CB *p_cb, tBTA_GATTC_DATA * p_msg);
diff --git a/bta/gatt/bta_gattc_main.c b/bta/gatt/bta_gattc_main.c
index 638f2f9..932a1d7 100644
--- a/bta/gatt/bta_gattc_main.c
+++ b/bta/gatt/bta_gattc_main.c
@@ -69,6 +69,7 @@
BTA_GATTC_IGNORE_OP_CMPL,
BTA_GATTC_DISC_CLOSE,
BTA_GATTC_RESTART_DISCOVER,
+ BTA_GATTC_CFG_MTU,
BTA_GATTC_IGNORE
};
@@ -106,7 +107,8 @@
bta_gattc_cache_open,
bta_gattc_ignore_op_cmpl,
bta_gattc_disc_close,
- bta_gattc_restart_discover
+ bta_gattc_restart_discover,
+ bta_gattc_cfg_mtu
};
@@ -127,6 +129,7 @@
/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST},
/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST},
/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_IDLE_ST},
+/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_IDLE_ST},
/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE_FAIL, BTA_GATTC_IDLE_ST},
@@ -161,6 +164,7 @@
/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST},
/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST},
/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_W4_CONN_ST},
+/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_W4_CONN_ST},
/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CANCEL_OPEN, BTA_GATTC_W4_CONN_ST},
@@ -186,7 +190,7 @@
static const UINT8 bta_gattc_st_connected[][BTA_GATTC_NUM_COLS] =
{
/* Event Action 1 Next state */
-/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN_ERROR, BTA_GATTC_CONN_ST},
+/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_CONN_ST},
/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_CONN_ST},
/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_CONN_ST},
@@ -194,6 +198,7 @@
/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_READ, BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_WRITE, BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_EXEC, BTA_GATTC_CONN_ST},
+/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_CFG_MTU, BTA_GATTC_CONN_ST},
/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_CLOSE, BTA_GATTC_IDLE_ST},
@@ -220,7 +225,7 @@
static const UINT8 bta_gattc_st_discover[][BTA_GATTC_NUM_COLS] =
{
/* Event Action 1 Next state */
-/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN_ERROR, BTA_GATTC_DISCOVER_ST},
+/* BTA_GATTC_API_OPEN_EVT */ {BTA_GATTC_OPEN, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_INT_OPEN_FAIL_EVT */ {BTA_GATTC_IGNORE, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_API_CANCEL_OPEN_EVT */ {BTA_GATTC_CANCEL_OPEN_ERROR, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_INT_CANCEL_OPEN_OK_EVT */ {BTA_GATTC_FAIL, BTA_GATTC_DISCOVER_ST},
@@ -228,6 +233,7 @@
/* BTA_GATTC_API_READ_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_API_WRITE_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_API_EXEC_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST},
+/* BTA_GATTC_API_CFG_MTU_EVT */ {BTA_GATTC_Q_CMD, BTA_GATTC_DISCOVER_ST},
/* BTA_GATTC_API_CLOSE_EVT */ {BTA_GATTC_DISC_CLOSE, BTA_GATTC_DISCOVER_ST},
@@ -489,6 +495,8 @@
return "BTA_GATTC_API_LISTEN_EVT";
case BTA_GATTC_API_DISABLE_EVT:
return "BTA_GATTC_API_DISABLE_EVT";
+ case BTA_GATTC_API_CFG_MTU_EVT:
+ return "BTA_GATTC_API_CFG_MTU_EVT";
default:
return "unknown GATTC event code";
}
diff --git a/bta/gatt/bta_gattc_utils.c b/bta/gatt/bta_gattc_utils.c
index d81e121..b52e52c 100644
--- a/bta/gatt/bta_gattc_utils.c
+++ b/bta/gatt/bta_gattc_utils.c
@@ -294,6 +294,7 @@
{
p_srcb->connected = FALSE;
p_srcb->state = BTA_GATTC_SERV_IDLE;
+ p_srcb->mtu = 0;
}
utl_freebuf((void **)&p_clcb->p_q_cmd);
@@ -557,6 +558,18 @@
}
break;
}
+ case BTA_GATTC_API_CFG_MTU_EVT:
+ {
+ len = sizeof(tBTA_GATTC_API_CFG_MTU);
+ p_clcb->p_q_cmd = (tBTA_GATTC_DATA *)GKI_getbuf(len);
+ if (p_clcb->p_q_cmd == NULL)
+ {
+ APPL_TRACE_ERROR0("allocate buffer failed for p_q_cmd");
+ return FALSE;
+ }
+ memcpy(p_clcb->p_q_cmd, p_data, len);
+ break;
+ }
default:
APPL_TRACE_ERROR1("queue unsupported command %d", p_data->hdr.event);
return FALSE;
@@ -906,7 +919,7 @@
**
*******************************************************************************/
void bta_gattc_send_open_cback( tBTA_GATTC_RCB *p_clreg, tBTA_GATT_STATUS status,
- BD_ADDR remote_bda, UINT16 conn_id)
+ BD_ADDR remote_bda, UINT16 conn_id, UINT16 mtu)
{
tBTA_GATTC cb_data;
@@ -917,6 +930,7 @@
cb_data.open.status = status;
cb_data.open.client_if = p_clreg->client_if;
cb_data.open.conn_id = conn_id;
+ cb_data.open.mtu = mtu;
bdcpy(cb_data.open.remote_bda, remote_bda);
(*p_clreg->p_cback)(BTA_GATTC_OPEN_EVT, &cb_data);
diff --git a/bta/include/bta_gatt_api.h b/bta/include/bta_gatt_api.h
index e5ce5a4..b53b180 100644
--- a/bta/include/bta_gatt_api.h
+++ b/bta/include/bta_gatt_api.h
@@ -116,6 +116,7 @@
#define BTA_GATTC_SRVC_CHG_EVT 15 /* service change event */
#define BTA_GATTC_LISTEN_EVT 16 /* listen event */
#define BTA_GATTC_ENC_CMPL_CB_EVT 17 /* encryption complete callback event */
+#define BTA_GATTC_CFG_MTU_EVT 18 /* configure MTU complete event */
typedef UINT8 tBTA_GATTC_EVT;
@@ -311,6 +312,12 @@
tBTA_GATT_SRVC_ID service_uuid;
}tBTA_GATTC_SRVC_RES;
+typedef struct
+{
+ UINT16 conn_id;
+ tBTA_GATT_STATUS status;
+ UINT16 mtu;
+}tBTA_GATTC_CFG_MTU;
typedef struct
{
@@ -318,6 +325,7 @@
UINT16 conn_id;
tBTA_GATTC_IF client_if;
BD_ADDR remote_bda;
+ UINT16 mtu;
}tBTA_GATTC_OPEN;
typedef struct
@@ -371,6 +379,7 @@
tBTA_GATTC_NOTIFY notify; /* notification/indication event data */
tBTA_GATTC_ENC_CMPL_CB enc_cmpl;
BD_ADDR remote_bda; /* service change event */
+ tBTA_GATTC_CFG_MTU cfg_mtu; /* configure MTU operation */
} tBTA_GATTC;
/* GATTC enable callback function */
@@ -1046,6 +1055,21 @@
/*******************************************************************************
+**
+** Function BTA_GATTC_ConfigureMTU
+**
+** Description Configure the MTU size in the GATT channel. This can be done
+** only once per connection.
+**
+** Parameters conn_id: connection ID.
+** mtu: desired MTU size to use.
+**
+** Returns void
+**
+*******************************************************************************/
+BTA_API extern void BTA_GATTC_ConfigureMTU (UINT16 conn_id, UINT16 mtu);
+
+/*******************************************************************************
** BTA GATT Server API
********************************************************************************/
diff --git a/btif/src/btif_core.c b/btif/src/btif_core.c
index 7d17ebf..5fcee4e 100644
--- a/btif/src/btif_core.c
+++ b/btif/src/btif_core.c
@@ -607,9 +607,6 @@
/* callback to HAL */
if (status == BTA_SUCCESS)
{
- /* initialize a2dp service */
- btif_av_init();
-
/* init rfcomm & l2cap api */
btif_sock_init();
diff --git a/btif/src/btif_dm.c b/btif/src/btif_dm.c
index cd75b3e..feed04b 100644
--- a/btif/src/btif_dm.c
+++ b/btif/src/btif_dm.c
@@ -847,6 +847,13 @@
{
BTIF_TRACE_DEBUG3("%s: Temporary key. Not storing. key_type=0x%x, is_temp=%d",
__FUNCTION__, p_auth_cmpl->key_type, pairing_cb.is_temp);
+ if(pairing_cb.is_temp)
+ {
+ BTIF_TRACE_DEBUG1("%s: sending BT_BOND_STATE_NONE for Temp pairing",
+ __FUNCTION__);
+ bond_state_changed(BT_STATUS_SUCCESS, &bd_addr, BT_BOND_STATE_NONE);
+ return;
+ }
}
}
if (p_auth_cmpl->success)
diff --git a/btif/src/btif_gatt_client.c b/btif/src/btif_gatt_client.c
index 6aab986..c788bd8 100644
--- a/btif/src/btif_gatt_client.c
+++ b/btif/src/btif_gatt_client.c
@@ -90,7 +90,8 @@
BTIF_GATTC_REFRESH,
BTIF_GATTC_READ_RSSI,
BTIF_GATTC_LISTEN,
- BTIF_GATTC_SET_ADV_DATA
+ BTIF_GATTC_SET_ADV_DATA,
+ BTIF_GATTC_CONFIGURE_MTU,
} btif_gattc_event_t;
#define BTIF_GATT_MAX_OBSERVED_DEV 40
@@ -438,6 +439,12 @@
HAL_CBACK(bt_gatt_callbacks, client->open_cb, p_data->open.conn_id
, p_data->open.status, p_data->open.client_if, &bda);
+ if (GATT_DEF_BLE_MTU_SIZE != p_data->open.mtu && p_data->open.mtu)
+ {
+ HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->open.conn_id
+ , p_data->open.status , p_data->open.mtu);
+ }
+
if (p_data->open.status == BTA_GATT_OK)
btif_gatt_check_encrypted_link(p_data->open.remote_bda);
break;
@@ -510,6 +517,14 @@
);
break;
}
+
+ case BTA_GATTC_CFG_MTU_EVT:
+ {
+ HAL_CBACK(bt_gatt_callbacks, client->configure_mtu_cb, p_data->cfg_mtu.conn_id
+ , p_data->cfg_mtu.status , p_data->cfg_mtu.mtu);
+ break;
+ }
+
default:
ALOGE("%s: Unhandled event (%d)!", __FUNCTION__, event);
break;
@@ -840,7 +855,7 @@
break;
case BTIF_GATTC_LISTEN:
-#ifdef BLE_PERIPHERAL_MODE_SUPPORT
+#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
BTA_GATTC_Listen(p_cb->client_if, p_cb->start, NULL);
#else
BTA_GATTC_Broadcast(p_cb->client_if, p_cb->start);
@@ -882,6 +897,9 @@
break;
}
+ case BTIF_GATTC_CONFIGURE_MTU:
+ BTA_GATTC_ConfigureMTU(p_cb->conn_id, p_cb->len);
+ break;
default:
ALOGE("%s: Unknown event (%d)!", __FUNCTION__, event);
@@ -1108,6 +1126,10 @@
}
}
+#if (defined(BLE_PERIPHERAL_ADV_NAME) && (BLE_PERIPHERAL_ADV_NAME == TRUE))
+ btif_cb.adv_data.mask |= BTM_BLE_AD_BIT_DEV_NAME;
+#endif
+
return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_SET_ADV_DATA,
(char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
}
@@ -1302,6 +1324,16 @@
(char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
}
+static bt_status_t btif_gattc_configure_mtu(int conn_id, int mtu)
+{
+ CHECK_BTGATT_INIT();
+ btif_gattc_cb_t btif_cb;
+ btif_cb.conn_id = conn_id;
+ btif_cb.len = mtu; // Re-use len field
+ return btif_transfer_context(btgattc_handle_event, BTIF_GATTC_CONFIGURE_MTU,
+ (char*) &btif_cb, sizeof(btif_gattc_cb_t), NULL);
+}
+
static int btif_gattc_get_device_type( const bt_bdaddr_t *bd_addr )
{
int device_type = 0;
@@ -1343,6 +1375,7 @@
btif_gattc_read_remote_rssi,
btif_gattc_get_device_type,
btif_gattc_set_adv_data,
+ btif_gattc_configure_mtu,
btif_gattc_test_command
};
diff --git a/btif/src/btif_gatt_util.c b/btif/src/btif_gatt_util.c
index ab56f99..715dcd6 100644
--- a/btif/src/btif_gatt_util.c
+++ b/btif/src/btif_gatt_util.c
@@ -271,7 +271,7 @@
static void btif_gatt_set_encryption_cb (BD_ADDR bd_addr, tBTA_STATUS result)
{
- if (result != BTA_SUCCESS)
+ if (result != BTA_SUCCESS && result != BTA_BUSY)
{
bt_bdaddr_t bda;
bdcpy(bda.address, bd_addr);
@@ -291,8 +291,10 @@
buf, sizeof(btif_dm_ble_penc_keys_t)) == BT_STATUS_SUCCESS)
&& !btif_gatt_is_link_encrypted(bd_addr))
{
+#if (!defined(BLE_DELAY_REQUEST_ENC) || (BLE_DELAY_REQUEST_ENC == FALSE))
BTA_DmSetEncryption(bd_addr,
&btif_gatt_set_encryption_cb, BTM_BLE_SEC_ENCRYPT);
+#endif
}
}
diff --git a/gki/Android.mk b/gki/Android.mk
index ed9f904..4520e45 100644
--- a/gki/Android.mk
+++ b/gki/Android.mk
@@ -11,7 +11,7 @@
$(LOCAL_PATH)/../utils/include \
$(bdroid_C_INCLUDES) \
-LOCAL_CFLAGS += -Werror -Wno-error=unused-parameter $(bdroid_CFLAGS)
+LOCAL_CFLAGS += -Werror -Wno-error=unused-parameter $(bdroid_CFLAGS) -std=c99
ifeq ($(BOARD_HAVE_BLUETOOTH_BCM),true)
LOCAL_CFLAGS += \
diff --git a/hci/Android.mk b/hci/Android.mk
index 2b1b07e..96f0813 100644
--- a/hci/Android.mk
+++ b/hci/Android.mk
@@ -25,6 +25,8 @@
endif
+LOCAL_CFLAGS += -std=c99
+
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/../utils/include
diff --git a/include/bt_target.h b/include/bt_target.h
index 8d237ec..7e77164 100644
--- a/include/bt_target.h
+++ b/include/bt_target.h
@@ -1407,6 +1407,10 @@
#define LOCAL_BLE_CONTROLLER_ID (1)
#endif
+#ifndef BTM_BLE_PRIVACY_SPT
+#define BTM_BLE_PRIVACY_SPT TRUE
+#endif
+
/******************************************************************************
**
** ATT/GATT Protocol/Profile Settings
@@ -1440,6 +1444,32 @@
#define GATT_CLIENT_ENABLED TRUE
#endif
+#ifndef BLE_PERIPHERAL_MODE_SUPPORT
+#define BLE_PERIPHERAL_MODE_SUPPORT FALSE
+#endif
+
+#ifndef BLE_PERIPHERAL_DISPLAYONLY
+#define BLE_PERIPHERAL_DISPLAYONLY FALSE
+#endif
+
+#ifndef BLE_PERIPHERAL_ADV_NAME
+#define BLE_PERIPHERAL_ADV_NAME FALSE
+#endif
+
+#ifndef BLE_DELAY_REQUEST_ENC
+/* This flag is to work around IPHONE problem, We need to wait for iPhone ready
+ before send encryption request to iPhone */
+#define BLE_DELAY_REQUEST_ENC FALSE
+#endif
+
+#ifndef GAP_TRANSPORT_SUPPORTED
+#define GAP_TRANSPORT_SUPPORTED GATT_TRANSPORT_LE_BR_EDR
+#endif
+
+#ifndef GATTP_TRANSPORT_SUPPORTED
+#define GATTP_TRANSPORT_SUPPORTED GATT_TRANSPORT_LE_BR_EDR
+#endif
+
#ifndef GATT_MAX_SR_PROFILES
#define GATT_MAX_SR_PROFILES 32 /* max is 32 */
#endif
diff --git a/main/Android.mk b/main/Android.mk
index 0850bf7..c9c2327 100644
--- a/main/Android.mk
+++ b/main/Android.mk
@@ -100,6 +100,7 @@
external/tinyxml2
LOCAL_CFLAGS += -DBUILDCFG $(bdroid_CFLAGS) -Werror -Wno-error=maybe-uninitialized -Wno-error=uninitialized -Wno-error=unused-parameter
+LOCAL_CONLYFLAGS := -std=c99
ifeq ($(TARGET_PRODUCT), full_crespo)
LOCAL_CFLAGS += -DTARGET_CRESPO
diff --git a/stack/Android.mk b/stack/Android.mk
index 92ce253..12f858e 100644
--- a/stack/Android.mk
+++ b/stack/Android.mk
@@ -32,7 +32,7 @@
$(LOCAL_PATH)/../utils/include \
$(bdroid_C_INCLUDES) \
-LOCAL_CFLAGS += $(bdroid_CFLAGS)
+LOCAL_CFLAGS += $(bdroid_CFLAGS) -std=c99
ifeq ($(BOARD_HAVE_BLUETOOTH_BCM),true)
LOCAL_CFLAGS += \
diff --git a/stack/btm/btm_acl.c b/stack/btm/btm_acl.c
index 68ac35f..0a4ed1a 100644
--- a/stack/btm/btm_acl.c
+++ b/stack/btm/btm_acl.c
@@ -179,6 +179,59 @@
/* If here, no BD Addr found */
return(xx);
}
+
+#if BTM_BLE_PRIVACY_SPT == TRUE
+/*******************************************************************************
+**
+** Function btm_ble_get_acl_remote_addr
+**
+** Description This function reads the active remote address used for the
+** connection.
+**
+** Returns success return TRUE, otherwise FALSE.
+**
+*******************************************************************************/
+BOOLEAN btm_ble_get_acl_remote_addr(tBTM_SEC_DEV_REC *p_dev_rec, BD_ADDR conn_addr,
+ tBLE_ADDR_TYPE *p_addr_type)
+{
+#if BLE_INCLUDED == TRUE
+ BOOLEAN st = TRUE;
+
+ if (p_dev_rec == NULL)
+ {
+ BTM_TRACE_ERROR0("btm_ble_get_acl_remote_addr can not find device with matching address");
+ return FALSE;
+ }
+
+ switch (p_dev_rec->ble.active_addr_type)
+ {
+ case BTM_BLE_ADDR_PSEUDO:
+ memcpy(conn_addr, p_dev_rec->bd_addr, BD_ADDR_LEN);
+ * p_addr_type = p_dev_rec->ble.ble_addr_type;
+ break;
+
+ case BTM_BLE_ADDR_RRA:
+ memcpy(conn_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
+ * p_addr_type = BLE_ADDR_RANDOM;
+ break;
+
+ case BTM_BLE_ADDR_STATIC:
+ memcpy(conn_addr, p_dev_rec->ble.static_addr, BD_ADDR_LEN);
+ * p_addr_type = p_dev_rec->ble.static_addr_type;
+ break;
+
+ default:
+ BTM_TRACE_ERROR1("Unknown active address: %d", p_dev_rec->ble.active_addr_type);
+ st = FALSE;
+ break;
+ }
+
+ return st;
+#else
+ return FALSE;
+#endif
+}
+#endif
/*******************************************************************************
**
** Function btm_acl_created
@@ -298,6 +351,10 @@
/* If here, features are not known yet */
if (p_dev_rec && is_le_link)
{
+#if BTM_BLE_PRIVACY_SPT == TRUE
+ btm_ble_get_acl_remote_addr (p_dev_rec, p->active_remote_addr,
+ &p->active_remote_addr_type);
+#endif
btm_establish_continue(p);
#if (!defined(BTA_SKIP_BLE_READ_REMOTE_FEAT) || BTA_SKIP_BLE_READ_REMOTE_FEAT == FALSE)
diff --git a/stack/btm/btm_ble.c b/stack/btm/btm_ble.c
index 5e54499..5b61b76 100644
--- a/stack/btm/btm_ble.c
+++ b/stack/btm/btm_ble.c
@@ -35,6 +35,9 @@
#include "btm_ble_api.h"
#include "smp_api.h"
#include "l2c_int.h"
+#if (defined BLE_BRCM_INCLUDED && BLE_BRCM_INCLUDED == TRUE)
+#include "brcm_ble.h"
+#endif
#include "gap_api.h"
#include "bt_utils.h"
@@ -341,12 +344,24 @@
{
BOOLEAN st = TRUE;
tBTM_SEC_DEV_REC *p_dev_rec = btm_find_dev(pseudo_addr);
+#if BTM_BLE_PRIVACY_SPT == TRUE
+ tACL_CONN *p = btm_bda_to_acl (pseudo_addr);
+ if (p == NULL)
+ {
+ BTM_TRACE_ERROR0("BTM_ReadRemoteConnectionAddr can not find matching address");
+ return FALSE;
+ }
+
+ memcpy(conn_addr, p->active_remote_addr, BD_ADDR_LEN);
+ *p_addr_type = p->active_remote_addr_type;
+#else
memcpy(conn_addr, pseudo_addr, BD_ADDR_LEN);
if (p_dev_rec != NULL)
{
*p_addr_type = p_dev_rec->ble.ble_addr_type;
}
+#endif
return st;
}
/*******************************************************************************
@@ -1462,6 +1477,61 @@
return callback_rc;
}
+#if (BTM_BLE_PRIVACY_SPT == TRUE )
+/*******************************************************************************
+**
+** Function btm_ble_resolve_random_addr_on_conn_cmpl
+**
+** Description resolve random address complete on connection complete event.
+**
+** Returns void
+**
+*******************************************************************************/
+static void btm_ble_resolve_random_addr_on_conn_cmpl(void * p_rec, void *p_data)
+{
+ UINT8 *p = (UINT8 *)p_data;
+ tBTM_SEC_DEV_REC *match_rec = (tBTM_SEC_DEV_REC *) p_rec;
+ UINT8 role, status, bda_type;
+ UINT16 handle;
+ BD_ADDR bda;
+ UINT16 conn_interval, conn_latency, conn_timeout;
+ BOOLEAN match = FALSE;
+
+ STREAM_TO_UINT8 (status, p);
+ STREAM_TO_UINT16 (handle, p);
+ STREAM_TO_UINT8 (role, p);
+ STREAM_TO_UINT8 (bda_type, p);
+ STREAM_TO_BDADDR (bda, p);
+ STREAM_TO_UINT16 (conn_interval, p);
+ STREAM_TO_UINT16 (conn_latency, p);
+ STREAM_TO_UINT16 (conn_timeout, p);
+
+ handle = HCID_GET_HANDLE (handle);
+
+ BTM_TRACE_EVENT0 ("btm_ble_resolve_random_addr_master_cmpl");
+
+ if (match_rec)
+ {
+ BTM_TRACE_ERROR0("Random match");
+ match = TRUE;
+ match_rec->ble.active_addr_type = BTM_BLE_ADDR_RRA;
+ memcpy(match_rec->ble.cur_rand_addr, bda, BD_ADDR_LEN);
+ memcpy(bda, match_rec->bd_addr, BD_ADDR_LEN);
+ }
+ else
+ {
+ BTM_TRACE_ERROR0("Random unmatch");
+ }
+
+ btm_ble_connected(bda, handle, HCI_ENCRYPT_MODE_DISABLED, role, bda_type, match);
+
+ l2cble_conn_comp (handle, role, bda, bda_type, conn_interval,
+ conn_latency, conn_timeout);
+
+ return;
+}
+#endif
+
/*******************************************************************************
**
** Function btm_ble_connected
@@ -1516,9 +1586,18 @@
p_dev_rec->hci_handle = handle;
p_dev_rec->ble.ble_addr_type = addr_type;
+ p_dev_rec->role_master = FALSE;
if (role == HCI_ROLE_MASTER)
p_dev_rec->role_master = TRUE;
+#if (defined BTM_BLE_PRIVACY_SPT && BTM_BLE_PRIVACY_SPT == TRUE)
+ if (!addr_matched)
+ p_dev_rec->ble.active_addr_type = BTM_BLE_ADDR_PSEUDO;
+
+ if (p_dev_rec->ble.ble_addr_type == BLE_ADDR_RANDOM && !addr_matched)
+ memcpy(p_dev_rec->ble.cur_rand_addr, bda, BD_ADDR_LEN);
+#endif
+
if (role == HCI_ROLE_SLAVE)
p_cb->inq_var.adv_mode = BTM_BLE_ADV_DISABLE;
p_cb->inq_var.directed_conn = FALSE;
@@ -1534,6 +1613,9 @@
******************************************************************************/
void btm_ble_conn_complete(UINT8 *p, UINT16 evt_len)
{
+#if (BTM_BLE_PRIVACY_SPT == TRUE )
+ UINT8 *p_data = p;
+#endif
UINT8 role, status, bda_type;
UINT16 handle;
BD_ADDR bda;
@@ -1549,14 +1631,25 @@
if (status == 0)
{
- STREAM_TO_UINT16 (conn_interval, p);
- STREAM_TO_UINT16 (conn_latency, p);
- STREAM_TO_UINT16 (conn_timeout, p);
- handle = HCID_GET_HANDLE (handle);
+#if (BTM_BLE_PRIVACY_SPT == TRUE )
+ /* possiblly receive connection complete with resolvable random on
+ slave role while the device has been paired */
+ if (!match && BTM_BLE_IS_RESOLVE_BDA(bda))
+ {
+ btm_ble_resolve_random_addr(bda, btm_ble_resolve_random_addr_on_conn_cmpl, p_data);
+ }
+ else
+#endif
+ {
+ STREAM_TO_UINT16 (conn_interval, p);
+ STREAM_TO_UINT16 (conn_latency, p);
+ STREAM_TO_UINT16 (conn_timeout, p);
+ handle = HCID_GET_HANDLE (handle);
- btm_ble_connected(bda, handle, HCI_ENCRYPT_MODE_DISABLED, role, bda_type, match);
- l2cble_conn_comp (handle, role, bda, bda_type, conn_interval,
+ btm_ble_connected(bda, handle, HCI_ENCRYPT_MODE_DISABLED, role, bda_type, match);
+ l2cble_conn_comp (handle, role, bda, bda_type, conn_interval,
conn_latency, conn_timeout);
+ }
}
else
{
diff --git a/stack/btm/btm_ble_addr.c b/stack/btm/btm_ble_addr.c
index a3f6a7e..3c646e9 100644
--- a/stack/btm/btm_ble_addr.c
+++ b/stack/btm/btm_ble_addr.c
@@ -287,7 +287,7 @@
{
p_dev_rec = &btm_cb.sec_dev_rec[rec_index];
- BTM_TRACE_ERROR2("sec_flags = %02x device_type = %d", p_dev_rec->sec_flags, p_dev_rec->device_type);
+ BTM_TRACE_DEBUG2("sec_flags = %02x device_type = %d", p_dev_rec->sec_flags, p_dev_rec->device_type);
if ((p_dev_rec->device_type == BT_DEVICE_TYPE_BLE) &&
(p_dev_rec->ble.key_type & BTM_LE_KEY_PID))
diff --git a/stack/btm/btm_ble_gap.c b/stack/btm/btm_ble_gap.c
index f9ef2c6..6963e2a 100644
--- a/stack/btm/btm_ble_gap.c
+++ b/stack/btm/btm_ble_gap.c
@@ -288,6 +288,49 @@
#endif
}
+#if BTM_BLE_PRIVACY_SPT == TRUE
+/*******************************************************************************
+**
+** Function btm_ble_resolve_random_addr_on_adv
+**
+** Description resolve random address complete callback.
+**
+** Returns void
+**
+*******************************************************************************/
+static void btm_ble_resolve_random_addr_on_adv(void * p_rec, void *p)
+{
+ tBTM_SEC_DEV_REC *match_rec = (tBTM_SEC_DEV_REC *) p_rec;
+ UINT8 addr_type = BLE_ADDR_RANDOM;
+ BD_ADDR bda;
+ UINT8 *pp = (UINT8 *)p + 1;
+ UINT8 evt_type;
+
+ BTM_TRACE_EVENT0 ("btm_ble_resolve_random_addr_on_adv ");
+
+ STREAM_TO_UINT8 (evt_type, pp);
+ STREAM_TO_UINT8 (addr_type, pp);
+ STREAM_TO_BDADDR (bda, pp);
+
+ if (match_rec)
+ {
+ BTM_TRACE_ERROR0("Random match");
+ match_rec->ble.active_addr_type = BTM_BLE_ADDR_RRA;
+ memcpy(match_rec->ble.cur_rand_addr, bda, BD_ADDR_LEN);
+ memcpy(bda, match_rec->bd_addr, BD_ADDR_LEN);
+ addr_type = match_rec->ble.ble_addr_type;
+ }
+ else
+ {
+ BTM_TRACE_ERROR0("Random unmatch");
+ }
+
+ btm_ble_process_adv_pkt_cont(bda, addr_type, evt_type, pp);
+
+ return;
+}
+#endif
+
/*******************************************************************************
**
** Function BTM_BleSetBgConnType
@@ -1676,6 +1719,9 @@
BD_ADDR bda;
UINT8 evt_type = 0, *p = p_data;
UINT8 addr_type = 0;
+#if (defined BTM_BLE_PRIVACY_SPT && BTM_BLE_PRIVACY_SPT == TRUE)
+ BOOLEAN match = FALSE;
+#endif
/* always get one device at a time */
p ++;
@@ -1702,7 +1748,19 @@
btm_cb.ble_ctr_cb.p_select_cback == NULL))
return;
- btm_ble_process_adv_pkt_cont(bda, addr_type, evt_type, p);
+#if (defined BTM_BLE_PRIVACY_SPT && BTM_BLE_PRIVACY_SPT == TRUE)
+#if SMP_INCLUDED == TRUE
+ /* always do RRA resolution on host */
+ if (!match && BTM_BLE_IS_RESOLVE_BDA(bda))
+ {
+ btm_ble_resolve_random_addr(bda, btm_ble_resolve_random_addr_on_adv, p_data);
+ }
+ else
+#endif
+#endif
+ {
+ btm_ble_process_adv_pkt_cont(bda, addr_type, evt_type, p);
+ }
}
/*******************************************************************************
diff --git a/stack/btm/btm_int.h b/stack/btm/btm_int.h
index b030c2a..5129efc 100644
--- a/stack/btm/btm_int.h
+++ b/stack/btm/btm_int.h
@@ -493,6 +493,14 @@
tBLE_ADDR_TYPE ble_addr_type; /* LE device type: public or random address */
tBLE_ADDR_TYPE static_addr_type; /* static address type */
BD_ADDR static_addr; /* static address */
+#if BTM_BLE_PRIVACY_SPT == TRUE
+ BD_ADDR cur_rand_addr; /* current random address */
+
+#define BTM_BLE_ADDR_PSEUDO 0 /* address index device record */
+#define BTM_BLE_ADDR_RRA 1 /* cur_rand_addr */
+#define BTM_BLE_ADDR_STATIC 2 /* static_addr */
+ UINT8 active_addr_type;
+#endif
#if SMP_INCLUDED == TRUE
tBTM_LE_KEY_TYPE key_type; /* bit mask of valid key types in record */
diff --git a/stack/gatt/gatt_api.c b/stack/gatt/gatt_api.c
index 232b191..54ea0f0 100644
--- a/stack/gatt/gatt_api.c
+++ b/stack/gatt/gatt_api.c
@@ -1295,7 +1295,7 @@
gatt_deregister_bgdev_list(gatt_if);
/* update the listen mode */
-#ifdef BLE_PERIPHERAL_MODE_SUPPORT
+#if (defined(BLE_PERIPHERAL_MODE_SUPPORT) && (BLE_PERIPHERAL_MODE_SUPPORT == TRUE))
GATT_Listen(gatt_if, FALSE, NULL);
#endif
diff --git a/stack/gatt/gatt_db.c b/stack/gatt/gatt_db.c
index 3afda56..268bc7d 100644
--- a/stack/gatt/gatt_db.c
+++ b/stack/gatt/gatt_db.c
@@ -32,6 +32,7 @@
#include <string.h>
#include "gatt_int.h"
#include "l2c_api.h"
+#include "btm_int.h"
/********************************************************************************
** L O C A L F U N C T I O N P R O T O T Y P E S *
@@ -329,6 +330,9 @@
UINT16 len = 0;
UINT8 *p = (UINT8 *)(p_rsp + 1) + p_rsp->len + L2CAP_MIN_OFFSET;
tBT_UUID attr_uuid;
+#if (defined(BLE_DELAY_REQUEST_ENC) && (BLE_DELAY_REQUEST_ENC == TRUE))
+ UINT8 flag;
+#endif
if (p_db && p_db->p_attr_list)
{
@@ -393,6 +397,26 @@
}
}
+#if (defined(BLE_DELAY_REQUEST_ENC) && (BLE_DELAY_REQUEST_ENC == TRUE))
+ if (BTM_GetSecurityFlags(p_tcb->peer_bda, &flag))
+ {
+ if ((p_tcb->att_lcid == L2CAP_ATT_CID) && (status == GATT_PENDING) &&
+ (type.uu.uuid16 == GATT_UUID_GAP_DEVICE_NAME))
+ {
+ if ((flag & (BTM_SEC_LINK_KEY_KNOWN | BTM_SEC_FLAG_ENCRYPTED)) ==
+ BTM_SEC_LINK_KEY_KNOWN)
+ {
+ tACL_CONN *p;
+ p = btm_bda_to_acl(p_tcb->peer_bda);
+ if ((p != NULL) && (p->link_role == BTM_ROLE_MASTER))
+ {
+ tBTM_BLE_SEC_ACT sec_act = BTM_BLE_SEC_ENCRYPT;
+ btm_ble_set_encryption(p_tcb->peer_bda, &sec_act, p->link_role);
+ }
+ }
+ }
+ }
+#endif
return status;
}
diff --git a/stack/gatt/gatt_sr.c b/stack/gatt/gatt_sr.c
index 88040fe..c006dd2 100644
--- a/stack/gatt/gatt_sr.c
+++ b/stack/gatt/gatt_sr.c
@@ -929,6 +929,8 @@
else
p_tcb->payload_size = mtu;
+ GATT_TRACE_ERROR1("MTU request PDU with MTU size %d", p_tcb->payload_size);
+
if ((p_buf = attp_build_sr_msg(p_tcb, GATT_RSP_MTU, (tGATT_SR_MSG *) &p_tcb->payload_size)) != NULL)
{
attp_send_sr_msg (p_tcb, p_buf);
diff --git a/stack/include/btm_ble_api.h b/stack/include/btm_ble_api.h
index 0dcc8d2..584ce9a 100644
--- a/stack/include/btm_ble_api.h
+++ b/stack/include/btm_ble_api.h
@@ -276,8 +276,8 @@
tBTM_BLE_MANU manu; /* manufactuer data */
tBTM_BLE_INT_RANGE int_range; /* slave prefered conn interval range */
tBTM_BLE_SERVICE services; /* services */
- UINT8 flag;
UINT16 appearance;
+ UINT8 flag;
tBTM_BLE_PROPRIETARY *p_proprietary;
}tBTM_BLE_ADV_DATA;
diff --git a/stack/include/gap_api.h b/stack/include/gap_api.h
index 05affed..a17510f 100644
--- a/stack/include/gap_api.h
+++ b/stack/include/gap_api.h
@@ -146,11 +146,6 @@
#define GAP_PREFER_CONN_SP_TOUT 2000
#endif
-#if BLE_INCLUDED == TRUE
-#ifndef GAP_TRANSPORT_SUPPORTED
-#define GAP_TRANSPORT_SUPPORTED GATT_TRANSPORT_LE_BR_EDR
-#endif
-#endif
/*****************************************************************************
** Type Definitions
*****************************************************************************/
diff --git a/stack/include/gatt_api.h b/stack/include/gatt_api.h
index d9704b7..f3df8b7 100644
--- a/stack/include/gatt_api.h
+++ b/stack/include/gatt_api.h
@@ -137,10 +137,6 @@
#define GATT_MAX_SCCB 10
#endif
-#ifndef GATTP_TRANSPORT_SUPPORTED
-#define GATTP_TRANSPORT_SUPPORTED GATT_TRANSPORT_LE_BR_EDR
-#endif
-
/* GATT notification caching timer, default to be three seconds
*/
diff --git a/stack/l2cap/l2c_ble.c b/stack/l2cap/l2c_ble.c
index 2f2646e..ba0d7ec 100644
--- a/stack/l2cap/l2c_ble.c
+++ b/stack/l2cap/l2c_ble.c
@@ -616,6 +616,14 @@
init_addr_type = p_lcb->ble_addr_type;
memcpy(init_addr, p_lcb->remote_bd_addr, BD_ADDR_LEN);
+#if BTM_BLE_PRIVACY_SPT == TRUE
+ if (p_dev_rec->ble.active_addr_type == BTM_BLE_ADDR_RRA)
+ {
+ init_addr_type = BLE_ADDR_RANDOM;
+ memcpy(init_addr, p_dev_rec->ble.cur_rand_addr, BD_ADDR_LEN);
+ }
+#endif
+
if (!btsnd_hcic_ble_create_ll_conn (scan_int,/* UINT16 scan_int */
scan_win, /* UINT16 scan_win */
FALSE, /* UINT8 white_list */
diff --git a/stack/smp/smp_act.c b/stack/smp/smp_act.c
index 3370a2c..47cd2c9 100644
--- a/stack/smp/smp_act.c
+++ b/stack/smp/smp_act.c
@@ -108,6 +108,12 @@
{
p_cb->loc_auth_req = cb_data.io_req.auth_req;
p_cb->loc_io_caps = cb_data.io_req.io_cap;
+#if (defined(BLE_PERIPHERAL_DISPLAYONLY) && (BLE_PERIPHERAL_DISPLAYONLY == TRUE))
+ if (p_cb->role == HCI_ROLE_SLAVE)
+ {
+ p_cb->loc_io_caps = SMP_IO_CAP_OUT;
+ }
+#endif
p_cb->loc_oob_flag = cb_data.io_req.oob_data;
p_cb->loc_enc_size = cb_data.io_req.max_key_size;
p_cb->loc_i_key = cb_data.io_req.init_keys;
diff --git a/test/bluedroidtest/Android.mk b/test/bluedroidtest/Android.mk
index 0c6693a..864bff8 100644
--- a/test/bluedroidtest/Android.mk
+++ b/test/bluedroidtest/Android.mk
@@ -23,6 +23,8 @@
LOCAL_C_INCLUDES :=
+LOCAL_CFLAGS += -std=c99
+
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE:= bdt
diff --git a/utils/Android.mk b/utils/Android.mk
index c74cd2d..4589e5c 100644
--- a/utils/Android.mk
+++ b/utils/Android.mk
@@ -6,7 +6,7 @@
$(LOCAL_PATH)/../gki/ulinux \
$(bdroid_C_INCLUDES)
-LOCAL_CFLAGS += -Werror $(bdroid_CFLAGS)
+LOCAL_CFLAGS += -Werror $(bdroid_CFLAGS) -std=c99
LOCAL_PRELINK_MODULE:=false
LOCAL_SRC_FILES:= \
diff --git a/utils/include/bt_utils.h b/utils/include/bt_utils.h
index ee21861..512e1b5 100644
--- a/utils/include/bt_utils.h
+++ b/utils/include/bt_utils.h
@@ -40,7 +40,5 @@
void bt_utils_cleanup();
void raise_priority_a2dp(tHIGH_PRIORITY_TASK high_task);
void adjust_priority_a2dp(int start);
-
#define UNUSED(x) (void)(x)
-
#endif /* BT_UTILS_H */