static jobjectArray getInputPropertiesNative(JNIEnv *env, jobject object,
                                            jstring path) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);

        const char *c_path = env->GetStringUTFChars(path, NULL);

        reply = dbus_func_args_timeout(env,
                                   nat->conn, -1, c_path,
                                   "org.bluez.Input", "GetProperties",
                                   DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);
        if (!reply && dbus_error_is_set(&err)) {
            LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, reply);
            return NULL;
        } else if (!reply) {
            LOGV("DBus reply is NULL in function %s", __FUNCTION__);
            return NULL;
        }
        DBusMessageIter iter;
        if (dbus_message_iter_init(reply, &iter))
            return parse_properties(env, &iter, (Properties *)&input_properties,
                                 sizeof(input_properties) / sizeof(Properties));
    }
#endif
    return NULL;
}
Beispiel #2
0
static jobjectArray getAdapterPropertiesNative(JNIEnv *env, jobject object) {
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);

        reply = dbus_func_args_timeout(env,
                                       nat->conn, -1, get_adapter_path(env, object),
                                       DBUS_ADAPTER_IFACE, "GetProperties",
                                       DBUS_TYPE_INVALID);
        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
            return NULL;
        }
        env->PushLocalFrame(PROPERTIES_NREFS);

        DBusMessageIter iter;
        jobjectArray str_array = NULL;
        if (dbus_message_iter_init(reply, &iter))
            str_array = parse_adapter_properties(env, &iter);
        dbus_message_unref(reply);

        env->PopLocalFrame(NULL);
        return str_array;
    }
#endif
    return NULL;
}
static void disconnectNative(JNIEnv *env, jobject object, jstring path)
{
#ifdef HAVE_BLUETOOTH
    LOGV("%s", __FUNCTION__);

    native_data_t *nat = get_native_data(env, object);

    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);

        const char *c_path = env->GetStringUTFChars(path, NULL);
        LOGE("%s c_path=%s",__FUNCTION__, c_path);
        reply = dbus_func_args_timeout(env,
                                   nat->conn, -1, c_path,
                                   DBUS_DEVICE_IFACE, "GattClientDisconnect",
                                   DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);

        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);

            LOGE("%s returning null for some reason", __FUNCTION__);
        } else
            dbus_message_unref(reply);
    }
#endif
}
Beispiel #4
0
static jboolean cancelDeviceCreationNative(JNIEnv *env, jobject object,
        jstring address) {
    LOGV(__FUNCTION__);
    jboolean result = JNI_FALSE;
#ifdef HAVE_BLUETOOTH
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        const char *c_address = env->GetStringUTFChars(address, NULL);
        DBusError err;
        dbus_error_init(&err);
        LOGV("... address = %s", c_address);
        DBusMessage *reply =
            dbus_func_args_timeout(env, nat->conn, -1,
                                   get_adapter_path(env, object),
                                   DBUS_ADAPTER_IFACE, "CancelDeviceCreation",
                                   DBUS_TYPE_STRING, &c_address,
                                   DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(address, c_address);
        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
            return JNI_FALSE;
        } else {
            result = JNI_TRUE;
        }
        dbus_message_unref(reply);
    }
#endif
    return JNI_FALSE;
}
static jboolean writeValueCommandNative(JNIEnv *env, jobject object, jstring path, jbyteArray buff)
{
#ifdef HAVE_BLUETOOTH
    LOGV("%s", __FUNCTION__);

    native_data_t *nat = get_native_data(env, object);

    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);
        jsize len = env->GetArrayLength(buff);
        uint16_t offset = 0;
        uint16_t timeout = 0;
        const char *c_op = "WriteWithoutResponse";

        jbyte *value = env->GetByteArrayElements(buff, NULL);

        if (value == NULL)
            return false;

        const char *c_path = env->GetStringUTFChars(path, NULL);
        LOGE("%s c_path=%s buff_len=%d",__FUNCTION__, c_path,len);

        reply = dbus_func_args_timeout(env,
                                   nat->conn, -1, c_path,
                                   DBUS_CHAR_IFACE, "WriteValue",
                                   DBUS_TYPE_ARRAY,DBUS_TYPE_BYTE, &value, len,
                                   DBUS_TYPE_STRING, &c_op,
                                   DBUS_TYPE_UINT16, &offset,
                                   DBUS_TYPE_UINT16, &timeout,
                                   DBUS_TYPE_INVALID);

        env->ReleaseStringUTFChars(path, c_path);
        env->ReleaseByteArrayElements(buff, value, 0);

        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);

            LOGE("%s returning null for some reason", __FUNCTION__);
            return false;
        }
        dbus_message_unref(reply);
        return true;
    }
