Set TX tail to avoid RX/TX bouncing during transmit

pull/14/head
sh123 2020-12-10 10:34:54 +02:00
rodzic f4636e0820
commit 9f35d38647
2 zmienionych plików z 25 dodań i 11 usunięć

Wyświetl plik

@ -2,7 +2,6 @@ package com.radio.codec2talkie;
import android.bluetooth.BluetoothSocket;
import android.media.AudioAttributes;
import android.media.AudioDeviceCallback;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.AudioTrack;
@ -42,6 +41,7 @@ public class Codec2Player extends Thread {
private final byte CSMA_PERSISTENCE = (byte)0xff;
private final byte CSMA_SLOT_TIME = (byte)0x00;
private final byte TX_TAIL_10MS_UNITS = (byte)20; // 200ms
private final int RX_BUFFER_SIZE = 8192;
@ -166,7 +166,12 @@ public class Codec2Player extends Thread {
_loopbackBuffer = ByteBuffer.allocateDirect(1024 * _audioEncodedBufferSize);
_kissProcessor = new KissProcessor(_audioEncodedBufferSize, CSMA_PERSISTENCE, CSMA_SLOT_TIME, _kissCallback);
_kissProcessor = new KissProcessor(
_audioEncodedBufferSize,
CSMA_PERSISTENCE,
CSMA_SLOT_TIME,
TX_TAIL_10MS_UNITS,
_kissCallback);
}
private final KissCallback _kissCallback = new KissCallback() {
@ -310,7 +315,7 @@ public class Codec2Player extends Thread {
setPriority(Thread.MAX_PRIORITY);
try {
if (!_isLoopbackMode) {
_kissProcessor.setupCsma();
_kissProcessor.setupTnc();
}
while (true) {
processRecordPlaybackToggle();

Wyświetl plik

@ -15,6 +15,7 @@ public class KissProcessor {
private final byte KISS_CMD_DATA = (byte)0x00;
private final byte KISS_CMD_P = (byte)0x02;
private final byte KISS_CMD_SLOT_TIME = (byte)0x03;
private final byte KISS_CMD_TX_TAIL = (byte)0x04;
private final byte KISS_CMD_NOCMD = (byte)0x80;
private enum KissState {
@ -28,8 +29,10 @@ public class KissProcessor {
private byte _kissCmd = KISS_CMD_NOCMD;
private final int _frameSize;
private final byte _csmaPersistence;
private final byte _csmaSlotTime;
private final byte _tncCsmaPersistence;
private final byte _tncCsmaSlotTime;
private final byte _tncTxTail;
private final byte[] _inputFrameBuffer;
@ -38,23 +41,29 @@ public class KissProcessor {
private int _outputFramePos;
private int _inputFramePos;
public KissProcessor(int frameSize, byte csmaPersistence, byte csmaSlotTime, KissCallback callback) {
public KissProcessor(int frameSize, byte csmaPersistence, byte csmaSlotTime, byte txTail, KissCallback callback) {
_frameSize = frameSize;
_callback = callback;
_inputFrameBuffer = new byte[frameSize];
_csmaPersistence = csmaPersistence;
_csmaSlotTime = csmaSlotTime;
_tncCsmaPersistence = csmaPersistence;
_tncCsmaSlotTime = csmaSlotTime;
_tncTxTail = txTail;
}
public void setupCsma() throws IOException {
public void setupTnc() throws IOException {
_callback.sendByte(KISS_FEND);
_callback.sendByte(KISS_CMD_P);
_callback.sendByte(_csmaPersistence);
_callback.sendByte(_tncCsmaPersistence);
_callback.sendByte(KISS_FEND);
_callback.sendByte(KISS_FEND);
_callback.sendByte(KISS_CMD_SLOT_TIME);
_callback.sendByte(_csmaSlotTime);
_callback.sendByte(_tncCsmaSlotTime);
_callback.sendByte(KISS_FEND);
_callback.sendByte(KISS_FEND);
_callback.sendByte(KISS_CMD_TX_TAIL);
_callback.sendByte(_tncTxTail);
_callback.sendByte(KISS_FEND);
}