diff options
-rw-r--r-- | src/org/traccar/protocol/Xexun2ProtocolDecoder.java | 40 | ||||
-rw-r--r-- | test/org/traccar/protocol/Xexun2ProtocolDecoderTest.java | 5 |
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")); + } } |