kopia lustrzana https://github.com/sh123/codec2_talkie
Set TX tail to avoid RX/TX bouncing during transmit
rodzic
f4636e0820
commit
9f35d38647
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue