Loading android/app/jni/com_android_bluetooth_gatt.cpp +27 −14 Original line number Diff line number Diff line Loading @@ -18,17 +18,18 @@ #define LOG_NDEBUG 0 #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 @@ -193,6 +194,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 @@ -804,8 +806,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 @@ -813,24 +816,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 @@ -838,8 +844,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 @@ -847,16 +854,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 @@ -864,8 +873,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 @@ -873,8 +883,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 @@ -2000,6 +2011,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 @@ -2010,6 +2022,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 @@ -18,17 +18,18 @@ #define LOG_NDEBUG 0 #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 @@ -193,6 +194,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 @@ -804,8 +806,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 @@ -813,24 +816,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 @@ -838,8 +844,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 @@ -847,16 +854,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 @@ -864,8 +873,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 @@ -873,8 +883,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 @@ -2000,6 +2011,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 @@ -2010,6 +2022,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