kopia lustrzana https://github.com/ge0rg/aprsdroid
Merge branch 'master' into mapsforge
commit
74e58b87d1
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik diff jest za duży
Load Diff
|
@ -202,8 +202,9 @@ class AprsService extends Service {
|
|||
}
|
||||
|
||||
def newPacket(payload : InformationField) = {
|
||||
// TODO: obtain digi path from prefs
|
||||
new APRSPacket(prefs.getCallSsid(), APP_VERSION, null, payload)
|
||||
val digipath = prefs.getString("digi_path", "WIDE1-1")
|
||||
new APRSPacket(prefs.getCallSsid(), APP_VERSION,
|
||||
Digipeater.parseList(digipath, true), payload)
|
||||
}
|
||||
|
||||
def formatLoc(symbol : String, status : String, location : Location) = {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package org.aprsdroid.app
|
||||
|
||||
import _root_.android.content.Context
|
||||
import _root_.android.location.{Location, LocationManager}
|
||||
import _root_.android.media.AudioManager
|
||||
import _root_.android.preference.PreferenceManager
|
||||
|
||||
|
@ -63,6 +64,20 @@ class PrefsWrapper(val context : Context) {
|
|||
|
||||
def getLoginString() = AprsPacket.formatLogin(getCallsign(), getSsid(),
|
||||
getPasscode(), getVersion())
|
||||
def getFilterString(service : AprsService) : String = {
|
||||
val filterdist = getStringInt("tcp.filterdist", 50)
|
||||
val userfilter = getString("tcp.filter", "")
|
||||
val lastloc = try {
|
||||
val locMan = service.getSystemService(Context.LOCATION_SERVICE).asInstanceOf[LocationManager]
|
||||
AprsPacket.formatRangeFilter(
|
||||
locMan.getLastKnownLocation(PeriodicGPS.bestProvider(locMan)), filterdist)
|
||||
} catch {
|
||||
case e : IllegalArgumentException => ""
|
||||
}
|
||||
if (filterdist == 0) return " filter %s %s".format(userfilter, lastloc)
|
||||
else return " filter m/%d %s %s".format(filterdist, userfilter, lastloc)
|
||||
}
|
||||
|
||||
|
||||
def getAfskHQ() = getBoolean("afsk.hqdemod", true)
|
||||
def getAfskBluetooth() = getBoolean("afsk.btsco", false) && getAfskHQ()
|
||||
|
|
|
@ -18,7 +18,6 @@ class BluetoothTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBack
|
|||
val bt_client = prefs.getBoolean("bt.client", true)
|
||||
val tncmac = prefs.getString("bt.mac", null)
|
||||
val tncchannel = prefs.getStringInt("bt.channel", -1)
|
||||
var digipath = prefs.getString("digi_path", "WIDE1-1")
|
||||
var conn : BtSocketThread = null
|
||||
|
||||
def start() = {
|
||||
|
@ -28,7 +27,7 @@ class BluetoothTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBack
|
|||
}
|
||||
|
||||
def createTncProto(is : InputStream, os : OutputStream) : TncProto =
|
||||
new KissProto(is, os, digipath)
|
||||
new KissProto(is, os)
|
||||
|
||||
def createConnection() {
|
||||
Log.d(TAG, "BluetoothTnc.createConnection: " + tncmac)
|
||||
|
@ -52,8 +51,6 @@ class BluetoothTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBack
|
|||
}
|
||||
|
||||
def update(packet : APRSPacket) : String = {
|
||||
// the digipeater setting here is a duplicate just for log purpose
|
||||
packet.setDigipeaters(Digipeater.parseList(digipath, true))
|
||||
Log.d(TAG, "BluetoothTnc.update: " + packet)
|
||||
conn.update(packet)
|
||||
}
|
||||
|
@ -180,6 +177,8 @@ class BluetoothTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBack
|
|||
|
||||
def shutdown() {
|
||||
Log.d(TAG, "shutdown()")
|
||||
if (proto != null)
|
||||
proto.stop()
|
||||
this.synchronized {
|
||||
catchLog("socket.close", socket.close)
|
||||
}
|
||||
|
|
|
@ -1,47 +1,15 @@
|
|||
package org.aprsdroid.app
|
||||
|
||||
import _root_.android.content.Context
|
||||
import _root_.android.location.{GpsStatus, LocationManager}
|
||||
import _root_.android.util.Log
|
||||
|
||||
import _root_.java.io.{InputStream, OutputStream, OutputStreamWriter, PrintWriter}
|
||||
import _root_.java.io.{InputStream, OutputStream}
|
||||
|
||||
class KenwoodTnc(service : AprsService, prefs : PrefsWrapper) extends BluetoothTnc(service, prefs) {
|
||||
override val TAG = "APRSdroid.KenwoodTnc"
|
||||
|
||||
val locMan = service.getSystemService(Context.LOCATION_SERVICE).asInstanceOf[LocationManager]
|
||||
var output : OutputStreamWriter = null
|
||||
|
||||
var listener : NmeaListener = null
|
||||
if (android.os.Build.VERSION.SDK_INT >= 5) {
|
||||
listener = new NmeaListener()
|
||||
locMan.addNmeaListener(listener)
|
||||
}
|
||||
|
||||
override def createTncProto(is : InputStream, os : OutputStream) = {
|
||||
output = new OutputStreamWriter(os)
|
||||
new KenwoodProto(is)
|
||||
new KenwoodProto(service, is, os)
|
||||
}
|
||||
|
||||
class NmeaListener extends GpsStatus.NmeaListener() {
|
||||
def onNmeaReceived(timestamp : Long, nmea : String) {
|
||||
if (output != null && (nmea.startsWith("$GPGGA") || nmea.startsWith("$GPRMC"))) {
|
||||
Log.d(TAG, "NMEA >>> " + nmea)
|
||||
try {
|
||||
output.write(nmea)
|
||||
} catch {
|
||||
case e : Exception =>
|
||||
Log.e(TAG, "error sending NMEA to Kenwood: " + e)
|
||||
e.printStackTrace()
|
||||
}
|
||||
} else
|
||||
Log.d(TAG, "NMEA --- " + nmea)
|
||||
}}
|
||||
|
||||
override def stop() {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 5)
|
||||
locMan.removeNmeaListener(listener)
|
||||
super.stop()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -4,9 +4,8 @@ import _root_.java.io.{InputStream, OutputStream}
|
|||
|
||||
class TcpTnc(service : AprsService, prefs : PrefsWrapper) extends TcpUploader(service, prefs) {
|
||||
override val TAG = "APRSdroid.TcpTnc"
|
||||
val digipath = prefs.getString("digi_path", "WIDE1-1")
|
||||
|
||||
override def createTncProto(is : InputStream, os : OutputStream) : TncProto =
|
||||
new KissProto(is, os, digipath)
|
||||
new KissProto(is, os)
|
||||
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package org.aprsdroid.app
|
|||
|
||||
import _root_.android.app.Service
|
||||
import _root_.android.content.Context
|
||||
import _root_.android.location.{Location, LocationManager}
|
||||
import _root_.android.util.Log
|
||||
import _root_.android.widget.Toast
|
||||
import _root_.java.io.{BufferedReader, File, InputStream, InputStreamReader, OutputStream, OutputStreamWriter, PrintWriter}
|
||||
|
@ -27,20 +26,6 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsBacke
|
|||
false
|
||||
}
|
||||
|
||||
def setupFilter() : String = {
|
||||
val filterdist = prefs.getStringInt("tcp.filterdist", 50)
|
||||
val userfilter = prefs.getString("tcp.filter", "")
|
||||
val lastloc = try {
|
||||
val locMan = service.getSystemService(Context.LOCATION_SERVICE).asInstanceOf[LocationManager]
|
||||
AprsPacket.formatRangeFilter(
|
||||
locMan.getLastKnownLocation(PeriodicGPS.bestProvider(locMan)), filterdist)
|
||||
} catch {
|
||||
case e : IllegalArgumentException => ""
|
||||
}
|
||||
if (filterdist == 0) return " filter %s %s".format(userfilter, lastloc)
|
||||
else return " filter m/%d %s %s".format(filterdist, userfilter, lastloc)
|
||||
}
|
||||
|
||||
def createConnection() {
|
||||
Log.d(TAG, "TcpUploader.createConnection: " + hostport)
|
||||
conn = new TcpSocketThread(hostport)
|
||||
|
@ -48,8 +33,7 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsBacke
|
|||
}
|
||||
|
||||
def createTncProto(is : InputStream, os : OutputStream) : TncProto = {
|
||||
Log.d(TAG, login + setupFilter())
|
||||
new AprsIsProto(is, os, login + setupFilter())
|
||||
new AprsIsProto(service, is, os)
|
||||
}
|
||||
|
||||
def update(packet : APRSPacket) : String = {
|
||||
|
@ -210,6 +194,8 @@ class TcpUploader(service : AprsService, prefs : PrefsWrapper) extends AprsBacke
|
|||
|
||||
def shutdown() {
|
||||
Log.d(TAG, "shutdown()")
|
||||
if (tnc != null)
|
||||
tnc.stop()
|
||||
this.synchronized {
|
||||
catchLog("shutdownInput", socket.shutdownInput)
|
||||
catchLog("shutdownOutput", socket.shutdownOutput)
|
||||
|
|
|
@ -23,8 +23,6 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr
|
|||
val ACTION_USB_ATTACHED = "android.hardware.usb.action.USB_DEVICE_ATTACHED"
|
||||
val ACTION_USB_DETACHED = "android.hardware.usb.action.USB_DEVICE_DETACHED"
|
||||
|
||||
var digipath = prefs.getString("digi_path", "WIDE1-1")
|
||||
|
||||
val usbManager = service.getSystemService(Context.USB_SERVICE).asInstanceOf[UsbManager];
|
||||
var thread : UsbThread = null
|
||||
var dev : UsbDevice = null
|
||||
|
@ -79,7 +77,7 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr
|
|||
for ((name, dev) <- dl) {
|
||||
val deviceVID = dev.getVendorId()
|
||||
val devicePID = dev.getProductId()
|
||||
if (UsbSerialDevice.isDeviceSupported(dev)) {
|
||||
if (UsbSerialDevice.isSupported(dev)) {
|
||||
// this is not a USB Hub
|
||||
log("Found USB device %04x:%04x, requesting permissions.".format(deviceVID, devicePID))
|
||||
this.dev = dev
|
||||
|
@ -92,10 +90,6 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr
|
|||
}
|
||||
|
||||
def update(packet : APRSPacket) : String = {
|
||||
// the digipeater setting here is a duplicate just for log purpose
|
||||
packet.setDigipeaters(Digipeater.parseList(digipath, true))
|
||||
Log.d(TAG, "UsbTnc.update: " + packet)
|
||||
//TODO
|
||||
proto.writePacket(packet)
|
||||
"USB OK"
|
||||
}
|
||||
|
@ -156,7 +150,7 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr
|
|||
Thread.sleep(initdelay)
|
||||
}
|
||||
}
|
||||
proto = new KissProto(new SerialInputStream(ser), os, digipath)
|
||||
proto = new KissProto(new SerialInputStream(ser), os)
|
||||
service.postPosterStarted()
|
||||
while (running) {
|
||||
val line = proto.readPacket()
|
||||
|
@ -164,6 +158,7 @@ class UsbTnc(service : AprsService, prefs : PrefsWrapper) extends AprsBackend(pr
|
|||
service.postSubmit(line)
|
||||
}
|
||||
Log.d(TAG, "terminate()")
|
||||
proto.stop()
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -3,12 +3,13 @@ import _root_.java.io.{BufferedReader, InputStream, InputStreamReader, OutputStr
|
|||
|
||||
import _root_.net.ab0oo.aprs.parser._
|
||||
|
||||
class AprsIsProto(is : InputStream, os : OutputStream, login : String) extends TncProto(is, os) {
|
||||
class AprsIsProto(service : AprsService, is : InputStream, os : OutputStream) extends TncProto(is, os) {
|
||||
val loginfilter = service.prefs.getLoginString() + service.prefs.getFilterString(service)
|
||||
|
||||
val reader = new BufferedReader(new InputStreamReader(is), 256)
|
||||
val writer = new PrintWriter(new OutputStreamWriter(os), true)
|
||||
|
||||
writer.println(login)
|
||||
writer.println(loginfilter)
|
||||
|
||||
def readPacket() : String = reader.readLine()
|
||||
def writePacket(p : APRSPacket) = writer.println(p)
|
||||
|
|
|
@ -1,13 +1,26 @@
|
|||
package org.aprsdroid.app
|
||||
|
||||
import _root_.android.content.Context
|
||||
import _root_.android.location.{GpsStatus, LocationManager}
|
||||
import _root_.android.util.Log
|
||||
import _root_.java.io.{BufferedReader, InputStream, InputStreamReader, OutputStream}
|
||||
import _root_.android.os.{Handler, Looper}
|
||||
import _root_.java.io.{BufferedReader, InputStream, InputStreamReader, OutputStream, OutputStreamWriter}
|
||||
|
||||
import _root_.net.ab0oo.aprs.parser._
|
||||
|
||||
class KenwoodProto(is : InputStream) extends TncProto(is, null) {
|
||||
class KenwoodProto(service : AprsService, is : InputStream, os : OutputStream) extends TncProto(is, null) {
|
||||
val TAG = "APRSdroid.KenwoodProto"
|
||||
val br = new BufferedReader(new InputStreamReader(is))
|
||||
val locMan = service.getSystemService(Context.LOCATION_SERVICE).asInstanceOf[LocationManager]
|
||||
val output = new OutputStreamWriter(os)
|
||||
|
||||
var listener : NmeaListener = null
|
||||
if (android.os.Build.VERSION.SDK_INT >= 5) {
|
||||
new Handler(Looper.getMainLooper()).post(new Runnable() { override def run() {
|
||||
listener = new NmeaListener()
|
||||
locMan.addNmeaListener(listener)
|
||||
}})
|
||||
}
|
||||
|
||||
def wpl2aprs(line : String) = {
|
||||
val s = line.split("[,*]") // get and split nmea
|
||||
|
@ -36,5 +49,26 @@ class KenwoodProto(is : InputStream) extends TncProto(is, null) {
|
|||
def writePacket(p : APRSPacket) {
|
||||
// don't do anything. yet.
|
||||
}
|
||||
|
||||
class NmeaListener extends GpsStatus.NmeaListener() {
|
||||
def onNmeaReceived(timestamp : Long, nmea : String) {
|
||||
if (output != null && (nmea.startsWith("$GPGGA") || nmea.startsWith("$GPRMC"))) {
|
||||
Log.d(TAG, "NMEA >>> " + nmea)
|
||||
try {
|
||||
output.write(nmea)
|
||||
} catch {
|
||||
case e : Exception =>
|
||||
Log.e(TAG, "error sending NMEA to Kenwood: " + e)
|
||||
e.printStackTrace()
|
||||
}
|
||||
} else
|
||||
Log.d(TAG, "NMEA --- " + nmea)
|
||||
}}
|
||||
|
||||
override def stop() {
|
||||
if (android.os.Build.VERSION.SDK_INT >= 5)
|
||||
locMan.removeNmeaListener(listener)
|
||||
super.stop()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import _root_.java.io.{InputStream, OutputStream}
|
|||
|
||||
import _root_.net.ab0oo.aprs.parser._
|
||||
|
||||
class KissProto(is : InputStream, os : OutputStream, digipath : String) extends TncProto(is, os) {
|
||||
class KissProto(is : InputStream, os : OutputStream) extends TncProto(is, os) {
|
||||
val TAG = "APRSdroid.KissProto"
|
||||
|
||||
object Kiss {
|
||||
|
@ -63,7 +63,6 @@ class KissProto(is : InputStream, os : OutputStream, digipath : String) extends
|
|||
}
|
||||
|
||||
def writePacket(p : APRSPacket) {
|
||||
p.setDigipeaters(Digipeater.parseList(digipath, true))
|
||||
Log.d(TAG, "writePacket: " + p)
|
||||
os.write(Kiss.FEND)
|
||||
os.write(Kiss.CMD_DATA)
|
||||
|
|
|
@ -6,4 +6,5 @@ import _root_.net.ab0oo.aprs.parser._
|
|||
abstract class TncProto(is : InputStream, os : OutputStream) {
|
||||
def readPacket() : String
|
||||
def writePacket(p : APRSPacket)
|
||||
def stop() {}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue