Loading android/app/jni/com_android_bluetooth_gatt.cpp +9 −9 Original line number Original line Diff line number Diff line Loading @@ -1567,8 +1567,8 @@ static void advertiseCleanupNative(JNIEnv* env, jobject object) { } } } } static AdvertiseParameters parseParams(JNIEnv* env, jobject i, bool isScannable, static AdvertiseParameters parseParams(JNIEnv* env, jobject i, int* timeout) { bool isScannable) { AdvertiseParameters p; AdvertiseParameters p; jclass clazz = env->GetObjectClass(i); jclass clazz = env->GetObjectClass(i); Loading @@ -1590,8 +1590,6 @@ static AdvertiseParameters parseParams(JNIEnv* env, jobject i, bool isScannable, uint32_t interval = env->CallIntMethod(i, methodId); uint32_t interval = env->CallIntMethod(i, methodId); methodId = env->GetMethodID(clazz, "getTxPowerLevel", "()I"); methodId = env->GetMethodID(clazz, "getTxPowerLevel", "()I"); int8_t txPowerLevel = env->CallIntMethod(i, methodId); int8_t txPowerLevel = env->CallIntMethod(i, methodId); methodId = env->GetMethodID(clazz, "getTimeout", "()I"); *timeout = env->CallIntMethod(i, methodId); uint16_t props = 0; uint16_t props = 0; if (isConnectable) props |= 0x01; if (isConnectable) props |= 0x01; Loading Loading @@ -1661,7 +1659,8 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, jobject parameters, jbyteArray adv_data, jobject parameters, jbyteArray adv_data, jbyteArray scan_resp, jbyteArray scan_resp, jobject periodic_parameters, jobject periodic_parameters, jbyteArray periodic_data, jint reg_id) { jbyteArray periodic_data, jint timeout, jint reg_id) { if (!sGattIf) return; if (!sGattIf) return; jbyte* scan_resp_data = env->GetByteArrayElements(scan_resp, NULL); jbyte* scan_resp_data = env->GetByteArrayElements(scan_resp, NULL); Loading @@ -1670,12 +1669,13 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, scan_resp_data + scan_resp_len); scan_resp_data + scan_resp_len); env->ReleaseByteArrayElements(scan_resp, scan_resp_data, JNI_ABORT); env->ReleaseByteArrayElements(scan_resp, scan_resp_data, JNI_ABORT); int timeout; AdvertiseParameters params = AdvertiseParameters params = parseParams(env, parameters, (scan_resp_len != 0), &timeout); parseParams(env, parameters, (scan_resp_len != 0)); PeriodicAdvertisingParameters periodicParams = PeriodicAdvertisingParameters periodicParams = parsePeriodicParams(env, periodic_parameters); parsePeriodicParams(env, periodic_parameters); int timeout_s = (int)timeout / 1000; jbyte* adv_data_data = env->GetByteArrayElements(adv_data, NULL); jbyte* adv_data_data = env->GetByteArrayElements(adv_data, NULL); uint16_t adv_data_len = (uint16_t)env->GetArrayLength(adv_data); uint16_t adv_data_len = (uint16_t)env->GetArrayLength(adv_data); std::vector<uint8_t> data_vec(adv_data_data, adv_data_data + adv_data_len); std::vector<uint8_t> data_vec(adv_data_data, adv_data_data + adv_data_len); Loading @@ -1689,7 +1689,7 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, sGattIf->advertiser->StartAdvertisingSet( sGattIf->advertiser->StartAdvertisingSet( base::Bind(&ble_advertising_set_started_cb, reg_id), params, data_vec, base::Bind(&ble_advertising_set_started_cb, reg_id), params, data_vec, scan_resp_vec, periodicParams, periodic_data_vec, timeout, scan_resp_vec, periodicParams, periodic_data_vec, timeout_s, base::Bind(ble_advertising_set_timeout_cb)); base::Bind(ble_advertising_set_timeout_cb)); } } Loading Loading @@ -1733,7 +1733,7 @@ static JNINativeMethod sAdvertiseMethods[] = { {"cleanupNative", "()V", (void*)advertiseCleanupNative}, {"cleanupNative", "()V", (void*)advertiseCleanupNative}, {"startAdvertisingSetNative", {"startAdvertisingSetNative", "(Landroid/bluetooth/le/AdvertisingSetParameters;[B[BLandroid/bluetooth/" "(Landroid/bluetooth/le/AdvertisingSetParameters;[B[BLandroid/bluetooth/" "le/PeriodicAdvertisingParameters;[BI)V", "le/PeriodicAdvertisingParameters;[BII)V", (void*)startAdvertisingSetNative}, (void*)startAdvertisingSetNative}, {"stopAdvertisingSetNative", "(I)V", (void*)stopAdvertisingSetNative}, {"stopAdvertisingSetNative", "(I)V", (void*)stopAdvertisingSetNative}, }; }; Loading android/app/src/com/android/bluetooth/gatt/AdvertiseManager.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -178,7 +178,7 @@ class AdvertiseManager { void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { AdvertiseData periodicData, int timeout, IAdvertisingSetCallback callback) { AdvertisingSetDeathRecipient deathRecipient = new AdvertisingSetDeathRecipient(callback); AdvertisingSetDeathRecipient deathRecipient = new AdvertisingSetDeathRecipient(callback); IBinder binder = toBinder(callback); IBinder binder = toBinder(callback); try { try { Loading @@ -196,8 +196,8 @@ class AdvertiseManager { mAdvertisers.put(binder, new AdvertiserInfo(cb_id, deathRecipient, callback)); mAdvertisers.put(binder, new AdvertiserInfo(cb_id, deathRecipient, callback)); logd("startAdvertisingSet() - reg_id=" + cb_id + ", callback: " + binder); logd("startAdvertisingSet() - reg_id=" + cb_id + ", callback: " + binder); startAdvertisingSetNative( startAdvertisingSetNative(parameters, adv_data, scan_response, periodicParameters, parameters, adv_data, scan_response, periodicParameters, periodic_data, cb_id); periodic_data, timeout, cb_id); } } void stopAdvertisingSet(IAdvertisingSetCallback callback) { void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading Loading @@ -237,7 +237,8 @@ class AdvertiseManager { private native void cleanupNative(); private native void cleanupNative(); private native void startAdvertisingSetNative(AdvertisingSetParameters parameters, private native void startAdvertisingSetNative(AdvertisingSetParameters parameters, byte[] advertiseData, byte[] scanResponse, byte[] advertiseData, byte[] scanResponse, PeriodicAdvertisingParameters periodicParameters, byte[] periodicData, int reg_id); PeriodicAdvertisingParameters periodicParameters, byte[] periodicData, int timeout, int reg_id); private native void stopAdvertisingSetNative(int advertiser_id); private native void stopAdvertisingSetNative(int advertiser_id); } } android/app/src/com/android/bluetooth/gatt/GattService.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -546,11 +546,11 @@ public class GattService extends ProfileService { public void startAdvertisingSet(AdvertisingSetParameters parameters, public void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { int timeout, IAdvertisingSetCallback callback) { GattService service = getService(); GattService service = getService(); if (service == null) return; if (service == null) return; service.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, service.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, periodicData, callback); periodicData, timeout, callback); } } public void stopAdvertisingSet(IAdvertisingSetCallback callback) { public void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading @@ -559,7 +559,7 @@ public class GattService extends ProfileService { service.stopAdvertisingSet(callback); service.stopAdvertisingSet(callback); } } public void enableAdverisingSet(int advertiserId, boolean enable) { public void enableAdverisingSet(int advertiserId, boolean enable, int timeout) { GattService service = getService(); GattService service = getService(); if (service == null) return; if (service == null) return; // TODO: implement // TODO: implement Loading Loading @@ -1421,11 +1421,11 @@ public class GattService extends ProfileService { *************************************************************************/ *************************************************************************/ void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { AdvertiseData periodicData, int timeout, IAdvertisingSetCallback callback) { enforceAdminPermission(); enforceAdminPermission(); mAdvertiseManager.startAdvertisingSet(parameters, advertiseData, scanResponse, mAdvertiseManager.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, periodicData, callback); periodicParameters, periodicData, timeout, callback); } } void stopAdvertisingSet(IAdvertisingSetCallback callback) { void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading Loading
android/app/jni/com_android_bluetooth_gatt.cpp +9 −9 Original line number Original line Diff line number Diff line Loading @@ -1567,8 +1567,8 @@ static void advertiseCleanupNative(JNIEnv* env, jobject object) { } } } } static AdvertiseParameters parseParams(JNIEnv* env, jobject i, bool isScannable, static AdvertiseParameters parseParams(JNIEnv* env, jobject i, int* timeout) { bool isScannable) { AdvertiseParameters p; AdvertiseParameters p; jclass clazz = env->GetObjectClass(i); jclass clazz = env->GetObjectClass(i); Loading @@ -1590,8 +1590,6 @@ static AdvertiseParameters parseParams(JNIEnv* env, jobject i, bool isScannable, uint32_t interval = env->CallIntMethod(i, methodId); uint32_t interval = env->CallIntMethod(i, methodId); methodId = env->GetMethodID(clazz, "getTxPowerLevel", "()I"); methodId = env->GetMethodID(clazz, "getTxPowerLevel", "()I"); int8_t txPowerLevel = env->CallIntMethod(i, methodId); int8_t txPowerLevel = env->CallIntMethod(i, methodId); methodId = env->GetMethodID(clazz, "getTimeout", "()I"); *timeout = env->CallIntMethod(i, methodId); uint16_t props = 0; uint16_t props = 0; if (isConnectable) props |= 0x01; if (isConnectable) props |= 0x01; Loading Loading @@ -1661,7 +1659,8 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, jobject parameters, jbyteArray adv_data, jobject parameters, jbyteArray adv_data, jbyteArray scan_resp, jbyteArray scan_resp, jobject periodic_parameters, jobject periodic_parameters, jbyteArray periodic_data, jint reg_id) { jbyteArray periodic_data, jint timeout, jint reg_id) { if (!sGattIf) return; if (!sGattIf) return; jbyte* scan_resp_data = env->GetByteArrayElements(scan_resp, NULL); jbyte* scan_resp_data = env->GetByteArrayElements(scan_resp, NULL); Loading @@ -1670,12 +1669,13 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, scan_resp_data + scan_resp_len); scan_resp_data + scan_resp_len); env->ReleaseByteArrayElements(scan_resp, scan_resp_data, JNI_ABORT); env->ReleaseByteArrayElements(scan_resp, scan_resp_data, JNI_ABORT); int timeout; AdvertiseParameters params = AdvertiseParameters params = parseParams(env, parameters, (scan_resp_len != 0), &timeout); parseParams(env, parameters, (scan_resp_len != 0)); PeriodicAdvertisingParameters periodicParams = PeriodicAdvertisingParameters periodicParams = parsePeriodicParams(env, periodic_parameters); parsePeriodicParams(env, periodic_parameters); int timeout_s = (int)timeout / 1000; jbyte* adv_data_data = env->GetByteArrayElements(adv_data, NULL); jbyte* adv_data_data = env->GetByteArrayElements(adv_data, NULL); uint16_t adv_data_len = (uint16_t)env->GetArrayLength(adv_data); uint16_t adv_data_len = (uint16_t)env->GetArrayLength(adv_data); std::vector<uint8_t> data_vec(adv_data_data, adv_data_data + adv_data_len); std::vector<uint8_t> data_vec(adv_data_data, adv_data_data + adv_data_len); Loading @@ -1689,7 +1689,7 @@ static void startAdvertisingSetNative(JNIEnv* env, jobject object, sGattIf->advertiser->StartAdvertisingSet( sGattIf->advertiser->StartAdvertisingSet( base::Bind(&ble_advertising_set_started_cb, reg_id), params, data_vec, base::Bind(&ble_advertising_set_started_cb, reg_id), params, data_vec, scan_resp_vec, periodicParams, periodic_data_vec, timeout, scan_resp_vec, periodicParams, periodic_data_vec, timeout_s, base::Bind(ble_advertising_set_timeout_cb)); base::Bind(ble_advertising_set_timeout_cb)); } } Loading Loading @@ -1733,7 +1733,7 @@ static JNINativeMethod sAdvertiseMethods[] = { {"cleanupNative", "()V", (void*)advertiseCleanupNative}, {"cleanupNative", "()V", (void*)advertiseCleanupNative}, {"startAdvertisingSetNative", {"startAdvertisingSetNative", "(Landroid/bluetooth/le/AdvertisingSetParameters;[B[BLandroid/bluetooth/" "(Landroid/bluetooth/le/AdvertisingSetParameters;[B[BLandroid/bluetooth/" "le/PeriodicAdvertisingParameters;[BI)V", "le/PeriodicAdvertisingParameters;[BII)V", (void*)startAdvertisingSetNative}, (void*)startAdvertisingSetNative}, {"stopAdvertisingSetNative", "(I)V", (void*)stopAdvertisingSetNative}, {"stopAdvertisingSetNative", "(I)V", (void*)stopAdvertisingSetNative}, }; }; Loading
android/app/src/com/android/bluetooth/gatt/AdvertiseManager.java +5 −4 Original line number Original line Diff line number Diff line Loading @@ -178,7 +178,7 @@ class AdvertiseManager { void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { AdvertiseData periodicData, int timeout, IAdvertisingSetCallback callback) { AdvertisingSetDeathRecipient deathRecipient = new AdvertisingSetDeathRecipient(callback); AdvertisingSetDeathRecipient deathRecipient = new AdvertisingSetDeathRecipient(callback); IBinder binder = toBinder(callback); IBinder binder = toBinder(callback); try { try { Loading @@ -196,8 +196,8 @@ class AdvertiseManager { mAdvertisers.put(binder, new AdvertiserInfo(cb_id, deathRecipient, callback)); mAdvertisers.put(binder, new AdvertiserInfo(cb_id, deathRecipient, callback)); logd("startAdvertisingSet() - reg_id=" + cb_id + ", callback: " + binder); logd("startAdvertisingSet() - reg_id=" + cb_id + ", callback: " + binder); startAdvertisingSetNative( startAdvertisingSetNative(parameters, adv_data, scan_response, periodicParameters, parameters, adv_data, scan_response, periodicParameters, periodic_data, cb_id); periodic_data, timeout, cb_id); } } void stopAdvertisingSet(IAdvertisingSetCallback callback) { void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading Loading @@ -237,7 +237,8 @@ class AdvertiseManager { private native void cleanupNative(); private native void cleanupNative(); private native void startAdvertisingSetNative(AdvertisingSetParameters parameters, private native void startAdvertisingSetNative(AdvertisingSetParameters parameters, byte[] advertiseData, byte[] scanResponse, byte[] advertiseData, byte[] scanResponse, PeriodicAdvertisingParameters periodicParameters, byte[] periodicData, int reg_id); PeriodicAdvertisingParameters periodicParameters, byte[] periodicData, int timeout, int reg_id); private native void stopAdvertisingSetNative(int advertiser_id); private native void stopAdvertisingSetNative(int advertiser_id); } }
android/app/src/com/android/bluetooth/gatt/GattService.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -546,11 +546,11 @@ public class GattService extends ProfileService { public void startAdvertisingSet(AdvertisingSetParameters parameters, public void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { int timeout, IAdvertisingSetCallback callback) { GattService service = getService(); GattService service = getService(); if (service == null) return; if (service == null) return; service.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, service.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, periodicData, callback); periodicData, timeout, callback); } } public void stopAdvertisingSet(IAdvertisingSetCallback callback) { public void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading @@ -559,7 +559,7 @@ public class GattService extends ProfileService { service.stopAdvertisingSet(callback); service.stopAdvertisingSet(callback); } } public void enableAdverisingSet(int advertiserId, boolean enable) { public void enableAdverisingSet(int advertiserId, boolean enable, int timeout) { GattService service = getService(); GattService service = getService(); if (service == null) return; if (service == null) return; // TODO: implement // TODO: implement Loading Loading @@ -1421,11 +1421,11 @@ public class GattService extends ProfileService { *************************************************************************/ *************************************************************************/ void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, void startAdvertisingSet(AdvertisingSetParameters parameters, AdvertiseData advertiseData, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData scanResponse, PeriodicAdvertisingParameters periodicParameters, AdvertiseData periodicData, IAdvertisingSetCallback callback) { AdvertiseData periodicData, int timeout, IAdvertisingSetCallback callback) { enforceAdminPermission(); enforceAdminPermission(); mAdvertiseManager.startAdvertisingSet(parameters, advertiseData, scanResponse, mAdvertiseManager.startAdvertisingSet(parameters, advertiseData, scanResponse, periodicParameters, periodicData, callback); periodicParameters, periodicData, timeout, callback); } } void stopAdvertisingSet(IAdvertisingSetCallback callback) { void stopAdvertisingSet(IAdvertisingSetCallback callback) { Loading