Skip to content
This repository was archived by the owner on Jan 4, 2023. It is now read-only.

Commit ac6d308

Browse files
vkolotovpetreeftime
authored andcommitted
Implementing discovery filter by UUIDs (java) and fixing a bug with discovery filter by UUIDs (c++)
Signed-off-by: Vlad Kolotov <vkolotov@gmail.com>
1 parent bbe7933 commit ac6d308

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

java/BluetoothAdapter.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,12 @@ public BluetoothDevice find(String name, String address) {
258258
* @param rssi a rssi value
259259
* @param pathloss a pathloss value
260260
*/
261-
public void setDiscoveryFilter(List<Integer> uuids, int rssi, int pathloss, TransportType transportType) {
262-
setDiscoveryFilter(uuids, rssi, pathloss, transportType.ordinal());
261+
public void setDiscoveryFilter(List<UUID> uuids, int rssi, int pathloss, TransportType transportType) {
262+
List<String> uuidsFmt = new ArrayList<>(uuids.size());
263+
for (UUID uuid : uuids) {
264+
uuidsFmt.add(uuid.toString());
265+
}
266+
setDiscoveryFilter(uuidsFmt, rssi, pathloss, transportType.ordinal());
263267
}
264268

265269
/** This method sets RSSI device discovery filter for the caller. When this method is called
@@ -280,7 +284,7 @@ public String getInterfaceName() {
280284

281285
private native void delete();
282286

283-
private native void setDiscoveryFilter(List<Integer> uuids, int rssi, int pathloss, int transportType);
287+
private native void setDiscoveryFilter(List<String> uuids, int rssi, int pathloss, int transportType);
284288

285289
private BluetoothAdapter(long instance)
286290
{

java/jni/BluetoothAdapter.cxx

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,8 +792,21 @@ void Java_tinyb_BluetoothAdapter_setDiscoveryFilter(JNIEnv *env, jobject obj, jo
792792
try {
793793
BluetoothAdapter *obj_adapter = getInstance<BluetoothAdapter>(env, obj);
794794

795+
jclass cList = env->FindClass("java/util/List");
796+
797+
jmethodID mSize = env->GetMethodID(cList, "size", "()I");
798+
jmethodID mGet = env->GetMethodID(cList, "get", "(I)Ljava/lang/Object;");
799+
800+
jint size = env->CallIntMethod(uuids, mSize);
795801
std::vector<BluetoothUUID> native_uuids;
796-
native_uuids.reserve(0);
802+
803+
for (jint i = 0; i < size; i++) {
804+
jstring strObj = (jstring) env->CallObjectMethod(uuids, mGet, i);
805+
const char * chr = env->GetStringUTFChars(strObj, NULL);
806+
BluetoothUUID uuid(chr);
807+
native_uuids.push_back(uuid);
808+
env->ReleaseStringUTFChars(strObj, chr);
809+
}
797810

798811
TransportType t_type = from_int_to_transport_type((int) transportType);
799812

src/BluetoothAdapter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,12 @@ bool BluetoothAdapter::set_discovery_filter (std::vector<BluetoothUUID> uuids,
221221

222222
if (uuids.size() > 0)
223223
{
224-
GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("a(s)"));
224+
GVariantBuilder *builder = g_variant_builder_new(G_VARIANT_TYPE("as"));
225225

226226
for (std::vector<BluetoothUUID>::iterator i = uuids.begin(); i != uuids.end(); ++i)
227-
g_variant_builder_add(builder, "(s)", (*i).get_string().c_str());
227+
g_variant_builder_add(builder, "s", (*i).get_string().c_str());
228228

229-
GVariant *uuids_variant = g_variant_new("a(s)", builder);
229+
GVariant *uuids_variant = g_variant_new("as", builder);
230230
g_variant_builder_unref(builder);
231231
g_variant_dict_insert_value(&dict, "UUIDs", uuids_variant);
232232
}

0 commit comments

Comments
 (0)