[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