From 6fab82655ac6511b13f5c9ca8ddf0a479036dd2d Mon Sep 17 00:00:00 2001 From: Georg Lukas Date: Wed, 31 Jul 2013 14:49:06 +0200 Subject: [PATCH] Parse digipeated own packets differently. Fix #62 This patch adds two related aspects: * Incoming packets from own callsign are not parsed (i.e. not added to the position table / not checked for messages) - fixing #62 * Digipeated packets can get their own notification - probably useful --- res/values/strings.xml | 5 +++++ res/xml/preferences.xml | 27 +++++++++++++++++++++++++++ src/AprsService.scala | 13 +++++++++++-- src/MessageService.scala | 4 ---- src/ServiceNotifier.scala | 4 ++-- 5 files changed, 45 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 3895f57..e3b68ca 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -275,6 +275,11 @@ Own Position Reports Ringtone Tone for sent position reports +Digipeated Own Packets +Ringtone +Tone for digipeated packets + +Digipeated by %s APRS digi path diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index e795a15..4810625 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -196,6 +196,33 @@ android:showSilent="true" /> + + + + + + + diff --git a/src/AprsService.scala b/src/AprsService.scala index 2bb3973..a0aa7a4 100644 --- a/src/AprsService.scala +++ b/src/AprsService.scala @@ -199,7 +199,7 @@ class AprsService extends Service { } } - def parsePacket(ts : Long, message : String) { + def parsePacket(ts : Long, message : String, source : Int) { try { var fap = Parser.parse(message) if (fap.getType() == APRSTypes.T_THIRDPARTY) { @@ -209,6 +209,15 @@ class AprsService extends Service { fap = Parser.parse(inner.substring(1, inner.length())) } + val callssid = prefs.getCallSsid() + if (source == StorageDatabase.Post.TYPE_INCMG && + fap.getSourceCall().equalsIgnoreCase(callssid)) { + Log.i(TAG, "got digipeated own packet") + val message = getString(R.string.got_digipeated, fap.getLastUsedDigi()) + ServiceNotifier.instance.notifyPosition(this, prefs, message, "dgp_") + return + } + if (fap.getAprsInformation() == null) { Log.d(TAG, "parsePacket() misses payload: " + message) return @@ -231,7 +240,7 @@ class AprsService extends Service { val ts = System.currentTimeMillis() db.addPost(ts, t, status, message) if (t == StorageDatabase.Post.TYPE_POST || t == StorageDatabase.Post.TYPE_INCMG) { - parsePacket(ts, message) + parsePacket(ts, message, t) } else { // only log status messages Log.d(TAG, "addPost: " + status + " - " + message) diff --git a/src/MessageService.scala b/src/MessageService.scala index 3205aa1..241749e 100644 --- a/src/MessageService.scala +++ b/src/MessageService.scala @@ -26,10 +26,6 @@ class MessageService(s : AprsService) { def handleMessage(ts : Long, ap : APRSPacket, msg : MessagePacket) { val callssid = s.prefs.getCallSsid() - if (ap.getSourceCall().equalsIgnoreCase(callssid)) { - Log.i(TAG, "ignoring own digipeated message") - return - } if (msg.getTargetCallsign().equalsIgnoreCase(callssid)) { if (msg.isAck() || msg.isRej()) { val new_type = if (msg.isAck()) diff --git a/src/ServiceNotifier.scala b/src/ServiceNotifier.scala index 2d2b8ab..87768bf 100644 --- a/src/ServiceNotifier.scala +++ b/src/ServiceNotifier.scala @@ -90,9 +90,9 @@ abstract class ServiceNotifier { } def notifyPosition(ctx : Service, prefs : PrefsWrapper, - status : String) { + status : String, prefix : String = "pos_") { val n = newNotification(ctx, status) - setupNotification(n, ctx, prefs, false, "pos_") + setupNotification(n, ctx, prefs, false, prefix) getNotificationMgr(ctx).notify(SERVICE_NOTIFICATION, n) } }