kopia lustrzana https://github.com/sh123/codec2_talkie
Aprsis
rodzic
e71a53c5be
commit
252ad5187c
|
@ -11,6 +11,8 @@ import android.util.Log;
|
|||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.radio.codec2talkie.app.AppMessage;
|
||||
import com.radio.codec2talkie.protocol.aprs.AprsData;
|
||||
import com.radio.codec2talkie.protocol.aprs.AprsDataFactory;
|
||||
import com.radio.codec2talkie.protocol.message.TextMessage;
|
||||
import com.radio.codec2talkie.protocol.position.Position;
|
||||
import com.radio.codec2talkie.settings.PreferenceKeys;
|
||||
|
@ -26,6 +28,7 @@ import java.io.OutputStream;
|
|||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.nio.BufferOverflowException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.Timer;
|
||||
|
@ -120,9 +123,14 @@ public class AprsIs implements Protocol, Runnable {
|
|||
if (_isTxGateEnabled) {
|
||||
// TODO, forward APRS-IS data to radio
|
||||
}
|
||||
AprsData aprsData = AprsDataFactory.fromAprsIs(line);
|
||||
if (aprsData != null && aprsData.isValid()) {
|
||||
// TODO, need to extract src, dst, digipath
|
||||
// _parentProtocolCallback.onReceiveData(aprsData.);
|
||||
}
|
||||
_parentProtocolCallback.onReceiveLog(line);
|
||||
}
|
||||
return _childProtocol.receive() || line.length() > 0;
|
||||
return _childProtocol.receive();
|
||||
}
|
||||
|
||||
ProtocolCallback _protocolCallback = new ProtocolCallback() {
|
||||
|
@ -284,7 +292,12 @@ public class AprsIs implements Protocol, Runnable {
|
|||
}
|
||||
if (bytesRead > 0 && buf[0] != '#') {
|
||||
synchronized (_rxQueue) {
|
||||
_rxQueue.put(Arrays.copyOf(buf, bytesRead));
|
||||
try {
|
||||
_rxQueue.put(Arrays.copyOf(buf, bytesRead));
|
||||
} catch (BufferOverflowException e) {
|
||||
e.printStackTrace();
|
||||
_rxQueue.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
// write data
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.radio.codec2talkie.protocol.aprs;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AprsDataFactory {
|
||||
public static AprsData create(AprsDataType aprsDataType) {
|
||||
|
@ -30,4 +31,28 @@ public class AprsDataFactory {
|
|||
aprsData.fromBinary(srcCallsign, dstCallsign, digipath, data);
|
||||
return aprsData;
|
||||
}
|
||||
|
||||
public static AprsData fromAprsIs(String textData) {
|
||||
String[] callsignData = textData.split(">");
|
||||
if (callsignData.length < 2) return null;
|
||||
String srcCallsign = callsignData[0];
|
||||
String[] digipathData = callsignData[1].split(":");
|
||||
if (digipathData.length < 2) return null;
|
||||
String[] path = digipathData[0].split(",");
|
||||
if (path.length == 0) return null;
|
||||
String dstCallsign = path[0];
|
||||
String data = digipathData[1];
|
||||
String[] filteredPath = new String[path.length - 1];
|
||||
System.arraycopy(path, 1, filteredPath, 0, path.length - 1);
|
||||
StringBuilder digipath = new StringBuilder();
|
||||
String sep = "";
|
||||
for (String p : filteredPath) {
|
||||
if (p.startsWith("WIDE")) {
|
||||
digipath.append(sep);
|
||||
digipath.append(p);
|
||||
sep = ",";
|
||||
}
|
||||
}
|
||||
return fromBinary(srcCallsign, dstCallsign, digipath.toString(), data.getBytes());
|
||||
}
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue