aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/Server.java52
-rw-r--r--src/org/traccar/protocol/xexun2/Xexun2ProtocolDecoder.java28
-rw-r--r--test/org/traccar/protocol/gps103/Gps103ProtocolDecoderTest.java2
-rw-r--r--test/org/traccar/protocol/xexun2/Xexun2ProtocolDecoderTest.java11
4 files changed, 74 insertions, 19 deletions
diff --git a/src/org/traccar/Server.java b/src/org/traccar/Server.java
index b6ad73db1..ad59a1c70 100644
--- a/src/org/traccar/Server.java
+++ b/src/org/traccar/Server.java
@@ -52,6 +52,7 @@ import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.SimpleChannelHandler;
+import org.traccar.protocol.xexun2.Xexun2ProtocolDecoder;
/**
* Server
@@ -501,6 +502,57 @@ public class Server implements DataManager {
serverList.add(server);
}
}
+
+ /**
+ * Xexun 2 pipeline factory
+ */
+ protected class Xexun2PipelineFactory implements ChannelPipelineFactory {
+
+ private TrackerServer server;
+ private Server serverCreator;
+ private Integer resetDelay;
+
+ public Xexun2PipelineFactory(
+ TrackerServer server, Server serverCreator, Integer resetDelay) {
+ this.server = server;
+ this.serverCreator = serverCreator;
+ this.resetDelay = resetDelay;
+ }
+
+ public ChannelPipeline getPipeline() {
+ ChannelPipeline pipeline = Channels.pipeline();
+ pipeline.addLast("openHandler", new OpenChannelHandler(server));
+ if (serverCreator.isLoggerEnabled()) {
+ pipeline.addLast("logger", new LoggingHandler("logger"));
+ }
+ byte delimiter[] = { (byte) '\r', (byte) '\n' };
+ pipeline.addLast("frameDecoder",
+ new DelimiterBasedFrameDecoder(1024, ChannelBuffers.wrappedBuffer(delimiter)));
+ pipeline.addLast("stringDecoder", new StringDecoder());
+ pipeline.addLast("objectDecoder", new Xexun2ProtocolDecoder(serverCreator, resetDelay));
+ pipeline.addLast("handler", new TrackerEventHandler(serverCreator));
+ return pipeline;
+ }
+ }
+
+ /**
+ * Init Xexun 2 server
+ */
+ public void initXexun2Server(Properties properties) throws SQLException {
+
+ boolean enable = Boolean.valueOf(properties.getProperty("xexun2.enable"));
+ if (enable) {
+
+ TrackerServer server = new TrackerServer(
+ Integer.valueOf(properties.getProperty("xexun2.port")));
+
+ String resetDelay = properties.getProperty("xexun2.resetDelay");
+ server.setPipelineFactory(new Xexun2PipelineFactory(
+ server, this, (resetDelay == null) ? 0 : Integer.valueOf(resetDelay)));
+
+ serverList.add(server);
+ }
+ }
/**
* Start
diff --git a/src/org/traccar/protocol/xexun2/Xexun2ProtocolDecoder.java b/src/org/traccar/protocol/xexun2/Xexun2ProtocolDecoder.java
index 678d4c283..f7ff9f528 100644
--- a/src/org/traccar/protocol/xexun2/Xexun2ProtocolDecoder.java
+++ b/src/org/traccar/protocol/xexun2/Xexun2ProtocolDecoder.java
@@ -59,19 +59,28 @@ public class Xexun2ProtocolDecoder extends OneToOneDecoder {
* Regular expressions pattern
*/
static private Pattern pattern = Pattern.compile(
+ "\\d+," +
+ "\\+\\d+," +
"GPRMC," +
- "([\\d]{2})([\\d]{2})([\\d]{2}).([\\d]{3})," + // Time (HHMMSS.SSS)
+ "(\\d{2})(\\d{2})(\\d{2}).(\\d{3})," + // Time (HHMMSS.SSS)
"([AV])," + // Validity
- "([\\d]{2})([\\d]{2}.[\\d]{4})," + // Latitude (DDMM.MMMM)
+ "(\\d{2})(\\d{2}.\\d{4})," + // Latitude (DDMM.MMMM)
"([NS])," +
- "([\\d]{3})([\\d]{2}.[\\d]{4})," + // Longitude (DDDMM.MMMM)
+ "(\\d{3})(\\d{2}.\\d{4})," + // Longitude (DDDMM.MMMM)
"([EW])," +
- "([\\d]+.[\\d]+)," + // Speed
- "([\\d]+.[\\d]+)?," + // Course
- "([\\d]{2})([\\d]{2})([\\d]{2})," + // Date (DDMMYY)
+ "(\\d+.\\d+)," + // Speed
+ "(\\d+.\\d+)?," + // Course
+ "(\\d{2})(\\d{2})(\\d{2})," + // Date (DDMMYY)
".*imei:" +
- "([\\d]+),"); // IMEI
-
+ "([\\d]+)," + // IMEI
+ "\\d+," +
+ "\\d+.\\d+," +
+ "F:(\\d+.\\d+)V," + // Power
+ ".*");
+
+ //"111111120009,+436763737552,GPRMC,120009.590,A,4639.6774,N,01418.5737,E,0.00,0.00,111111"
+ //",,,A*68,F,, imei:012207000694569,04,481.2,F:4.15V,0,139,2689,232,03,2725,0576"
+
/**
* Decode message
*/
@@ -137,6 +146,9 @@ public class Xexun2ProtocolDecoder extends OneToOneDecoder {
// Get device by IMEI
String imei = parser.group(index++);
position.setDeviceId(dataManager.getDeviceByImei(imei).getId());
+
+ // Power
+ position.setPower(Double.valueOf(parser.group(index++)));
return position;
}
diff --git a/test/org/traccar/protocol/gps103/Gps103ProtocolDecoderTest.java b/test/org/traccar/protocol/gps103/Gps103ProtocolDecoderTest.java
index 8cdebcb88..99255fbe8 100644
--- a/test/org/traccar/protocol/gps103/Gps103ProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/gps103/Gps103ProtocolDecoderTest.java
@@ -45,7 +45,7 @@ public class Gps103ProtocolDecoderTest {
"imei:353451042861763,tracker,1106132241,,F,144114.000,A,2301.9052,S,04909.3676,W,0.13,"));
assertNotNull(decoder.decode(null, null,
- "imei:359587010124900,tracker,0809231929,13554900601,F,112909.397,A,2234.4669,N,11354.3287,E,0.11,321.53,;"));
+ "imei:359587010124900,tracker,0809231929,13554900601,F,112909.397,A,2234.4669,N,11354.3287,E,0.11,321.53,"));
}
diff --git a/test/org/traccar/protocol/xexun2/Xexun2ProtocolDecoderTest.java b/test/org/traccar/protocol/xexun2/Xexun2ProtocolDecoderTest.java
index 444e4e910..6fa2a7430 100644
--- a/test/org/traccar/protocol/xexun2/Xexun2ProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/xexun2/Xexun2ProtocolDecoderTest.java
@@ -33,16 +33,7 @@ public class Xexun2ProtocolDecoderTest {
Xexun2ProtocolDecoder decoder = new Xexun2ProtocolDecoder(new TestDataManager(), 0);
assertNotNull(decoder.decode(null, null,
- "GPRMC,150120.000,A,3346.4463,S,15057.3083,E,0.0,117.4,010911,,,A*76,F,imei:351525010943661,"));
-
- assertNotNull(decoder.decode(null, null,
- "GPRMC,010203.000,A,0102.0003,N,00102.0003,E,1.02,1.02,010203,,,A*00,F,,imei:10000000000000,"));
-
- assertNotNull(decoder.decode(null, null,
- "GPRMC,233842.000,A,5001.3060,N,01429.3243,E,0.00,,210211,,,A*74,F,imei:354776030495631,"));
-
- assertNotNull(decoder.decode(null, null,
- "GPRMC,080303.000,A,5546.7313,N,03738.6005,E,0.56,160.13,100311,,,A*6A,L,imei:354778030461167,"));
+ "111111120009,+436763737552,GPRMC,120009.590,A,4639.6774,N,01418.5737,E,0.00,0.00,111111,,,A*68,F,, imei:012207000694569,04,481.2,F:4.15V,0,139,2689,232,03,2725,0576"));
}