Use references in GATT client/server API (3/3)
This allows to get rid of some unnecessary null checks, and guarantee
proper values are passed.
Test: compilation test
Change-Id: I1d6ab95ef52067fa1461c432b9c162da0a25c6ac
diff --git a/jni/com_android_bluetooth_gatt.cpp b/jni/com_android_bluetooth_gatt.cpp
index 1f7b8e6..96156dd 100644
--- a/jni/com_android_bluetooth_gatt.cpp
+++ b/jni/com_android_bluetooth_gatt.cpp
@@ -40,7 +40,7 @@
#define BD_ADDR_LEN 6
-#define UUID_PARAMS(uuid_ptr) uuid_lsb(uuid_ptr), uuid_msb(uuid_ptr)
+#define UUID_PARAMS(uuid) uuid_lsb(uuid), uuid_msb(uuid)
static void set_uuid(uint8_t* uuid, jlong uuid_msb, jlong uuid_lsb) {
for (int i = 0; i != 8; ++i) {
@@ -49,23 +49,23 @@
}
}
-static uint64_t uuid_lsb(const bt_uuid_t* uuid) {
+static uint64_t uuid_lsb(const bt_uuid_t& uuid) {
uint64_t lsb = 0;
for (int i = 7; i >= 0; i--) {
lsb <<= 8;
- lsb |= uuid->uu[i];
+ lsb |= uuid.uu[i];
}
return lsb;
}
-static uint64_t uuid_msb(const bt_uuid_t* uuid) {
+static uint64_t uuid_msb(const bt_uuid_t& uuid) {
uint64_t msb = 0;
for (int i = 15; i >= 8; i--) {
msb <<= 8;
- msb |= uuid->uu[i];
+ msb |= uuid.uu[i];
}
return msb;
@@ -101,15 +101,17 @@
}
}
-static void jstr2bdaddr(JNIEnv* env, bt_bdaddr_t* bda, jstring address) {
+static bt_bdaddr_t str2addr(JNIEnv* env, jstring address) {
+ bt_bdaddr_t bda;
const char* c_bda = env->GetStringUTFChars(address, NULL);
- if (c_bda != NULL && bda != NULL && strlen(c_bda) == 17) {
- bd_addr_str_to_addr(c_bda, bda->address);
- env->ReleaseStringUTFChars(address, c_bda);
- }
+ if (!c_bda || strlen(c_bda) != 17) return bda;
+
+ bd_addr_str_to_addr(c_bda, bda.address);
+ env->ReleaseStringUTFChars(address, c_bda);
+ return bda;
}
-static jstring bdaddr2newjstr(JNIEnv* env, bt_bdaddr_t* bda) {
+static jstring bdaddr2newjstr(JNIEnv* env, const bt_bdaddr_t* bda) {
char c_address[32];
snprintf(c_address, sizeof(c_address), "%02X:%02X:%02X:%02X:%02X:%02X",
bda->address[0], bda->address[1], bda->address[2], bda->address[3],
@@ -219,7 +221,8 @@
* BTA client callbacks
*/
-void btgattc_register_app_cb(int status, int clientIf, bt_uuid_t* app_uuid) {
+void btgattc_register_app_cb(int status, int clientIf,
+ const bt_uuid_t& app_uuid) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientRegistered, status,
@@ -248,22 +251,24 @@
periodic_adv_int, jb.get());
}
-void btgattc_open_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) {
+void btgattc_open_cb(int conn_id, int status, int clientIf,
+ const bt_bdaddr_t& bda) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnected, clientIf,
conn_id, status, address.get());
}
-void btgattc_close_cb(int conn_id, int status, int clientIf, bt_bdaddr_t* bda) {
+void btgattc_close_cb(int conn_id, int status, int clientIf,
+ const bt_bdaddr_t& bda) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onDisconnected, clientIf,
conn_id, status, address.get());
}
@@ -285,19 +290,19 @@
conn_id, status, registered, handle);
}
-void btgattc_notify_cb(int conn_id, btgatt_notify_params_t* p_data) {
+void btgattc_notify_cb(int conn_id, const btgatt_notify_params_t& p_data) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(
- sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &p_data->bda));
+ sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &p_data.bda));
ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(),
- sCallbackEnv->NewByteArray(p_data->len));
- sCallbackEnv->SetByteArrayRegion(jb.get(), 0, p_data->len,
- (jbyte*)p_data->value);
+ sCallbackEnv->NewByteArray(p_data.len));
+ sCallbackEnv->SetByteArrayRegion(jb.get(), 0, p_data.len,
+ (jbyte*)p_data.value);
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onNotify, conn_id,
- address.get(), p_data->handle, p_data->is_notify,
+ address.get(), p_data.handle, p_data.is_notify,
jb.get());
}
@@ -338,21 +343,21 @@
}
void btgattc_read_descriptor_cb(int conn_id, int status,
- btgatt_read_params_t* p_data) {
+ const btgatt_read_params_t& p_data) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jbyteArray> jb(sCallbackEnv.get(), NULL);
- if (p_data->value.len != 0) {
- jb.reset(sCallbackEnv->NewByteArray(p_data->value.len));
- sCallbackEnv->SetByteArrayRegion(jb.get(), 0, p_data->value.len,
- (jbyte*)p_data->value.value);
+ if (p_data.value.len != 0) {
+ jb.reset(sCallbackEnv->NewByteArray(p_data.value.len));
+ sCallbackEnv->SetByteArrayRegion(jb.get(), 0, p_data.value.len,
+ (jbyte*)p_data.value.value);
} else {
jb.reset(sCallbackEnv->NewByteArray(1));
}
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadDescriptor, conn_id,
- status, p_data->handle, jb.get());
+ status, p_data.handle, jb.get());
}
void btgattc_write_descriptor_cb(int conn_id, int status, uint16_t handle) {
@@ -363,13 +368,13 @@
status, handle);
}
-void btgattc_remote_rssi_cb(int client_if, bt_bdaddr_t* bda, int rssi,
+void btgattc_remote_rssi_cb(int client_if, const bt_bdaddr_t& bda, int rssi,
int status) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onReadRemoteRssi,
client_if, address.get(), rssi, status);
@@ -488,7 +493,7 @@
ScopedLocalRef<jobject> uuid(
env, env->NewObject(uuidClazz.get(), uuidConstructor,
- uuid_msb(&curr.uuid), uuid_lsb(&curr.uuid)));
+ uuid_msb(curr.uuid), uuid_lsb(curr.uuid)));
fid = env->GetFieldID(gattDbElementClazz.get(), "uuid", "Ljava/util/UUID;");
env->SetObjectField(element.get(), fid, uuid.get());
@@ -511,7 +516,8 @@
}
}
-void btgattc_get_gatt_db_cb(int conn_id, btgatt_db_element_t* db, int count) {
+void btgattc_get_gatt_db_cb(int conn_id, const btgatt_db_element_t* db,
+ int count) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
@@ -579,7 +585,7 @@
* BTA server callbacks
*/
-void btgatts_register_app_cb(int status, int server_if, bt_uuid_t* uuid) {
+void btgatts_register_app_cb(int status, int server_if, const bt_uuid_t& uuid) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerRegistered, status,
@@ -587,12 +593,12 @@
}
void btgatts_connection_cb(int conn_id, int server_if, int connected,
- bt_bdaddr_t* bda) {
+ const bt_bdaddr_t& bda) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientConnected,
address.get(), connected, conn_id, server_if);
}
@@ -631,41 +637,42 @@
}
void btgatts_request_read_characteristic_cb(int conn_id, int trans_id,
- bt_bdaddr_t* bda, int attr_handle,
- int offset, bool is_long) {
+ const bt_bdaddr_t& bda,
+ int attr_handle, int offset,
+ bool is_long) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerReadCharacteristic,
address.get(), conn_id, trans_id, attr_handle,
offset, is_long);
}
void btgatts_request_read_descriptor_cb(int conn_id, int trans_id,
- bt_bdaddr_t* bda, int attr_handle,
+ const bt_bdaddr_t& bda, int attr_handle,
int offset, bool is_long) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerReadDescriptor,
address.get(), conn_id, trans_id, attr_handle,
offset, is_long);
}
void btgatts_request_write_characteristic_cb(int conn_id, int trans_id,
- bt_bdaddr_t* bda, int attr_handle,
- int offset, bool need_rsp,
- bool is_prep,
+ const bt_bdaddr_t& bda,
+ int attr_handle, int offset,
+ bool need_rsp, bool is_prep,
std::vector<uint8_t> value) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
ScopedLocalRef<jbyteArray> val(sCallbackEnv.get(),
sCallbackEnv->NewByteArray(value.size()));
if (val.get())
@@ -678,15 +685,15 @@
}
void btgatts_request_write_descriptor_cb(int conn_id, int trans_id,
- bt_bdaddr_t* bda, int attr_handle,
- int offset, bool need_rsp,
- bool is_prep,
+ const bt_bdaddr_t& bda,
+ int attr_handle, int offset,
+ bool need_rsp, bool is_prep,
std::vector<uint8_t> value) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
ScopedLocalRef<jbyteArray> val(sCallbackEnv.get(),
sCallbackEnv->NewByteArray(value.size()));
if (val.get())
@@ -698,13 +705,13 @@
val.get());
}
-void btgatts_request_exec_write_cb(int conn_id, int trans_id, bt_bdaddr_t* bda,
- int exec_write) {
+void btgatts_request_exec_write_cb(int conn_id, int trans_id,
+ const bt_bdaddr_t& bda, int exec_write) {
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
ScopedLocalRef<jstring> address(sCallbackEnv.get(),
- bdaddr2newjstr(sCallbackEnv.get(), bda));
+ bdaddr2newjstr(sCallbackEnv.get(), &bda));
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onExecuteWrite,
address.get(), conn_id, trans_id, exec_write);
}
@@ -955,9 +962,7 @@
static int gattClientGetDeviceTypeNative(JNIEnv* env, jobject object,
jstring address) {
if (!sGattIf) return 0;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- return sGattIf->client->get_device_type(&bda);
+ return sGattIf->client->get_device_type(str2addr(env, address));
}
static void gattClientRegisterAppNative(JNIEnv* env, jobject object,
@@ -967,7 +972,7 @@
if (!sGattIf) return;
set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb);
- sGattIf->client->register_client(&uuid);
+ sGattIf->client->register_client(uuid);
}
static void gattClientUnregisterAppNative(JNIEnv* env, jobject object,
@@ -981,7 +986,7 @@
CallbackEnv sCallbackEnv(__func__);
if (!sCallbackEnv.valid()) return;
sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onScannerRegistered,
- status, scannerId, UUID_PARAMS(&app_uuid));
+ status, scannerId, UUID_PARAMS(app_uuid));
}
static void registerScannerNative(JNIEnv* env, jobject object,
@@ -1011,19 +1016,15 @@
jint transport, jint initiating_phys) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- sGattIf->client->connect(clientif, &bda, isDirect, transport,
- initiating_phys);
+ sGattIf->client->connect(clientif, str2addr(env, address), isDirect,
+ transport, initiating_phys);
}
static void gattClientDisconnectNative(JNIEnv* env, jobject object,
jint clientIf, jstring address,
jint conn_id) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- sGattIf->client->disconnect(clientIf, &bda, conn_id);
+ sGattIf->client->disconnect(clientIf, str2addr(env, address), conn_id);
}
static void gattClientSetPreferredPhyNative(JNIEnv* env, jobject object,
@@ -1031,9 +1032,8 @@
jint tx_phy, jint rx_phy,
jint phy_options) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- sGattIf->client->set_preferred_phy(bda, tx_phy, rx_phy, phy_options);
+ sGattIf->client->set_preferred_phy(str2addr(env, address), tx_phy, rx_phy,
+ phy_options);
}
static void readClientPhyCb(uint8_t clientIf, bt_bdaddr_t bda, uint8_t tx_phy,
@@ -1052,9 +1052,7 @@
jstring address) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
-
+ bt_bdaddr_t bda = str2addr(env, address);
sGattIf->client->read_phy(bda, base::Bind(&readClientPhyCb, clientIf, bda));
}
@@ -1062,10 +1060,7 @@
jstring address) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
-
- sGattIf->client->refresh(clientIf, &bda);
+ sGattIf->client->refresh(clientIf, str2addr(env, address));
}
static void gattClientSearchServiceNative(JNIEnv* env, jobject object,
@@ -1087,7 +1082,7 @@
bt_uuid_t uuid;
set_uuid(uuid.uu, service_uuid_msb, service_uuid_lsb);
- sGattIf->client->btif_gattc_discover_service_by_uuid(conn_id, &uuid);
+ sGattIf->client->btif_gattc_discover_service_by_uuid(conn_id, uuid);
}
static void gattClientGetGattDbNative(JNIEnv* env, jobject object,
@@ -1112,7 +1107,7 @@
bt_uuid_t uuid;
set_uuid(uuid.uu, uuid_msb, uuid_lsb);
- sGattIf->client->read_using_characteristic_uuid(conn_id, &uuid, s_handle,
+ sGattIf->client->read_using_characteristic_uuid(conn_id, uuid, s_handle,
e_handle, authReq);
}
@@ -1183,19 +1178,16 @@
bd_addr_str_to_addr(c_address, bd_addr.address);
if (enable)
- sGattIf->client->register_for_notification(clientIf, &bd_addr, handle);
+ sGattIf->client->register_for_notification(clientIf, bd_addr, handle);
else
- sGattIf->client->deregister_for_notification(clientIf, &bd_addr, handle);
+ sGattIf->client->deregister_for_notification(clientIf, bd_addr, handle);
}
static void gattClientReadRemoteRssiNative(JNIEnv* env, jobject object,
jint clientif, jstring address) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
-
- sGattIf->client->read_remote_rssi(clientif, &bda);
+ sGattIf->client->read_remote_rssi(clientif, str2addr(env, address));
}
void set_scan_params_cmpl_cb(int client_if, uint8_t status) {
@@ -1309,8 +1301,7 @@
switch (filt_type) {
case 0: // BTM_BLE_PF_ADDR_FILTER
{
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
+ bt_bdaddr_t bda = str2addr(env, address);
sGattIf->scanner->ScanFilterAddRemove(
action, filt_type, filt_index, 0, 0, NULL, NULL, &bda, addr_type, {},
{}, base::Bind(&scan_filter_cfg_cb, client_if));
@@ -1451,10 +1442,8 @@
jint max_interval, jint latency,
jint timeout) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- sGattIf->client->conn_parameter_update(&bda, min_interval, max_interval,
- latency, timeout);
+ sGattIf->client->conn_parameter_update(str2addr(env, address), min_interval,
+ max_interval, latency, timeout);
}
void batchscan_cfg_storage_cb(uint8_t client_if, uint8_t status) {
@@ -1514,7 +1503,7 @@
bt_uuid_t uuid;
if (!sGattIf) return;
set_uuid(uuid.uu, app_uuid_msb, app_uuid_lsb);
- sGattIf->server->register_server(&uuid);
+ sGattIf->server->register_server(uuid);
}
static void gattServerUnregisterAppNative(JNIEnv* env, jobject object,
@@ -1532,16 +1521,14 @@
const char* c_address = env->GetStringUTFChars(address, NULL);
bd_addr_str_to_addr(c_address, bd_addr.address);
- sGattIf->server->connect(server_if, &bd_addr, is_direct, transport);
+ sGattIf->server->connect(server_if, bd_addr, is_direct, transport);
}
static void gattServerDisconnectNative(JNIEnv* env, jobject object,
jint serverIf, jstring address,
jint conn_id) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
- sGattIf->server->disconnect(serverIf, &bda, conn_id);
+ sGattIf->server->disconnect(serverIf, str2addr(env, address), conn_id);
}
static void gattServerSetPreferredPhyNative(JNIEnv* env, jobject object,
@@ -1549,8 +1536,7 @@
jint tx_phy, jint rx_phy,
jint phy_options) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
+ bt_bdaddr_t bda = str2addr(env, address);
sGattIf->server->set_preferred_phy(bda, tx_phy, rx_phy, phy_options);
}
@@ -1570,8 +1556,7 @@
jstring address) {
if (!sGattIf) return;
- bt_bdaddr_t bda;
- jstr2bdaddr(env, &bda, address);
+ bt_bdaddr_t bda = str2addr(env, address);
sGattIf->server->read_phy(bda, base::Bind(&readServerPhyCb, serverIf, bda));
}
@@ -1707,7 +1692,7 @@
env->ReleaseByteArrayElements(val, array, JNI_ABORT);
}
- sGattIf->server->send_response(conn_id, trans_id, status, &response);
+ sGattIf->server->send_response(conn_id, trans_id, status, response);
}
static void advertiseClassInitNative(JNIEnv* env, jclass clazz) {
@@ -2067,12 +2052,10 @@
jint reg_id) {
if (!sGattIf) return;
- bt_bdaddr_t tmp;
- jstr2bdaddr(env, &tmp, address);
-
- sGattIf->scanner->StartSync(
- sid, tmp, skip, timeout, base::Bind(&onSyncStarted, reg_id),
- base::Bind(&onSyncReport), base::Bind(&onSyncLost));
+ sGattIf->scanner->StartSync(sid, str2addr(env, address), skip, timeout,
+ base::Bind(&onSyncStarted, reg_id),
+ base::Bind(&onSyncReport),
+ base::Bind(&onSyncLost));
}
static void stopSyncNative(int sync_handle) {
@@ -2086,8 +2069,7 @@
jint p1, jint p2, jint p3, jint p4, jint p5) {
if (!sGattIf) return;
- bt_bdaddr_t bt_bda1;
- jstr2bdaddr(env, &bt_bda1, bda1);
+ bt_bdaddr_t bt_bda1 = str2addr(env, bda1);
bt_uuid_t uuid1;
set_uuid(uuid1.uu, uuid1_msb, uuid1_lsb);
@@ -2100,7 +2082,7 @@
params.u3 = p3;
params.u4 = p4;
params.u5 = p5;
- sGattIf->client->test_command(command, ¶ms);
+ sGattIf->client->test_command(command, params);
}
/**