aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/Xexun2ProtocolDecoder.java40
-rw-r--r--test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java5
2 files changed, 35 insertions, 10 deletions
diff --git a/src/org/traccar/protocol/Xexun2ProtocolDecoder.java b/src/org/traccar/protocol/Xexun2ProtocolDecoder.java
index 7c4f671f7..b10721070 100644
--- a/src/org/traccar/protocol/Xexun2ProtocolDecoder.java
+++ b/src/org/traccar/protocol/Xexun2ProtocolDecoder.java
@@ -22,8 +22,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
-import org.traccar.model.DataManager;
import org.traccar.GenericProtocolDecoder;
+import org.traccar.model.DataManager;
import org.traccar.model.Position;
/**
@@ -43,8 +43,8 @@ public class Xexun2ProtocolDecoder extends GenericProtocolDecoder {
*/
static private Pattern pattern = Pattern.compile(
"[\r\n]*" +
- "\\d+," +
- "\\+\\d+," +
+ "(\\d+)," + // Serial
+ "(\\+\\d+)," + // Number
"GPRMC," +
"(\\d{2})(\\d{2})(\\d{2}).(\\d{3})," + // Time (HHMMSS.SSS)
"([AV])," + // Validity
@@ -55,10 +55,13 @@ public class Xexun2ProtocolDecoder extends GenericProtocolDecoder {
"(\\d+.\\d+)," + // Speed
"(\\d+.\\d+)?," + // Course
"(\\d{2})(\\d{2})(\\d{2})," + // Date (DDMMYY)
+ ",,.\\*..," + // Checksum
+ "([FL])," + // Signal
+ "(.*)," + // Alarm
".*imei:" +
"(\\d+)," + // IMEI
- "\\d+," +
- "\\d+.\\d+," +
+ "(\\d+)," + // Satellites
+ "(\\d+.\\d+)," + // Altitude
"F:(\\d+.\\d+)V," + // Power
".*" +
"[\r\n]*");
@@ -80,9 +83,16 @@ public class Xexun2ProtocolDecoder extends GenericProtocolDecoder {
// Create new position
Position position = new Position();
+ String extendedInfo = "<protocol>xexun2</protocol>";
Integer index = 1;
+ // Serial
+ extendedInfo += "<serial>" + parser.group(index++) + "</serial>";
+
+ // Number
+ extendedInfo += "<number>" + parser.group(index++) + "</number>";
+
// Time
Calendar time = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
time.clear();
@@ -106,9 +116,6 @@ public class Xexun2ProtocolDecoder extends GenericProtocolDecoder {
if (parser.group(index++).compareTo("W") == 0) lonlitude = -lonlitude;
position.setLongitude(lonlitude);
- // Altitude
- position.setAltitude(0.0);
-
// Speed
position.setSpeed(Double.valueOf(parser.group(index++)));
@@ -126,13 +133,28 @@ public class Xexun2ProtocolDecoder extends GenericProtocolDecoder {
time.set(Calendar.YEAR, 2000 + Integer.valueOf(parser.group(index++)));
position.setTime(time.getTime());
+ // Signal
+ extendedInfo += "<signal>" + parser.group(index++) + "</signal>";
+
+ // Alarm
+ extendedInfo += "<alarm>" + parser.group(index++) + "</alarm>";
+
// Get device by IMEI
String imei = parser.group(index++);
position.setDeviceId(getDataManager().getDeviceByImei(imei).getId());
-
+
+ // Satellites
+ extendedInfo += "<satellites>" + parser.group(index++).replaceFirst ("^0*(?![\\.$])", "") + "</satellites>";
+
+ // Altitude
+ position.setAltitude(Double.valueOf(parser.group(index++)));
+
// Power
position.setPower(Double.valueOf(parser.group(index++)));
+ // Extended info
+ position.setExtendedInfo(extendedInfo);
+
return position;
}
diff --git a/test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java b/test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java
index 845b5757d..817c31874 100644
--- a/test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java
@@ -7,12 +7,15 @@ public class Xexun2ProtocolDecoderTest {
@Test
public void testDecode() throws Exception {
-
+
Xexun2ProtocolDecoder decoder = new Xexun2ProtocolDecoder(new TestDataManager(), 0);
assertNotNull(decoder.decode(null, null,
"111111120009,+436763737552,GPRMC,120009.590,A,4639.6774,N,01418.5737,E,0.00,0.00,111111,,,A*68,F,, imei:359853000144328,04,481.2,F:4.15V,0,139,2689,232,03,2725,0576"));
+ assertNotNull(decoder.decode(null, null,
+ "111111120009,+436763737552,GPRMC,120600.000,A,6000.0000,N,13000.0000,E,0.00,0.00,010112,,,A*68,F,help me!, imei:123456789012345,04,481.2,F:4.15V,0,139,2689,232,03,2725,0576"));
+
}
}