190 lines
3.9 KiB
C++
190 lines
3.9 KiB
C++
//======================================================================
|
|
// DSP.h
|
|
//======================================================================
|
|
|
|
#ifndef __DSP_h__
|
|
#define __DSP_h__
|
|
|
|
#include <Audio.h>
|
|
#include <dynamicFilters.h>
|
|
#include "Debug.h"
|
|
|
|
#define MIN_RX_FILTER_LO 0
|
|
#define MAX_RX_FILTER_HI 5000
|
|
#define MIN_RX_FILTER_WIDTH 0
|
|
#define MAX_RX_FILTER_WIDTH 5000
|
|
#define MIN_RX_FILTER_CENTER 0
|
|
#define MAX_RX_FILTER_CENTER 5000
|
|
|
|
#define DSP_MILLIS_PER_UPDATE 100
|
|
|
|
#define RX_RIG_IN_CH 0
|
|
|
|
#define TX_MIC_IN_CH 0
|
|
#define TX_LINE_IN_CH 0
|
|
#define TX_USB_IN_CH 1
|
|
#define TX_NUM_CHANNELS 2
|
|
|
|
#define TX_VOX_USB_THRESH 0.25
|
|
#define TX_VOX_LINE_THRESH 0.25
|
|
#define TX_VOX_DELAY 500
|
|
|
|
struct DSPState {
|
|
|
|
// RX audio output settings
|
|
|
|
// RX filter settings
|
|
int rxFilterLo = 300;
|
|
int rxFilterHi = 3000;
|
|
|
|
// TX audio input settings
|
|
float txInLvl[4] = {0.5, 0.5, 0.0, 0.0};
|
|
int txInEnable[4] = {1, 1, 0, 0};
|
|
int txInTx[4] = {0, 0, 0, 0};
|
|
|
|
struct {
|
|
bool mute = true;
|
|
float level = 0.1;
|
|
} tx[NUM_TX_AUDIO_CH];
|
|
|
|
struct {
|
|
bool mute = true;
|
|
float level = 1.0;
|
|
} rx[NUM_RX_AUDIO_CH];
|
|
|
|
// VOX settings
|
|
/* struct {
|
|
bool isActive = false;
|
|
bool isUSB = false;
|
|
float usbThresh = TX_VOX_USB_THRESH;
|
|
float lineLevel = TX_VOX_LINE_THRESH;
|
|
unsigned delay = TX_VOX_DELAY;*/
|
|
unsigned voxTimeout[3];
|
|
};
|
|
|
|
enum TRState {
|
|
TRANSMIT,
|
|
RECEIVE
|
|
};
|
|
|
|
enum RxAudioIn {
|
|
RIG_IN = 0,
|
|
NUM_RX_AUDIO_IN
|
|
};
|
|
|
|
enum RxAudioCh {
|
|
RX_AUDIO = 0,
|
|
RX_SPARE1,
|
|
RX_SPARE2,
|
|
RX_SPARE3,
|
|
NUM_RX_AUDIO_CH
|
|
};
|
|
|
|
enum TxAudioIn {
|
|
MIC_IN = 0,
|
|
LINE_IN,
|
|
USB_IN,
|
|
TUNE_IN,
|
|
TWO_TONE_IN,
|
|
NUM_TX_AUDIO_IN
|
|
};
|
|
|
|
enum TxAudioCh {
|
|
TX_LINE = 0,
|
|
TX_USB,
|
|
TX_TONE1,
|
|
TX_TONE2,
|
|
NUM_TX_AUDIO_CH
|
|
};
|
|
|
|
class UBitxDSP {
|
|
public:
|
|
UBitxDSP();
|
|
void begin();
|
|
void update();
|
|
void end();
|
|
void rx();
|
|
inline void tx() { tx(txSrc); }
|
|
void tx(TxAudioIn src);
|
|
|
|
inline void setTxAudioIn(TxAudioIn src) { txSrc = src; }
|
|
TxAudionIn getTxAudioIn() const { return txSrc; }
|
|
|
|
// RX audio output settings
|
|
|
|
// RX filter settings
|
|
void bypassRxFilter();
|
|
void setRxFilter(int lo, int hi);
|
|
void setRxFilterLo(int lo);
|
|
void setRxFilterHi(int hi);
|
|
void setRxFilterWidth(int width);
|
|
void setRxFilterCenter(int center);
|
|
|
|
/*!
|
|
* @brief Get the current low frequency bound of the RX band pass filter.
|
|
* @return The low frequency bound.
|
|
*/
|
|
inline int getRxFilterLo() { return state.rxFilterLo; }
|
|
|
|
/*!
|
|
* @brief Get the current high frequency bound of the RX band pass filter.
|
|
* @return The high frequency bound.
|
|
*/
|
|
inline int getRxFilterHi() { return state.rxFilterHi; }
|
|
|
|
/*!
|
|
* @brief Get the current width of the RX band pass filter.
|
|
* @return The filter width.
|
|
*/
|
|
inline int getRxFilterWidth() { return state.rxFilterHi - state.rxFilterLo; }
|
|
|
|
/*!
|
|
* @brief Get the current center frequency of the RX band pass filter.
|
|
* @return The center frequency.
|
|
*/
|
|
inline int getRxFilterCenter() { return (state.rxFilterHi + state.rxFilterLo) / 2; }
|
|
|
|
// TX audio input settings
|
|
void setTxInputLevel(int ch, float lvl);
|
|
void enableTxInput(int ch);
|
|
void disableTxInput(int ch);
|
|
void startTxInput(int ch);
|
|
void stopTxInput(int ch);
|
|
|
|
// VOX settings
|
|
inline void setDataVoxOn() { state.vox.isActive = true; }
|
|
inline void setDataVoxOff() { state.vox.isActive = false; }
|
|
inline void setDataVoxThreshold(float val) {
|
|
|
|
}
|
|
inline void setDataVoxThreshold(float val, bool isUSB) {
|
|
if (isUSB) {
|
|
state.vox.usbThresh = val;
|
|
} else {
|
|
state.vox.lineThresh = val;
|
|
}
|
|
}
|
|
|
|
private:
|
|
|
|
bool isTx = false;
|
|
|
|
void updateRxFilter();
|
|
|
|
DSPState state;
|
|
short coefficients[NUM_COEFFICIENTS];
|
|
elapsedMillis sinceLastUpdate;
|
|
|
|
TxAudioIn txSrc;
|
|
|
|
unsigned voxTimeout;
|
|
};
|
|
|
|
extern UBitxDSP DSP;
|
|
|
|
#endif
|
|
|
|
//======================================================================
|
|
// EOF
|
|
//======================================================================
|