[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r567 - in /projects/zb4osgi/trunk/zigbee.cc2480.datalink/src: main/java/com/itaca/ztool/api/ZToolPacket.java main/java/com/itaca/ztool/util/ByteUtils.java test/java/com/itaca/ztool/util/ByteUtilsTest.java

scm-notify at zb4osgi.aaloa.org scm-notify at zb4osgi.aaloa.org
Wed Oct 24 12:24:52 CEST 2012


Author: stefano.lenzi
Date: Wed Oct 24 12:24:52 2012
New Revision: 567

Log:
We consider valid byte data all the int that could be represented in with 8 bits ( refs #151 )

Modified:
    projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/api/ZToolPacket.java
    projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/util/ByteUtils.java
    projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/test/java/com/itaca/ztool/util/ByteUtilsTest.java

Modified: projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/api/ZToolPacket.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/api/ZToolPacket.java (original)
+++ projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/api/ZToolPacket.java Wed Oct 24 12:24:52 2012
@@ -101,8 +101,8 @@
         this.CMD = ApiId;
         //data
         for (int i = 0; i < frameData.length; i++) {
-            if (frameData[i] > 255) {
-                throw new RuntimeException("Value is greater than one byte: " + frameData[i]);
+            if ( ByteUtils.isByteValue( frameData[i] ) ) {
+                throw new RuntimeException("Value is greater than one byte: " + frameData[i] +" ("+ Integer.toHexString( frameData[i] ) + ")");
             }
             packet[PAYLOAD_START_INDEX + i] = frameData[i];
             checksum.addByte(packet[PAYLOAD_START_INDEX + i]);

Modified: projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/util/ByteUtils.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/util/ByteUtils.java (original)
+++ projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/main/java/com/itaca/ztool/util/ByteUtils.java Wed Oct 24 12:24:52 2012
@@ -27,6 +27,9 @@
 
 import java.io.IOException;
 import java.util.regex.Pattern;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * 
@@ -37,7 +40,7 @@
  */
 public class ByteUtils {
 
-
+	private final static Logger logger = LoggerFactory.getLogger(ByteUtils.class);
 	
 	/**
 	 * There is a slight problem with this method that you might have noticed;  a Java int is signed, so we can't make
@@ -341,10 +344,25 @@
 		
 		return false;		
 	}
+	/**
+	 * 
+	 * @param b the int value to check if it contains a byte representable value
+	 * @return true if the value of the int could be expressed with 8 bits
+	 * @since 0.8.0
+	 */
+	public static boolean isByteValue(int b) {
+		final boolean valid = ( (b & 0xffffff00) == 0 || (b & 0xffffff00) == 0xffffff00);
+		if ( valid && ( b < -128 || b > 127 ) ) {
+			logger.debug(
+					"The value {} ({}) is considered a byte because only the 8 least significant bits are set" +
+					", but its value is outside signed byte that is between -128 and 127", b, Integer.toHexString(b) 
+			);
+		}
+		return valid;
+	}
 	
 	public static String toBase16(int b) {
-		
-		if (b > 0xff || b < -128) {
+		if (! isByteValue(b) ) {
 			throw new IllegalArgumentException("Error converting "+b+" input value to hex string it is larger than a byte");
 		}
 		if ( b < 0) {

Modified: projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/test/java/com/itaca/ztool/util/ByteUtilsTest.java
==============================================================================
--- projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/test/java/com/itaca/ztool/util/ByteUtilsTest.java (original)
+++ projects/zb4osgi/trunk/zigbee.cc2480.datalink/src/test/java/com/itaca/ztool/util/ByteUtilsTest.java Wed Oct 24 12:24:52 2012
@@ -23,6 +23,7 @@
 import static org.junit.Assert.*;
 
 import org.junit.Test;
+import org.junit.internal.runners.statements.ExpectException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,6 +43,17 @@
 	 */
 	@Test
 	public void testToBase16() {
+		assertEquals("0x5f", ByteUtils.toBase16(-161) );
+		try{
+			ByteUtils.toBase16(325);
+			fail("Expected IllegalArgumentException");
+		}catch(IllegalArgumentException ex){			
+		}
+		try{		
+			ByteUtils.toBase16(-257);
+			fail("Expected IllegalArgumentException");
+		}catch(IllegalArgumentException ex){			
+		}
 		assertEquals("0xc8", ByteUtils.toBase16(200) );
 		assertEquals("0xc8", ByteUtils.toBase16((byte)0xc8) );
 		assertEquals("0xc8", ByteUtils.toBase16(0xc8) );




More information about the Commit mailing list