ubitx-iop/ubitx_iop/rig.h
Rob French 519a208508 Fixes to get it running, working for the most part (currently using DGU
mode on 40 meter FT8, so it can't be all bad).  Filters added, although
not currently selectable (til I get the rotary encoder added).
2020-05-27 22:45:37 -05:00

288 lines
7.3 KiB
C++

//======================================================================
// rig.h
//======================================================================
#ifndef __rig_h__
#define __rig_h__
#include <iopcomm.h>
#include "audio.h"
#include "RigMode.h"
//======================================================================
// Rig class
//======================================================================
class Rig {
public:
//--------------------------------------------------------------------
// Constructor/destructor.
//--------------------------------------------------------------------
Rig(RigConfig& c, RigAudio& a): _config(c), _audio(a)
{
_modes = new IMode*[c.numModes];
_modesLen = c.numModes;
_modesIndex = c.startMode;
/* _modes[RIG_MODE_LSB] = new SSBMode(c.lsb, a);
_modes[RIG_MODE_USB] = new SSBMode(c.usb, a);
_modes[RIG_MODE_CWL] = new CWMode(c.cwl, a);
_modes[RIG_MODE_CWU] = new CWMode(c.cwu, a);
_modes[RIG_MODE_DGL] = new DGTMode(c.dgl, a);
_modes[RIG_MODE_DGU] = new DGTMode(c.dgu, a);
_modes[RIG_MODE_TTL] = new TTMode(c.ttl, a);
_modes[RIG_MODE_TTU] = new TTMode(c.ttu, a);*/
/*
_rxFilters = new (IFilter*)[NUM_RX_FILTERS];
_rxFiltersLen = NUM_RX_FILTERS;
_rxFiltersIndex = 0; // need to get default filter from current mode...
_rxFilters[RX_FILTER_WIDE] = mode()->filterWide();
_rxFilters[RX_FILTER_MEDIUM] = mode()->filterMedium();
_rxFilters[RX_FILTER_NARROW] = mode()->filterNarrow();
*/
}
~Rig()
{
for (unsigned i = 0; i < _modesLen; i++) {
delete _modes[i];
}
delete _modes;
}
//--------------------------------------------------------------------
// Mode control.
//--------------------------------------------------------------------
inline bool isSSBMode() const { return (_modesIndex == RIG_MODE_USB || _modesIndex == RIG_MODE_LSB); }
inline bool isUSBMode() const { return (_modesIndex == RIG_MODE_USB); }
inline bool isLSBMode() const { return (_modesIndex == RIG_MODE_LSB); }
inline bool isDGTMode() const { return (_modesIndex == RIG_MODE_DGU || _modesIndex == RIG_MODE_DGL); }
inline bool isDGUMode() const { return (_modesIndex == RIG_MODE_DGU); }
inline bool isDGLMode() const { return (_modesIndex == RIG_MODE_DGL); }
inline bool isCWMode() const { return (_modesIndex == RIG_MODE_CWU || _modesIndex == RIG_MODE_CWL); }
inline bool isCWUMode() const { return (_modesIndex == RIG_MODE_CWU); }
inline bool isCWLMode() const { return (_modesIndex == RIG_MODE_CWL); }
inline bool isTTMode() const { return (_modesIndex == RIG_MODE_TTU || _modesIndex == RIG_MODE_TTL); }
inline bool isTTUMode() const { return (_modesIndex == RIG_MODE_TTU); }
inline bool isTTLMode() const { return (_modesIndex == RIG_MODE_TTL); }
// Assign a pointer to a mode object. Returns true if successful, false otherwise.
bool addNewMode(RigMode i, IMode* mode) {
if (i > _modesLen) {
return false;
} else {
_modes[i] = mode;
return true;
}
}
// Returns a pointer to the current mode.
inline IMode* mode() const {
return _modes[_modesIndex];
}
// Returns the array index of the current mode.
inline RigMode modeNum() const {
return _modesIndex;
}
/* // Returns a pointer to the specified mode.
inline IMode* mode(RigMode m) const {
return _modes[m];
}*/
// Switch to the mode specified by the provided index. Returns a
// pointer to the new mode.
IMode* switchMode(RigMode i) {
// exit the previous mode
mode()->exit(); // NOTE: This could currently occur during TX, which is NOT desirable.
// select the new mode
_modesIndex = RigMode(i % _modesLen);
//enter the new mode
mode()->enter();
// return a pointer to the new mode
return mode();
}
// Advance to the next (or previous) mode. Returns a pointer to the
// new mode.
IMode* switchMode(bool prev=false) {
// exit the previous mode
mode()->exit();
// select the new mode
if (prev) {
_modesIndex = RigMode((_modesIndex > 0 ? _modesIndex - 1 : _modesLen - 1));
} else {
_modesIndex = RigMode((_modesIndex + 1) % _modesLen);
}
// enter the new mode
mode()->enter();
// return a pointer to the new mode
return mode();
}
//--------------------------------------------------------------------
// Transmit/Receive (T/R) control.
//--------------------------------------------------------------------
inline bool isTx() const { return mode()->isTx(); }
inline bool isRx() const { return mode()->isRx(); }
// Enter the transmit state. This is delegated to the mode.
inline void tx() { mode()->tx(); }
// Enter the receive state. This is delegated to the mode.
inline void rx() { mode()->rx(); }
//--------------------------------------------------------------------
// Transmit processor control.
//--------------------------------------------------------------------
void switchProcessor(bool prev=false) {
}
//--------------------------------------------------------------------
// RX filter control.
//--------------------------------------------------------------------
inline void setWideRxFilter() {
mode()->setWideRxFilter();
}
inline void setMediumRxFilter() {
mode()->setMediumRxFilter();
}
inline void setNarrowRxFilter() {
mode()->setNarrowRxFilter();
}
/*
// Returns a pointer to the current RX filter.
IFilter* rxFilter() {
return _rxFilters[_rxFiltersIndex];
}
IFilter* switchRxFilter(bool prev=false) {
if (prev) {
_rxFiltersIndex--;
} else {
_rxFiltersIndex++;
}
_rxFiltersIndex %= _rxFiltersLen;
return _rxFiltersList[_rxFiltersIndex];
}
IFilter* switchRxFilterWide() {
}
IFilter* switchFilterMedium() {
}
IFilter* switchFilterNarrow() {
}
*/
// Audio output control.
inline void muteSpkrOut() const {
_audio.muteSpkrOut();
}
inline void unmuteSpkrOut() const {
_audio.unmuteSpkrOut();
}
inline void muteLineOut() const {
_audio.muteLineOut();
}
inline void unmuteLineOut() const {
_audio.unmuteLineOut();
}
inline void muteUSBOut() const {
_audio.muteUSBOut();
}
inline void unmuteUSBOut() const {
_audio.unmuteUSBOut();
}
// Audio input control.
inline void muteAllTx() const {
_audio.muteAllTx();
}
inline void muteMicIn() const {
_audio.muteMicIn();
}
inline void unmuteMicIn() const {
_audio.unmuteMicIn();
}
inline void muteLineIn() const {
_audio.muteLineIn();
}
inline void unmuteLineIn() const {
_audio.unmuteLineIn();
}
inline void muteUSBIn() const {
_audio.muteUSBIn();
}
inline void unmuteUSBIn() const {
_audio.unmuteUSBOut();
}
inline void muteTTIn() const {
_audio.muteTTIn();
}
inline void unmuteTTIn() const {
_audio.unmuteTTIn();
}
// Update the rig state. This should be called once each time through
// the main loop.
void update()
{
}
private:
RigConfig& _config;
RigAudio& _audio;
IMode** _modes;
RigMode _modesLen;
RigMode _modesIndex;
/*
IFilter** _rxFilters;
uint8_t _rxFiltersLen;
uint8_t _rxFiltersIndex;
*/
};
#endif
//======================================================================
// EOF
//======================================================================