Rename bt_bdaddr_t into RawAddress (2/3)

Test: compilation test
Change-Id: I8b334c77a96ea29d58b1e4cf176e0a941b74d2b9
diff --git a/android/app/jni/com_android_bluetooth_a2dp.cpp b/android/app/jni/com_android_bluetooth_a2dp.cpp
index a2928ff..26c9359 100644
--- a/android/app/jni/com_android_bluetooth_a2dp.cpp
+++ b/android/app/jni/com_android_bluetooth_a2dp.cpp
@@ -48,38 +48,38 @@
 static jobject mCallbacksObj = NULL;
 
 static void bta2dp_connection_state_callback(btav_connection_state_t state,
-                                             bt_bdaddr_t* bd_addr) {
+                                             RawAddress* bd_addr) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnectionStateChanged,
                                (jint)state, addr.get());
 }
 
 static void bta2dp_audio_state_callback(btav_audio_state_t state,
-                                        bt_bdaddr_t* bd_addr) {
+                                        RawAddress* bd_addr) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAudioStateChanged,
                                (jint)state, addr.get());
@@ -319,7 +319,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothA2dpInterface->connect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothA2dpInterface->connect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF connection, status: %d", status);
   }
@@ -337,7 +337,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothA2dpInterface->disconnect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothA2dpInterface->disconnect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF disconnection, status: %d", status);
   }
diff --git a/android/app/jni/com_android_bluetooth_a2dp_sink.cpp b/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
index 185fc69..989cd6f 100644
--- a/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
+++ b/android/app/jni/com_android_bluetooth_a2dp_sink.cpp
@@ -34,44 +34,44 @@
 static jobject mCallbacksObj = NULL;
 
 static void bta2dp_connection_state_callback(btav_connection_state_t state,
-                                             bt_bdaddr_t* bd_addr) {
+                                             RawAddress* bd_addr) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onConnectionStateChanged,
                                (jint)state, addr.get());
 }
 
 static void bta2dp_audio_state_callback(btav_audio_state_t state,
-                                        bt_bdaddr_t* bd_addr) {
+                                        RawAddress* bd_addr) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAudioStateChanged,
                                (jint)state, addr.get());
 }
 
-static void bta2dp_audio_config_callback(bt_bdaddr_t* bd_addr,
+static void bta2dp_audio_config_callback(RawAddress* bd_addr,
                                          uint32_t sample_rate,
                                          uint8_t channel_count) {
   ALOGI("%s", __func__);
@@ -79,13 +79,13 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAudioConfigChanged,
                                addr.get(), (jint)sample_rate,
@@ -177,7 +177,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothA2dpInterface->connect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothA2dpInterface->connect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF connection, status: %d", status);
   }
@@ -195,7 +195,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothA2dpInterface->disconnect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothA2dpInterface->disconnect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF disconnection, status: %d", status);
   }
diff --git a/android/app/jni/com_android_bluetooth_avrcp.cpp b/android/app/jni/com_android_bluetooth_avrcp.cpp
index 5647705..d365b53 100644
--- a/android/app/jni/com_android_bluetooth_avrcp.cpp
+++ b/android/app/jni/com_android_bluetooth_avrcp.cpp
@@ -57,7 +57,7 @@
 
 static void cleanup_items(btrc_folder_items_t* p_items, int numItems);
 
-static void btavrcp_remote_features_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_remote_features_callback(RawAddress* bd_addr,
                                              btrc_remote_features_t features) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -68,20 +68,20 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Unable to allocate byte array for bd_addr");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getRcFeatures, addr.get(),
                                (jint)features);
 }
 
 /** Callback for play status request */
-static void btavrcp_get_play_status_callback(bt_bdaddr_t* bd_addr) {
+static void btavrcp_get_play_status_callback(RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -91,20 +91,20 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for get_play_status command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getPlayStatus, addr.get());
 }
 
 static void btavrcp_get_element_attr_callback(uint8_t num_attr,
                                               btrc_media_attr_t* p_attrs,
-                                              bt_bdaddr_t* bd_addr) {
+                                              RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -114,7 +114,7 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for get_element_attr command");
     return;
@@ -129,7 +129,7 @@
 
   sCallbackEnv->SetIntArrayRegion(attrs.get(), 0, num_attr, (jint*)p_attrs);
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getElementAttr, addr.get(),
                                (jbyte)num_attr, attrs.get());
@@ -137,7 +137,7 @@
 
 static void btavrcp_register_notification_callback(btrc_event_id_t event_id,
                                                    uint32_t param,
-                                                   bt_bdaddr_t* bd_addr) {
+                                                   RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -147,20 +147,20 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for register_notification command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_registerNotification,
                                addr.get(), (jint)event_id, (jint)param);
 }
 
 static void btavrcp_volume_change_callback(uint8_t volume, uint8_t ctype,
-                                           bt_bdaddr_t* bd_addr) {
+                                           RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -170,13 +170,13 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for volume_change command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_volumeChangeCallback,
@@ -184,7 +184,7 @@
 }
 
 static void btavrcp_passthrough_command_callback(int id, int pressed,
-                                                 bt_bdaddr_t* bd_addr) {
+                                                 RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -194,12 +194,12 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for passthrough_command command");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_handlePassthroughCmd,
@@ -207,7 +207,7 @@
 }
 
 static void btavrcp_set_addressed_player_callback(uint16_t player_id,
-                                                  bt_bdaddr_t* bd_addr) {
+                                                  RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -217,20 +217,20 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for set_addressed_player command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_setAddressedPlayerCallback,
                                addr.get(), (jint)player_id);
 }
 
 static void btavrcp_set_browsed_player_callback(uint16_t player_id,
-                                                bt_bdaddr_t* bd_addr) {
+                                                RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -239,12 +239,12 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for set_browsed_player command");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_setBrowsedPlayerCallback,
@@ -253,7 +253,7 @@
 
 static void btavrcp_get_folder_items_callback(
     uint8_t scope, uint32_t start_item, uint32_t end_item, uint8_t num_attr,
-    uint32_t* p_attr_ids, bt_bdaddr_t* bd_addr) {
+    uint32_t* p_attr_ids, RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -263,7 +263,7 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for get_folder_items command");
     return;
@@ -271,7 +271,7 @@
 
   uint32_t* puiAttr = (uint32_t*)p_attr_ids;
   ScopedLocalRef<jintArray> attr_ids(sCallbackEnv.get(), NULL);
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   /* check number of attributes requested by remote device */
@@ -293,7 +293,7 @@
 }
 
 static void btavrcp_change_path_callback(uint8_t direction, uint8_t* folder_uid,
-                                         bt_bdaddr_t* bd_addr) {
+                                         RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -310,13 +310,13 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for change_path command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetByteArrayRegion(
       attrs.get(), 0, sizeof(uint8_t) * BTRC_UID_SIZE, (jbyte*)folder_uid);
@@ -328,7 +328,7 @@
                                            uint16_t uid_counter,
                                            uint8_t num_attr,
                                            btrc_media_attr_t* p_attrs,
-                                           bt_bdaddr_t* bd_addr) {
+                                           RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -345,7 +345,7 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for get_item_attr command");
     return;
@@ -358,7 +358,7 @@
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetIntArrayRegion(attrs.get(), 0, num_attr, (jint*)p_attrs);
   sCallbackEnv->SetByteArrayRegion(
@@ -370,7 +370,7 @@
 }
 
 static void btavrcp_play_item_callback(uint8_t scope, uint16_t uid_counter,
-                                       uint8_t* uid, bt_bdaddr_t* bd_addr) {
+                                       uint8_t* uid, RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -386,13 +386,13 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for play_item command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetByteArrayRegion(
       attrs.get(), 0, sizeof(uint8_t) * BTRC_UID_SIZE, (jbyte*)uid);
@@ -402,7 +402,7 @@
 }
 
 static void btavrcp_get_total_num_items_callback(uint8_t scope,
-                                                 bt_bdaddr_t* bd_addr) {
+                                                 RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -411,20 +411,20 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for get_total_num_items command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getTotalNumOfItemsCallback,
                                addr.get(), (jbyte)scope);
 }
 
 static void btavrcp_search_callback(uint16_t charset_id, uint16_t str_len,
-                                    uint8_t* p_str, bt_bdaddr_t* bd_addr) {
+                                    uint8_t* p_str, RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -440,13 +440,13 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for search command");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetByteArrayRegion(attrs.get(), 0, str_len * sizeof(uint8_t),
                                    (jbyte*)p_str);
@@ -456,7 +456,7 @@
 
 static void btavrcp_add_to_play_list_callback(uint8_t scope, uint8_t* uid,
                                               uint16_t uid_counter,
-                                              bt_bdaddr_t* bd_addr) {
+                                              RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -465,7 +465,7 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for add_to_play_list command");
     return;
@@ -478,7 +478,7 @@
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetByteArrayRegion(
       attrs.get(), 0, sizeof(uint8_t) * BTRC_UID_SIZE, (jbyte*)uid);
@@ -630,7 +630,7 @@
   }
 
   bt_status_t status = sBluetoothAvrcpInterface->get_play_status_rsp(
-      (bt_bdaddr_t*)addr, (btrc_play_status_t)playStatus, songLen, songPos);
+      (RawAddress*)addr, (btrc_play_status_t)playStatus, songLen, songPos);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed get_play_status_rsp, status: %d", status);
   }
