From b41b9fae75277f4d9ed547ca38c65288f08177a2 Mon Sep 17 00:00:00 2001 From: Georg Lukas Date: Tue, 20 Sep 2016 16:40:54 +0200 Subject: [PATCH] backend: centralize TncProto logic --- src/backend/AprsBackend.scala | 27 +++++++++++++++++++++++++++ src/backend/BluetoothTnc.scala | 2 +- src/backend/KenwoodTnc.scala | 2 +- src/backend/TcpTnc.scala | 2 +- src/backend/TcpUploader.scala | 2 +- src/backend/UsbTnc.scala | 2 +- 6 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/backend/AprsBackend.scala b/src/backend/AprsBackend.scala index d545024..fdc79a1 100644 --- a/src/backend/AprsBackend.scala +++ b/src/backend/AprsBackend.scala @@ -1,6 +1,7 @@ package org.aprsdroid.app import _root_.net.ab0oo.aprs.parser.APRSPacket +import _root_.java.io.{InputStream, OutputStream} object AprsBackend { val DEFAULT_CONNTYPE = "tcp" @@ -72,9 +73,35 @@ object AprsBackend { } } + class ProtoInfo( + val create : (AprsService, InputStream, OutputStream) => TncProto, + val prefxml : Int + ) {} + + val proto_collection = Map( + "aprsis" -> new ProtoInfo( + (s, is, os) => new AprsIsProto(s, is, os), + 0), + "kiss" -> new ProtoInfo( + (s, is, os) => new KissProto(is, os), + 0), + "kenwood" -> new ProtoInfo( + (s, is, os) => new KenwoodProto(s, is, os), + 0) + ); + def defaultProtoInfo(p : String) : ProtoInfo = { + proto_collection.get(p) match { + case Some(pi) => pi + case None => proto_collection("kiss") + } + } + def instanciateUploader(service : AprsService, prefs : PrefsWrapper) : AprsBackend = { defaultBackendInfo(prefs).create(service, prefs) } + def instanciateProto(p : String, service : AprsService, is : InputStream, os : OutputStream) : TncProto = { + defaultProtoInfo(p).create(service, is, os) + } def instanciatePrefsAct(prefs : PrefsWrapper) = { defaultBackendInfo(prefs).prefxml } diff --git a/src/backend/BluetoothTnc.scala b/src/backend/BluetoothTnc.scala index be05da1..854cbb1 100644 --- a/src/backend/BluetoothTnc.scala +++ b/src/backend/BluetoothTnc.scala @@ -27,7 +27,7 @@ class BluetoothTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBack } def createTncProto(is : InputStream, os : OutputStream) : TncProto = - new KissProto(is, os) + AprsBackend.instanciateProto("kiss", service, is, os) def createConnection() { Log.d(TAG, "BluetoothTnc.createConnection: " + tncmac) diff --git a/src/backend/KenwoodTnc.scala b/src/backend/KenwoodTnc.scala index 45e1d03..ef2778f 100644 --- a/src/backend/KenwoodTnc.scala +++ b/src/backend/KenwoodTnc.scala @@ -8,7 +8,7 @@ class KenwoodTnc(service : AprsService, prefs : PrefsWrapper) extends BluetoothT override val TAG = "APRSdroid.KenwoodTnc" override def createTncProto(is : InputStream, os : OutputStream) = { - new KenwoodProto(service, is, os) + AprsBackend.instanciateProto("kiss", service, is, os) } } diff --git a/src/backend/TcpTnc.scala b/src/backend/TcpTnc.scala index 18dc826..8c9a497 100644 --- a/src/backend/TcpTnc.scala +++ b/src/backend/TcpTnc.scala @@ -6,6 +6,6 @@ class TcpTnc(service : AprsService, prefs : PrefsWrapper) extends TcpUploader(se override val TAG = "APRSdroid.TcpTnc" override def createTncProto(is : InputStream, os : OutputStream) : TncProto = - new KissProto(is, os) + AprsBackend.instanciateProto("kiss", service, is, os) } diff --git a/src/backend/TcpUploader.scala b/src/backend/TcpUploader.scala index 744089b..1d89663 100644 --- a/src/backend/TcpUploader.scala +++ b/src/backend/TcpUploader.scala @@ -33,7 +33,7 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsBacke } def createTncProto(is : InputStream, os : OutputStream) : TncProto = { - new AprsIsProto(service, is, os) + AprsBackend.instanciateProto("aprsis", service, is, os) } def update(packet : APRSPacket) : String = { diff --git a/src/backend/UsbTnc.scala b/src/backend/UsbTnc.scala index 278a8b9..41a8fc9 100644 --- a/src/backend/UsbTnc.scala +++ b/src/backend/UsbTnc.scala @@ -150,7 +150,7 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr Thread.sleep(initdelay) } } - proto = new KissProto(new SerialInputStream(ser), os) + proto = AprsBackend.instanciateProto("kiss", service, new SerialInputStream(ser), os) service.postPosterStarted() while (running) { val line = proto.readPacket()