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; }
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 }
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; }
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; }