[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r527 - in /projects/zb4osgi/trunk/zigbee.zcl.library/src: main/java/it/cnr/isti/zigbee/zcl/library/api/core/ main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/ test/java/it/cnr/isti/zigbee/zcl/library/impl/general/ test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/ test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/
scm-notify at zb4osgi.aaloa.org
scm-notify at zb4osgi.aaloa.org
Fri Oct 19 13:37:22 CEST 2012
Author: stefano.lenzi
Date: Fri Oct 19 13:37:22 2012
New Revision: 527
Log:
Added a new ZigBeeSerializer that automatically increase the payload ( it may have worst performance )
Fixed NPE with AddGroupIfIdentifyingCommand ( fixes #134 )
Added:
projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java (with props)
projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/
projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/
projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java (with props)
Modified:
projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java
projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java
projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java
projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java
Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/api/core/ZBSerializer.java Fri Oct 19 13:37:22 2012
@@ -82,4 +82,10 @@
public void append_int24bit(int data);
public void append_long(long data);
+ /**
+ *
+ * @return a copy of the payload
+ * @since 0.8.0
+ */
+ public byte[] getPayload();
}
Added: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java (added)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java Fri Oct 19 13:37:22 2012
@@ -1,0 +1,176 @@
+/*
+ Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
+ Institute of Information Science and Technologies
+ of the Italian National Research Council
+
+
+ See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package it.cnr.isti.zigbee.zcl.library.impl.core;
+
+import it.cnr.isti.primitvetypes.util.Integers;
+import it.cnr.isti.zigbee.zcl.library.api.core.ZBDeserializer;
+import it.cnr.isti.zigbee.zcl.library.api.core.ZBSerializer;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ *
+ * The implementation of the {@link ZBSerializer} that will replace the {@link DefaultSerializer}. <br />
+ * In fact, this class does not require the user to build in advance a payload buffer.
+ *
+ * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
+ * @version $LastChangedRevision$ ($LastChangedDate$)
+ * @since 0.7.1
+ *
+ */
+public class ByteArrayOutputStreamSerializer implements ZBSerializer {
+
+ private ByteArrayOutputStream payload;
+ private byte[] buffer = new byte[8];
+
+ public ByteArrayOutputStreamSerializer() {
+ this.payload = new ByteArrayOutputStream();
+ }
+
+ public ByteArrayOutputStreamSerializer(ByteArrayOutputStream payload) {
+ this.payload = payload;
+ }
+
+ public void appendBoolean(Boolean data) {
+ int used = Integers.writeBooleanObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void appendByte(Byte data) {
+ int used = Integers.writeByteObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void appendInteger(Integer data) {
+ int used = Integers.writeIntObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void appendLong(Long data) {
+ int used = Integers.writeLongObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void appendString(String str){
+ try {
+ payload.write(str.getBytes());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void appendZigBeeType(Object data, ZigBeeType type) {
+ if ( data == null ) {
+ throw new NullPointerException("You can not append null data to a stream");
+ }
+ switch (type) {
+ case Boolean:
+ appendBoolean((Boolean) data);
+ break;
+ case Data8bit: case SignedInteger8bit: case Bitmap8bit: case UnsignedInteger8bit: case Enumeration8bit:
+ final Number b = (Number) data;
+ append_byte(b.byteValue());
+ break;
+ case Data16bit: case SignedInteger16bit: case Bitmap16bit: case UnsignedInteger16bit: case Enumeration16bit:
+ final Number s = (Number) data;
+ append_short(s.shortValue());
+ break;
+ case Data24bit: case SignedInteger24bit: case Bitmap24bit: case UnsignedInteger24bit:
+ new IllegalArgumentException(
+ "No reader defined by this "+ZBDeserializer.class.getName()+
+ " for "+type.toString()+" ("+type.getId()+")"
+ );
+ break;
+ case Data32bit: case SignedInteger32bit: case Bitmap32bit: case UnsignedInteger32bit:
+ if(type == ZigBeeType.UnsignedInteger32bit){
+ final Long l = (Long) data;
+ append_int(l.intValue());
+ }else{
+ final Integer i = (Integer) data;
+ append_int(i.intValue());
+ }
+ break;
+ case CharacterString: case OctectString: {
+ final String str = (String) data;
+ append_byte( (byte) (str.length() & (0xFF) ));
+ appendString(str);
+ } break;
+ case LongCharacterString: case LongOctectString: {
+ final String str = (String) data;
+ append_short((short) (str.length() & (0xFFFF)));
+ appendString(str);
+ } break;
+ default:
+ throw new IllegalArgumentException(
+ "No reader defined by this "+ZBDeserializer.class.getName()+
+ " for "+type.toString()+" ("+type.getId()+")"
+ );
+ }
+ }
+
+ public void appendObject(Object data) {
+ int used = Integers.writeObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void appendShort(Short data) {
+ int used = Integers.writeShortObject(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_boolean(boolean data) {
+ int used = Integers.writeBoolean(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_byte(byte data) {
+ int used = Integers.writeByte(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_int(int data) {
+ int used = Integers.writeInt(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_int24bit(int data) {
+ int used = Integers.writeInt24bit(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_long(long data) {
+ int used = Integers.writeLong(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public void append_short(short data) {
+ int used = Integers.writeShort(buffer, 0, data);
+ payload.write(buffer,0,used);
+ }
+
+ public byte[] getPayload() {
+ return payload.toByteArray();
+ }
+
+}
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/ByteArrayOutputStreamSerializer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/core/DefaultSerializer.java Fri Oct 19 13:37:22 2012
@@ -34,12 +34,19 @@
* @author <a href="mailto:francesco.furfari at isti.cnr.it">Francesco Furfari</a>
* @version $LastChangedRevision$ ($LastChangedDate$)
* @since 0.1.0
+ * @deprecated From version 0.7.0 please use the {@link ByteArrayOutputStreamSerializer} instead
*
*/
public class DefaultSerializer implements ZBSerializer {
int index = 0;
private byte[] payload;
+ /**
+ *
+ * @param payload the byte array that will used for storing the serialiazed data
+ * @param index the first empty byte where data will be written
+ * @deprecated From version 0.7.0 please use the {@link ByteArrayOutputStreamSerializer} instead
+ */
public DefaultSerializer(byte[] payload, int index ) {
this.payload = payload;
this.index = index;
@@ -148,4 +155,9 @@
index += Integers.writeShort(payload, index, data);
}
+ public byte[] getPayload() {
+ byte[] copy = new byte[index];
+ System.arraycopy(payload, 0, copy, 0, copy.length);
+ return copy;
+ }
}
Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/main/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommand.java Fri Oct 19 13:37:22 2012
@@ -22,10 +22,16 @@
package it.cnr.isti.zigbee.zcl.library.impl.general.groups;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.nio.ByteOrder;
+
import it.cnr.isti.zigbee.zcl.library.api.core.ZBSerializer;
import it.cnr.isti.zigbee.zcl.library.api.general.Groups;
import it.cnr.isti.zigbee.zcl.library.impl.core.AbstractCommand;
+import it.cnr.isti.zigbee.zcl.library.impl.core.ByteArrayOutputStreamSerializer;
import it.cnr.isti.zigbee.zcl.library.impl.core.DefaultSerializer;
+import it.cnr.isti.zigbee.zcl.library.impl.core.ZigBeeType;
/**
*
* @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
@@ -40,15 +46,21 @@
public AddGroupIfIdentyfingCommand(int groupId, String name){
super(Groups.ADD_GROUP_IF_IDENTIFYING_ID);
+ this.groupId = groupId;
+ this.name = name;
}
public byte[] getPayload(){
if( payload == null){
- payload = new byte[2 + name.length()];
- ZBSerializer serializer = new DefaultSerializer(payload,0);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ZBSerializer serializer = new ByteArrayOutputStreamSerializer(bos);
serializer.append_short((short)groupId);
- //TODO use the serializer.appendObject(Object, ZigBeeType)
- serializer.appendObject(name);
+ serializer.appendZigBeeType(name, ZigBeeType.CharacterString);
+ payload = serializer.getPayload();
+ try {
+ bos.close();
+ } catch (IOException ignored) {
+ }
}
return payload;
}
Added: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java (added)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java Fri Oct 19 13:37:22 2012
@@ -1,0 +1,57 @@
+/*
+
+ Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
+ Institute of Information Science and Technologies
+ of the Italian National Research Council
+
+
+ See the NOTICE file distributed with this work for additional
+ information regarding copyright ownership
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+package it.cnr.isti.zigbee.zcl.library.impl.general.groups;
+
+import static org.junit.Assert.*;
+import it.cnr.isti.zigbee.zcl.library.api.global.WriteAttributeRecord;
+import it.cnr.isti.zigbee.zcl.library.impl.attribute.Attributes;
+import it.cnr.isti.zigbee.zcl.library.impl.core.AttributeImpl;
+import it.cnr.isti.zigbee.zcl.library.impl.global.write.WriteAttributeCommand;
+import it.cnr.isti.zigbee.zcl.library.impl.global.write.WriteAttributeRecordImpl;
+
+import org.junit.Test;
+
+/**
+ *
+ * @author <a href="mailto:stefano.lenzi at isti.cnr.it">Stefano "Kismet" Lenzi</a>
+ * @version $LastChangedRevision$ ($LastChangedDate$)
+ * @since 0.7.1
+ *
+ */
+public class AddGroupIfIdentyfingCommandTest {
+
+ @Test
+ public void testGetPayload() {
+ AddGroupIfIdentyfingCommand command = new AddGroupIfIdentyfingCommand(0x1020,"House");
+ assertArrayEquals(new byte[]{
+ 0x20, 0x10, 0x05, 0x48, 0x6f, 0x75, 0x73, 0x65
+ }, command.getPayload()
+ );
+
+ assertArrayEquals(new byte[]{
+ 0x20, 0x10, 0x05, 0x48, 0x6f, 0x75, 0x73, 0x65
+ }, command.getPayload()
+ );
+ }
+
+}
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
svn:executable = *
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/general/groups/AddGroupIfIdentyfingCommandTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java (original)
+++ projects/zb4osgi/trunk/zigbee.zcl.library/src/test/java/it/cnr/isti/zigbee/zcl/library/impl/global/write/WriteAttributeCommandTest.java Fri Oct 19 13:37:22 2012
@@ -1,4 +1,5 @@
/*
+
Copyright 2008-2010 CNR-ISTI, http://isti.cnr.it
Institute of Information Science and Technologies
of the Italian National Research Council
More information about the Commit
mailing list