aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/TaipProtocolDecoder.java50
-rw-r--r--test/org/traccar/protocol/TaipProtocolDecoderTest.java3
2 files changed, 52 insertions, 1 deletions
diff --git a/src/org/traccar/protocol/TaipProtocolDecoder.java b/src/org/traccar/protocol/TaipProtocolDecoder.java
index 202b9dd63..3611544d5 100644
--- a/src/org/traccar/protocol/TaipProtocolDecoder.java
+++ b/src/org/traccar/protocol/TaipProtocolDecoder.java
@@ -25,6 +25,7 @@ import org.traccar.helper.DateUtil;
import org.traccar.helper.Parser;
import org.traccar.helper.PatternBuilder;
import org.traccar.helper.UnitsConverter;
+import org.traccar.model.Event;
import org.traccar.model.Position;
public class TaipProtocolDecoder extends BaseProtocolDecoder {
@@ -78,7 +79,6 @@ public class TaipProtocolDecoder extends BaseProtocolDecoder {
String sentence = (String) msg;
- // Find message start
int beginIndex = sentence.indexOf('>');
if (beginIndex != -1) {
sentence = sentence.substring(beginIndex + 1);
@@ -138,6 +138,54 @@ public class TaipProtocolDecoder extends BaseProtocolDecoder {
position.setCourse(parser.nextDouble());
position.setValid(parser.nextInt() != 0);
+ String[] attributes = null;
+ beginIndex = sentence.indexOf(';');
+ if (beginIndex != -1) {
+ int endIndex = sentence.indexOf('<', beginIndex);
+ if (endIndex == -1) {
+ endIndex = sentence.length();
+ }
+ attributes = sentence.substring(beginIndex, endIndex).split(";");
+ }
+
+ if (attributes != null) {
+ for (String attribute : attributes) {
+ int index = attribute.indexOf('=');
+ if (index != -1) {
+ String key = attribute.substring(0, index).toLowerCase();
+ String value = attribute.substring(index + 1);
+ switch (key) {
+
+ case "id":
+ if (!identify(value, channel, remoteAddress)) {
+ return null;
+ }
+ if (sendResponse && channel != null) {
+ channel.write(value);
+ }
+ break;
+
+ case "sv":
+ position.set(Event.KEY_SATELLITES, value);
+ break;
+
+ case "bl":
+ position.set(Event.KEY_BATTERY, value);
+ break;
+
+ case "vo":
+ position.set(Event.KEY_ODOMETER, value);
+ break;
+
+ default:
+ position.set(key, value);
+ break;
+
+ }
+ }
+ }
+ }
+
return position;
}
diff --git a/test/org/traccar/protocol/TaipProtocolDecoderTest.java b/test/org/traccar/protocol/TaipProtocolDecoderTest.java
index e64513ac5..871ec84b3 100644
--- a/test/org/traccar/protocol/TaipProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/TaipProtocolDecoderTest.java
@@ -11,6 +11,9 @@ public class TaipProtocolDecoderTest extends ProtocolTest {
TaipProtocolDecoder decoder = new TaipProtocolDecoder(new TaipProtocol(), false);
verifyPosition(decoder, text(
+ ">REV451891352379+0307152+1016143700000012;SV=8;BL=4416;VO=8055;ID=356612026322000<"));
+
+ verifyPosition(decoder, text(
">RGP230615010248-2682523-065236820000003007F4101;ID=0005;#0002;*2A<"),
position("2015-06-23 01:02:48.000", true, -26.82523, -65.23682));