diff --git a/src/main/cpp/org_zwave4j_Manager.cpp b/src/main/cpp/org_zwave4j_Manager.cpp index 8c1e5fb..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 @@ -2058,23 +2094,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/InstanceAssociation.java b/src/main/java/org/zwave4j/InstanceAssociation.java new file mode 100644 index 0000000..cdb3f94 --- /dev/null +++ b/src/main/java/org/zwave4j/InstanceAssociation.java @@ -0,0 +1,25 @@ +package org.zwave4j; + +import java.io.Serializable; + +/** + * @author TEK + */ +public class InstanceAssociation implements Serializable { + + 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 be44b18..42b86fe 100644 --- a/src/main/java/org/zwave4j/Manager.java +++ b/src/main/java/org/zwave4j/Manager.java @@ -263,14 +263,25 @@ 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); - 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 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); + 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); 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;