kopia lustrzana https://github.com/sh123/codec2_talkie
Simplify protocol interface
rodzic
2f949aa501
commit
cc83f5add8
|
@ -21,7 +21,6 @@ import java.io.IOException;
|
|||
import java.util.Timer;
|
||||
import java.util.TimerTask;
|
||||
|
||||
import com.radio.codec2talkie.R;
|
||||
import com.radio.codec2talkie.protocol.aprs.tools.AprsIsData;
|
||||
import com.radio.codec2talkie.protocol.message.TextMessage;
|
||||
import com.radio.codec2talkie.storage.log.LogItem;
|
||||
|
@ -55,8 +54,6 @@ public class AppWorker extends Thread {
|
|||
private final Protocol _protocol;
|
||||
private final Transport _transport;
|
||||
|
||||
private final int _codec2Mode;
|
||||
|
||||
// input data, bt -> audio
|
||||
private AudioTrack _systemAudioPlayer;
|
||||
|
||||
|
@ -88,9 +85,6 @@ public class AppWorker extends Thread {
|
|||
_context = context;
|
||||
_sharedPreferences = PreferenceManager.getDefaultSharedPreferences(_context);
|
||||
|
||||
String codec2ModeName = _sharedPreferences.getString(PreferenceKeys.CODEC2_MODE, _context.getResources().getStringArray(R.array.codec2_modes)[0]);
|
||||
_codec2Mode = AudioTools.extractCodec2ModeId(codec2ModeName);
|
||||
|
||||
_logItemRepository = new LogItemRepository((Application)context);
|
||||
_messageItemRepository = new MessageItemRepository((Application)context);
|
||||
_positionItemRepository = new PositionItemRepository((Application)context);
|
||||
|
@ -260,7 +254,7 @@ public class AppWorker extends Thread {
|
|||
|
||||
private void recordAndSendAudioFrame() throws IOException {
|
||||
_systemAudioRecorder.read(_recordAudioBuffer, 0, _recordAudioBuffer.length);
|
||||
_protocol.sendPcmAudio(null, null, _codec2Mode, _recordAudioBuffer);
|
||||
_protocol.sendPcmAudio(null, null, _recordAudioBuffer);
|
||||
}
|
||||
|
||||
private final ProtocolCallback _protocolCallback = new ProtocolCallback() {
|
||||
|
@ -279,7 +273,7 @@ public class AppWorker extends Thread {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
String note = (src == null ? "UNK" : src) + "→" + (dst == null ? "UNK" : dst);
|
||||
sendStatusUpdate(AppMessage.EV_VOICE_RECEIVED, note);
|
||||
sendRxAudioLevelUpdate(pcmFrame);
|
||||
|
@ -290,7 +284,7 @@ public class AppWorker extends Thread {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrame) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrame) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -330,14 +324,14 @@ public class AppWorker extends Thread {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
String note = (src == null ? "UNK" : src) + "→" + (dst == null ? "UNK" : dst);
|
||||
sendStatusUpdate(AppMessage.EV_TRANSMITTED_VOICE, note);
|
||||
sendTxAudioLevelUpdate(frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
|
|
@ -80,8 +80,8 @@ public class Aprs implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -101,11 +101,11 @@ public class Aprs implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec2Mode, short[] pcmFrame) throws IOException {
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
if (_isVoax25Enabled) {
|
||||
_childProtocol.sendPcmAudio(src == null ? _srcCallsign : src, dst == null ? _dstCallsign : dst, codec2Mode, pcmFrame);
|
||||
_childProtocol.sendPcmAudio(src == null ? _srcCallsign : src, dst == null ? _dstCallsign : dst, pcmFrame);
|
||||
} else {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec2Mode, pcmFrame);
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -126,14 +126,14 @@ public class Aprs implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
String dstCallsign = new AprsCallsign(dst).isSoftware() ? "*" : dst;
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dstCallsign, codec, pcmFrame);
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dstCallsign, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrame) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrame);
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrame) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -177,14 +177,14 @@ public class Aprs implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
String dstCallsign = new AprsCallsign(dst).isSoftware() ? "*" : dst;
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dstCallsign, codec, frame);
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dstCallsign, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -40,7 +40,6 @@ public class AprsIs implements Protocol, Runnable {
|
|||
private static final String TAG = AprsIs.class.getSimpleName();
|
||||
|
||||
private static final int APRSIS_RETRY_WAIT_MS = 10000;
|
||||
private static final int APRSIS_DEFAULT_PORT = 14580;
|
||||
|
||||
private static final int HEARD_LIST_DURATION_SECONDS = 60;
|
||||
|
||||
|
@ -110,8 +109,8 @@ public class AprsIs implements Protocol, Runnable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -120,8 +119,8 @@ public class AprsIs implements Protocol, Runnable {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec2Mode, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec2Mode, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -179,13 +178,13 @@ public class AprsIs implements Protocol, Runnable {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrame) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrame);
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrame) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -229,13 +228,13 @@ public class AprsIs implements Protocol, Runnable {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -48,8 +48,8 @@ public class AudioCodec2 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -58,8 +58,8 @@ public class AudioCodec2 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec2Mode, short[] pcmFrame) throws IOException {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec2Mode, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, pcmFrame);
|
||||
|
||||
Codec2.encode(_codec2Con, pcmFrame, _recordAudioEncodedBuffer);
|
||||
|
||||
|
@ -68,7 +68,7 @@ public class AudioCodec2 implements Protocol {
|
|||
for (int i = 0; i < _recordAudioEncodedBuffer.length; i++) {
|
||||
frame[i] = (byte)_recordAudioEncodedBuffer[i];
|
||||
}
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -88,14 +88,14 @@ public class AudioCodec2 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrame) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrame) {
|
||||
Codec2.decode(_codec2Con, _playbackAudioBuffer, audioFrame);
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec2Mode, _playbackAudioBuffer);
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, _playbackAudioBuffer);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -124,13 +124,13 @@ public class AudioCodec2 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -31,7 +31,6 @@ public class AudioFrameAggregator implements Protocol {
|
|||
|
||||
private String _lastSrc;
|
||||
private String _lastDst;
|
||||
private int _lastCodec2Mode;
|
||||
|
||||
private final SharedPreferences _sharedPreferences;
|
||||
private ProtocolCallback _parentProtocolCallback;
|
||||
|
@ -68,14 +67,13 @@ public class AudioFrameAggregator implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
if ( _outputBufferPos + frame.length >= _outputBufferSize) {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, Arrays.copyOf(_outputBuffer, _outputBufferPos));
|
||||
_childProtocol.sendCompressedAudio(src, dst, Arrays.copyOf(_outputBuffer, _outputBufferPos));
|
||||
_outputBufferPos = 0;
|
||||
}
|
||||
_lastSrc = src;
|
||||
_lastDst = dst;
|
||||
_lastCodec2Mode = codec2Mode;
|
||||
System.arraycopy(frame, 0, _outputBuffer, _outputBufferPos, frame.length);
|
||||
_outputBufferPos += frame.length;
|
||||
}
|
||||
|
@ -86,8 +84,8 @@ public class AudioFrameAggregator implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -107,12 +105,12 @@ public class AudioFrameAggregator implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrames) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrames) {
|
||||
if (audioFrames.length % _codec2FrameSize != 0) {
|
||||
Log.e(TAG, "Ignoring audio frame of wrong size: " + audioFrames.length);
|
||||
_parentProtocolCallback.onProtocolRxError();
|
||||
|
@ -123,7 +121,7 @@ public class AudioFrameAggregator implements Protocol {
|
|||
for (int j = 0; j < _codec2FrameSize && (j + i) < audioFrames.length; j++) {
|
||||
audioFrame[j] = audioFrames[i + j];
|
||||
}
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrame);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -154,13 +152,13 @@ public class AudioFrameAggregator implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -202,7 +200,7 @@ public class AudioFrameAggregator implements Protocol {
|
|||
@Override
|
||||
public void flush() throws IOException {
|
||||
if (_outputBufferPos > 0) {
|
||||
_childProtocol.sendCompressedAudio(_lastSrc, _lastDst, _lastCodec2Mode, Arrays.copyOf(_outputBuffer, _outputBufferPos));
|
||||
_childProtocol.sendCompressedAudio(_lastSrc, _lastDst, Arrays.copyOf(_outputBuffer, _outputBufferPos));
|
||||
_outputBufferPos = 0;
|
||||
}
|
||||
_childProtocol.flush();
|
||||
|
|
|
@ -15,8 +15,6 @@ import com.radio.codec2talkie.settings.SettingsWrapper;
|
|||
import com.radio.codec2talkie.transport.Transport;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class Ax25 implements Protocol {
|
||||
|
||||
|
@ -57,13 +55,12 @@ public class Ax25 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
if (_isVoax25Enabled) {
|
||||
AX25Packet ax25Packet = new AX25Packet();
|
||||
ax25Packet.src = src;
|
||||
ax25Packet.dst = dst;
|
||||
ax25Packet.digipath = _digipath;
|
||||
ax25Packet.codec2Mode = codec2Mode;
|
||||
ax25Packet.isAudio = true;
|
||||
ax25Packet.rawData = frame;
|
||||
byte[] ax25Frame = ax25Packet.toBinary();
|
||||
|
@ -71,10 +68,10 @@ public class Ax25 implements Protocol {
|
|||
Log.e(TAG, "Cannot convert AX.25 voice packet to binary");
|
||||
_parentProtocolCallback.onProtocolTxError();
|
||||
} else {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, ax25Frame);
|
||||
_childProtocol.sendCompressedAudio(src, dst, ax25Frame);
|
||||
}
|
||||
} else {
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,8 +81,8 @@ public class Ax25 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -119,17 +116,17 @@ public class Ax25 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrames) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrames) {
|
||||
AX25Packet ax25Data = new AX25Packet();
|
||||
ax25Data.fromBinary(audioFrames);
|
||||
if (ax25Data.isValid) {
|
||||
if (ax25Data.isAudio) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(ax25Data.src, ax25Data.dst, ax25Data.codec2Mode, ax25Data.rawData);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(ax25Data.src, ax25Data.dst, ax25Data.rawData);
|
||||
} else {
|
||||
_parentProtocolCallback.onReceiveLog(ax25Data.toString());
|
||||
_parentProtocolCallback.onReceiveData(ax25Data.src, ax25Data.dst, ax25Data.digipath, ax25Data.rawData);
|
||||
|
@ -137,7 +134,7 @@ public class Ax25 implements Protocol {
|
|||
}
|
||||
} else {
|
||||
// fallback to raw audio if ax25 frame is invalid
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrames);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrames);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,13 +164,13 @@ public class Ax25 implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -73,15 +73,15 @@ public class Freedv implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
Codec2.freedvTx(_freedv, _modemTxBuffer, pcmFrame);
|
||||
//Log.i(TAG, "send pcm " + _modemTxBuffer.length);
|
||||
_transport.write(_modemTxBuffer);
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, pcmFrame);
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
Log.w(TAG, "sendCompressedAudio() is not supported");
|
||||
}
|
||||
|
||||
|
@ -140,7 +140,7 @@ public class Freedv implements Protocol {
|
|||
long cntRead = Codec2.freedvRx(_freedv, _speechRxBuffer, samplesSpeech);
|
||||
if (cntRead > 0) {
|
||||
//Log.i(TAG, "receive " + cntRead);
|
||||
_parentProtocolCallback.onReceivePcmAudio(null, null, -1, Arrays.copyOf(_speechRxBuffer, (int) cntRead));
|
||||
_parentProtocolCallback.onReceivePcmAudio(null, null, Arrays.copyOf(_speechRxBuffer, (int) cntRead));
|
||||
float snr = Codec2.freedvGetModemStat(_freedv);
|
||||
_parentProtocolCallback.onReceiveSignalLevel((short) 0, (short)(100 * snr));
|
||||
isRead = true;
|
||||
|
@ -161,8 +161,8 @@ public class Freedv implements Protocol {
|
|||
int pktLen = (((int)_dataBuffer[0] & 0xff) << 8) | ((int)_dataBuffer[1] & 0xff);
|
||||
byte [] pkt = new byte[pktLen];
|
||||
System.arraycopy(_dataBuffer, 2, pkt, 0, pktLen);
|
||||
// TODO, refactor, use onReceiveData
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, pkt);
|
||||
// NOTE, default data is compressed audio, upper layer should distinguish
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, pkt);
|
||||
float snr = Codec2.freedvGetModemStat(_freedvData);
|
||||
_parentProtocolCallback.onReceiveSignalLevel((short) 0, (short)(100 * snr));
|
||||
isRead = true;
|
||||
|
|
|
@ -55,12 +55,12 @@ public class Hdlc implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
Log.w(TAG, "sendPcmAudio() is not supported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
_transport.write(hdlcEncode(frame));
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,8 @@ public class Hdlc implements Protocol {
|
|||
if (calculatedCrc == packetCrc) {
|
||||
//Log.v(TAG, DebugTools.byteBitsToString(packetBits));
|
||||
//Log.i(TAG, "RX: " + DebugTools.bytesToHex(packetBytes));
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, contentBytes);
|
||||
// NOTE, default data is compressed audio, upper layer should distinguish
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, contentBytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ import com.radio.codec2talkie.protocol.message.TextMessage;
|
|||
import com.radio.codec2talkie.protocol.position.Position;
|
||||
import com.radio.codec2talkie.settings.PreferenceKeys;
|
||||
import com.radio.codec2talkie.settings.SettingsWrapper;
|
||||
import com.radio.codec2talkie.tools.DebugTools;
|
||||
import com.radio.codec2talkie.transport.Transport;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -220,7 +219,7 @@ public class Kiss implements Protocol {
|
|||
};
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
// NOTE, KISS does not distinguish between audio and data packet, upper layer should decide
|
||||
send(KISS_CMD_DATA, frame);
|
||||
}
|
||||
|
@ -231,7 +230,7 @@ public class Kiss implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
Log.w(TAG, "sendPcmAudio() is not supported");
|
||||
}
|
||||
|
||||
|
@ -316,9 +315,8 @@ public class Kiss implements Protocol {
|
|||
break;
|
||||
case KISS_FEND:
|
||||
if (_kissDataType == DataType.RAW) {
|
||||
// NOTE, KISS does not distinguish between audio and data packets, upper layer should decide
|
||||
// TODO, refactor, use onReceiveData
|
||||
protocolCallback.onReceiveCompressedAudio(null, null, -1, Arrays.copyOf(_frameOutputBuffer, _frameOutputBufferPos));
|
||||
// NOTE, default data is compressed audio, KISS does not distinguish between audio and data packets, upper layer should decide
|
||||
protocolCallback.onReceiveCompressedAudio(null, null, Arrays.copyOf(_frameOutputBuffer, _frameOutputBufferPos));
|
||||
} else if (_kissDataType == DataType.SIGNAL_REPORT && _isExtendedMode) {
|
||||
byte[] signalLevelRaw = Arrays.copyOf(_kissCmdBuffer, _kissCmdBufferPos);
|
||||
ByteBuffer data = ByteBuffer.wrap(signalLevelRaw);
|
||||
|
|
|
@ -13,8 +13,8 @@ public interface Protocol {
|
|||
void initialize(Transport transport, Context context, ProtocolCallback protocolCallback) throws IOException;
|
||||
// audio
|
||||
int getPcmAudioRecordBufferSize();
|
||||
void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException;
|
||||
void sendCompressedAudio(String src, String dst, int codec, byte[] frame) throws IOException;
|
||||
void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException;
|
||||
void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException;
|
||||
// messaging
|
||||
void sendTextMessage(TextMessage textMessage) throws IOException;
|
||||
// data
|
||||
|
|
|
@ -6,8 +6,8 @@ import com.radio.codec2talkie.protocol.position.Position;
|
|||
public abstract class ProtocolCallback {
|
||||
// receive
|
||||
abstract protected void onReceivePosition(Position position);
|
||||
abstract protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame);
|
||||
abstract protected void onReceiveCompressedAudio(String src, String dst, int codec, byte[] frame);
|
||||
abstract protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame);
|
||||
abstract protected void onReceiveCompressedAudio(String src, String dst, byte[] frame);
|
||||
abstract protected void onReceiveTextMessage(TextMessage textMessage);
|
||||
abstract protected void onReceiveData(String src, String dst, String path, byte[] data);
|
||||
abstract protected void onReceiveSignalLevel(short rssi, short snr);
|
||||
|
@ -15,8 +15,8 @@ public abstract class ProtocolCallback {
|
|||
abstract protected void onReceiveLog(String logData);
|
||||
|
||||
// transmit
|
||||
abstract protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame);
|
||||
abstract protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame);
|
||||
abstract protected void onTransmitPcmAudio(String src, String dst, short[] frame);
|
||||
abstract protected void onTransmitCompressedAudio(String src, String dst, byte[] frame);
|
||||
abstract protected void onTransmitTextMessage(TextMessage textMessage);
|
||||
abstract protected void onTransmitPosition(Position position);
|
||||
abstract protected void onTransmitData(String src, String dst, String path, byte[] data);
|
||||
|
|
|
@ -37,7 +37,7 @@ public class Raw implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
_transport.write(Arrays.copyOf(frame, frame.length));
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ public class Raw implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
Log.w(TAG, "sendPcmAudio() is not supported");
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ public class Raw implements Protocol {
|
|||
public boolean receive() throws IOException {
|
||||
int bytesRead = _transport.read(_rxDataBuffer);
|
||||
if (bytesRead > 0) {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, -1, Arrays.copyOf(_rxDataBuffer, bytesRead));
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(null, null, Arrays.copyOf(_rxDataBuffer, bytesRead));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -67,10 +67,10 @@ public class Recorder implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] frame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] frame) throws IOException {
|
||||
rotateIfNewSrcOrDstCallsign(src, dst);
|
||||
writeToFile(src, dst, codec2Mode, frame);
|
||||
_childProtocol.sendCompressedAudio(src, dst, codec2Mode, frame);
|
||||
writeToFile(src, dst, frame);
|
||||
_childProtocol.sendCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -79,8 +79,8 @@ public class Recorder implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -100,15 +100,15 @@ public class Recorder implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrames) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] audioFrames) {
|
||||
rotateIfNewSrcOrDstCallsign(src, dst);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrames);
|
||||
writeToFile(src, dst, codec2Mode, audioFrames);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrames);
|
||||
writeToFile(src, dst, audioFrames);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -137,13 +137,13 @@ public class Recorder implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -192,9 +192,9 @@ public class Recorder implements Protocol {
|
|||
_childProtocol.close();
|
||||
}
|
||||
|
||||
private void writeToFile(String src, String dst, int codec2Mode, byte[] rawData) {
|
||||
private void writeToFile(String src, String dst, byte[] rawData) {
|
||||
stopRotationTimer();
|
||||
createStreamIfNotExists(src, dst, codec2Mode);
|
||||
createStreamIfNotExists(src, dst);
|
||||
writeToStream(rawData);
|
||||
startRotationTimer();
|
||||
}
|
||||
|
@ -209,7 +209,7 @@ public class Recorder implements Protocol {
|
|||
}
|
||||
}
|
||||
|
||||
private void createStreamIfNotExists(String src, String dst, int codec2Mode) {
|
||||
private void createStreamIfNotExists(String src, String dst) {
|
||||
if (_activeStream == null) {
|
||||
try {
|
||||
Date date = new Date();
|
||||
|
@ -217,7 +217,7 @@ public class Recorder implements Protocol {
|
|||
if (!newDirectory.exists() && !newDirectory.mkdirs()) {
|
||||
Log.e(TAG, "Failed to create directory for voicemails");
|
||||
}
|
||||
File newAudioFile = new File(newDirectory, getNewFileName(date, src, dst, codec2Mode));
|
||||
File newAudioFile = new File(newDirectory, getNewFileName(date, src, dst));
|
||||
_activeStream = new FileOutputStream(newAudioFile);
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
|
@ -230,13 +230,9 @@ public class Recorder implements Protocol {
|
|||
return df.format(date);
|
||||
}
|
||||
|
||||
private String getNewFileName(Date date, String src, String dst, int codec2Mode) {
|
||||
int mode = codec2Mode;
|
||||
if (mode == -1) {
|
||||
mode = _codec2ModeId;
|
||||
}
|
||||
private String getNewFileName(Date date, String src, String dst) {
|
||||
SimpleDateFormat tf = new SimpleDateFormat("HHmmss", Locale.ENGLISH);
|
||||
String codec2mode = String.format(Locale.ENGLISH, "%02d", mode);
|
||||
String codec2mode = String.format(Locale.ENGLISH, "%02d", _codec2ModeId);
|
||||
String fileName = codec2mode + "_" + tf.format(date);
|
||||
if (src != null && dst != null) {
|
||||
fileName += "_" + src + "_" + dst;
|
||||
|
|
|
@ -51,7 +51,7 @@ public class Scrambler implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendCompressedAudio(String src, String dst, int codec2Mode, byte[] audioFrame) throws IOException {
|
||||
public void sendCompressedAudio(String src, String dst, byte[] audioFrame) throws IOException {
|
||||
byte[] result = scramble(audioFrame);
|
||||
if (result == null) {
|
||||
_parentProtocolCallback.onProtocolTxError();
|
||||
|
@ -66,8 +66,8 @@ public class Scrambler implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void sendPcmAudio(String src, String dst, int codec, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, codec, pcmFrame);
|
||||
public void sendPcmAudio(String src, String dst, short[] pcmFrame) throws IOException {
|
||||
_childProtocol.sendPcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -92,18 +92,18 @@ public class Scrambler implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onReceivePcmAudio(String src, String dst, int codec, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, codec, pcmFrame);
|
||||
protected void onReceivePcmAudio(String src, String dst, short[] pcmFrame) {
|
||||
_parentProtocolCallback.onReceivePcmAudio(src, dst, pcmFrame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onReceiveCompressedAudio(String src, String dst, int codec2Mode, byte[] scrambledFrame) {
|
||||
protected void onReceiveCompressedAudio(String src, String dst, byte[] scrambledFrame) {
|
||||
|
||||
byte[] audioFrames = unscramble(scrambledFrame);
|
||||
if (audioFrames == null) {
|
||||
_parentProtocolCallback.onProtocolRxError();
|
||||
} else {
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, codec2Mode, audioFrames);
|
||||
_parentProtocolCallback.onReceiveCompressedAudio(src, dst, audioFrames);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,13 +138,13 @@ public class Scrambler implements Protocol {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitPcmAudio(String src, String dst, int codec, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, codec, frame);
|
||||
protected void onTransmitPcmAudio(String src, String dst, short[] frame) {
|
||||
_parentProtocolCallback.onTransmitPcmAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onTransmitCompressedAudio(String src, String dst, int codec, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, codec, frame);
|
||||
protected void onTransmitCompressedAudio(String src, String dst, byte[] frame) {
|
||||
_parentProtocolCallback.onTransmitCompressedAudio(src, dst, frame);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,7 +19,6 @@ public class AX25Packet {
|
|||
public String src;
|
||||
public String dst;
|
||||
public String digipath;
|
||||
public int codec2Mode;
|
||||
public boolean isAudio;
|
||||
public byte[] rawData;
|
||||
public boolean isValid;
|
||||
|
@ -84,7 +83,6 @@ public class AX25Packet {
|
|||
byte ax25Pid = buffer.get();
|
||||
if (ax25Pid == AX25PID_AUDIO) {
|
||||
isAudio = true;
|
||||
codec2Mode = buffer.get();
|
||||
} else if (ax25Pid == AX25PID_NO_LAYER3) {
|
||||
isAudio = false;
|
||||
} else {
|
||||
|
@ -143,7 +141,6 @@ public class AX25Packet {
|
|||
buffer.put(AX25CTRL_UI);
|
||||
if (isAudio) {
|
||||
buffer.put(AX25PID_AUDIO);
|
||||
buffer.put((byte)codec2Mode);
|
||||
} else {
|
||||
buffer.put(AX25PID_NO_LAYER3);
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue