From 345d012d570ad7217c257fd579f50c5cc81526a1 Mon Sep 17 00:00:00 2001 From: angelfmarcos Date: Tue, 25 Oct 2016 15:42:04 +0200 Subject: [PATCH 1/2] Problem read profile data There is a problem reading generic profile data (using range selector) when the sort object is not the first object in capture buffer. The code always use the first object. --- .../src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java b/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java index 25fd51c4..38ed4670 100644 --- a/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java +++ b/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java @@ -542,7 +542,7 @@ final byte[] getProfileGenericData(final int selector, .getValue(); for (Object row : getBuffer()) { java.util.Date tm; - Object tmp = ((Object[]) row)[0]; + Object tmp = ((Object[]) row)[this.getSortObjectDataIndex()]; if (tmp instanceof GXDateTime) { tm = ((GXDateTime) tmp).getValue(); } else { From 106c78ee3a6c0a84b0d2eef5e62be2e27c61a70c Mon Sep 17 00:00:00 2001 From: angelfmarcos Date: Tue, 25 Oct 2016 16:58:12 +0200 Subject: [PATCH 2/2] Get a column of a generic profile with attribute index equals 255 fails. The library interprets the attribute index as -1 so the column is ignored. --- .../gurux/dlms/objects/GXDLMSProfileGeneric.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java b/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java index 38ed4670..5a2a9270 100644 --- a/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java +++ b/development/src/main/java/gurux/dlms/objects/GXDLMSProfileGeneric.java @@ -697,8 +697,18 @@ public final void setValue(final GXDLMSSettings settings, obj = gurux.dlms.GXDLMSClient.createObject(type); obj.setLogicalName(ln); } - addCaptureObject(obj, ((Number) tmp[2]).intValue(), - ((Number) tmp[3]).intValue()); + int attributeIndex = ((Number) tmp[2]).intValue(); + int dataIndex = ((Number) tmp[3]).intValue(); + if (tmp[2] instanceof Byte) { + byte bValue = (Byte)tmp[2]; + attributeIndex = bValue & 0xFF; + } + if (tmp[3] instanceof Byte) { + byte bValue = (Byte)tmp[3]; + dataIndex = bValue & 0xFF; + } + + this.addCaptureObject(obj, attributeIndex, dataIndex); } } } else if (e.getIndex() == 4) {