@@ -692,7 +692,7 @@
     return JNI_FALSE;
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status =
       sBluetoothAvrcpInterface->get_element_attr_rsp(btAddr, numAttr, pAttrs);
   if (status != BT_STATUS_SUCCESS) {
@@ -756,7 +756,7 @@
     }
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->get_item_attr_rsp(
       btAddr, (btrc_status_t)rspStatus, numAttr, pAttrs);
   if (status != BT_STATUS_SUCCESS)
@@ -1022,7 +1022,7 @@
     }
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->get_folder_items_list_rsp(
       btAddr, (btrc_status_t)rspStatus, uidCounter, numItems, p_items);
   if (status != BT_STATUS_SUCCESS) {
@@ -1157,7 +1157,7 @@
     }
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->get_folder_items_list_rsp(
       btAddr, (btrc_status_t)rspStatus, uidCounter, numItems, p_items);
   if (status != BT_STATUS_SUCCESS)
@@ -1195,7 +1195,7 @@
     return JNI_FALSE;
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->set_addressed_player_rsp(
       btAddr, (btrc_status_t)rspStatus);
   if (status != BT_STATUS_SUCCESS) {
@@ -1249,7 +1249,7 @@
   uint8_t folder_depth =
       depth; /* folder_depth is 0 if current folder is root */
   uint16_t charset_id = BTRC_CHARSET_ID_UTF8;
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->set_browsed_player_rsp(
       btAddr, (btrc_status_t)rspStatus, numItems, charset_id, folder_depth,
       p_folders);
@@ -1280,7 +1280,7 @@
   }
 
   uint32_t nItems = (uint32_t)numItems;
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->change_path_rsp(
       btAddr, (btrc_status_t)rspStatus, (uint32_t)nItems);
   if (status != BT_STATUS_SUCCESS) {
@@ -1306,7 +1306,7 @@
   }
 
   uint32_t nItems = (uint32_t)numItems;
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->search_rsp(
       btAddr, (btrc_status_t)rspStatus, (uint32_t)uidCounter, (uint32_t)nItems);
   if (status != BT_STATUS_SUCCESS) {
@@ -1331,7 +1331,7 @@
     return JNI_FALSE;
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status =
       sBluetoothAvrcpInterface->play_item_rsp(btAddr, (btrc_status_t)rspStatus);
   if (status != BT_STATUS_SUCCESS) {
@@ -1357,7 +1357,7 @@
   }
 
   uint32_t nItems = (uint32_t)numItems;
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->get_total_num_of_items_rsp(
       btAddr, (btrc_status_t)rspStatus, (uint32_t)uidCounter, (uint32_t)nItems);
   if (status != BT_STATUS_SUCCESS) {
@@ -1381,7 +1381,7 @@
     return JNI_FALSE;
   }
 
-  bt_bdaddr_t* btAddr = (bt_bdaddr_t*)addr;
+  RawAddress* btAddr = (RawAddress*)addr;
   bt_status_t status = sBluetoothAvrcpInterface->add_to_now_playing_rsp(
       btAddr, (btrc_status_t)rspStatus);
   if (status != BT_STATUS_SUCCESS) {
diff --git a/android/app/jni/com_android_bluetooth_avrcp_controller.cpp b/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
index cd2f888..40982ee 100644
--- a/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
+++ b/android/app/jni/com_android_bluetooth_avrcp_controller.cpp
@@ -53,20 +53,20 @@
 static const btrc_ctrl_interface_t* sBluetoothAvrcpInterface = NULL;
 static jobject sCallbacksObj = NULL;
 
-static void btavrcp_passthrough_response_callback(bt_bdaddr_t* bd_addr, int id,
+static void btavrcp_passthrough_response_callback(RawAddress* bd_addr, int id,
                                                   int pressed) {
   ALOGI("%s: id: %d, pressed: %d", __func__, id, pressed);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for passthrough response");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_handlePassthroughRsp,
                                (jint)id, (jint)pressed, addr.get());
@@ -82,77 +82,76 @@
 }
 
 static void btavrcp_connection_state_callback(bool rc_connect, bool br_connect,
-                                              bt_bdaddr_t* bd_addr) {
+                                              RawAddress* bd_addr) {
   ALOGI("%s: conn state: rc: %d br: %d", __func__, rc_connect, br_connect);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for connection state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_onConnectionStateChanged,
                                (jboolean)rc_connect, (jboolean)br_connect,
                                addr.get());
 }
 
-static void btavrcp_get_rcfeatures_callback(bt_bdaddr_t* bd_addr,
-                                            int features) {
+static void btavrcp_get_rcfeatures_callback(RawAddress* bd_addr, int features) {
   ALOGV("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr ");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_getRcFeatures, addr.get(),
                                (jint)features);
 }
 
 static void btavrcp_setplayerapplicationsetting_rsp_callback(
-    bt_bdaddr_t* bd_addr, uint8_t accepted) {
+    RawAddress* bd_addr, uint8_t accepted) {
   ALOGV("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr ");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_setplayerappsettingrsp,
                                addr.get(), (jint)accepted);
 }
 
 static void btavrcp_playerapplicationsetting_callback(
-    bt_bdaddr_t* bd_addr, uint8_t num_attr, btrc_player_app_attr_t* app_attrs,
+    RawAddress* bd_addr, uint8_t num_attr, btrc_player_app_attr_t* app_attrs,
     uint8_t num_ext_attr, btrc_player_app_ext_attr_t* ext_attrs) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr ");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   /* TODO ext attrs
    * Flattening defined attributes: <id,num_values,values[]>
@@ -188,18 +187,18 @@
 }
 
 static void btavrcp_playerapplicationsetting_changed_callback(
-    bt_bdaddr_t* bd_addr, btrc_player_settings_t* p_vals) {
+    RawAddress* bd_addr, btrc_player_settings_t* p_vals) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   int arraylen = p_vals->num_attr * 2;
@@ -225,46 +224,46 @@
                                playerattribs.get(), (jint)arraylen);
 }
 
-static void btavrcp_set_abs_vol_cmd_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_set_abs_vol_cmd_callback(RawAddress* bd_addr,
                                              uint8_t abs_vol, uint8_t label) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_handleSetAbsVolume,
                                addr.get(), (jbyte)abs_vol, (jbyte)label);
 }
 
-static void btavrcp_register_notification_absvol_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_register_notification_absvol_callback(RawAddress* bd_addr,
                                                           uint8_t label) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj,
                                method_handleRegisterNotificationAbsVol,
                                addr.get(), (jbyte)label);
 }
 
