diff options
-rw-r--r-- | manifest.mf | 3 | ||||
-rw-r--r-- | pom.xml | 156 | ||||
-rwxr-xr-x | setup/linux/traccar.sh | 2 | ||||
-rw-r--r-- | setup/windows/traccar.iss | 2 | ||||
-rw-r--r-- | src/Main.java | 34 | ||||
-rw-r--r-- | src/org/traccar/Main.java | 40 | ||||
-rw-r--r-- | src/org/traccar/http/WebServer.java | 4 | ||||
-rw-r--r-- | src/org/traccar/protocol/Gl200ProtocolDecoder.java | 2 | ||||
-rw-r--r-- | src/org/traccar/protocol/Gps103ProtocolDecoder.java | 2 | ||||
-rw-r--r-- | src/org/traccar/protocol/ST210ProtocolDecoder.java | 1228 | ||||
-rw-r--r-- | src/web/favicon.ico (renamed from src/favicon.ico) | bin | 1150 -> 1150 bytes | |||
-rw-r--r-- | src/web/index.html (renamed from src/index.html) | 0 | ||||
-rw-r--r-- | test/org/traccar/protocol/Gl200ProtocolDecoderTest.java | 13 | ||||
-rw-r--r-- | test/org/traccar/protocol/Gps103ProtocolDecoderTest.java | 3 | ||||
-rw-r--r-- | test/org/traccar/protocol/ST210ProtocolDecoderTest.java | 2 | ||||
-rw-r--r-- | test/org/traccar/protocol/Tk103ProtocolDecoderTest.java | 7 | ||||
-rw-r--r-- | tracker-server | 24 |
17 files changed, 785 insertions, 737 deletions
diff --git a/manifest.mf b/manifest.mf deleted file mode 100644 index 1574df4a2..000000000 --- a/manifest.mf +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0
-X-COMMENT: Main-Class will be added automatically by build
-
@@ -1,50 +1,114 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <groupId>org.traccar</groupId> - <artifactId>traccar</artifactId> - <version>1.1.0-SNAPSHOT</version> + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>org.traccar</groupId> + <artifactId>traccar</artifactId> + <version>1.1-SNAPSHOT</version> - <dependencies> - <dependency> - <groupId>com.h2database</groupId> - <artifactId>h2</artifactId> - <version>1.3.167</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty.aggregate</groupId> - <artifactId>jetty-all</artifactId> - <version>8.1.4.v20120524</version> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty</artifactId> - <version>3.5.2.Final</version> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.10</version> - </dependency> - <dependency> - <groupId>postgresql</groupId> - <artifactId>postgresql</artifactId> - <version>8.1-407.jdbc3</version> - </dependency> - </dependencies> + <name>traccar</name> + <url>http://www.traccar.org</url> - <build> - <finalName>tracker-server</finalName> - <outputDirectory>target\classes</outputDirectory> - <sourceDirectory>src</sourceDirectory> - <testSourceDirectory>test</testSourceDirectory> - <resources> - <resource> - <directory>src</directory> - <excludes> - <exclude>**/*.java</exclude> - </excludes> - </resource> - </resources> - </build> + <dependencies> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <version>1.3.168</version> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.21</version> + </dependency> + <dependency> + <groupId>io.netty</groupId> + <artifactId>netty</artifactId> + <version>3.5.2.Final</version> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.10</version> + </dependency> + + <!-- Jetty --> + <dependency> + <groupId>org.eclipse.jetty.orbit</groupId> + <artifactId>javax.servlet</artifactId> + <version>3.0.0.v201112011016</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-continuation</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-http</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-io</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-util</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-server</artifactId> + <version>8.1.5.v20120716</version> + </dependency> + </dependencies> + + <build> + <finalName>tracker-server</finalName> + <outputDirectory>target/classes</outputDirectory> + <sourceDirectory>src</sourceDirectory> + <testSourceDirectory>test</testSourceDirectory> + <resources> + <resource> + <directory>src</directory> + <excludes> + <exclude>**/*.java</exclude> + </excludes> + </resource> + </resources> + + <plugins> + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <phase>install</phase> + <goals> + <goal>copy-dependencies</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/lib</outputDirectory> + <excludeArtifactIds>junit</excludeArtifactIds> + <excludeTransitive>true</excludeTransitive> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <mainClass>org.traccar.Main</mainClass> + <addClasspath>true</addClasspath> + <classpathPrefix>lib/</classpathPrefix> + </manifest> + </archive> + </configuration> + </plugin> + </plugins> + + </build> </project>
\ No newline at end of file diff --git a/setup/linux/traccar.sh b/setup/linux/traccar.sh index 073aca144..45e638b31 100755 --- a/setup/linux/traccar.sh +++ b/setup/linux/traccar.sh @@ -28,7 +28,7 @@ sed -i 's/@app.long.name@/traccar/g' out/bin/traccar sed -i '/wrapper.java.classpath.1/i\wrapper.java.classpath.2=../tracker-server.jar' out/conf/wrapper.conf sed -i "/wrapper.app.parameter.1/i\wrapper.app.parameter.2=$app/conf/linux.cfg" out/conf/wrapper.conf -sed -i 's/<YourMainClass>/Main/g' out/conf/wrapper.conf +sed -i 's/<YourMainClass>/org.traccar.Main/g' out/conf/wrapper.conf sed -i 's/@app.name@/traccar/g' out/conf/wrapper.conf sed -i 's/@app.long.name@/traccar/g' out/conf/wrapper.conf sed -i 's/@app.description@/traccar/g' out/conf/wrapper.conf diff --git a/setup/windows/traccar.iss b/setup/windows/traccar.iss index 293b0db45..9aad6cf8b 100644 --- a/setup/windows/traccar.iss +++ b/setup/windows/traccar.iss @@ -51,7 +51,7 @@ begin LoadStringFromFile(ExpandConstant(CurrentFileName), S);
Insert('wrapper.java.classpath.2=../tracker-server.jar' + #13#10, S, Pos('wrapper.java.classpath.1', S));
Insert(ExpandConstant('wrapper.app.parameter.2="{app}\conf\windows.cfg"') + #13#10, S, Pos('wrapper.app.parameter.1', S));
- StringChangeEx(S, '<YourMainClass>', 'Main', true);
+ StringChangeEx(S, '<YourMainClass>', 'org.traccar.Main', true);
StringChangeEx(S, '@app.name@', 'Traccar', true);
StringChangeEx(S, '@app.long.name@', 'Traccar', true);
StringChangeEx(S, '@app.description@', 'Traccar', true);
diff --git a/src/Main.java b/src/Main.java deleted file mode 100644 index 69c029c61..000000000 --- a/src/Main.java +++ /dev/null @@ -1,34 +0,0 @@ -import org.traccar.Server; -import org.traccar.helper.Log; - -public class Main { - - public static void main(String[] args) throws Exception { - - final Server service = new Server(); - - if(args.length > 0){ - Log.info("Using parameterized config: " + args[0]); - service.init(args); - } - else{ - String[] argsDefault = new String[]{"setup\\windows\\windows.cfg"}; - Log.info("Using default config: " + argsDefault[0]); - service.init(argsDefault); - } - - Log.info("starting server..."); - - service.start(); - - // Shutdown server properly - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - Log.info("shutting down server..."); - service.stop(); - } - }); - - } -} diff --git a/src/org/traccar/Main.java b/src/org/traccar/Main.java new file mode 100644 index 000000000..36228ee58 --- /dev/null +++ b/src/org/traccar/Main.java @@ -0,0 +1,40 @@ +/* + * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar; + +import org.traccar.helper.Log; + +public class Main { + + public static void main(String[] args) throws Exception { + + final Server service = new Server(); + service.init(args); + + Log.info("starting server..."); + service.start(); + + // Shutdown server properly + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + Log.info("shutting down server..."); + service.stop(); + } + }); + + } +} diff --git a/src/org/traccar/http/WebServer.java b/src/org/traccar/http/WebServer.java index cf7b21623..6c79e6421 100644 --- a/src/org/traccar/http/WebServer.java +++ b/src/org/traccar/http/WebServer.java @@ -55,7 +55,7 @@ public class WebServer { response.setContentType("text/html"); - InputStream in = this.getClass().getClassLoader().getResourceAsStream("index.html"); + InputStream in = this.getClass().getClassLoader().getResourceAsStream("web/index.html"); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; @@ -71,7 +71,7 @@ public class WebServer { response.setContentType("image/x-icon"); - InputStream in = this.getClass().getClassLoader().getResourceAsStream("favicon.ico"); + InputStream in = this.getClass().getClassLoader().getResourceAsStream("web/favicon.ico"); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[BUFFER_SIZE]; diff --git a/src/org/traccar/protocol/Gl200ProtocolDecoder.java b/src/org/traccar/protocol/Gl200ProtocolDecoder.java index 506b55790..63def5ddf 100644 --- a/src/org/traccar/protocol/Gl200ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gl200ProtocolDecoder.java @@ -42,7 +42,7 @@ public class Gl200ProtocolDecoder extends GenericProtocolDecoder { */ static private Pattern pattern = Pattern.compile( "\\+RESP:GT...," + - "\\d{6}," + // Protocol version + "[0-9a-fA-F]{6}," + // Protocol version "(\\d{15})," + // IMEI "[^,]*," + // Device name "(?:(?:\\d," + // Report ID / Geo mode diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index 714a80e49..88a83ef80 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -45,7 +45,7 @@ public class Gps103ProtocolDecoder extends GenericProtocolDecoder { "([\\d]+)," + // IMEI "[^,]+," + "(\\d{2})(\\d{2})(\\d{2})[\\d]+," + // Date - "[+]?[\\d]*," + + "[^,]*," + "[FL]," + // F - full / L - low "([\\d]{2})([\\d]{2})([\\d]{2}).([\\d]{3})," + // Time (HHMMSS.SSS) "([AV])," + // Validity diff --git a/src/org/traccar/protocol/ST210ProtocolDecoder.java b/src/org/traccar/protocol/ST210ProtocolDecoder.java index 8fbea8da5..8745941cb 100644 --- a/src/org/traccar/protocol/ST210ProtocolDecoder.java +++ b/src/org/traccar/protocol/ST210ProtocolDecoder.java @@ -15,626 +15,622 @@ import org.traccar.model.DataManager; import org.traccar.model.Position; public class ST210ProtocolDecoder extends GenericProtocolDecoder { + - /** - * Initialize - */ - public ST210ProtocolDecoder(DataManager dataManager, Integer resetDelay) { + public ST210ProtocolDecoder(DataManager dataManager, Integer resetDelay) { super(dataManager, resetDelay); } private enum ST210FIELDS { - HDR_STATUS("SA200STT;", "Status Report"), HDR_EMERGENCY("SA200EMG;", - "Emergency Report"), HDR_EVENT("SA200EVT;", "Event Report"), HDR_ALERT( - "SA200ALT;", "Alert Report"), HDR_ALIVE("SA200ALV;", - "Alive Report"), DEV_ID("(\\d+);", "Device ID"), SW_VER( - "(\\d{3});", "Software Release Version"), DATE("(\\d+);", - "GPS date (yyyymmdd) Year + Month + Day"), TIME( - "(\\d{2}:\\d{2}:\\d{2});", - "GPS time (hh:mm:ss) Hour : Minute : Second"), CELL( - "(\\d{2}\\w\\d{2});", - "Location Code ID (3 digits hex) + Serving Cell BSIC(2 digits decimal)"), LAT( - "(-\\d{2}.\\d+);", "Latitude (+/-xx.xxxxxx)"), LON( - "(-\\d{3}.\\d+);", "Longitude (+/-xxx.xxxxxx)"), SPD( - "(\\d{3}.\\d{3});", - "Speed in km/h - This value returns to 0 when it is over than 200,000Km"), CRS( - "(\\d{3}.\\d{2});", "Course over ground in degree"), SATT( - "(\\d+);", "Number of satellites"), FIX("(\\d);", - "GPS is fixed(1)\n" + "GPS is not fixed(0)"), DIST("(\\d+);", - "Traveled ddistance in meter"), PWR_VOLT("(\\d{2}.\\d{2});", - "Voltage value of main power"), IO("(\\d+);", - "Current I/O status of inputs and outputs."), MODE("(\\d);", - "1 = Idle mode (Parking)\n" + "2 = Active Mode (Driving)"), MSG_NUM( - "(\\d{4})", - "Message number - After 9999 is reported, message number returns to 0000"), EMG_ID( - "(\\d);", "Emergency type"), EVT_ID("(\\d);", "Event type"), ALERT_ID( - "(\\d);", "Alert type"); - - private String pattern; - - private String desc; - - private ST210FIELDS(String pattern, String desc) { - this.pattern = pattern; - this.desc = desc; - } - - public String getPattern() { - return pattern; - } - - public String getDesc() { - return desc; - } - - public void populatePosition(Position position, String groupValue, - DataManager dataManager) throws Exception { - - switch (this) { - - case DEV_ID: - position.setDeviceId(dataManager.getDeviceByImei(groupValue) - .getId()); - break; - - case LAT: - position.setLatitude(Double.valueOf(groupValue)); - break; - - case LON: - position.setLongitude(Double.valueOf(groupValue)); - break; - - case CRS: - position.setCourse(Double.valueOf(groupValue)); - break; - - case PWR_VOLT: - position.setPower(Double.valueOf(groupValue)); - break; - - case SPD: - position.setSpeed(Double.valueOf(groupValue)); - break; - - case DATE: { - // Date - Calendar time = Calendar.getInstance(TimeZone - .getTimeZone("UTC")); - time.clear(); - time.set(Calendar.YEAR, Integer.valueOf(Integer - .valueOf(groupValue.substring(0, 4)))); - time.set(Calendar.MONTH, Integer.valueOf(Integer - .valueOf(groupValue.substring(4, 6)))); - time.set(Calendar.DAY_OF_MONTH, Integer.valueOf(Integer - .valueOf(groupValue.substring(6, 8)))); - position.setTime(time.getTime()); - break; - } - - case TIME: { - - Calendar time = Calendar.getInstance(TimeZone - .getTimeZone("UTC")); - time.clear(); - time.setTime(position.getTime()); - - time.set(Calendar.HOUR, Integer.valueOf(Integer - .valueOf(groupValue.substring(0, 2)))); - time.set(Calendar.MINUTE, Integer.valueOf(Integer - .valueOf(groupValue.substring(3, 5)))); - time.set(Calendar.SECOND, Integer.valueOf(Integer - .valueOf(groupValue.substring(6, 8)))); - - position.setTime(time.getTime()); - break; - } - - default: - break; - } - - } - } - - private enum FIELD_FIX_VALUE { - FIXED(1, "GPS is fixed"), NOT_FIXED(0, "GPS is not fixed"); - - private int value; - - private String desc; - - private FIELD_FIX_VALUE(int value, String desc) { - this.value = value; - this.desc = desc; - } - - public int getValue() { - return value; - } - - public String getDesc() { - return desc; - } - - public FIELD_FIX_VALUE getValueOf(String indiceStr) { - int indice = Integer.valueOf(indiceStr); - return getValueOf(indice); - } - - public FIELD_FIX_VALUE getValueOf(int indice) { - switch (indice) { - case 1: - return FIXED; - case 0: - return NOT_FIXED; - default: - throw new IllegalArgumentException("Índice não definido"); - } - } - } - - private enum FIELD_MODE_VALUE { - PARKING(1, "Idle mode (Parking)"), DRIVING(2, "Active Mode (Driving)"); - - private int value; - - private String desc; - - private FIELD_MODE_VALUE(int value, String desc) { - this.value = value; - this.desc = desc; - } - - public int getValue() { - return value; - } - - public String getDesc() { - return desc; - } - - public FIELD_MODE_VALUE getValueOf(String indiceStr) { - int indice = Integer.valueOf(indiceStr); - return getValueOf(indice); - } - - public FIELD_MODE_VALUE getValueOf(int indice) { - switch (indice) { - case 1: - return PARKING; - case 2: - return DRIVING; - default: - throw new IllegalArgumentException("Índice não definido"); - } - } - } - - private enum FIELD_EMG_ID_VALUE { - PANIC(1, "Emergency by panic button"), PARKING(2, - "Emergency by parking lock"), MAIN_POWER(3, - "Emergency by removing main power"), ANTI_THEFT(5, - "Emergency by anti-theft"); - - private int value; - - private String desc; - - private FIELD_EMG_ID_VALUE(int value, String desc) { - this.value = value; - this.desc = desc; - } - - public int getValue() { - return value; - } - - public String getDesc() { - return desc; - } - - public FIELD_EMG_ID_VALUE getValueOf(String indiceStr) { - int indice = Integer.valueOf(indiceStr); - return getValueOf(indice); - } - - public FIELD_EMG_ID_VALUE getValueOf(int indice) { - switch (indice) { - case 1: - return PANIC; - case 2: - return PARKING; - case 3: - return MAIN_POWER; - case 5: - return ANTI_THEFT; - default: - throw new IllegalArgumentException("Índice não definido"); - } - } - } - - private enum FIELD_EVT_ID_VALUE { - INPUT1_GROUND(1, "Input1 goes to ground state"), INPUT1_OPEN(2, - "Input1 goes to open state"), INPUT2_GROUND(3, - "Input2 goes to ground state"), INPUT2_OPEN(4, - "Input2 goes to open state"), INPUT3_GROUND(5, - "Input3 goes to ground state"), INPUT3_OPEN(6, - "Input3 goes to open state"); - - private int value; - - private String desc; - - private FIELD_EVT_ID_VALUE(int value, String desc) { - this.value = value; - this.desc = desc; - } - - public int getValue() { - return value; - } - - public String getDesc() { - return desc; - } - - public FIELD_EVT_ID_VALUE getValueOf(String indiceStr) { - int indice = Integer.valueOf(indiceStr); - return getValueOf(indice); - } - - public FIELD_EVT_ID_VALUE getValueOf(int indice) { - switch (indice) { - case 1: - return INPUT1_GROUND; - case 2: - return INPUT1_OPEN; - case 3: - return INPUT2_GROUND; - case 4: - return INPUT2_OPEN; - case 5: - return INPUT3_GROUND; - case 6: - return INPUT3_OPEN; - default: - throw new IllegalArgumentException("Índice não definido"); - } - } - } - - private enum FIELD_ALERT_ID_VALUE { - DRIVING_FASTER(1, "Start driving faster than SPEED_LIMIT"), OVER_SPPED( - 2, "Ended over speed condition"), DISCON_GPS(3, - "Disconnected GPS antenna"), RECON_GPS(4, - "Reconnected GPS antenna after disconnected"), OUT_GEO_FENCE(5, - "The vehicle went out from the geo-fence that has following ID"), INTO_GEO_FENCE( - 6, - "The vehicle entered into the geo-fence that has following ID"), SHORTED_GPS( - 8, "Shorted GPS antenna"), DEEP_SLEEP_ON(9, - "Enter to deep sleep mode"), DEEP_SLEEP_OFF(10, - "Exite from deep sleep mode"), BKP_BATTERY(13, - "Backup battery error"), BATTERY_DOWN(14, - "Vehicle battery goes down to so low level"), SHOCKED(15, - "Shocked"), COLLISION(16, "Occurred some collision"), DEVIATE_ROUT( - 18, "Deviate from predefined rout"), ENTER_ROUT(19, - "Enter into predefined rout"); - - private int value; - - private String desc; - - private FIELD_ALERT_ID_VALUE(int value, String desc) { - this.value = value; - this.desc = desc; - } - - public int getValue() { - return value; - } - - public String getDesc() { - return desc; - } - - public FIELD_ALERT_ID_VALUE getValueOf(String indiceStr) { - int indice = Integer.valueOf(indiceStr); - return getValueOf(indice); - } - - public FIELD_ALERT_ID_VALUE getValueOf(int indice) { - switch (indice) { - case 1: - return DRIVING_FASTER; - case 2: - return OVER_SPPED; - case 3: - return DISCON_GPS; - case 4: - return RECON_GPS; - case 5: - return OUT_GEO_FENCE; - case 6: - return INTO_GEO_FENCE; - case 8: - return SHORTED_GPS; - case 9: - return DEEP_SLEEP_ON; - case 10: - return DEEP_SLEEP_OFF; - case 13: - return BKP_BATTERY; - case 14: - return BATTERY_DOWN; - case 15: - return SHOCKED; - case 16: - return COLLISION; - case 18: - return DEVIATE_ROUT; - case 19: - return ENTER_ROUT; - default: - throw new IllegalArgumentException("Índice não definido"); - } - } - } - - private enum ST210REPORTS { - - STATUS("SA200STT"), EMERGENCY("SA200EMG"), EVENT("SA200EVT"), ALERT( - "SA200ALT"), ALIVE("SA200ALV"); - - private String header; - - private ST210REPORTS(String header) { - this.header = header; - } - - public String getHeader() { - return this.header; - } - - public List<ST210FIELDS> getProtocol() { - - if (this.equals(STATUS)) { - return StatusProtocol; - } - - if (this.equals(EMERGENCY)) { - return EmergencyProtocol; - } - - if (this.equals(EVENT)) { - return EventProtocol; - } - - if (this.equals(ALERT)) { - return AlertProtocol; - } - - if (this.equals(ALIVE)) { - return AliveProtocol; - } - - return null; - } - - public Pattern getProtocolPattern() { - - if (this.equals(STATUS)) { - return getPattern(StatusProtocol); - } - - if (this.equals(EMERGENCY)) { - return getPattern(EmergencyProtocol); - } - - if (this.equals(EVENT)) { - return getPattern(EventProtocol); - } - - if (this.equals(ALERT)) { - return getPattern(AlertProtocol); - } - - if (this.equals(ALIVE)) { - return getPattern(AliveProtocol); - } - - return null; - } + HDR_STATUS("SA200STT;", "Status Report"), HDR_EMERGENCY("SA200EMG;", + "Emergency Report"), HDR_EVENT("SA200EVT;", "Event Report"), HDR_ALERT( + "SA200ALT;", "Alert Report"), HDR_ALIVE("SA200ALV;", + "Alive Report"), DEV_ID("(\\d+);", "Device ID"), SW_VER( + "(\\d{3});", "Software Release Version"), DATE("(\\d+);", + "GPS date (yyyymmdd) Year + Month + Day"), TIME( + "(\\d{2}:\\d{2}:\\d{2});", + "GPS time (hh:mm:ss) Hour : Minute : Second"), CELL( + "(\\d{2}\\w\\d{2});", + "Location Code ID (3 digits hex) + Serving Cell BSIC(2 digits decimal)"), LAT( + "(-\\d{2}.\\d+);", "Latitude (+/-xx.xxxxxx)"), LON( + "(-\\d{3}.\\d+);", "Longitude (+/-xxx.xxxxxx)"), SPD( + "(\\d{3}.\\d{3});", + "Speed in km/h - This value returns to 0 when it is over than 200,000Km"), CRS( + "(\\d{3}.\\d{2});", "Course over ground in degree"), SATT( + "(\\d+);", "Number of satellites"), FIX("(\\d);", + "GPS is fixed(1)\n" + "GPS is not fixed(0)"), DIST("(\\d+);", + "Traveled ddistance in meter"), PWR_VOLT("(\\d{2}.\\d{2});", + "Voltage value of main power"), IO("(\\d+);", + "Current I/O status of inputs and outputs."), MODE("(\\d);", + "1 = Idle mode (Parking)\n" + "2 = Active Mode (Driving)"), MSG_NUM( + "(\\d{4})", + "Message number - After 9999 is reported, message number returns to 0000"), EMG_ID( + "(\\d);", "Emergency type"), EVT_ID("(\\d);", "Event type"), ALERT_ID( + "(\\d);", "Alert type"); + + private String pattern; + + private String desc; + + private ST210FIELDS(String pattern, String desc) { + this.pattern = pattern; + this.desc = desc; + } + + public String getPattern() { + return pattern; + } + + public String getDesc() { + return desc; + } + + public void populatePosition(Position position, String groupValue, + DataManager dataManager) throws Exception { + + switch (this) { + + case DEV_ID: + position.setDeviceId(dataManager.getDeviceByImei(groupValue) + .getId()); + break; + + case LAT: + position.setLatitude(Double.valueOf(groupValue)); + break; + + case LON: + position.setLongitude(Double.valueOf(groupValue)); + break; + + case CRS: + position.setCourse(Double.valueOf(groupValue)); + break; + + case PWR_VOLT: + position.setPower(Double.valueOf(groupValue)); + break; + + case SPD: + position.setSpeed(Double.valueOf(groupValue)); + break; + + case DATE: { + // Date + Calendar time = Calendar.getInstance(TimeZone + .getTimeZone("UTC")); + time.clear(); + time.set(Calendar.YEAR, Integer.valueOf(Integer + .valueOf(groupValue.substring(0, 4)))); + time.set(Calendar.MONTH, Integer.valueOf(Integer + .valueOf(groupValue.substring(4, 6)))); + time.set(Calendar.DAY_OF_MONTH, Integer.valueOf(Integer + .valueOf(groupValue.substring(6, 8)))); + position.setTime(time.getTime()); + break; + } + + case TIME: { + + Calendar time = Calendar.getInstance(TimeZone + .getTimeZone("UTC")); + time.clear(); + time.setTime(position.getTime()); + + time.set(Calendar.HOUR, Integer.valueOf(Integer + .valueOf(groupValue.substring(0, 2)))); + time.set(Calendar.MINUTE, Integer.valueOf(Integer + .valueOf(groupValue.substring(3, 5)))); + time.set(Calendar.SECOND, Integer.valueOf(Integer + .valueOf(groupValue.substring(6, 8)))); + + position.setTime(time.getTime()); + break; + } + + default: + break; + } + + } + } + + private enum FIELD_FIX_VALUE { + FIXED(1, "GPS is fixed"), NOT_FIXED(0, "GPS is not fixed"); + + private int value; + + private String desc; + + private FIELD_FIX_VALUE(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + + public FIELD_FIX_VALUE getValueOf(String indiceStr) { + int indice = Integer.valueOf(indiceStr); + return getValueOf(indice); + } + + public FIELD_FIX_VALUE getValueOf(int indice) { + switch (indice) { + case 1: + return FIXED; + case 0: + return NOT_FIXED; + default: + throw new IllegalArgumentException("�ndice n�o definido"); + } + } + } + + private enum FIELD_MODE_VALUE { + PARKING(1, "Idle mode (Parking)"), DRIVING(2, "Active Mode (Driving)"); + + private int value; + + private String desc; + + private FIELD_MODE_VALUE(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + + public FIELD_MODE_VALUE getValueOf(String indiceStr) { + int indice = Integer.valueOf(indiceStr); + return getValueOf(indice); + } + + public FIELD_MODE_VALUE getValueOf(int indice) { + switch (indice) { + case 1: + return PARKING; + case 2: + return DRIVING; + default: + throw new IllegalArgumentException("�ndice n�o definido"); + } + } + } + + private enum FIELD_EMG_ID_VALUE { + PANIC(1, "Emergency by panic button"), PARKING(2, + "Emergency by parking lock"), MAIN_POWER(3, + "Emergency by removing main power"), ANTI_THEFT(5, + "Emergency by anti-theft"); + + private int value; + + private String desc; + + private FIELD_EMG_ID_VALUE(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + + public FIELD_EMG_ID_VALUE getValueOf(String indiceStr) { + int indice = Integer.valueOf(indiceStr); + return getValueOf(indice); + } + + public FIELD_EMG_ID_VALUE getValueOf(int indice) { + switch (indice) { + case 1: + return PANIC; + case 2: + return PARKING; + case 3: + return MAIN_POWER; + case 5: + return ANTI_THEFT; + default: + throw new IllegalArgumentException("�ndice n�o definido"); + } + } + } + + private enum FIELD_EVT_ID_VALUE { + INPUT1_GROUND(1, "Input1 goes to ground state"), INPUT1_OPEN(2, + "Input1 goes to open state"), INPUT2_GROUND(3, + "Input2 goes to ground state"), INPUT2_OPEN(4, + "Input2 goes to open state"), INPUT3_GROUND(5, + "Input3 goes to ground state"), INPUT3_OPEN(6, + "Input3 goes to open state"); + + private int value; + + private String desc; + + private FIELD_EVT_ID_VALUE(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + + public FIELD_EVT_ID_VALUE getValueOf(String indiceStr) { + int indice = Integer.valueOf(indiceStr); + return getValueOf(indice); + } + + public FIELD_EVT_ID_VALUE getValueOf(int indice) { + switch (indice) { + case 1: + return INPUT1_GROUND; + case 2: + return INPUT1_OPEN; + case 3: + return INPUT2_GROUND; + case 4: + return INPUT2_OPEN; + case 5: + return INPUT3_GROUND; + case 6: + return INPUT3_OPEN; + default: + throw new IllegalArgumentException("�ndice n�o definido"); + } + } + } + + private enum FIELD_ALERT_ID_VALUE { + DRIVING_FASTER(1, "Start driving faster than SPEED_LIMIT"), OVER_SPPED( + 2, "Ended over speed condition"), DISCON_GPS(3, + "Disconnected GPS antenna"), RECON_GPS(4, + "Reconnected GPS antenna after disconnected"), OUT_GEO_FENCE(5, + "The vehicle went out from the geo-fence that has following ID"), INTO_GEO_FENCE( + 6, + "The vehicle entered into the geo-fence that has following ID"), SHORTED_GPS( + 8, "Shorted GPS antenna"), DEEP_SLEEP_ON(9, + "Enter to deep sleep mode"), DEEP_SLEEP_OFF(10, + "Exite from deep sleep mode"), BKP_BATTERY(13, + "Backup battery error"), BATTERY_DOWN(14, + "Vehicle battery goes down to so low level"), SHOCKED(15, + "Shocked"), COLLISION(16, "Occurred some collision"), DEVIATE_ROUT( + 18, "Deviate from predefined rout"), ENTER_ROUT(19, + "Enter into predefined rout"); + + private int value; + + private String desc; + + private FIELD_ALERT_ID_VALUE(int value, String desc) { + this.value = value; + this.desc = desc; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + + public FIELD_ALERT_ID_VALUE getValueOf(String indiceStr) { + int indice = Integer.valueOf(indiceStr); + return getValueOf(indice); + } + + public FIELD_ALERT_ID_VALUE getValueOf(int indice) { + switch (indice) { + case 1: + return DRIVING_FASTER; + case 2: + return OVER_SPPED; + case 3: + return DISCON_GPS; + case 4: + return RECON_GPS; + case 5: + return OUT_GEO_FENCE; + case 6: + return INTO_GEO_FENCE; + case 8: + return SHORTED_GPS; + case 9: + return DEEP_SLEEP_ON; + case 10: + return DEEP_SLEEP_OFF; + case 13: + return BKP_BATTERY; + case 14: + return BATTERY_DOWN; + case 15: + return SHOCKED; + case 16: + return COLLISION; + case 18: + return DEVIATE_ROUT; + case 19: + return ENTER_ROUT; + default: + throw new IllegalArgumentException("�ndice n�o definido"); + } + } + } + + private enum ST210REPORTS { + + STATUS("SA200STT"), EMERGENCY("SA200EMG"), EVENT("SA200EVT"), ALERT( + "SA200ALT"), ALIVE("SA200ALV"); + + private String header; + + private ST210REPORTS(String header) { + this.header = header; + } + + public String getHeader() { + return this.header; + } + + public List<ST210FIELDS> getProtocol() { + + if (this.equals(STATUS)) { + return StatusProtocol; + } + + if (this.equals(EMERGENCY)) { + return EmergencyProtocol; + } + + if (this.equals(EVENT)) { + return EventProtocol; + } + + if (this.equals(ALERT)) { + return AlertProtocol; + } + + if (this.equals(ALIVE)) { + return AliveProtocol; + } + + return null; + } + + public Pattern getProtocolPattern() { + + if (this.equals(STATUS)) { + return getPattern(StatusProtocol); + } + + if (this.equals(EMERGENCY)) { + return getPattern(EmergencyProtocol); + } + + if (this.equals(EVENT)) { + return getPattern(EventProtocol); + } + + if (this.equals(ALERT)) { + return getPattern(AlertProtocol); + } + + if (this.equals(ALIVE)) { + return getPattern(AliveProtocol); + } + + return null; + } + + } + + private static ST210REPORTS getReportType(String msg) { + + if (msg.startsWith(ST210REPORTS.STATUS.getHeader())) { + return ST210REPORTS.STATUS; + } + + if (msg.startsWith(ST210REPORTS.EMERGENCY.getHeader())) { + return ST210REPORTS.EMERGENCY; + } + + if (msg.startsWith(ST210REPORTS.EVENT.getHeader())) { + return ST210REPORTS.EVENT; + } + + if (msg.startsWith(ST210REPORTS.ALERT.getHeader())) { + return ST210REPORTS.ALERT; + } + + if (msg.startsWith(ST210REPORTS.ALIVE.getHeader())) { + return ST210REPORTS.ALIVE; + } + + return null; + } + + public static Pattern getPattern(List<ST210FIELDS> protocol) { + + String patternStr = ""; + + for (ST210FIELDS field : protocol) { + patternStr += field.getPattern(); + } + + return Pattern.compile(patternStr); + + } + + @SuppressWarnings("serial") + static private List<ST210FIELDS> StatusProtocol = new LinkedList<ST210FIELDS>() { + + { + add(ST210FIELDS.HDR_STATUS); + add(ST210FIELDS.DEV_ID); + add(ST210FIELDS.SW_VER); + add(ST210FIELDS.DATE); + add(ST210FIELDS.TIME); + add(ST210FIELDS.CELL); + add(ST210FIELDS.LAT); + add(ST210FIELDS.LON); + add(ST210FIELDS.SPD); + add(ST210FIELDS.CRS); + add(ST210FIELDS.SATT); + add(ST210FIELDS.FIX); + add(ST210FIELDS.DIST); + add(ST210FIELDS.PWR_VOLT); + add(ST210FIELDS.IO); + add(ST210FIELDS.MODE); + add(ST210FIELDS.MSG_NUM); + } + + }; + + @SuppressWarnings("serial") + static private List<ST210FIELDS> EmergencyProtocol = new LinkedList<ST210FIELDS>() { + + { + add(ST210FIELDS.HDR_EMERGENCY); + add(ST210FIELDS.DEV_ID); + add(ST210FIELDS.SW_VER); + add(ST210FIELDS.DATE); + add(ST210FIELDS.TIME); + add(ST210FIELDS.CELL); + add(ST210FIELDS.LAT); + add(ST210FIELDS.LON); + add(ST210FIELDS.SPD); + add(ST210FIELDS.CRS); + add(ST210FIELDS.SATT); + add(ST210FIELDS.FIX); + add(ST210FIELDS.DIST); + add(ST210FIELDS.PWR_VOLT); + add(ST210FIELDS.IO); + add(ST210FIELDS.EMG_ID); + } + + }; + + @SuppressWarnings("serial") + static private List<ST210FIELDS> EventProtocol = new LinkedList<ST210FIELDS>() { + + { + add(ST210FIELDS.HDR_EVENT); + add(ST210FIELDS.DEV_ID); + add(ST210FIELDS.SW_VER); + add(ST210FIELDS.DATE); + add(ST210FIELDS.TIME); + add(ST210FIELDS.CELL); + add(ST210FIELDS.LAT); + add(ST210FIELDS.LON); + add(ST210FIELDS.SPD); + add(ST210FIELDS.CRS); + add(ST210FIELDS.SATT); + add(ST210FIELDS.FIX); + add(ST210FIELDS.DIST); + add(ST210FIELDS.PWR_VOLT); + add(ST210FIELDS.IO); + add(ST210FIELDS.EVT_ID); + } + + }; + + @SuppressWarnings("serial") + static private List<ST210FIELDS> AlertProtocol = new LinkedList<ST210FIELDS>() { + + { + add(ST210FIELDS.HDR_ALERT); + add(ST210FIELDS.DEV_ID); + add(ST210FIELDS.SW_VER); + add(ST210FIELDS.DATE); + add(ST210FIELDS.TIME); + add(ST210FIELDS.CELL); + add(ST210FIELDS.LAT); + add(ST210FIELDS.LON); + add(ST210FIELDS.SPD); + add(ST210FIELDS.CRS); + add(ST210FIELDS.SATT); + add(ST210FIELDS.FIX); + add(ST210FIELDS.DIST); + add(ST210FIELDS.PWR_VOLT); + add(ST210FIELDS.IO); + add(ST210FIELDS.ALERT_ID); + } + + }; + + @SuppressWarnings("serial") + static private List<ST210FIELDS> AliveProtocol = new LinkedList<ST210FIELDS>() { + + { + add(ST210FIELDS.HDR_ALIVE); + add(ST210FIELDS.DEV_ID); + } + + }; + + @Override + public Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) + throws Exception { + String sentence = (String) msg; + return decodeMsg(sentence); + } + + public Position decodeMsg(String msg) throws Exception { + + ST210REPORTS report = getReportType(msg); + + List<ST210FIELDS> protocol = report.getProtocol(); + + Pattern protocolPattern = report.getProtocolPattern(); + + Log.info("Protocol Pattern: " + protocolPattern.toString()); + Log.info("Msg: " + msg); + + // Parse message + Matcher parser = protocolPattern.matcher(msg); + if (!parser.matches()) { + return null; + } + + // Create new position + Position position = new Position(); + + position.setAltitude(0D); + position.setExtendedInfo(""); + position.setValid(true); + + Integer index = 0; + for (ST210FIELDS field : protocol) { + + String groupValue = parser.group(index++); + + field.populatePosition(position, groupValue, getDataManager()); + } + + return position; + } - } - - private static ST210REPORTS getReportType(String msg) { - - if (msg.startsWith(ST210REPORTS.STATUS.getHeader())) { - return ST210REPORTS.STATUS; - } - - if (msg.startsWith(ST210REPORTS.EMERGENCY.getHeader())) { - return ST210REPORTS.EMERGENCY; - } - - if (msg.startsWith(ST210REPORTS.EVENT.getHeader())) { - return ST210REPORTS.EVENT; - } - - if (msg.startsWith(ST210REPORTS.ALERT.getHeader())) { - return ST210REPORTS.ALERT; - } - - if (msg.startsWith(ST210REPORTS.ALIVE.getHeader())) { - return ST210REPORTS.ALIVE; - } - - return null; - } - - public static Pattern getPattern(List<ST210FIELDS> protocol) { - - String patternStr = ""; - - for (ST210FIELDS field : protocol) { - patternStr += field.getPattern(); - } - - return Pattern.compile(patternStr); - - } - - @SuppressWarnings("serial") - static private List<ST210FIELDS> StatusProtocol = new LinkedList<ST210FIELDS>() { - - { - add(ST210FIELDS.HDR_STATUS); - add(ST210FIELDS.DEV_ID); - add(ST210FIELDS.SW_VER); - add(ST210FIELDS.DATE); - add(ST210FIELDS.TIME); - add(ST210FIELDS.CELL); - add(ST210FIELDS.LAT); - add(ST210FIELDS.LON); - add(ST210FIELDS.SPD); - add(ST210FIELDS.CRS); - add(ST210FIELDS.SATT); - add(ST210FIELDS.FIX); - add(ST210FIELDS.DIST); - add(ST210FIELDS.PWR_VOLT); - add(ST210FIELDS.IO); - add(ST210FIELDS.MODE); - add(ST210FIELDS.MSG_NUM); - } - - }; - - @SuppressWarnings("serial") - static private List<ST210FIELDS> EmergencyProtocol = new LinkedList<ST210FIELDS>() { - - { - add(ST210FIELDS.HDR_EMERGENCY); - add(ST210FIELDS.DEV_ID); - add(ST210FIELDS.SW_VER); - add(ST210FIELDS.DATE); - add(ST210FIELDS.TIME); - add(ST210FIELDS.CELL); - add(ST210FIELDS.LAT); - add(ST210FIELDS.LON); - add(ST210FIELDS.SPD); - add(ST210FIELDS.CRS); - add(ST210FIELDS.SATT); - add(ST210FIELDS.FIX); - add(ST210FIELDS.DIST); - add(ST210FIELDS.PWR_VOLT); - add(ST210FIELDS.IO); - add(ST210FIELDS.EMG_ID); - } - - }; - - @SuppressWarnings("serial") - static private List<ST210FIELDS> EventProtocol = new LinkedList<ST210FIELDS>() { - - { - add(ST210FIELDS.HDR_EVENT); - add(ST210FIELDS.DEV_ID); - add(ST210FIELDS.SW_VER); - add(ST210FIELDS.DATE); - add(ST210FIELDS.TIME); - add(ST210FIELDS.CELL); - add(ST210FIELDS.LAT); - add(ST210FIELDS.LON); - add(ST210FIELDS.SPD); - add(ST210FIELDS.CRS); - add(ST210FIELDS.SATT); - add(ST210FIELDS.FIX); - add(ST210FIELDS.DIST); - add(ST210FIELDS.PWR_VOLT); - add(ST210FIELDS.IO); - add(ST210FIELDS.EVT_ID); - } - - }; - - @SuppressWarnings("serial") - static private List<ST210FIELDS> AlertProtocol = new LinkedList<ST210FIELDS>() { - - { - add(ST210FIELDS.HDR_ALERT); - add(ST210FIELDS.DEV_ID); - add(ST210FIELDS.SW_VER); - add(ST210FIELDS.DATE); - add(ST210FIELDS.TIME); - add(ST210FIELDS.CELL); - add(ST210FIELDS.LAT); - add(ST210FIELDS.LON); - add(ST210FIELDS.SPD); - add(ST210FIELDS.CRS); - add(ST210FIELDS.SATT); - add(ST210FIELDS.FIX); - add(ST210FIELDS.DIST); - add(ST210FIELDS.PWR_VOLT); - add(ST210FIELDS.IO); - add(ST210FIELDS.ALERT_ID); - } - - }; - - @SuppressWarnings("serial") - static private List<ST210FIELDS> AliveProtocol = new LinkedList<ST210FIELDS>() { - - { - add(ST210FIELDS.HDR_ALIVE); - add(ST210FIELDS.DEV_ID); - } - - }; - - @Override - public Object decode(ChannelHandlerContext ctx, Channel channel, Object msg) - throws Exception { - if (channel != null) { - channel.write("OI AMIGO do decoder"); - } - String sentence = (String) msg; - return decodeMsg(sentence); - } - - public Position decodeMsg(String msg) throws Exception { - - ST210REPORTS report = getReportType(msg); - - List<ST210FIELDS> protocol = report.getProtocol(); - - Pattern protocolPattern = report.getProtocolPattern(); - - Log.info("Protocol Pattern: " + protocolPattern.toString()); - Log.info("Msg: " + msg); - - // Parse message - Matcher parser = protocolPattern.matcher(msg); - if (!parser.matches()) { - return null; - } - - // Create new position - Position position = new Position(); - - position.setAltitude(0D); - position.setExtendedInfo(""); - position.setValid(true); - - Integer index = 0; - for (ST210FIELDS field : protocol) { - - String groupValue = parser.group(index++); - - field.populatePosition(position, groupValue, getDataManager()); - } - - return position; - } } diff --git a/src/favicon.ico b/src/web/favicon.ico Binary files differindex 6fd696c25..6fd696c25 100644 --- a/src/favicon.ico +++ b/src/web/favicon.ico diff --git a/src/index.html b/src/web/index.html index cde73f47b..cde73f47b 100644 --- a/src/index.html +++ b/src/web/index.html diff --git a/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java b/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java index b14a0c141..80d5c8377 100644 --- a/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java @@ -7,27 +7,30 @@ public class Gl200ProtocolDecoderTest { @Test public void testDecode() throws Exception { - + Gl200ProtocolDecoder decoder = new Gl200ProtocolDecoder(new TestDataManager(), 0); - + assertNotNull(decoder.decode(null, null, "+RESP:GTFRI,020102,000035988863964,,0,0,1,1,4.3,92,70.0,121.354335,31.222073,20090214013254,0460,0000,18d8,6141,00,,20090214093254,11F0")); assertNotNull(decoder.decode(null, null, "+RESP:GTFRI,020102,135790246811220,,0,0,1,1,4.3,92,70.0,121.354335,31.222073,20090214013254,0460,0000,18d8,6141,00,,20090214093254,11F0")); - + assertNotNull(decoder.decode(null, null, "+RESP:GTFRI,020102,135790246811220,,0,0,2,1,4.3,92,70.0,121.354335,31.222073,20090214013254,0460,0000,18d8,6141,00,0,4.3,92,70.0,121.354335,31.222073,20090101000000,0460,0000,18d8,6141,00,,20090214093254,11F0")); - + assertNotNull(decoder.decode(null, null, "+RESP:GTDOG,020102,135790246811220,,0,0,1,1,4.3,92,70.0,121.354335,31.222073,20090214013254,0460,0000,18d8,6141,00,2000.0,20090214093254,11F0")); assertNotNull(decoder.decode(null, null, "+RESP:GTLBC,020102,135790246811220,,+8613800000000,1,4.3,92,70.0,121.354335,31.222073,20090214013254,0460,0000,18d8,6141,00,,20090214093254,11F0")); - + assertNotNull(decoder.decode(null, null, "+RESP:GTGCR,020102,135790246811220,,3,50,180,2,0.4,296,-5.4,121.391055,31.164473,20100714104934,0460,0000,1878,0873,00,,20100714104934,000C")); + assertNotNull(decoder.decode(null, null, + "+RESP:GTFRI,07000D,868487001005941,,0,0,1,1,0.0,0,46.3,-77.039627,38.907573,20120731175232,0310,0260,B44B,EBC9,0015e96913a7,-58,,100,20120731175244,0114")); + } } diff --git a/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java b/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java index c09b34bc7..7a90e4fbd 100644 --- a/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java @@ -23,6 +23,9 @@ public class Gps103ProtocolDecoderTest { assertNotNull(decoder.decode(null, null, "imei:359587010124900,tracker,0809231929,13554900601,F,112909.397,A,2234.4669,N,11354.3287,E,0.11,321.53,")); + + assertNotNull(decoder.decode(null, null, + "imei:353451049926460,tracker,1208042043,123456 99008026,F,124336.000,A,3509.8668,N,03322.7636,E,0.00,,")); } diff --git a/test/org/traccar/protocol/ST210ProtocolDecoderTest.java b/test/org/traccar/protocol/ST210ProtocolDecoderTest.java index a2ffe5bac..bd1e60ee1 100644 --- a/test/org/traccar/protocol/ST210ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/ST210ProtocolDecoderTest.java @@ -48,7 +48,6 @@ public class ST210ProtocolDecoderTest { "localhost", 5010, "SA200STT;317652;042;20120718;15:37:12;16d41;-15.618755;-056.083241;000.024;000.00;8;1;41548;12.17;100000;2;1979"); - } /* @Test @@ -70,4 +69,5 @@ public class ST210ProtocolDecoderTest { null, "SA200STT;317652;042;20120722;00:24:23;16d41;-15.618767;-056.083214;000.011;000.00;11;1;41557;12.21;000000;1;3205")); }*/ + } diff --git a/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java b/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java index e294f6010..b30ea179f 100644 --- a/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java @@ -7,12 +7,15 @@ public class Tk103ProtocolDecoderTest { @Test public void testDecode() throws Exception { - + Tk103ProtocolDecoder decoder = new Tk103ProtocolDecoder(new TestDataManager(), 0); - + assertNotNull(decoder.decode(null, null, "(035988863964BP05000035988863964110524A4241.7977N02318.7561E000.0123536356.5100000000L000946BB")); + assertNotNull(decoder.decode(null, null, + "(013632782450BP05000013632782450120803V0000.0000N00000.0000E000.0174654000.0000000000L00000000")); + } } diff --git a/tracker-server b/tracker-server deleted file mode 100644 index b44019a9e..000000000 --- a/tracker-server +++ /dev/null @@ -1,24 +0,0 @@ -#! /bin/sh - -PATH=/sbin:/bin - -case "$1" in - start) - /usr/bin/java -cp /usr/share/tracker-server -jar /usr/share/tracker-server/tracker-server.jar "/etc/tracker-server/configuration.xml" <&- & - pid=$! - echo ${pid} > /var/run/tracker-server.pid - ;; - restart|reload|force-reload) - echo "Error: argument '$1' not supported" >&2 - exit 3 - ;; - stop) - kill `cat /var/run/tracker-server.pid` - rm /var/run/tracker-server.pid - ;; - *) - echo "Usage: $0 start|stop" >&2 - exit 3 - ;; -esac - |