Exemple #1
0
static jint addRfcommServiceRecordNative(JNIEnv *env, jobject object,
        jstring name, jlong uuidMsb, jlong uuidLsb, jshort channel) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        const char *c_name = env->GetStringUTFChars(name, NULL);
        LOGV("... name = %s", c_name);
        LOGV("... uuid1 = %llX", uuidMsb);
        LOGV("... uuid2 = %llX", uuidLsb);
        LOGV("... channel = %d", channel);
        DBusMessage *reply = dbus_func_args(env, nat->conn,
                                            get_adapter_path(env, object),
                                            DBUS_ADAPTER_IFACE, "AddRfcommServiceRecord",
                                            DBUS_TYPE_STRING, &c_name,
                                            DBUS_TYPE_UINT64, &uuidMsb,
                                            DBUS_TYPE_UINT64, &uuidLsb,
                                            DBUS_TYPE_UINT16, &channel,
                                            DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(name, c_name);
        return reply ? dbus_returns_uint32(env, reply) : -1;
    }
#endif
    return -1;
}
Exemple #2
0
static jint getDeviceServiceChannelNative(JNIEnv *env, jobject object,
        jstring path,
        jstring pattern, jint attr_id) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    native_data_t *nat = get_native_data(env, object);
    jobject eventLoop = env->GetObjectField(object, field_mEventLoop);
    struct event_loop_native_data_t *eventLoopNat =
        get_EventLoop_native_data(env, eventLoop);
    if (nat && eventLoopNat) {
        const char *c_pattern = env->GetStringUTFChars(pattern, NULL);
        const char *c_path = env->GetStringUTFChars(path, NULL);
        LOGV("... pattern = %s", c_pattern);
        LOGV("... attr_id = %#X", attr_id);
        DBusMessage *reply =
            dbus_func_args(env, nat->conn, c_path,
                           DBUS_DEVICE_IFACE, "GetServiceAttributeValue",
                           DBUS_TYPE_STRING, &c_pattern,
                           DBUS_TYPE_UINT16, &attr_id,
                           DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(pattern, c_pattern);
        env->ReleaseStringUTFChars(path, c_path);
        return reply ? dbus_returns_int32(env, reply) : -1;
    }
#endif
    return -1;
}
static jobjectArray listHeadsetsNative(JNIEnv *env, jobject object) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    if (nat) {
        DBusMessage *reply =
            dbus_func_args(env, nat->conn, "/org/bluez/audio",
                           "org.bluez.audio.Manager", "ListHeadsets",
                           DBUS_TYPE_INVALID);
        return reply ? dbus_returns_array_of_strings(env, reply) : NULL;
    }
#endif
    return NULL;
}
static jboolean isSinkConnectedNative(JNIEnv *env, jobject object, jstring path) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    if (nat) {
        const char *c_path = env->GetStringUTFChars(path, NULL);
        DBusMessage *reply =
            dbus_func_args(env, nat->conn, c_path,
                           "org.bluez.audio.Sink", "IsConnected",
                           DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);
        return reply ? dbus_returns_boolean(env, reply) : JNI_FALSE;
    }
#endif
    return JNI_FALSE;
}
static jstring getAddressNative(JNIEnv *env, jobject object, jstring path) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    if (nat) {
        const char *c_path = env->GetStringUTFChars(path, NULL);
        DBusMessage *reply =
            dbus_func_args(env, nat->conn, c_path,
                           "org.bluez.audio.Device", "GetAddress",
                           DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);
        return reply ? dbus_returns_string(env, reply) : NULL;
    }
#endif
    return NULL;
}
/* private static native void removeServiceRecordNative(int handle); */
static void removeServiceRecordNative(JNIEnv *env, jobject object,
                                      jint handle) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    if (conn != NULL) {
        DBusMessage *reply = dbus_func_args(env,
                                            conn,
                                            BLUEZ_DBUS_BASE_PATH,
                                            DBUS_CLASS_NAME,
                                            "RemoveServiceRecord",
                                            DBUS_TYPE_UINT32, &handle,
                                            DBUS_TYPE_INVALID);
    }
#endif
}
static jstring removeHeadsetNative(JNIEnv *env, jobject object, jstring path) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    if (nat) {
        const char *c_path = env->GetStringUTFChars(path, NULL);
        DBusMessage *reply =
            dbus_func_args(env, nat->conn, "/org/bluez/audio",
                           "org.bluez.audio.Manager", "RemoveHeadset",
                           DBUS_TYPE_STRING, &c_path,
                           DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);
        return reply ? dbus_returns_string(env, reply) : NULL;
    }
#endif
    return NULL;
}
Exemple #8
0
static jboolean removeServiceRecordNative(JNIEnv *env, jobject object, jint handle) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        LOGV("... handle = %X", handle);
        DBusMessage *reply = dbus_func_args(env, nat->conn,
                                            get_adapter_path(env, object),
                                            DBUS_ADAPTER_IFACE, "RemoveServiceRecord",
                                            DBUS_TYPE_UINT32, &handle,
                                            DBUS_TYPE_INVALID);
        return reply ? JNI_TRUE : JNI_FALSE;
    }
