Loading android/app/jni/com_android_bluetooth_gatt.cpp +27 −14 Original line number Diff line number Diff line Loading @@ -16,17 +16,18 @@ #define LOG_TAG "BtGatt.JNI" #include "com_android_bluetooth.h" #include "hardware/bt_gatt.h" #include "utils/Log.h" #include <base/bind.h> #include <base/callback.h> #include <cutils/log.h> #include <string.h> #include <array> #include <memory> #include <shared_mutex> #include <cutils/log.h> #include "com_android_bluetooth.h" #include "hardware/bt_gatt.h" #include "utils/Log.h" #define info(fmt, ...) ALOGI("%s(L%d): " fmt, __func__, __LINE__, ##__VA_ARGS__) #define debug(fmt, ...) \ ALOGD("%s(L%d): " fmt, __func__, __LINE__, ##__VA_ARGS__) Loading Loading @@ -191,6 +192,7 @@ static const btgatt_interface_t* sGattIf = NULL; static jobject mCallbacksObj = NULL; static jobject mAdvertiseCallbacksObj = NULL; static jobject mPeriodicScanCallbacksObj = NULL; static std::shared_mutex callbacks_mutex; /** * BTA client callbacks Loading Loading @@ -802,8 +804,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingSetStarted(int reg_id, uint8_t advertiser_id, int8_t tx_power, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingSetStarted, reg_id, advertiser_id, tx_power, status); Loading @@ -811,24 +814,27 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingEnabled(uint8_t advertiser_id, bool enable, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingEnabled, advertiser_id, enable, status); } void OnAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingDataSet, advertiser_id, status); } void OnScanResponseDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onScanResponseDataSet, advertiser_id, status); Loading @@ -836,8 +842,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingParametersUpdated(uint8_t advertiser_id, int8_t tx_power, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingParametersUpdated, advertiser_id, tx_power, status); Loading @@ -845,16 +852,18 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnPeriodicAdvertisingParametersUpdated(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingParametersUpdated, advertiser_id, status); } void OnPeriodicAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingDataSet, advertiser_id, status); Loading @@ -862,8 +871,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnPeriodicAdvertisingEnabled(uint8_t advertiser_id, bool enable, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingEnabled, advertiser_id, enable, status); Loading @@ -871,8 +881,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnOwnAddressRead(uint8_t advertiser_id, uint8_t address_type, RawAddress address) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); Loading Loading @@ -1998,6 +2009,7 @@ static void advertiseClassInitNative(JNIEnv* env, jclass clazz) { } static void advertiseInitializeNative(JNIEnv* env, jobject object) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); if (mAdvertiseCallbacksObj != NULL) { ALOGW("Cleaning up Advertise callback object"); env->DeleteGlobalRef(mAdvertiseCallbacksObj); Loading @@ -2008,6 +2020,7 @@ static void advertiseInitializeNative(JNIEnv* env, jobject object) { } static void advertiseCleanupNative(JNIEnv* env, jobject object) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); if (mAdvertiseCallbacksObj != NULL) { env->DeleteGlobalRef(mAdvertiseCallbacksObj); mAdvertiseCallbacksObj = NULL; Loading Loading
android/app/jni/com_android_bluetooth_gatt.cpp +27 −14 Original line number Diff line number Diff line Loading @@ -16,17 +16,18 @@ #define LOG_TAG "BtGatt.JNI" #include "com_android_bluetooth.h" #include "hardware/bt_gatt.h" #include "utils/Log.h" #include <base/bind.h> #include <base/callback.h> #include <cutils/log.h> #include <string.h> #include <array> #include <memory> #include <shared_mutex> #include <cutils/log.h> #include "com_android_bluetooth.h" #include "hardware/bt_gatt.h" #include "utils/Log.h" #define info(fmt, ...) ALOGI("%s(L%d): " fmt, __func__, __LINE__, ##__VA_ARGS__) #define debug(fmt, ...) \ ALOGD("%s(L%d): " fmt, __func__, __LINE__, ##__VA_ARGS__) Loading Loading @@ -191,6 +192,7 @@ static const btgatt_interface_t* sGattIf = NULL; static jobject mCallbacksObj = NULL; static jobject mAdvertiseCallbacksObj = NULL; static jobject mPeriodicScanCallbacksObj = NULL; static std::shared_mutex callbacks_mutex; /** * BTA client callbacks Loading Loading @@ -802,8 +804,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingSetStarted(int reg_id, uint8_t advertiser_id, int8_t tx_power, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingSetStarted, reg_id, advertiser_id, tx_power, status); Loading @@ -811,24 +814,27 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingEnabled(uint8_t advertiser_id, bool enable, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingEnabled, advertiser_id, enable, status); } void OnAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingDataSet, advertiser_id, status); } void OnScanResponseDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onScanResponseDataSet, advertiser_id, status); Loading @@ -836,8 +842,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnAdvertisingParametersUpdated(uint8_t advertiser_id, int8_t tx_power, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onAdvertisingParametersUpdated, advertiser_id, tx_power, status); Loading @@ -845,16 +852,18 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnPeriodicAdvertisingParametersUpdated(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingParametersUpdated, advertiser_id, status); } void OnPeriodicAdvertisingDataSet(uint8_t advertiser_id, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingDataSet, advertiser_id, status); Loading @@ -862,8 +871,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnPeriodicAdvertisingEnabled(uint8_t advertiser_id, bool enable, uint8_t status) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; sCallbackEnv->CallVoidMethod(mAdvertiseCallbacksObj, method_onPeriodicAdvertisingEnabled, advertiser_id, enable, status); Loading @@ -871,8 +881,9 @@ class JniAdvertisingCallbacks : AdvertisingCallbacks { void OnOwnAddressRead(uint8_t advertiser_id, uint8_t address_type, RawAddress address) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); CallbackEnv sCallbackEnv(__func__); if (!sCallbackEnv.valid()) return; if (!sCallbackEnv.valid() || mAdvertiseCallbacksObj == NULL) return; ScopedLocalRef<jstring> addr(sCallbackEnv.get(), bdaddr2newjstr(sCallbackEnv.get(), &address)); Loading Loading @@ -1998,6 +2009,7 @@ static void advertiseClassInitNative(JNIEnv* env, jclass clazz) { } static void advertiseInitializeNative(JNIEnv* env, jobject object) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); if (mAdvertiseCallbacksObj != NULL) { ALOGW("Cleaning up Advertise callback object"); env->DeleteGlobalRef(mAdvertiseCallbacksObj); Loading @@ -2008,6 +2020,7 @@ static void advertiseInitializeNative(JNIEnv* env, jobject object) { } static void advertiseCleanupNative(JNIEnv* env, jobject object) { std::shared_lock<std::shared_mutex> lock(callbacks_mutex); if (mAdvertiseCallbacksObj != NULL) { env->DeleteGlobalRef(mAdvertiseCallbacksObj); mAdvertiseCallbacksObj = NULL; Loading