Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 42 additions & 6 deletions src/main/cpp/org_zwave4j_Manager.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include <Manager.h>
#include <Notification.h>
#include <Group.h>
#include <org_zwave4j_Manager.h>
#include "init.h"

Expand Down Expand Up @@ -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, "<init>", "(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
Expand All @@ -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));
}

/*
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/org/zwave4j/InstanceAssociation.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
15 changes: 13 additions & 2 deletions src/main/java/org/zwave4j/Manager.java
Original file line number Diff line number Diff line change
Expand Up @@ -263,14 +263,25 @@ public static void destroy() {

public native long getAssociations(long homeId, short nodeId, short groupIdx, AtomicReference<short[]> associations);

public native long getAssociationsWithInstance(long homeId, short nodeId, short groupIdx, AtomicReference<InstanceAssociation[]> 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);
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/org/zwave4j/ValueId.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down