#endif
    return JNI_FALSE;
}
static jint addServiceRecordFromXmlNative(JNIEnv *env, jobject object,
                                          jstring record) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    if (conn != NULL) {
        const char *c_record = env->GetStringUTFChars(record, NULL);
        DBusMessage *reply = dbus_func_args(env,
                                            conn,
                                            BLUEZ_DBUS_BASE_PATH,
                                            DBUS_CLASS_NAME,
                                            "AddServiceRecordFromXML",
                                            DBUS_TYPE_STRING, &c_record,
                                            DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(record, c_record);
        return reply ? dbus_returns_uint32(env, reply) : -1;
    }
#endif
    return -1;
}
static void updateServiceRecordFromXmlNative(JNIEnv *env, jobject object,
                                             jint handle,
                                             jstring record) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    if (conn != NULL) {
        const char *c_record = env->GetStringUTFChars(record, NULL);
        DBusMessage *reply = dbus_func_args(env,
                                            conn,
                                            BLUEZ_DBUS_BASE_PATH,
                                            DBUS_CLASS_NAME,
                                            "UpdateServiceRecordFromXML",
                                            DBUS_TYPE_UINT32, &handle,
                                            DBUS_TYPE_STRING, &c_record,
                                            DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(record, c_record);
    }
#endif
}
Exemple #11
0
static jboolean setLinkTimeoutNative(JNIEnv *env, jobject object, jstring object_path,
                                     jint num_slots) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        const char *c_object_path = env->GetStringUTFChars(object_path, NULL);
        DBusMessage *reply = dbus_func_args(env, nat->conn,
                                            get_adapter_path(env, object),
                                            DBUS_ADAPTER_IFACE, "SetLinkTimeout",
                                            DBUS_TYPE_OBJECT_PATH, &c_object_path,
                                            DBUS_TYPE_UINT32, &num_slots,
                                            DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(object_path, c_object_path);
        return reply ? JNI_TRUE : JNI_FALSE;
    }
#endif
    return JNI_FALSE;
}
static jint addServiceRecordNative(JNIEnv *env, jobject object,
                                   jbyteArray record) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    if (conn != NULL) {
        jbyte* c_record = env->GetByteArrayElements(record, NULL);
        DBusMessage *reply = dbus_func_args(env,
                                            conn,
                                            BLUEZ_DBUS_BASE_PATH,
                                            DBUS_CLASS_NAME,
                                            "AddServiceRecord",
                                            DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
                                            &c_record,
                                            env->GetArrayLength(record),
                                            DBUS_TYPE_INVALID);
        env->ReleaseByteArrayElements(record, c_record, JNI_ABORT);
        return reply ? dbus_returns_uint32(env, reply) : -1;
    }
#endif
    return -1;
}
static void updateServiceRecordNative(JNIEnv *env, jobject object,
                                      jint handle,
                                      jbyteArray record) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    if (conn != NULL) {
        jbyte* c_record = env->GetByteArrayElements(record, NULL);
        DBusMessage *reply = dbus_func_args(env,
                                            conn,
                                            BLUEZ_DBUS_BASE_PATH,
                                            DBUS_CLASS_NAME,
                                            "UpdateServiceRecord",
                                            DBUS_TYPE_UINT32, &handle,
                                            DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
                                            &c_record,
                                            env->GetArrayLength(record),
                                            DBUS_TYPE_INVALID);
        env->ReleaseByteArrayElements(record, c_record, JNI_ABORT);
    }
#endif
}
Exemple #14
0
static jbyteArray readAdapterOutOfBandDataNative(JNIEnv *env, jobject object) {
    LOGV(__FUNCTION__);
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);
    DBusError err;
    jbyte *hash, *randomizer;
    jbyteArray byteArray = NULL;
    int hash_len, r_len;
    if (nat) {
        DBusMessage *reply = dbus_func_args(env, nat->conn,
                                            get_adapter_path(env, object),
                                            DBUS_ADAPTER_IFACE, "ReadLocalOutOfBandData",
                                            DBUS_TYPE_INVALID);
        if (!reply) return NULL;

        dbus_error_init(&err);
        if (dbus_message_get_args(reply, &err,
                                  DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &hash, &hash_len,
                                  DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE, &randomizer, &r_len,
                                  DBUS_TYPE_INVALID)) {
            if (hash_len == 16 && r_len == 16) {
                byteArray = env->NewByteArray(32);
                if (byteArray) {
                    env->SetByteArrayRegion(byteArray, 0, 16, hash);
                    env->SetByteArrayRegion(byteArray, 16, 16, randomizer);
                }
            } else {
                LOGE("readAdapterOutOfBandDataNative: Hash len = %d, R len = %d",
                     hash_len, r_len);
            }
        } else {
            LOG_AND_FREE_DBUS_ERROR(&err);
        }
        dbus_message_unref(reply);
        return byteArray;
    }
#endif
    return NULL;
}