From 9897c7156ab74cdbf38ef02363734870839e199d Mon Sep 17 00:00:00 2001 From: TEK Date: Thu, 30 Jun 2016 17:23:42 +0200 Subject: [PATCH 1/3] Add instance support to addAssociation/removeAssociation --- src/main/cpp/org_zwave4j_Manager.cpp | 12 ++++++------ src/main/java/org/zwave4j/Manager.java | 13 +++++++++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/cpp/org_zwave4j_Manager.cpp b/src/main/cpp/org_zwave4j_Manager.cpp index 8c1e5fb..aefb7d1 100644 --- a/src/main/cpp/org_zwave4j_Manager.cpp +++ b/src/main/cpp/org_zwave4j_Manager.cpp @@ -2058,23 +2058,23 @@ JNIEXPORT jstring JNICALL Java_org_zwave4j_Manager_getGroupLabel /* * Class: org_zwave4j_Manager * Method: addAssociation - * Signature: (JSSS)V + * Signature: (JSSSS)V */ JNIEXPORT void JNICALL Java_org_zwave4j_Manager_addAssociation - (JNIEnv * env, jobject object, jlong homeId, jshort nodeId, jshort groupIdx, jshort targetNodeId) + (JNIEnv * env, jobject object, jlong homeId, jshort nodeId, jshort groupIdx, jshort targetNodeId, jshort instance) { - OpenZWave::Manager::Get()->AddAssociation(getUint32(homeId), getUint8(nodeId), getUint8(groupIdx), getUint8(targetNodeId)); + OpenZWave::Manager::Get()->AddAssociation(getUint32(homeId), getUint8(nodeId), getUint8(groupIdx), getUint8(targetNodeId), getUint8(instance)); } /* * Class: org_zwave4j_Manager * Method: removeAssociation - * Signature: (JSSS)V + * Signature: (JSSSS)V */ JNIEXPORT void JNICALL Java_org_zwave4j_Manager_removeAssociation - (JNIEnv * env, jobject object, jlong homeId, jshort nodeId, jshort groupIdx, jshort targetNodeId) + (JNIEnv * env, jobject object, jlong homeId, jshort nodeId, jshort groupIdx, jshort targetNodeId, jshort instance) { - OpenZWave::Manager::Get()->RemoveAssociation(getUint32(homeId), getUint8(nodeId), getUint8(groupIdx), getUint8(targetNodeId)); + OpenZWave::Manager::Get()->RemoveAssociation(getUint32(homeId), getUint8(nodeId), getUint8(groupIdx), getUint8(targetNodeId), getUint8(instance)); } /* diff --git a/src/main/java/org/zwave4j/Manager.java b/src/main/java/org/zwave4j/Manager.java index be44b18..f8b462e 100644 --- a/src/main/java/org/zwave4j/Manager.java +++ b/src/main/java/org/zwave4j/Manager.java @@ -267,10 +267,19 @@ public static void destroy() { public native String getGroupLabel(long homeId, short nodeId, short groupIdx); - public native void addAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId); + public native void addAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId, short instance); - public native void removeAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId); + public void addAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId) + { + addAssociation(homeId, nodeId, groupIdx, targetNodeId, (short)0); + } + + public native void removeAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId, short instance); + public void removeAssociation(long homeId, short nodeId, short groupIdx, short targetNodeId) + { + removeAssociation(homeId, nodeId, groupIdx, targetNodeId, (short)0); + } //Notifications public native void addWatcher(NotificationWatcher notificationWatcher, Object context); From 129ec97f13fc5b2e26266944859e68cb0e0f3c22 Mon Sep 17 00:00:00 2001 From: TEK Date: Thu, 30 Jun 2016 20:05:38 +0200 Subject: [PATCH 2/3] Add instance association support --- src/main/cpp/org_zwave4j_Manager.cpp | 36 +++++++++++++++++++ .../java/org/zwave4j/InstanceAssociation.java | 23 ++++++++++++ src/main/java/org/zwave4j/Manager.java | 2 ++ 3 files changed, 61 insertions(+) create mode 100644 src/main/java/org/zwave4j/InstanceAssociation.java diff --git a/src/main/cpp/org_zwave4j_Manager.cpp b/src/main/cpp/org_zwave4j_Manager.cpp index aefb7d1..6827513 100644 --- a/src/main/cpp/org_zwave4j_Manager.cpp +++ b/src/main/cpp/org_zwave4j_Manager.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "init.h" @@ -2033,6 +2034,41 @@ JNIEXPORT jlong JNICALL Java_org_zwave4j_Manager_getAssociations return associationsAmount; } +/* + * Class: org_zwave4j_Manager + * Method: getAssociationsWithInstance + * Signature: (JSSLjava/util/concurrent/atomic/AtomicReference;)J + */ +JNIEXPORT jlong JNICALL Java_org_zwave4j_Manager_getAssociationsWithInstance + (JNIEnv * env, jobject object, jlong homeId, jshort nodeId, jshort groupIdx, jobject associations) +{ + OpenZWave::InstanceAssociation * ozwAssociations; + + jlong associationsAmount = getJlong(OpenZWave::Manager::Get()->GetAssociations(getUint32(homeId), getUint8(nodeId), getUint8(groupIdx), &ozwAssociations)); + + jclass associationClass = findClass(env, "org/zwave4j/InstanceAssociation"); + + jobjectArray associationsArray = env->NewObjectArray(getJsize(associationsAmount), associationClass, NULL); + for (uint32 i = 0; i < associationsAmount; ++i) + { + jobject association = env->NewObject(associationClass, + env->GetMethodID(associationClass, "", "(SS)V"), + getJshort(ozwAssociations[i].m_nodeId), + getJshort(ozwAssociations[i].m_instance)); + env->SetObjectArrayElement(associationsArray, getJsize(i), association); + } + + delete [] ozwAssociations; + + env->CallVoidMethod( + associations, + env->GetMethodID(findClass(env, "java/util/concurrent/atomic/AtomicReference"), "set", "(Ljava/lang/Object;)V"), + associationsArray + ); + + return associationsAmount; +} + /* * Class: org_zwave4j_Manager * Method: getMaxAssociations diff --git a/src/main/java/org/zwave4j/InstanceAssociation.java b/src/main/java/org/zwave4j/InstanceAssociation.java new file mode 100644 index 0000000..818511f --- /dev/null +++ b/src/main/java/org/zwave4j/InstanceAssociation.java @@ -0,0 +1,23 @@ +package org.zwave4j; + +/** + * @author TEK + */ +public class InstanceAssociation { + + private short nodeId; + private short instance; + + public InstanceAssociation(short nodeId, short instance) { + this.nodeId = nodeId; + this.instance = instance; + } + + public short getNodeId() { + return nodeId; + } + + public long getInstance() { + return instance; + } +} diff --git a/src/main/java/org/zwave4j/Manager.java b/src/main/java/org/zwave4j/Manager.java index f8b462e..42b86fe 100644 --- a/src/main/java/org/zwave4j/Manager.java +++ b/src/main/java/org/zwave4j/Manager.java @@ -263,6 +263,8 @@ public static void destroy() { public native long getAssociations(long homeId, short nodeId, short groupIdx, AtomicReference associations); + public native long getAssociationsWithInstance(long homeId, short nodeId, short groupIdx, AtomicReference associations); + public native short getMaxAssociations(long homeId, short nodeId, short groupIdx); public native String getGroupLabel(long homeId, short nodeId, short groupIdx); From b52ff9b6db25f460b0fd66519dc4dcc655e97be8 Mon Sep 17 00:00:00 2001 From: TEK Date: Fri, 1 Jul 2016 20:01:47 +0200 Subject: [PATCH 3/3] Make ValueId and InstanceAssociation Serializable --- src/main/java/org/zwave4j/InstanceAssociation.java | 4 +++- src/main/java/org/zwave4j/ValueId.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/zwave4j/InstanceAssociation.java b/src/main/java/org/zwave4j/InstanceAssociation.java index 818511f..cdb3f94 100644 --- a/src/main/java/org/zwave4j/InstanceAssociation.java +++ b/src/main/java/org/zwave4j/InstanceAssociation.java @@ -1,9 +1,11 @@ package org.zwave4j; +import java.io.Serializable; + /** * @author TEK */ -public class InstanceAssociation { +public class InstanceAssociation implements Serializable { private short nodeId; private short instance; diff --git a/src/main/java/org/zwave4j/ValueId.java b/src/main/java/org/zwave4j/ValueId.java index f4cfaee..f72ca62 100644 --- a/src/main/java/org/zwave4j/ValueId.java +++ b/src/main/java/org/zwave4j/ValueId.java @@ -1,9 +1,11 @@ package org.zwave4j; +import java.io.Serializable; + /** * @author zagumennikov */ -public class ValueId { +public class ValueId implements Serializable { private long homeId; private short nodeId;