aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/org/traccar/protocol/GoSafeProtocolDecoder.java18
-rw-r--r--test/org/traccar/protocol/GoSafeProtocolDecoderTest.java3
2 files changed, 20 insertions, 1 deletions
diff --git a/src/org/traccar/protocol/GoSafeProtocolDecoder.java b/src/org/traccar/protocol/GoSafeProtocolDecoder.java
index dc9298e71..2e562d63e 100644
--- a/src/org/traccar/protocol/GoSafeProtocolDecoder.java
+++ b/src/org/traccar/protocol/GoSafeProtocolDecoder.java
@@ -64,7 +64,15 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder {
.expression(",?")
.groupEnd()
.groupBegin()
- .text("GSM:").expression("[^,]*,?")
+ .text("GSM:")
+ .number("d+;") // registration
+ .number("d+;") // gsm signal
+ .number("(d+);") // mcc
+ .number("(d+);") // mnc
+ .number("(x+);") // lac
+ .number("(x+);") // cid
+ .number("-d+") // rssi
+ .expression("[^,]*,?")
.groupEnd("?")
.groupBegin()
.text("COT:")
@@ -139,6 +147,14 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder {
position.setAltitude(parser.nextDouble());
position.set(Event.KEY_HDOP, parser.next());
+
+ if (parser.hasNext(4)) {
+ position.set(Event.KEY_MCC, parser.nextInt());
+ position.set(Event.KEY_MNC, parser.nextInt());
+ position.set(Event.KEY_LAC, parser.nextInt(16));
+ position.set(Event.KEY_CID, parser.nextInt(16));
+ }
+
position.set(Event.KEY_ODOMETER, parser.next());
position.set(Event.KEY_POWER, parser.next());
position.set(Event.KEY_BATTERY, parser.next());
diff --git a/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java b/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java
index badc267ab..6c36a2727 100644
--- a/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java
+++ b/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java
@@ -10,6 +10,9 @@ public class GoSafeProtocolDecoderTest extends ProtocolTest {
GoSafeProtocolDecoder decoder = new GoSafeProtocolDecoder(new GoSafeProtocol());
+ verifyPositions(decoder, text(
+ "*GS16,351535059439208,145425130316,,GPS:V;0;N0.000000;E0.000000;0;0;0;0.00;0.00,GSM:1;3;416;3;A8C;2820;-81;416;3;A8C;281F;-83;416;3;A8C;368A;-87;416;3;A8C;368B;-89;416;3;A8C;2C26;-103;416;3;A8C;3689;-107;416;3;A8C;2D83;-107"));
+
verifyPosition(decoder, text(
"*GS02,358696043774648,GPS:230040;A;S1.166829;E36.934287;0;0;170116,STT:20;0,MGR:32755204,ADC:0;11.2;1;28.3;2;4.1,GFS:0;0"));