-static void btavrcp_track_changed_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_track_changed_callback(RawAddress* bd_addr,
                                            uint8_t num_attr,
                                            btrc_element_attr_val_t* p_attrs) {
   /*
@@ -276,7 +275,7 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
@@ -288,7 +287,7 @@
     ALOGE(" failed to set new array for attribIds");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   jclass strclazz = sCallbackEnv->FindClass("java/lang/String");
@@ -318,7 +317,7 @@
                                stringArray.get());
 }
 
-static void btavrcp_play_position_changed_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_play_position_changed_callback(RawAddress* bd_addr,
                                                    uint32_t song_len,
                                                    uint32_t song_pos) {
   ALOGI("%s", __func__);
@@ -326,37 +325,37 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_handleplaypositionchanged,
                                addr.get(), (jint)(song_len), (jint)song_pos);
 }
 
 static void btavrcp_play_status_changed_callback(
-    bt_bdaddr_t* bd_addr, btrc_play_status_t play_status) {
+    RawAddress* bd_addr, btrc_play_status_t play_status) {
   ALOGI("%s", __func__);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to get new array ");
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(sCallbacksObj, method_handleplaystatuschanged,
                                addr.get(), (jbyte)play_status);
 }
 
 static void btavrcp_get_folder_items_callback(
-    bt_bdaddr_t* bd_addr, btrc_status_t status,
+    RawAddress* bd_addr, btrc_status_t status,
     const btrc_folder_items_t* folder_items, uint8_t count) {
   /* Folder items are list of items that can be either BTRC_ITEM_PLAYER
    * BTRC_ITEM_MEDIA, BTRC_ITEM_FOLDER. Here we translate them to their java
@@ -546,7 +545,7 @@
   }
 }
 
-static void btavrcp_change_path_callback(bt_bdaddr_t* bd_addr, uint8_t count) {
+static void btavrcp_change_path_callback(RawAddress* bd_addr, uint8_t count) {
   ALOGI("%s count %d", __func__, count);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -555,7 +554,7 @@
                                (jint)count);
 }
 
-static void btavrcp_set_browsed_player_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_set_browsed_player_callback(RawAddress* bd_addr,
                                                 uint8_t num_items,
                                                 uint8_t depth) {
   ALOGI("%s items %d depth %d", __func__, num_items, depth);
@@ -566,7 +565,7 @@
                                (jint)num_items, (jint)depth);
 }
 
-static void btavrcp_set_addressed_player_callback(bt_bdaddr_t* bd_addr,
+static void btavrcp_set_addressed_player_callback(RawAddress* bd_addr,
                                                   uint8_t status) {
   ALOGI("%s status %d", __func__, status);
 
@@ -740,7 +739,7 @@
   }
 
   bt_status_t status = sBluetoothAvrcpInterface->send_pass_through_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)key_code, (uint8_t)key_state);
+      (RawAddress*)addr, (uint8_t)key_code, (uint8_t)key_state);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending passthru command, status: %d", status);
   }
@@ -766,7 +765,7 @@
   }
 
   bt_status_t status = sBluetoothAvrcpInterface->send_group_navigation_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)key_code, (uint8_t)key_state);
+      (RawAddress*)addr, (uint8_t)key_code, (uint8_t)key_state);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending Grp Navigation command, status: %d", status);
   }
@@ -813,7 +812,7 @@
   }
 
   bt_status_t status = sBluetoothAvrcpInterface->set_player_app_setting_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)num_attrib, pAttrs, pAttrsVal);
+      (RawAddress*)addr, (uint8_t)num_attrib, pAttrs, pAttrsVal);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending setPlAppSettValNative command, status: %d", status);
   }
@@ -836,7 +835,7 @@
 
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->set_volume_rsp(
-      (bt_bdaddr_t*)addr, (uint8_t)abs_vol, (uint8_t)label);
+      (RawAddress*)addr, (uint8_t)abs_vol, (uint8_t)label);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending sendAbsVolRspNative command, status: %d", status);
   }
@@ -855,7 +854,7 @@
   }
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->register_abs_vol_rsp(
-      (bt_bdaddr_t*)addr, (btrc_notification_type_t)rsp_type, (uint8_t)abs_vol,
+      (RawAddress*)addr, (btrc_notification_type_t)rsp_type, (uint8_t)abs_vol,
       (uint8_t)label);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending sendRegisterAbsVolRspNative command, status: %d",
@@ -875,7 +874,7 @@
   }
   ALOGV("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status =
-      sBluetoothAvrcpInterface->get_playback_state_cmd((bt_bdaddr_t*)addr);
+      sBluetoothAvrcpInterface->get_playback_state_cmd((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending getPlaybackStateNative command, status: %d", status);
   }
@@ -893,7 +892,7 @@
   }
   ALOGV("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->get_now_playing_list_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)start, (uint8_t)items);
+      (RawAddress*)addr, (uint8_t)start, (uint8_t)items);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending getNowPlayingListNative command, status: %d", status);
   }
@@ -910,7 +909,7 @@
   }
   ALOGV("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->get_folder_list_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)start, (uint8_t)items);
+      (RawAddress*)addr, (uint8_t)start, (uint8_t)items);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending getFolderListNative command, status: %d", status);
   }
@@ -928,7 +927,7 @@
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
 
   bt_status_t status = sBluetoothAvrcpInterface->get_player_list_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)start, (uint8_t)items);
+      (RawAddress*)addr, (uint8_t)start, (uint8_t)items);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending getPlayerListNative command, status: %d", status);
   }
@@ -954,7 +953,7 @@
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
 
   bt_status_t status = sBluetoothAvrcpInterface->change_folder_path_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)direction, (uint8_t*)uid);
+      (RawAddress*)addr, (uint8_t)direction, (uint8_t*)uid);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending changeFolderPathNative command, status: %d", status);
   }
@@ -972,7 +971,7 @@
 
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->set_browsed_player_cmd(
-      (bt_bdaddr_t*)addr, (uint16_t)id);
+      (RawAddress*)addr, (uint16_t)id);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending setBrowsedPlayerNative command, status: %d", status);
   }
@@ -990,7 +989,7 @@
 
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->set_addressed_player_cmd(
-      (bt_bdaddr_t*)addr, (uint16_t)id);
+      (RawAddress*)addr, (uint16_t)id);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending setAddressedPlayerNative command, status: %d",
           status);
@@ -1015,7 +1014,7 @@
 
   ALOGI("%s: sBluetoothAvrcpInterface: %p", __func__, sBluetoothAvrcpInterface);
   bt_status_t status = sBluetoothAvrcpInterface->play_item_cmd(
-      (bt_bdaddr_t*)addr, (uint8_t)scope, (uint8_t*)uid, (uint16_t)uidCounter);
+      (RawAddress*)addr, (uint8_t)scope, (uint8_t*)uid, (uint16_t)uidCounter);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending playItemNative command, status: %d", status);
   }
diff --git a/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp b/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
index f743ec5..dc2e07a 100644
--- a/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
+++ b/android/app/jni/com_android_bluetooth_btservice_AdapterService.cpp
@@ -148,7 +148,7 @@
 }
 
 static void remote_device_properties_callback(bt_status_t status,
-                                              bt_bdaddr_t* bd_addr,
+                                              RawAddress* bd_addr,
                                               int num_properties,
                                               bt_property_t* properties) {
   CallbackEnv sCallbackEnv(__func__);
@@ -191,13 +191,13 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Error while allocation byte array in %s", __func__);
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   jintArray typesPtr = types.get();
@@ -239,15 +239,14 @@
         (const char*)properties[addr_index].val);
 
   remote_device_properties_callback(BT_STATUS_SUCCESS,
-                                    (bt_bdaddr_t*)properties[addr_index].val,
+                                    (RawAddress*)properties[addr_index].val,
                                     num_properties, properties);
 
   sCallbackEnv->CallVoidMethod(sJniCallbacksObj, method_deviceFoundCallback,
                                addr.get());
 }
 
-static void bond_state_changed_callback(bt_status_t status,
-                                        bt_bdaddr_t* bd_addr,
+static void bond_state_changed_callback(bt_status_t status, RawAddress* bd_addr,
                                         bt_bond_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -258,19 +257,19 @@
   }
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Address allocation failed in %s", __func__);
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   sCallbackEnv->CallVoidMethod(sJniCallbacksObj, method_bondStateChangeCallback,
                                (jint)status, addr.get(), (jint)state);
 }
 
-static void acl_state_changed_callback(bt_status_t status, bt_bdaddr_t* bd_addr,
+static void acl_state_changed_callback(bt_status_t status, RawAddress* bd_addr,
                                        bt_acl_state_t state) {
   if (!bd_addr) {
     ALOGE("Address is null in %s", __func__);
@@ -281,12 +280,12 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Address allocation failed in %s", __func__);
     return;
   }
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   sCallbackEnv->CallVoidMethod(sJniCallbacksObj, method_aclStateChangeCallback,
@@ -303,7 +302,7 @@
       sJniCallbacksObj, method_discoveryStateChangeCallback, (jint)state);
 }
 
-static void pin_request_callback(bt_bdaddr_t* bd_addr, bt_bdname_t* bdname,
+static void pin_request_callback(RawAddress* bd_addr, bt_bdname_t* bdname,
                                  uint32_t cod, bool min_16_digits) {
   if (!bd_addr) {
     ALOGE("Address is null in %s", __func__);
@@ -314,13 +313,13 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Error while allocating in: %s", __func__);
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   ScopedLocalRef<jbyteArray> devname(
@@ -337,7 +336,7 @@
                                addr.get(), devname.get(), cod, min_16_digits);
 }
 
-static void ssp_request_callback(bt_bdaddr_t* bd_addr, bt_bdname_t* bdname,
+static void ssp_request_callback(RawAddress* bd_addr, bt_bdname_t* bdname,
                                  uint32_t cod, bt_ssp_variant_t pairing_variant,
                                  uint32_t pass_key) {
   if (!bd_addr) {
@@ -348,13 +347,13 @@
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Error while allocating in: %s", __func__);
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
 
   ScopedLocalRef<jbyteArray> devname(
@@ -751,7 +750,7 @@
     return JNI_FALSE;
   }
 
-  int ret = sBluetoothInterface->create_bond((bt_bdaddr_t*)addr, transport);
+  int ret = sBluetoothInterface->create_bond((RawAddress*)addr, transport);
   env->ReleaseByteArrayElements(address, addr, 0);
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
 }
@@ -848,7 +847,7 @@
     memcpy(oob_data.le_sc_r, leScRBytes, len);
   }
 
-  status = sBluetoothInterface->create_bond_out_of_band((bt_bdaddr_t*)addr,
+  status = sBluetoothInterface->create_bond_out_of_band((RawAddress*)addr,
                                                         transport, &oob_data);
 
 done:
@@ -877,7 +876,7 @@
     return JNI_FALSE;
   }
 
-  int ret = sBluetoothInterface->remove_bond((bt_bdaddr_t*)addr);
+  int ret = sBluetoothInterface->remove_bond((RawAddress*)addr);
   env->ReleaseByteArrayElements(address, addr, 0);
 
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
@@ -894,7 +893,7 @@
     return JNI_FALSE;
   }
 
-  int ret = sBluetoothInterface->cancel_bond((bt_bdaddr_t*)addr);
+  int ret = sBluetoothInterface->cancel_bond((RawAddress*)addr);
   env->ReleaseByteArrayElements(address, addr, 0);
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
 }
@@ -910,7 +909,7 @@
     return JNI_FALSE;
   }
 
-  int ret = sBluetoothInterface->get_connection_state((bt_bdaddr_t*)addr);
+  int ret = sBluetoothInterface->get_connection_state((RawAddress*)addr);
   env->ReleaseByteArrayElements(address, addr, 0);
 
   return ret;
@@ -938,7 +937,7 @@
     }
   }
 
-  int ret = sBluetoothInterface->pin_reply((bt_bdaddr_t*)addr, accept, len,
+  int ret = sBluetoothInterface->pin_reply((RawAddress*)addr, accept, len,
                                            (bt_pin_code_t*)pinPtr);
   env->ReleaseByteArrayElements(address, addr, 0);
   env->ReleaseByteArrayElements(pinArray, pinPtr, 0);
@@ -959,7 +958,7 @@
   }
 
   int ret = sBluetoothInterface->ssp_reply(
-      (bt_bdaddr_t*)addr, (bt_ssp_variant_t)type, accept, passkey);
+      (RawAddress*)addr, (bt_ssp_variant_t)type, accept, passkey);
   env->ReleaseByteArrayElements(address, addr, 0);
 
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
@@ -1014,7 +1013,7 @@
   }
 
   int ret = sBluetoothInterface->get_remote_device_property(
-      (bt_bdaddr_t*)addr, (bt_property_type_t)type);
+      (RawAddress*)addr, (bt_property_type_t)type);
   env->ReleaseByteArrayElements(address, addr, 0);
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
 }
@@ -1044,8 +1043,8 @@
   prop.len = env->GetArrayLength(value);
   prop.val = val;
 
-  int ret = sBluetoothInterface->set_remote_device_property((bt_bdaddr_t*)addr,
-                                                            &prop);
+  int ret =
+      sBluetoothInterface->set_remote_device_property((RawAddress*)addr, &prop);
   env->ReleaseByteArrayElements(value, val, 0);
   env->ReleaseByteArrayElements(address, addr, 0);
 
@@ -1064,7 +1063,7 @@
     return JNI_FALSE;
   }
 
-  int ret = sBluetoothInterface->get_remote_services((bt_bdaddr_t*)addr);
+  int ret = sBluetoothInterface->get_remote_services((RawAddress*)addr);
   env->ReleaseByteArrayElements(address, addr, 0);
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
 }
@@ -1092,7 +1091,7 @@
 
   int socket_fd = -1;
   bt_status_t status = sBluetoothSocketInterface->connect(
-      (bt_bdaddr_t*)addr, (btsock_type_t)type, (const uint8_t*)uuid, channel,
+      (RawAddress*)addr, (btsock_type_t)type, (const uint8_t*)uuid, channel,
       &socket_fd, flag, callingUid);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Socket connection failed: %d", status);
@@ -1205,8 +1204,7 @@
     return;
   }
 
-  sBluetoothInterface->interop_database_add(feature, (bt_bdaddr_t*)addr,
-                                            length);
+  sBluetoothInterface->interop_database_add(feature, (RawAddress*)addr, length);
   env->ReleaseByteArrayElements(address, addr, 0);
 }
 
diff --git a/android/app/jni/com_android_bluetooth_gatt.cpp b/android/app/jni/com_android_bluetooth_gatt.cpp
index 96156dd..5360d06 100644
--- a/android/app/jni/com_android_bluetooth_gatt.cpp
+++ b/android/app/jni/com_android_bluetooth_gatt.cpp
@@ -101,8 +101,8 @@
   }
 }
 
-static bt_bdaddr_t str2addr(JNIEnv* env, jstring address) {
-  bt_bdaddr_t bda;
+static RawAddress str2addr(JNIEnv* env, jstring address) {
+  RawAddress bda;
   const char* c_bda = env->GetStringUTFChars(address, NULL);
   if (!c_bda || strlen(c_bda) != 17) return bda;
 
@@ -111,7 +111,7 @@
   return bda;
 }
 
-static jstring bdaddr2newjstr(JNIEnv* env, const bt_bdaddr_t* bda) {
+static jstring bdaddr2newjstr(JNIEnv* env, const RawAddress* 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],
@@ -230,7 +230,7 @@
 }
 
 void btgattc_scan_result_cb(uint16_t event_type, uint8_t addr_type,
-                            bt_bdaddr_t* bda, uint8_t primary_phy,
+                            RawAddress* bda, uint8_t primary_phy,
                             uint8_t secondary_phy, uint8_t advertising_sid,
                             int8_t tx_power, int8_t rssi,
                             uint16_t periodic_adv_int,
@@ -252,7 +252,7 @@
 }
 
 void btgattc_open_cb(int conn_id, int status, int clientIf,
-                     const bt_bdaddr_t& bda) {
+                     const RawAddress& bda) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -263,7 +263,7 @@
 }
 
 void btgattc_close_cb(int conn_id, int status, int clientIf,
-                      const bt_bdaddr_t& bda) {
+                      const RawAddress& bda) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -368,7 +368,7 @@
                                status, handle);
 }
 
-void btgattc_remote_rssi_cb(int client_if, const bt_bdaddr_t& bda, int rssi,
+void btgattc_remote_rssi_cb(int client_if, const RawAddress& bda, int rssi,
                             int status) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -593,7 +593,7 @@
 }
 
 void btgatts_connection_cb(int conn_id, int server_if, int connected,
-                           const bt_bdaddr_t& bda) {
+                           const RawAddress& bda) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -637,7 +637,7 @@
 }
 
 void btgatts_request_read_characteristic_cb(int conn_id, int trans_id,
-                                            const bt_bdaddr_t& bda,
+                                            const RawAddress& bda,
                                             int attr_handle, int offset,
                                             bool is_long) {
   CallbackEnv sCallbackEnv(__func__);
@@ -651,7 +651,7 @@
 }
 
 void btgatts_request_read_descriptor_cb(int conn_id, int trans_id,
-                                        const bt_bdaddr_t& bda, int attr_handle,
+                                        const RawAddress& bda, int attr_handle,
                                         int offset, bool is_long) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -664,7 +664,7 @@
 }
 
 void btgatts_request_write_characteristic_cb(int conn_id, int trans_id,
-                                             const bt_bdaddr_t& bda,
+                                             const RawAddress& bda,
                                              int attr_handle, int offset,
                                              bool need_rsp, bool is_prep,
                                              std::vector<uint8_t> value) {
@@ -685,9 +685,9 @@
 }
 
 void btgatts_request_write_descriptor_cb(int conn_id, int trans_id,
-                                         const bt_bdaddr_t& bda,
-                                         int attr_handle, int offset,
-                                         bool need_rsp, bool is_prep,
+                                         const RawAddress& bda, int attr_handle,
+                                         int offset, bool need_rsp,
+                                         bool is_prep,
                                          std::vector<uint8_t> value) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -706,7 +706,7 @@
 }
 
 void btgatts_request_exec_write_cb(int conn_id, int trans_id,
-                                   const bt_bdaddr_t& bda, int exec_write) {
+                                   const RawAddress& bda, int exec_write) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -1036,7 +1036,7 @@
                                      phy_options);
 }
 
-static void readClientPhyCb(uint8_t clientIf, bt_bdaddr_t bda, uint8_t tx_phy,
+static void readClientPhyCb(uint8_t clientIf, RawAddress bda, uint8_t tx_phy,
                             uint8_t rx_phy, uint8_t status) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -1052,7 +1052,7 @@
                                     jstring address) {
   if (!sGattIf) return;
 
-  bt_bdaddr_t bda = str2addr(env, address);
+  RawAddress bda = str2addr(env, address);
   sGattIf->client->read_phy(bda, base::Bind(&readClientPhyCb, clientIf, bda));
 }
 
@@ -1173,7 +1173,7 @@
     jboolean enable) {
   if (!sGattIf) return;
 
-  bt_bdaddr_t bd_addr;
+  RawAddress bd_addr;
   const char* c_address = env->GetStringUTFChars(address, NULL);
   bd_addr_str_to_addr(c_address, bd_addr.address);
 
@@ -1301,7 +1301,7 @@
   switch (filt_type) {
     case 0:  // BTM_BLE_PF_ADDR_FILTER
     {
-      bt_bdaddr_t bda = str2addr(env, address);
+      RawAddress 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));
@@ -1517,7 +1517,7 @@
                                     jint transport) {
   if (!sGattIf) return;
 
-  bt_bdaddr_t bd_addr;
+  RawAddress bd_addr;
   const char* c_address = env->GetStringUTFChars(address, NULL);
   bd_addr_str_to_addr(c_address, bd_addr.address);
 
@@ -1536,11 +1536,11 @@
                                             jint tx_phy, jint rx_phy,
                                             jint phy_options) {
   if (!sGattIf) return;
-  bt_bdaddr_t bda = str2addr(env, address);
+  RawAddress bda = str2addr(env, address);
   sGattIf->server->set_preferred_phy(bda, tx_phy, rx_phy, phy_options);
 }
 
-static void readServerPhyCb(uint8_t serverIf, bt_bdaddr_t bda, uint8_t tx_phy,
+static void readServerPhyCb(uint8_t serverIf, RawAddress bda, uint8_t tx_phy,
                             uint8_t rx_phy, uint8_t status) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -1556,7 +1556,7 @@
                                     jstring address) {
   if (!sGattIf) return;
 
-  bt_bdaddr_t bda = str2addr(env, address);
+  RawAddress bda = str2addr(env, address);
   sGattIf->server->read_phy(bda, base::Bind(&readServerPhyCb, serverIf, bda));
 }
 
@@ -1863,7 +1863,7 @@
 }
 
 static void getOwnAddressCb(uint8_t advertiser_id, uint8_t address_type,
-                            bt_bdaddr_t address) {
+                            RawAddress address) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -2014,8 +2014,8 @@
 }
 
 static void onSyncStarted(int reg_id, uint8_t status, uint16_t sync_handle,
-                          uint8_t sid, uint8_t address_type,
-                          bt_bdaddr_t address, uint8_t phy, uint16_t interval) {
+                          uint8_t sid, uint8_t address_type, RawAddress address,
+                          uint8_t phy, uint16_t interval) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -2069,7 +2069,7 @@
                            jint p1, jint p2, jint p3, jint p4, jint p5) {
   if (!sGattIf) return;
 
-  bt_bdaddr_t bt_bda1 = str2addr(env, bda1);
+  RawAddress bt_bda1 = str2addr(env, bda1);
 
   bt_uuid_t uuid1;
   set_uuid(uuid1.uu, uuid1_msb, uuid1_lsb);
diff --git a/android/app/jni/com_android_bluetooth_hdp.cpp b/android/app/jni/com_android_bluetooth_hdp.cpp
index c49854e..3abc243 100644
--- a/android/app/jni/com_android_bluetooth_hdp.cpp
+++ b/android/app/jni/com_android_bluetooth_hdp.cpp
@@ -42,13 +42,13 @@
                                app_id, (jint)state);
 }
 
-static void channel_state_callback(int app_id, bt_bdaddr_t* bd_addr,
+static void channel_state_callback(int app_id, RawAddress* bd_addr,
                                    int mdep_cfg_index, int channel_id,
                                    bthl_channel_state_t state, int fd) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for channel state");
     return;
@@ -64,7 +64,7 @@
     }
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onChannelStateChanged,
                                app_id, addr.get(), mdep_cfg_index, channel_id,
@@ -203,7 +203,7 @@
 
   jint chan_id;
   bt_status_t status = sBluetoothHdpInterface->connect_channel(
-      app_id, (bt_bdaddr_t*)addr, 0, &chan_id);
+      app_id, (RawAddress*)addr, 0, &chan_id);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HDP channel connection, status: %d", status);
     chan_id = -1;
diff --git a/android/app/jni/com_android_bluetooth_hfp.cpp b/android/app/jni/com_android_bluetooth_hfp.cpp
index 2fe8f47..5bb0d6e 100644
--- a/android/app/jni/com_android_bluetooth_hfp.cpp
+++ b/android/app/jni/com_android_bluetooth_hfp.cpp
@@ -55,22 +55,22 @@
 static jobject mCallbacksObj = NULL;
 static std::shared_timed_mutex callbacks_mutex;
 
-static jbyteArray marshall_bda(bt_bdaddr_t* bd_addr) {
+static jbyteArray marshall_bda(RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return NULL;
 
-  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
+  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(RawAddress));
   if (!addr) {
     ALOGE("Fail to new jbyteArray bd addr");
     return NULL;
   }
-  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   return addr;
 }
 
 static void connection_state_callback(bthf_connection_state_t state,
-                                      bt_bdaddr_t* bd_addr) {
+                                      RawAddress* bd_addr) {
   ALOGI("%s", __func__);
 
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
@@ -85,7 +85,7 @@
 }
 
 static void audio_state_callback(bthf_audio_state_t state,
-                                 bt_bdaddr_t* bd_addr) {
+                                 RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -98,7 +98,7 @@
 }
 
 static void voice_recognition_callback(bthf_vr_state_t state,
-                                       bt_bdaddr_t* bd_addr) {
+                                       RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -113,7 +113,7 @@
                                (jint)state, addr.get());
 }
 
-static void answer_call_callback(bt_bdaddr_t* bd_addr) {
+static void answer_call_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -127,7 +127,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAnswerCall, addr.get());
 }
 
-static void hangup_call_callback(bt_bdaddr_t* bd_addr) {
+static void hangup_call_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -142,7 +142,7 @@
 }
 
 static void volume_control_callback(bthf_volume_type_t type, int volume,
-                                    bt_bdaddr_t* bd_addr) {
+                                    RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -157,7 +157,7 @@
                                (jint)type, (jint)volume, addr.get());
 }
 
-static void dial_call_callback(char* number, bt_bdaddr_t* bd_addr) {
+static void dial_call_callback(char* number, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -174,7 +174,7 @@
                                js_number.get(), addr.get());
 }
 
-static void dtmf_cmd_callback(char dtmf, bt_bdaddr_t* bd_addr) {
+static void dtmf_cmd_callback(char dtmf, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -190,7 +190,7 @@
                                addr.get());
 }
 
-static void noice_reduction_callback(bthf_nrec_t nrec, bt_bdaddr_t* bd_addr) {
+static void noice_reduction_callback(bthf_nrec_t nrec, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -204,7 +204,7 @@
                                nrec == BTHF_NREC_START, addr.get());
 }
 
-static void wbs_callback(bthf_wbs_config_t wbs_config, bt_bdaddr_t* bd_addr) {
+static void wbs_callback(bthf_wbs_config_t wbs_config, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -216,25 +216,25 @@
                                addr.get());
 }
 
-static void at_chld_callback(bthf_chld_type_t chld, bt_bdaddr_t* bd_addr) {
+static void at_chld_callback(bthf_chld_type_t chld, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) {
     ALOGE("Fail to new jbyteArray bd addr for audio state");
     return;
   }
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAtChld, chld,
                                addr.get());
 }
 
-static void at_cnum_callback(bt_bdaddr_t* bd_addr) {
+static void at_cnum_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -248,7 +248,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAtCnum, addr.get());
 }
 
-static void at_cind_callback(bt_bdaddr_t* bd_addr) {
+static void at_cind_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -262,7 +262,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAtCind, addr.get());
 }
 
-static void at_cops_callback(bt_bdaddr_t* bd_addr) {
+static void at_cops_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -276,7 +276,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAtCops, addr.get());
 }
 
-static void at_clcc_callback(bt_bdaddr_t* bd_addr) {
+static void at_clcc_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -290,7 +290,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onAtClcc, addr.get());
 }
 
-static void unknown_at_callback(char* at_string, bt_bdaddr_t* bd_addr) {
+static void unknown_at_callback(char* at_string, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -307,7 +307,7 @@
                                js_at_string.get(), addr.get());
 }
 
-static void key_pressed_callback(bt_bdaddr_t* bd_addr) {
+static void key_pressed_callback(RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -321,7 +321,7 @@
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onKeyPressed, addr.get());
 }
 
-static void at_bind_callback(char* at_string, bt_bdaddr_t* bd_addr) {
+static void at_bind_callback(char* at_string, RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -337,7 +337,7 @@
 }
 
 static void at_biev_callback(bthf_hf_ind_type_t ind_id, int ind_value,
-                             bt_bdaddr_t* bd_addr) {
+                             RawAddress* bd_addr) {
   std::shared_lock<std::shared_timed_mutex> lock(callbacks_mutex);
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid() || mCallbacksObj == NULL) return;
@@ -479,7 +479,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothHfpInterface->connect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHfpInterface->connect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF connection, status: %d", status);
   }
@@ -498,7 +498,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothHfpInterface->disconnect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHfpInterface->disconnect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF disconnection, status: %d", status);
   }
@@ -517,8 +517,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status =
-      sBluetoothHfpInterface->connect_audio((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHfpInterface->connect_audio((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF audio connection, status: %d", status);
   }
@@ -538,7 +537,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpInterface->disconnect_audio((bt_bdaddr_t*)addr);
+      sBluetoothHfpInterface->disconnect_audio((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF audio disconnection, status: %d", status);
   }
@@ -558,7 +557,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpInterface->start_voice_recognition((bt_bdaddr_t*)addr);
+      sBluetoothHfpInterface->start_voice_recognition((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to start voice recognition, status: %d", status);
   }
@@ -578,7 +577,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpInterface->stop_voice_recognition((bt_bdaddr_t*)addr);
+      sBluetoothHfpInterface->stop_voice_recognition((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to stop voice recognition, status: %d", status);
   }
@@ -598,7 +597,7 @@
   }
 
   bt_status_t status = sBluetoothHfpInterface->volume_control(
-      (bthf_volume_type_t)volume_type, volume, (bt_bdaddr_t*)addr);
+      (bthf_volume_type_t)volume_type, volume, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("FAILED to control volume, status: %d", status);
   }
@@ -635,7 +634,7 @@
   const char* operator_name = env->GetStringUTFChars(operator_str, NULL);
 
   bt_status_t status =
-      sBluetoothHfpInterface->cops_response(operator_name, (bt_bdaddr_t*)addr);
+      sBluetoothHfpInterface->cops_response(operator_name, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending cops response, status: %d", status);
   }
@@ -661,7 +660,7 @@
 
   bt_status_t status = sBluetoothHfpInterface->cind_response(
       service, num_active, num_held, (bthf_call_state_t)call_state, signal,
-      roam, battery_charge, (bt_bdaddr_t*)addr);
+      roam, battery_charge, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed cind_response, status: %d", status);
   }
@@ -685,7 +684,7 @@
   bt_status_t status = sBluetoothHfpInterface->bind_response(
       (bthf_hf_ind_type_t)ind_id,
       ind_status ? BTHF_HF_IND_ENABLED : BTHF_HF_IND_DISABLED,
-      (bt_bdaddr_t*)addr);
+      (RawAddress*)addr);
 
   if (status != BT_STATUS_SUCCESS)
     ALOGE("%s: Failed bind_response, status: %d", __func__, status);
@@ -709,7 +708,7 @@
   const char* response = env->GetStringUTFChars(response_str, NULL);
 
   bt_status_t status = sBluetoothHfpInterface->formatted_at_response(
-      response, (bt_bdaddr_t*)addr);
+      response, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed formatted AT response, status: %d", status);
   }
@@ -731,7 +730,7 @@
   }
 
   bt_status_t status = sBluetoothHfpInterface->at_response(
-      (bthf_at_response_t)response_code, cmee_code, (bt_bdaddr_t*)addr);
+      (bthf_at_response_t)response_code, cmee_code, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed AT response, status: %d", status);
   }
@@ -759,7 +758,7 @@
       index, (bthf_call_direction_t)dir, (bthf_call_state_t)callStatus,
       (bthf_call_mode_t)mode,
       mpty ? BTHF_CALL_MPTY_TYPE_MULTI : BTHF_CALL_MPTY_TYPE_SINGLE, number,
-      (bthf_call_addrtype_t)type, (bt_bdaddr_t*)addr);
+      (bthf_call_addrtype_t)type, (RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed sending CLCC response, status: %d", status);
   }
@@ -799,7 +798,7 @@
   }
 
   bt_status_t status = sBluetoothHfpInterface->configure_wbs(
-      (bt_bdaddr_t*)addr, (bthf_wbs_config_t)codec_config);
+      (RawAddress*)addr, (bthf_wbs_config_t)codec_config);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HF WBS codec config, status: %d", status);
   }
diff --git a/android/app/jni/com_android_bluetooth_hfpclient.cpp b/android/app/jni/com_android_bluetooth_hfpclient.cpp
index 4bb1380..04e963b 100644
--- a/android/app/jni/com_android_bluetooth_hfpclient.cpp
+++ b/android/app/jni/com_android_bluetooth_hfpclient.cpp
@@ -50,21 +50,21 @@
 static jmethodID method_onLastVoiceTagNumber;
 static jmethodID method_onRingIndication;
 
-static jbyteArray marshall_bda(const bt_bdaddr_t* bd_addr) {
+static jbyteArray marshall_bda(const RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return NULL;
 
-  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
+  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(RawAddress));
   if (!addr) {
     ALOGE("Fail to new jbyteArray bd addr");
     return NULL;
   }
-  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   return addr;
 }
 
-static void connection_state_cb(const bt_bdaddr_t* bd_addr,
+static void connection_state_cb(const RawAddress* bd_addr,
                                 bthf_client_connection_state_t state,
                                 unsigned int peer_feat,
                                 unsigned int chld_feat) {
@@ -80,7 +80,7 @@
                                addr.get());
 }
 
-static void audio_state_cb(const bt_bdaddr_t* bd_addr,
+static void audio_state_cb(const RawAddress* bd_addr,
                            bthf_client_audio_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -92,15 +92,14 @@
                                (jint)state, addr.get());
 }
 
-static void vr_cmd_cb(const bt_bdaddr_t* bd_addr,
-                      bthf_client_vr_state_t state) {
+static void vr_cmd_cb(const RawAddress* bd_addr, bthf_client_vr_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onVrStateChanged,
                                (jint)state);
 }
 
-static void network_state_cb(const bt_bdaddr_t* bd_addr,
+static void network_state_cb(const RawAddress* bd_addr,
                              bthf_client_network_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -112,7 +111,7 @@
                                (jint)state, addr.get());
 }
 
-static void network_roaming_cb(const bt_bdaddr_t* bd_addr,
+static void network_roaming_cb(const RawAddress* bd_addr,
                                bthf_client_service_type_t type) {
   CallbackEnv sCallbackEnv(__func__);
 
@@ -123,7 +122,7 @@
                                (jint)type, addr.get());
 }
 
-static void network_signal_cb(const bt_bdaddr_t* bd_addr, int signal) {
+static void network_signal_cb(const RawAddress* bd_addr, int signal) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -134,7 +133,7 @@
                                (jint)signal, addr.get());
 }
 
-static void battery_level_cb(const bt_bdaddr_t* bd_addr, int level) {
+static void battery_level_cb(const RawAddress* bd_addr, int level) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -145,7 +144,7 @@
                                (jint)level, addr.get());
 }
 
-static void current_operator_cb(const bt_bdaddr_t* bd_addr, const char* name) {
+static void current_operator_cb(const RawAddress* bd_addr, const char* name) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -158,7 +157,7 @@
                                js_name.get(), addr.get());
 }
 
-static void call_cb(const bt_bdaddr_t* bd_addr, bthf_client_call_t call) {
+static void call_cb(const RawAddress* bd_addr, bthf_client_call_t call) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -169,7 +168,7 @@
                                addr.get());
 }
 
-static void callsetup_cb(const bt_bdaddr_t* bd_addr,
+static void callsetup_cb(const RawAddress* bd_addr,
                          bthf_client_callsetup_t callsetup) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -185,7 +184,7 @@
                                (jint)callsetup, addr.get());
 }
 
-static void callheld_cb(const bt_bdaddr_t* bd_addr,
+static void callheld_cb(const RawAddress* bd_addr,
                         bthf_client_callheld_t callheld) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -197,7 +196,7 @@
                                addr.get());
 }
 
-static void resp_and_hold_cb(const bt_bdaddr_t* bd_addr,
+static void resp_and_hold_cb(const RawAddress* bd_addr,
                              bthf_client_resp_and_hold_t resp_and_hold) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -209,7 +208,7 @@
                                (jint)resp_and_hold, addr.get());
 }
 
-static void clip_cb(const bt_bdaddr_t* bd_addr, const char* number) {
+static void clip_cb(const RawAddress* bd_addr, const char* number) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -222,7 +221,7 @@
                                addr.get());
 }
 
-static void call_waiting_cb(const bt_bdaddr_t* bd_addr, const char* number) {
+static void call_waiting_cb(const RawAddress* bd_addr, const char* number) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -234,7 +233,7 @@
                                js_number.get(), addr.get());
 }
 
-static void current_calls_cb(const bt_bdaddr_t* bd_addr, int index,
+static void current_calls_cb(const RawAddress* bd_addr, int index,
                              bthf_client_call_direction_t dir,
                              bthf_client_call_state_t state,
                              bthf_client_call_mpty_type_t mpty,
@@ -250,7 +249,7 @@
                                state, mpty, js_number.get(), addr.get());
 }
 
-static void volume_change_cb(const bt_bdaddr_t* bd_addr,
+static void volume_change_cb(const RawAddress* bd_addr,
                              bthf_client_volume_type_t type, int volume) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -261,7 +260,7 @@
                                (jint)volume, addr.get());
 }
 
-static void cmd_complete_cb(const bt_bdaddr_t* bd_addr,
+static void cmd_complete_cb(const RawAddress* bd_addr,
                             bthf_client_cmd_complete_t type, int cme) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -272,7 +271,7 @@
                                (jint)cme, addr.get());
 }
 
-static void subscriber_info_cb(const bt_bdaddr_t* bd_addr, const char* name,
+static void subscriber_info_cb(const RawAddress* bd_addr, const char* name,
                                bthf_client_subscriber_service_type_t type) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -285,7 +284,7 @@
                                js_name.get(), (jint)type, addr.get());
 }
 
-static void in_band_ring_cb(const bt_bdaddr_t* bd_addr,
+static void in_band_ring_cb(const RawAddress* bd_addr,
                             bthf_client_in_band_ring_state_t in_band) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -296,7 +295,7 @@
                                (jint)in_band, addr.get());
 }
 
-static void last_voice_tag_number_cb(const bt_bdaddr_t* bd_addr,
+static void last_voice_tag_number_cb(const RawAddress* bd_addr,
                                      const char* number) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -309,7 +308,7 @@
                                js_number.get(), addr.get());
 }
 
-static void ring_indication_cb(const bt_bdaddr_t* bd_addr) {
+static void ring_indication_cb(const RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -445,8 +444,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status =
-      sBluetoothHfpClientInterface->connect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHfpClientInterface->connect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed AG connection, status: %d", status);
   }
@@ -465,7 +463,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpClientInterface->disconnect((const bt_bdaddr_t*)addr);
+      sBluetoothHfpClientInterface->disconnect((const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed AG disconnection, status: %d", status);
   }
@@ -484,7 +482,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpClientInterface->connect_audio((const bt_bdaddr_t*)addr);
+      sBluetoothHfpClientInterface->connect_audio((const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed AG audio connection, status: %d", status);
   }
@@ -503,7 +501,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpClientInterface->disconnect_audio((const bt_bdaddr_t*)addr);
+      sBluetoothHfpClientInterface->disconnect_audio((const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed AG audio disconnection, status: %d", status);
   }
@@ -522,7 +520,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->start_voice_recognition(
-      (const bt_bdaddr_t*)addr);
+      (const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to start voice recognition, status: %d", status);
   }
@@ -541,7 +539,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->stop_voice_recognition(
-      (const bt_bdaddr_t*)addr);
+      (const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to stop voice recognition, status: %d", status);
   }
@@ -560,7 +558,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->volume_control(
-      (const bt_bdaddr_t*)addr, (bthf_client_volume_type_t)volume_type, volume);
+      (const RawAddress*)addr, (bthf_client_volume_type_t)volume_type, volume);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("FAILED to control volume, status: %d", status);
   }
@@ -584,7 +582,7 @@
   }
 
   bt_status_t status =
-      sBluetoothHfpClientInterface->dial((const bt_bdaddr_t*)addr, number);
+      sBluetoothHfpClientInterface->dial((const RawAddress*)addr, number);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to dial, status: %d", status);
   }
@@ -606,7 +604,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->dial_memory(
-      (const bt_bdaddr_t*)addr, (int)location);
+      (const RawAddress*)addr, (int)location);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to dial from memory, status: %d", status);
   }
@@ -627,7 +625,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->handle_call_action(
-      (const bt_bdaddr_t*)addr, (bthf_client_call_action_t)action, (int)index);
+      (const RawAddress*)addr, (bthf_client_call_action_t)action, (int)index);
 
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to enter private mode, status: %d", status);
@@ -647,7 +645,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->query_current_calls(
-      (const bt_bdaddr_t*)addr);
+      (const RawAddress*)addr);
 
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to query current calls, status: %d", status);
@@ -668,7 +666,7 @@
 
   bt_status_t status =
       sBluetoothHfpClientInterface->query_current_operator_name(
-          (const bt_bdaddr_t*)addr);
+          (const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to query current operator name, status: %d", status);
   }
@@ -688,7 +686,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->retrieve_subscriber_info(
-      (const bt_bdaddr_t*)addr);
+      (const RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to retrieve subscriber info, status: %d", status);
   }
@@ -708,7 +706,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->send_dtmf(
-      (const bt_bdaddr_t*)addr, (char)code);
+      (const RawAddress*)addr, (char)code);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to send DTMF, status: %d", status);
   }
@@ -729,7 +727,7 @@
 
   bt_status_t status =
       sBluetoothHfpClientInterface->request_last_voice_tag_number(
-          (const bt_bdaddr_t*)addr);
+          (const RawAddress*)addr);
 
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to request last Voice Tag number, status: %d", status);
@@ -756,7 +754,7 @@
   }
 
   bt_status_t status = sBluetoothHfpClientInterface->send_at_cmd(
-      (const bt_bdaddr_t*)addr, cmd, val1, val2, arg);
+      (const RawAddress*)addr, cmd, val1, val2, arg);
 
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed to send cmd, status: %d", status);
diff --git a/android/app/jni/com_android_bluetooth_hid.cpp b/android/app/jni/com_android_bluetooth_hid.cpp
index d649063..8a58c29 100644
--- a/android/app/jni/com_android_bluetooth_hid.cpp
+++ b/android/app/jni/com_android_bluetooth_hid.cpp
@@ -37,21 +37,21 @@
 static const bthh_interface_t* sBluetoothHidInterface = NULL;
 static jobject mCallbacksObj = NULL;
 
-static jbyteArray marshall_bda(bt_bdaddr_t* bd_addr) {
+static jbyteArray marshall_bda(RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return NULL;
 
-  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
+  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(RawAddress));
   if (!addr) {
     ALOGE("Fail to new jbyteArray bd addr");
     return NULL;
   }
-  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   return addr;
 }
 
-static void connection_state_callback(bt_bdaddr_t* bd_addr,
+static void connection_state_callback(RawAddress* bd_addr,
                                       bthh_connection_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -69,7 +69,7 @@
                                addr.get(), (jint)state);
 }
 
-static void get_protocol_mode_callback(bt_bdaddr_t* bd_addr,
+static void get_protocol_mode_callback(RawAddress* bd_addr,
                                        bthh_status_t hh_status,
                                        bthh_protocol_mode_t mode) {
   CallbackEnv sCallbackEnv(__func__);
@@ -93,7 +93,7 @@
                                addr.get(), (jint)mode);
 }
 
-static void get_report_callback(bt_bdaddr_t* bd_addr, bthh_status_t hh_status,
+static void get_report_callback(RawAddress* bd_addr, bthh_status_t hh_status,
                                 uint8_t* rpt_data, int rpt_size) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
@@ -123,7 +123,7 @@
                                data.get(), (jint)rpt_size);
 }
 
-static void virtual_unplug_callback(bt_bdaddr_t* bd_addr,
+static void virtual_unplug_callback(RawAddress* bd_addr,
                                     bthh_status_t hh_status) {
   ALOGV("call to virtual_unplug_callback");
   CallbackEnv sCallbackEnv(__func__);
@@ -141,7 +141,7 @@
                                addr.get(), (jint)hh_status);
 }
 
-static void handshake_callback(bt_bdaddr_t* bd_addr, bthh_status_t hh_status) {
+static void handshake_callback(RawAddress* bd_addr, bthh_status_t hh_status) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
   if (!mCallbacksObj) {
@@ -158,8 +158,8 @@
                                (jint)hh_status);
 }
 
-static void get_idle_time_callback(bt_bdaddr_t* bd_addr,
-                                   bthh_status_t hh_status, int idle_time) {
+static void get_idle_time_callback(RawAddress* bd_addr, bthh_status_t hh_status,
+                                   int idle_time) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
@@ -265,7 +265,7 @@
   }
 
   jboolean ret = JNI_TRUE;
-  bt_status_t status = sBluetoothHidInterface->connect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHidInterface->connect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed HID channel connection, status: %d", status);
     ret = JNI_FALSE;
@@ -287,7 +287,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothHidInterface->disconnect((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHidInterface->disconnect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed disconnect hid channel, status: %d", status);
     ret = JNI_FALSE;
@@ -311,7 +311,7 @@
   // TODO: protocolMode is unused by the backend: see b/28908173
   bthh_protocol_mode_t protocolMode = BTHH_UNSUPPORTED_MODE;
   bt_status_t status = sBluetoothHidInterface->get_protocol(
-      (bt_bdaddr_t*)addr, (bthh_protocol_mode_t)protocolMode);
+      (RawAddress*)addr, (bthh_protocol_mode_t)protocolMode);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed get protocol mode, status: %d", status);
     ret = JNI_FALSE;
@@ -333,7 +333,7 @@
 
   jboolean ret = JNI_TRUE;
   bt_status_t status =
-      sBluetoothHidInterface->virtual_unplug((bt_bdaddr_t*)addr);
+      sBluetoothHidInterface->virtual_unplug((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed virual unplug, status: %d", status);
     ret = JNI_FALSE;
@@ -369,7 +369,7 @@
 
   jboolean ret = JNI_TRUE;
   bt_status_t status =
-      sBluetoothHidInterface->set_protocol((bt_bdaddr_t*)addr, mode);
+      sBluetoothHidInterface->set_protocol((RawAddress*)addr, mode);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed set protocol mode, status: %d", status);
     ret = JNI_FALSE;
@@ -396,7 +396,7 @@
   jint rId = reportId;
 
   bt_status_t status = sBluetoothHidInterface->get_report(
-      (bt_bdaddr_t*)addr, (bthh_report_type_t)rType, (uint8_t)rId, bufferSize);
+      (RawAddress*)addr, (bthh_report_type_t)rType, (uint8_t)rId, bufferSize);
   jboolean ret = JNI_TRUE;
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed get report, status: %d", status);
@@ -422,7 +422,7 @@
 
   jboolean ret = JNI_TRUE;
   bt_status_t status = sBluetoothHidInterface->set_report(
-      (bt_bdaddr_t*)addr, (bthh_report_type_t)rType, (char*)c_report);
+      (RawAddress*)addr, (bthh_report_type_t)rType, (char*)c_report);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed set report, status: %d", status);
     ret = JNI_FALSE;
@@ -448,7 +448,7 @@
   const char* c_report = env->GetStringUTFChars(report, NULL);
 
   bt_status_t status =
-      sBluetoothHidInterface->send_data((bt_bdaddr_t*)addr, (char*)c_report);
+      sBluetoothHidInterface->send_data((RawAddress*)addr, (char*)c_report);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("Failed set data, status: %d", status);
     ret = JNI_FALSE;
@@ -469,7 +469,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothHidInterface->get_idle_time((bt_bdaddr_t*)addr);
+  bt_status_t status = sBluetoothHidInterface->get_idle_time((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("%s: Failed get idle time, status: %d", __func__, status);
   }
@@ -488,8 +488,8 @@
     return JNI_FALSE;
   }
 
-  bt_status_t status = sBluetoothHidInterface->set_idle_time(
-           (bt_bdaddr_t*)addr, idle_time);
+  bt_status_t status =
+      sBluetoothHidInterface->set_idle_time((RawAddress*)addr, idle_time);
   if (status != BT_STATUS_SUCCESS) {
     ALOGE("%s: Failed set idle time, status: %d", __func__, status);
   }
diff --git a/android/app/jni/com_android_bluetooth_hidd.cpp b/android/app/jni/com_android_bluetooth_hidd.cpp
index 5b0beec..b0e084a 100644
--- a/android/app/jni/com_android_bluetooth_hidd.cpp
+++ b/android/app/jni/com_android_bluetooth_hidd.cpp
@@ -38,21 +38,21 @@
 static const bthd_interface_t* sHiddIf = NULL;
 static jobject mCallbacksObj = NULL;
 
-static jbyteArray marshall_bda(bt_bdaddr_t* bd_addr) {
+static jbyteArray marshall_bda(RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return NULL;
 
-  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
+  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(RawAddress));
   if (!addr) {
     ALOGE("Fail to new jbyteArray bd addr");
     return NULL;
   }
-  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   return addr;
 }
 
-static void application_state_callback(bt_bdaddr_t* bd_addr,
+static void application_state_callback(RawAddress* bd_addr,
                                        bthd_application_state_t state) {
   jboolean registered = JNI_FALSE;
 
@@ -76,7 +76,7 @@
                                addr.get(), registered);
 }
 
-static void connection_state_callback(bt_bdaddr_t* bd_addr,
+static void connection_state_callback(RawAddress* bd_addr,
                                       bthd_connection_state_t state) {
   CallbackEnv sCallbackEnv(__func__);
 
@@ -426,7 +426,7 @@
     return JNI_FALSE;
   }
 
-  bt_status_t ret = sHiddIf->connect((bt_bdaddr_t*)addr);
+  bt_status_t ret = sHiddIf->connect((RawAddress*)addr);
 
   ALOGV("%s: connect() returned %d", __FUNCTION__, ret);
 
diff --git a/android/app/jni/com_android_bluetooth_pan.cpp b/android/app/jni/com_android_bluetooth_pan.cpp
index 2786a80..85107a0 100644
--- a/android/app/jni/com_android_bluetooth_pan.cpp
+++ b/android/app/jni/com_android_bluetooth_pan.cpp
@@ -44,16 +44,16 @@
 static const btpan_interface_t* sPanIf = NULL;
 static jobject mCallbacksObj = NULL;
 
-static jbyteArray marshall_bda(const bt_bdaddr_t* bd_addr) {
+static jbyteArray marshall_bda(const RawAddress* bd_addr) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return NULL;
 
-  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t));
+  jbyteArray addr = sCallbackEnv->NewByteArray(sizeof(RawAddress));
   if (!addr) {
     ALOGE("Fail to new jbyteArray bd addr");
     return NULL;
   }
-  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   return addr;
 }
@@ -76,8 +76,8 @@
 
 static void connection_state_callback(btpan_connection_state_t state,
                                       bt_status_t error,
-                                      const bt_bdaddr_t* bd_addr,
-                                      int local_role, int remote_role) {
+                                      const RawAddress* bd_addr, int local_role,
+                                      int remote_role) {
   debug("state:%d, local_role:%d, remote_role:%d", state, local_role,
         remote_role);
   if (mCallbacksObj == NULL) {
@@ -200,7 +200,7 @@
   }
 
   jboolean ret = JNI_TRUE;
-  bt_status_t status = sPanIf->connect((bt_bdaddr_t*)addr, src_role, dest_role);
+  bt_status_t status = sPanIf->connect((RawAddress*)addr, src_role, dest_role);
   if (status != BT_STATUS_SUCCESS) {
     error("Failed PAN channel connection, status: %d", status);
     ret = JNI_FALSE;
@@ -221,7 +221,7 @@
   }
 
   jboolean ret = JNI_TRUE;
-  bt_status_t status = sPanIf->disconnect((bt_bdaddr_t*)addr);
+  bt_status_t status = sPanIf->disconnect((RawAddress*)addr);
   if (status != BT_STATUS_SUCCESS) {
     error("Failed disconnect pan channel, status: %d", status);
     ret = JNI_FALSE;
diff --git a/android/app/jni/com_android_bluetooth_sdp.cpp b/android/app/jni/com_android_bluetooth_sdp.cpp
index fb68f47..f658413 100644
--- a/android/app/jni/com_android_bluetooth_sdp.cpp
+++ b/android/app/jni/com_android_bluetooth_sdp.cpp
@@ -59,7 +59,7 @@
 
 static const btsdp_interface_t* sBluetoothSdpInterface = NULL;
 
-static void sdp_search_callback(bt_status_t status, bt_bdaddr_t* bd_addr,
+static void sdp_search_callback(bt_status_t status, RawAddress* bd_addr,
                                 uint8_t* uuid_in, int record_size,
                                 bluetooth_sdp_record* record);
 
@@ -135,7 +135,7 @@
   }
   ALOGD("%s UUID %.*s", __func__, 16, (uint8_t*)uuid);
 
-  int ret = sBluetoothSdpInterface->sdp_search((bt_bdaddr_t*)addr,
+  int ret = sBluetoothSdpInterface->sdp_search((RawAddress*)addr,
                                                (const uint8_t*)uuid);
   if (ret != BT_STATUS_SUCCESS) {
     ALOGE("SDP Search initialization failed: %d", ret);
@@ -146,21 +146,21 @@
   return (ret == BT_STATUS_SUCCESS) ? JNI_TRUE : JNI_FALSE;
 }
 
-static void sdp_search_callback(bt_status_t status, bt_bdaddr_t* bd_addr,
+static void sdp_search_callback(bt_status_t status, RawAddress* bd_addr,
                                 uint8_t* uuid_in, int count,
                                 bluetooth_sdp_record* records) {
   CallbackEnv sCallbackEnv(__func__);
   if (!sCallbackEnv.valid()) return;
 
   ScopedLocalRef<jbyteArray> addr(
-      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)));
+      sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(RawAddress)));
   if (!addr.get()) return;
 
   ScopedLocalRef<jbyteArray> uuid(
       sCallbackEnv.get(), sCallbackEnv->NewByteArray(sizeof(bt_uuid_t)));
   if (!uuid.get()) return;
 
-  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(bt_bdaddr_t),
+  sCallbackEnv->SetByteArrayRegion(addr.get(), 0, sizeof(RawAddress),
                                    (jbyte*)bd_addr);
   sCallbackEnv->SetByteArrayRegion(uuid.get(), 0, sizeof(bt_uuid_t),
                                    (jbyte*)uuid_in);