aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-10-20 13:59:44 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2015-10-20 13:59:44 +1300
commit06b5113f3d98a44530c2ade6810bc75092fccc31 (patch)
treecb8c03c8f3394db0691b73547e86d2a181462607
parent7b103b43754de283e423df03042c6f75307c8466 (diff)
downloadtraccar-server-06b5113f3d98a44530c2ade6810bc75092fccc31.tar.gz
traccar-server-06b5113f3d98a44530c2ade6810bc75092fccc31.tar.bz2
traccar-server-06b5113f3d98a44530c2ade6810bc75092fccc31.zip
Refactor bit utililies class
-rw-r--r--src/org/traccar/helper/BitUtil.java24
-rw-r--r--src/org/traccar/protocol/AdmProtocolDecoder.java2
-rw-r--r--src/org/traccar/protocol/Gt06ProtocolDecoder.java7
-rw-r--r--src/org/traccar/protocol/MxtProtocolDecoder.java14
-rw-r--r--src/org/traccar/protocol/TytanProtocolDecoder.java10
-rw-r--r--src/org/traccar/protocol/TzoneProtocolDecoder.java5
-rw-r--r--src/org/traccar/protocol/UlbotechProtocolDecoder.java2
-rw-r--r--test/org/traccar/helper/BitUtilTest.java22
8 files changed, 54 insertions, 32 deletions
diff --git a/src/org/traccar/helper/BitUtil.java b/src/org/traccar/helper/BitUtil.java
index 81c638a68..31271a691 100644
--- a/src/org/traccar/helper/BitUtil.java
+++ b/src/org/traccar/helper/BitUtil.java
@@ -24,20 +24,28 @@ public final class BitUtil {
return (number & (1 << index)) != 0;
}
- public static int range(int number, int index) {
- return number >> index;
+ public static int between(int number, int from, int to) {
+ return (number >> from) & ((1 << to - from) - 1);
}
- public static int range(int number, int index, int length) {
- return (number >> index) & ((1 << length) - 1);
+ public static int from(int number, int from) {
+ return number >> from;
}
- public static long range(long number, int index) {
- return number >> index;
+ public static int to(int number, int to) {
+ return between(number, 0, to);
}
- public static long range(long number, int index, int length) {
- return (number >> index) & ((1L << length) - 1);
+ public static long between(long number, int from, int to) {
+ return (number >> from) & ((1L << to - from) - 1L);
+ }
+
+ public static long from(long number, int from) {
+ return number >> from;
+ }
+
+ public static long to(long number, int to) {
+ return between(number, 0, to);
}
}
diff --git a/src/org/traccar/protocol/AdmProtocolDecoder.java b/src/org/traccar/protocol/AdmProtocolDecoder.java
index a22cade99..a40b00e90 100644
--- a/src/org/traccar/protocol/AdmProtocolDecoder.java
+++ b/src/org/traccar/protocol/AdmProtocolDecoder.java
@@ -52,7 +52,7 @@ public class AdmProtocolDecoder extends BaseProtocolDecoder {
identify(buf.toString(buf.readerIndex(), 15, Charset.defaultCharset()), channel);
}
- if (hasDeviceId() && BitUtil.range(type, 0, 2) == 0) {
+ if (hasDeviceId() && BitUtil.to(type, 2) == 0) {
Position position = new Position();
position.setProtocol(getProtocolName());
diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
index e319d9e81..396fe686a 100644
--- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java
+++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java
@@ -26,6 +26,7 @@ import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.traccar.BaseProtocolDecoder;
import org.traccar.Context;
+import org.traccar.helper.BitUtil;
import org.traccar.helper.Checksum;
import org.traccar.helper.DateBuilder;
import org.traccar.helper.UnitsConverter;
@@ -155,7 +156,9 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
} else if (hasDeviceId()) {
- if (MESSAGES_SUPPORTED.contains(type)) {
+ if (type == MSG_GPS || type == MSG_GPS_LBS_1 || type == MSG_GPS_LBS_2
+ || type == MSG_GPS_LBS_STATUS_1 || type == MSG_GPS_LBS_STATUS_2 || type == MSG_GPS_LBS_STATUS_3
+ || type == MSG_GPS_PHONE || type == MSG_GPS_LBS_EXTEND) {
Position position = new Position();
position.setDeviceId(getDeviceId());
@@ -168,7 +171,7 @@ public class Gt06ProtocolDecoder extends BaseProtocolDecoder {
// GPS length and Satellites count
int gpsLength = buf.readUnsignedByte();
- position.set(Event.KEY_SATELLITES, gpsLength & 0b0000_1111);
+ position.set(Event.KEY_SATELLITES, BitUtil.to(gpsLength, 4));
gpsLength >>= 4;
// Latitude
diff --git a/src/org/traccar/protocol/MxtProtocolDecoder.java b/src/org/traccar/protocol/MxtProtocolDecoder.java
index 9151d9672..ba97694d3 100644
--- a/src/org/traccar/protocol/MxtProtocolDecoder.java
+++ b/src/org/traccar/protocol/MxtProtocolDecoder.java
@@ -73,10 +73,10 @@ public class MxtProtocolDecoder extends BaseProtocolDecoder {
long date = buf.readUnsignedInt();
- long days = BitUtil.range(date, 6 + 6 + 5);
- long hours = BitUtil.range(date, 6 + 6, 5);
- long minutes = BitUtil.range(date, 6, 6);
- long seconds = BitUtil.range(date, 0, 6);
+ long days = BitUtil.from(date, 6 + 6 + 5);
+ long hours = BitUtil.between(date, 6 + 6, 6 + 6 + 5);
+ long minutes = BitUtil.between(date, 6, 6 + 6);
+ long seconds = BitUtil.to(date, 6);
long millis = time.getTimeInMillis();
millis += (((days * 24 + hours) * 60 + minutes) * 60 + seconds) * 1000;
@@ -91,9 +91,9 @@ public class MxtProtocolDecoder extends BaseProtocolDecoder {
long flags = buf.readUnsignedInt();
position.set(Event.KEY_IGNITION, BitUtil.check(flags, 0));
position.set(Event.KEY_ALARM, BitUtil.check(flags, 1));
- position.set(Event.KEY_INPUT, BitUtil.range(flags, 2, 5));
- position.set(Event.KEY_OUTPUT, BitUtil.range(flags, 7, 3));
- position.setCourse(BitUtil.range(flags, 10, 3) * 45);
+ position.set(Event.KEY_INPUT, BitUtil.between(flags, 2, 7));
+ position.set(Event.KEY_OUTPUT, BitUtil.between(flags, 7, 10));
+ position.setCourse(BitUtil.between(flags, 10, 13) * 45);
//position.setValid(BitUtil.check(flags, 15));
position.set(Event.KEY_CHARGE, BitUtil.check(flags, 20));
diff --git a/src/org/traccar/protocol/TytanProtocolDecoder.java b/src/org/traccar/protocol/TytanProtocolDecoder.java
index 20cfc8ace..ec5fb167d 100644
--- a/src/org/traccar/protocol/TytanProtocolDecoder.java
+++ b/src/org/traccar/protocol/TytanProtocolDecoder.java
@@ -76,7 +76,7 @@ public class TytanProtocolDecoder extends BaseProtocolDecoder {
int alarm = buf.readUnsignedByte();
buf.readUnsignedByte();
if (BitUtil.check(alarm, 5)) {
- position.set(Event.KEY_ALARM, BitUtil.range(alarm, 0, 4));
+ position.set(Event.KEY_ALARM, BitUtil.to(alarm, 4));
}
break;
case 8:
@@ -172,8 +172,8 @@ public class TytanProtocolDecoder extends BaseProtocolDecoder {
position.setTime(new Date(buf.readUnsignedInt() * 1000));
int flags = buf.readUnsignedByte();
- position.set(Event.KEY_SATELLITES, BitUtil.range(flags, 2));
- position.setValid(BitUtil.range(flags, 0, 2) > 0);
+ position.set(Event.KEY_SATELLITES, BitUtil.from(flags, 2));
+ position.setValid(BitUtil.to(flags, 2) > 0);
// Latitude
double lat = buf.readUnsignedMedium();
@@ -188,8 +188,8 @@ public class TytanProtocolDecoder extends BaseProtocolDecoder {
// Status
flags = buf.readUnsignedByte();
position.set(Event.KEY_IGNITION, BitUtil.check(flags, 0));
- position.set(Event.KEY_GSM, BitUtil.range(flags, 2, 3));
- position.setCourse((BitUtil.range(flags, 5) * 45 + 180) % 360);
+ position.set(Event.KEY_GSM, BitUtil.between(flags, 2, 5));
+ position.setCourse((BitUtil.from(flags, 5) * 45 + 180) % 360);
// Speed
int speed = buf.readUnsignedByte();
diff --git a/src/org/traccar/protocol/TzoneProtocolDecoder.java b/src/org/traccar/protocol/TzoneProtocolDecoder.java
index 1fe32af7a..8125f33cb 100644
--- a/src/org/traccar/protocol/TzoneProtocolDecoder.java
+++ b/src/org/traccar/protocol/TzoneProtocolDecoder.java
@@ -34,8 +34,7 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
@Override
protected Object decode(
- Channel channel, SocketAddress remoteAddress, Object msg)
- throws Exception {
+ Channel channel, SocketAddress remoteAddress, Object msg) throws Exception {
ChannelBuffer buf = (ChannelBuffer) msg;
@@ -87,7 +86,7 @@ public class TzoneProtocolDecoder extends BaseProtocolDecoder {
position.set(Event.KEY_ODOMETER, buf.readUnsignedMedium());
int flags = buf.readUnsignedShort();
- position.setCourse(BitUtil.range(flags, 0, 9));
+ position.setCourse(BitUtil.to(flags, 9));
position.setLatitude(BitUtil.check(flags, 10) ? lat : -lat);
position.setLongitude(BitUtil.check(flags, 9) ? -lon : lon);
position.setValid(BitUtil.check(flags, 11));
diff --git a/src/org/traccar/protocol/UlbotechProtocolDecoder.java b/src/org/traccar/protocol/UlbotechProtocolDecoder.java
index a33077e5f..b7a00e3b5 100644
--- a/src/org/traccar/protocol/UlbotechProtocolDecoder.java
+++ b/src/org/traccar/protocol/UlbotechProtocolDecoder.java
@@ -123,7 +123,7 @@ public class UlbotechProtocolDecoder extends BaseProtocolDecoder {
case DATA_ADC:
for (int i = 0; i < length / 2; i++) {
int value = buf.readUnsignedShort();
- position.set(Event.PREFIX_ADC + BitUtil.range(value, 12), BitUtil.range(value, 0, 12));
+ position.set(Event.PREFIX_ADC + BitUtil.from(value, 12), BitUtil.to(value, 12));
}
break;
diff --git a/test/org/traccar/helper/BitUtilTest.java b/test/org/traccar/helper/BitUtilTest.java
index dbe3852b7..4aa295e12 100644
--- a/test/org/traccar/helper/BitUtilTest.java
+++ b/test/org/traccar/helper/BitUtilTest.java
@@ -13,11 +13,23 @@ public class BitUtilTest {
}
@Test
- public void testRange() {
- Assert.assertEquals(0, BitUtil.range(0, 0, 0));
- Assert.assertEquals(1, BitUtil.range(1, 0, 1));
- Assert.assertEquals(2, BitUtil.range(2, 0, 2));
- Assert.assertEquals(2, BitUtil.range(6, 0, 2));
+ public void testBetween() {
+ Assert.assertEquals(0, BitUtil.between(0, 0, 0));
+ Assert.assertEquals(1, BitUtil.between(1, 0, 1));
+ Assert.assertEquals(2, BitUtil.between(2, 0, 2));
+ Assert.assertEquals(2, BitUtil.between(6, 0, 2));
+ }
+
+ @Test
+ public void testFrom() {
+ Assert.assertEquals(1, BitUtil.from(1, 0));
+ Assert.assertEquals(0, BitUtil.from(1, 1));
+ }
+
+ @Test
+ public void testTo() {
+ Assert.assertEquals(2, BitUtil.to(2, 2));
+ Assert.assertEquals(0, BitUtil.to(2, 1));
}
}