#endif
    return false;
}
static jobjectArray discoverServiceCharacteristicsNative(JNIEnv *env,
                                                            jobject object, jstring path)
{
#ifdef HAVE_BLUETOOTH
    LOGV("%s", __FUNCTION__);

    native_data_t *nat = get_native_data(env, object);

    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);

        const char *c_path = env->GetStringUTFChars(path, NULL);
        LOGE("%s c_path=%s",__FUNCTION__, c_path);
        reply = dbus_func_args_timeout(env,
                                   nat->conn, -1, c_path,
                                   DBUS_CHAR_IFACE, "DiscoverCharacteristics",
                                   DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);

        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);

            LOGE("%s returning null for some reason", __FUNCTION__);
            return NULL;
        }
        env->PushLocalFrame(30);

        DBusMessageIter iter;
        jobjectArray str_array = NULL;

        if (dbus_message_iter_init(reply, &iter)) {

            str_array = dbus_returns_array_of_object_path(env,reply);

        }
        return (jobjectArray) env->PopLocalFrame(str_array);
    }
#endif
    return NULL;
}
static jboolean readValueCommandNative(JNIEnv *env, jobject object, jstring path, jint offst)
{
#ifdef HAVE_BLUETOOTH
    LOGV("%s", __FUNCTION__);

    native_data_t *nat = get_native_data(env, object);

    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);
        uint16_t offset = 0; /* TODO : Do not ignore the offst function argument */
        uint16_t timeout = 0;

        const char *c_path = env->GetStringUTFChars(path, NULL);
        LOGE("%s c_path=%s offset=%d",__FUNCTION__, c_path,offst);

        reply = dbus_func_args_timeout(env,
                                   nat->conn, -1, c_path,
                                   DBUS_CHAR_IFACE, "ReadValue",
                                   DBUS_TYPE_UINT16, &offset,
                                   DBUS_TYPE_UINT16, &timeout,
                                   DBUS_TYPE_INVALID);

        env->ReleaseStringUTFChars(path, c_path);

        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);

            LOGE("%s returning null for some reason", __FUNCTION__);
            return false;
        }
        dbus_message_unref(reply);
        return true;
    }
#endif
    return false;
}
Beispiel #8
0
static jobjectArray getDevicePropertiesNative(JNIEnv *env, jobject object,
        jstring path)
{
#ifdef HAVE_BLUETOOTH
    LOGV(__FUNCTION__);
    native_data_t *nat = get_native_data(env, object);
    if (nat) {
        DBusMessage *msg, *reply;
        DBusError err;
        dbus_error_init(&err);

        const char *c_path = env->GetStringUTFChars(path, NULL);
        reply = dbus_func_args_timeout(env,
                                       nat->conn, -1, c_path,
                                       DBUS_DEVICE_IFACE, "GetProperties",
                                       DBUS_TYPE_INVALID);
        env->ReleaseStringUTFChars(path, c_path);

        if (!reply) {
            if (dbus_error_is_set(&err)) {
                LOG_AND_FREE_DBUS_ERROR(&err);
            } else
                LOGE("DBus reply is NULL in function %s", __FUNCTION__);
            return NULL;
        }
        env->PushLocalFrame(PROPERTIES_NREFS);

        DBusMessageIter iter;
        jobjectArray str_array = NULL;
        if (dbus_message_iter_init(reply, &iter))
            str_array =  parse_remote_device_properties(env, &iter);
        dbus_message_unref(reply);

        env->PopLocalFrame(NULL);

        return str_array;
    }
#endif
    return NULL;
}