diff options
author | Nitin Arora <niarora@codeaurora.org> | 2015-03-11 15:45:26 -0700 |
---|---|---|
committer | Andre Eisenbach <eisenbach@google.com> | 2015-04-15 23:30:10 -0700 |
commit | f19f1ac64a5fefb248ab15b918d009b926c99dde (patch) | |
tree | 8b5e76134add97468a8d4801fb51d12dd5573003 /jni | |
parent | dbe4c2517804b3e32587310b76f1c977b8749d8b (diff) | |
download | android_packages_apps_Bluetooth-f19f1ac64a5fefb248ab15b918d009b926c99dde.tar.gz android_packages_apps_Bluetooth-f19f1ac64a5fefb248ab15b918d009b926c99dde.tar.bz2 android_packages_apps_Bluetooth-f19f1ac64a5fefb248ab15b918d009b926c99dde.zip |
Bluetooth LE background operation mode (1/2)
Changes to BluetoothAdapter state machine for handling new
states BLE_STATE_ON and intermediate states BLE_TURNING_ON
and BLE_TURNING_OFF. Also includes the actions required
while migrating in and out of these states including
start and stop of GATT services and other profiles.
Change-Id: I08d6ff05c2cefe559d5bb5789a1a488afefbe544
Diffstat (limited to 'jni')
-rw-r--r-- | jni/com_android_bluetooth_avrcp.cpp | 47 | ||||
-rw-r--r--[-rwxr-xr-x] | jni/com_android_bluetooth_hid.cpp | 0 | ||||
-rw-r--r-- | jni/com_android_bluetooth_pan.cpp | 9 |
3 files changed, 42 insertions, 14 deletions
diff --git a/jni/com_android_bluetooth_avrcp.cpp b/jni/com_android_bluetooth_avrcp.cpp index e9a7bc90d..b28a43e30 100644 --- a/jni/com_android_bluetooth_avrcp.cpp +++ b/jni/com_android_bluetooth_avrcp.cpp @@ -59,13 +59,18 @@ static void btavrcp_remote_features_callback(bt_bdaddr_t* bd_addr, btrc_remote_f } addr = sCallbackEnv->NewByteArray(sizeof(bt_bdaddr_t)); if (!addr) { - ALOGE("Fail to new jbyteArray bd addr for connection state"); + ALOGE("Unable to allocate byte array for bd_addr"); checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); return; } - sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t), (jbyte*) bd_addr); - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getRcFeatures, addr, (jint)features); + if (mCallbacksObj) { + sCallbackEnv->SetByteArrayRegion(addr, 0, sizeof(bt_bdaddr_t), (jbyte*) bd_addr); + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getRcFeatures, addr, (jint)features); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } + checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); /* TODO: I think we leak the addr object, we should add a * sCallbackEnv->DeleteLocalRef(addr) */ @@ -79,7 +84,11 @@ static void btavrcp_get_play_status_callback() { return; } - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getPlayStatus); + if (mCallbacksObj) { + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getPlayStatus); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } @@ -99,7 +108,11 @@ static void btavrcp_get_element_attr_callback(uint8_t num_attr, btrc_media_attr_ return; } sCallbackEnv->SetIntArrayRegion(attrs, 0, num_attr, (jint *)p_attrs); - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getElementAttr, (jbyte)num_attr, attrs); + if (mCallbacksObj) { + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_getElementAttr, (jbyte)num_attr, attrs); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); sCallbackEnv->DeleteLocalRef(attrs); } @@ -111,9 +124,12 @@ static void btavrcp_register_notification_callback(btrc_event_id_t event_id, uin ALOGE("Callback: '%s' is not called on the correct thread", __FUNCTION__); return; } - - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_registerNotification, + if (mCallbacksObj) { + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_registerNotification, (jint)event_id, (jint)param); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } @@ -124,9 +140,13 @@ static void btavrcp_volume_change_callback(uint8_t volume, uint8_t ctype) { ALOGE("Callback: '%s' is not called on the correct thread", __FUNCTION__); return; } + if (mCallbacksObj) { + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_volumeChangeCallback, (jint)volume, + (jint)ctype); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_volumeChangeCallback, (jint)volume, - (jint)ctype); checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } @@ -137,9 +157,12 @@ static void btavrcp_passthrough_command_callback(int id, int pressed) { ALOGE("Callback: '%s' is not called on the correct thread", __FUNCTION__); return; } - - sCallbackEnv->CallVoidMethod(mCallbacksObj, method_handlePassthroughCmd, (jint)id, - (jint)pressed); + if (mCallbacksObj) { + sCallbackEnv->CallVoidMethod(mCallbacksObj, method_handlePassthroughCmd, + (jint)id, (jint)pressed); + } else { + ALOGE("%s: mCallbacksObj is null", __FUNCTION__); + } checkAndClearExceptionFromCallback(sCallbackEnv, __FUNCTION__); } diff --git a/jni/com_android_bluetooth_hid.cpp b/jni/com_android_bluetooth_hid.cpp index adff0f58a..adff0f58a 100755..100644 --- a/jni/com_android_bluetooth_hid.cpp +++ b/jni/com_android_bluetooth_hid.cpp diff --git a/jni/com_android_bluetooth_pan.cpp b/jni/com_android_bluetooth_pan.cpp index 500fd91e6..d2b2f6e05 100644 --- a/jni/com_android_bluetooth_pan.cpp +++ b/jni/com_android_bluetooth_pan.cpp @@ -134,14 +134,19 @@ static void initializeNative(JNIEnv *env, jobject object) { return; } + mCallbacksObj = env->NewGlobalRef(object); + bt_status_t status; if ( (status = sPanIf->init(&sBluetoothPanCallbacks)) != BT_STATUS_SUCCESS) { error("Failed to initialize Bluetooth PAN, status: %d", status); sPanIf = NULL; + if (mCallbacksObj != NULL) { + ALOGW("initialization failed: Cleaning up Bluetooth PAN callback object"); + env->DeleteGlobalRef(mCallbacksObj); + mCallbacksObj = NULL; + } return; } - - mCallbacksObj = env->NewGlobalRef(object); } static void cleanupNative(JNIEnv *env, jobject object) { |