Somehow this compiled...

This commit is contained in:
Rob French
2020-06-13 09:59:11 -05:00
parent 28cbb0363f
commit 2da162f7c2
8 changed files with 213 additions and 278 deletions

View File

@@ -48,7 +48,7 @@ void recvIOPMessage(IOPMessage& msg, const uint8_t* buf, int len)
//======================================================================
void sendIOPModeCommand(RigMode mode)
void sendIOPModeCommand(rig_mode mode)
{
IOPMessage m;
m.id = IOP_MODE_COMMAND;
@@ -101,69 +101,69 @@ void sendIOPDebugMessage(const char* text)
sendIOPMessage(m);
};
//======================================================================
// SSB STATUS MESSAGE
//======================================================================
////======================================================================
//// SSB STATUS MESSAGE
////======================================================================
void sendIOPSSBStatus(SSBConfig const &c)
{
IOPMessage m;
m.id = IOP_SSB_STATUS_MSG;
m.len = 4;
m.data[0] = 'S'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
m.data[1] = '-'; // placeholder for transmit filter/compressor
m.data[2] = RX_FILTER_LETTER[c.filter];
m.data[3] = '\0';
sendIOPMessage(m);
}
//void sendIOPSSBStatus(SSBConfig const &c)
//{
//IOPMessage m;
//m.id = IOP_SSB_STATUS_MSG;
//m.len = 4;
//m.data[0] = 'S'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
//m.data[1] = '-'; // placeholder for transmit filter/compressor
//m.data[2] = RX_FILTER_LETTER[c.filter];
//m.data[3] = '\0';
//sendIOPMessage(m);
//}
//======================================================================
// DGT STATUS MESSAGE
//======================================================================
////======================================================================
//// DGT STATUS MESSAGE
////======================================================================
void sendIOPDGTStatus(DGTConfig const &c)
{
IOPMessage m;
m.id = IOP_DGT_STATUS_MSG;
m.len = 4;
m.data[0] = 'D'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
m.data[1] = '-'; // placeholder for future digital submodes?
m.data[2] = RX_FILTER_LETTER[c.filter];
m.data[3] = '\0';
sendIOPMessage(m);
}
//void sendIOPDGTStatus(DGTConfig const &c)
//{
//IOPMessage m;
//m.id = IOP_DGT_STATUS_MSG;
//m.len = 4;
//m.data[0] = 'D'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
//m.data[1] = '-'; // placeholder for future digital submodes?
//m.data[2] = RX_FILTER_LETTER[c.filter];
//m.data[3] = '\0';
//sendIOPMessage(m);
//}
//======================================================================
// CW STATUS MESSAGE
//======================================================================
////======================================================================
//// CW STATUS MESSAGE
////======================================================================
void sendIOPCWStatus(CWConfig const &c)
{
IOPMessage m;
m.id = IOP_CW_STATUS_MSG;
m.len = 4;
m.data[0] = 'C'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
m.data[1] = KEYER_MODE_LETTER[c.mode];
m.data[2] = RX_FILTER_LETTER[c.filter];
m.data[3] = '\0';
sendIOPMessage(m);
}
//void sendIOPCWStatus(CWConfig const &c)
//{
//IOPMessage m;
//m.id = IOP_CW_STATUS_MSG;
//m.len = 4;
//m.data[0] = 'C'; // current mode; redundant w/ Raduino mode, but maybe useful for debugging
//m.data[1] = KEYER_MODE_LETTER[c.mode];
//m.data[2] = RX_FILTER_LETTER[c.filter];
//m.data[3] = '\0';
//sendIOPMessage(m);
//}
//======================================================================
// TEST STATUS MESSAGE
//======================================================================
////======================================================================
//// TEST STATUS MESSAGE
////======================================================================
void sendIOPTestStatus()
{
IOPMessage m;
m.id = IOP_TEST_STATUS_MSG;
m.len = 4;
m.data[0] = ' ';
m.data[1] = 'T';
m.data[2] = 'T';
m.data[3] = '\0';
sendIOPMessage(m);
}
//void sendIOPTestStatus()
//{
//IOPMessage m;
//m.id = IOP_TEST_STATUS_MSG;
//m.len = 4;
//m.data[0] = ' ';
//m.data[1] = 'T';
//m.data[2] = 'T';
//m.data[3] = '\0';
//sendIOPMessage(m);
//}
//======================================================================
// MENU DISPLAY MESSAGE

View File

@@ -97,42 +97,46 @@ enum MessageID {
* (e.g. USB, LSB, etc.)
*/
enum RigMode {
RIG_MODE_LSB = 0,
RIG_MODE_USB,
RIG_MODE_CWL,
RIG_MODE_CWU,
RIG_MODE_DGL,
RIG_MODE_DGU,
RIG_MODE_TTL,
RIG_MODE_TTU,
enum rig_mode {
lsb = 0,
usb,
cw,
cwr,
dig,
// add new items here
NUM_RIG_MODES
num_rig_modes
};
/* Keyer modes.
*/
enum KeyerMode {
KEYER_MODE_STRAIGHT = 0,
KEYER_MODE_IAMBIC_A,
KEYER_MODE_IAMBIC_B,
//KEYER_ULTIMATIC,
//KEYER_BUG,
// add any new elements here
NUM_KEYER_MODES
enum keyer_mode {
straight = 0,
iambic_a,
iambic_b,
//ultimatic,
//bug,
// add any new items here
num_keyer_modes
};
enum RxFilter {
RX_FILTER_WIDE = 0,
RX_FILTER_MEDIUM,
RX_FILTER_NARROW,
NUM_RX_FILTERS
enum rx_filter {
wide = 0,
medium,
narrow,
num_rx_filters
};
const unsigned char RIG_MODE_LETTER[NUM_RIG_MODES] = {'s', 'S', 'c', 'C', 'd', 'D', 't', 'T'};
const unsigned char KEYER_MODE_LETTER[NUM_KEYER_MODES] = {'S', 'A', 'B'};
const unsigned char RX_FILTER_LETTER[NUM_RX_FILTERS] = {'W', 'M', 'N'};
enum digi_mode {
rtty = 0,
psk31,
user_defined,
num_digi_modes
};
//const unsigned char RIG_MODE_LETTER[num_rig_modes] = {'s', 'S', 'c', 'C', 'd', 'D', 't', 'T'};
//const unsigned char KEYER_MODE_LETTER[num_keyer_modes] = {'S', 'A', 'B'};
//const unsigned char RX_FILTER_LETTER[num_rx_filters] = {'W', 'M', 'N'};
const uint8_t NO_FLAGS = 0;
const uint8_t REVERSED = 1;
@@ -150,67 +154,86 @@ struct IOPMessage {
// Interface to a configuration object.
//======================================================================
class IConfig {
public:
virtual ~IConfig() {}
struct filter_config {
float lo;
float hi;
float gain;
};
struct mode_config {
mode_config(bool usb, rx_filter f, const filter_config *fc) : is_usb(usb), filter(f) {
for (int i = 0; i < num_rx_filters; i++) {
filtercfg[i] = fc[i];
}
}
bool is_usb;
rx_filter filter;
filter_config filtercfg[num_rx_filters];
};
//======================================================================
// SSB CONFIGURATION
//======================================================================
class SSBConfig : public IConfig {
public:
SSBConfig(RxFilter f): filter(f) {}
// parameters
RxFilter filter = RX_FILTER_MEDIUM;
// bool comp_enable = false;
// float comp_threshold = 0.1;
// float comp_ratio = 20.0;
// float comp_gain = 2.0;
const filter_config ssb_filter_config[num_rx_filters] =
{filter_config{ 300.0, 3100.0, 1.0},
filter_config{ 500.0, 2900.0, 1.0},
filter_config{ 700.0, 2500.0, 1.0}};
struct ssb_config : public mode_config {
ssb_config() : mode_config(true, wide, ssb_filter_config) {}
// speech compressor parameters
bool comp_enable = false;
float comp_threshold = 0.1;
float comp_ratio = 20.0;
float comp_gain = 2.0;
};
//======================================================================
// DGT CONFIGURATION
// DIG CONFIGURATION
//======================================================================
class DGTConfig : public IConfig {
public:
DGTConfig(RxFilter f): filter(f) {}
// parameters
RxFilter filter = RX_FILTER_MEDIUM;
const filter_config dig_filter_config[num_rx_filters] =
{filter_config{ 300.0, 3100.0, 1.0},
filter_config{ 500.0, 2900.0, 1.0},
filter_config{1250.0, 1750.0, 1.0}};
struct dig_config : public mode_config {
dig_config() : mode_config(true, wide, dig_filter_config) {}
digi_mode submode = user_defined;
};
//======================================================================
// CW CONFIGURATION
//======================================================================
class CWConfig : public IConfig {
public:
CWConfig(KeyerMode m, bool rev, uint8_t w, float wt, uint16_t st, RxFilter f):
mode(m), reversed(rev), wpm(w), weight(wt), sidetone(st), filter(f) {}
// mode
KeyerMode mode = KEYER_MODE_IAMBIC_A;
const filter_config cw_filter_config[num_rx_filters] =
{filter_config{ 300.0, 1300.0, 1.0},
filter_config{ 450.0, 950.0, 1.0},
filter_config{ 575.0, 825.0, 1.0}};
struct cw_config : public mode_config {
cw_config() : mode_config(true, wide, cw_filter_config) {}
keyer_mode mode = iambic_a;
// flags
bool reversed = false;
// parameters
uint8_t wpm = 15;
float weight = 3.0;
uint16_t sidetone = 700;
RxFilter filter = RX_FILTER_MEDIUM;
};
//======================================================================
// TT CONFIGURATION
//======================================================================
class TTConfig : public IConfig {
/*
struct TTConfig : public IConfig {
public:
TTConfig(RxFilter f): filter(f) {}
// parameters
RxFilter filter = RX_FILTER_MEDIUM;
};
*/
//======================================================================
// FUNCTION PROTOTYPES
//======================================================================
@@ -219,58 +242,19 @@ void sendCATMessage(const uint8_t*);
void sendIOPMessage(IOPMessage const&);
void recvIOPMessage(IOPMessage&, const uint8_t*, int);
void sendIOPModeCommand(RigMode);
void sendIOPModeCommand(rig_mode);
void sendIOPStartTxCommand();
void sendIOPStopTxCommand();
void sendIOPDebugMessage(const char*);
void sendIOPModeRequest();
void sendIOPSSBStatus(SSBConfig const&);
void sendIOPDGTStatus(DGTConfig const&);
void sendIOPCWStatus(CWConfig const&);
void sendIOPTestStatus();
//void sendIOPSSBStatus(SSBConfig const&);
//void sendIOPDGTStatus(DGTConfig const&);
//void sendIOPCWStatus(CWConfig const&);
//void sendIOPTestStatus();
void sendIOPMenuDisplay(const char*);
void sendIOPMenuInactive();
//======================================================================
// TRANSLATOR
//======================================================================
/*
class Translator
{
public:
Translator(RigMode&, CWConfig&, Stream&);
void registerPrefixCb(PrefixID id, void (*func)(void*));
void registerMessageCb(MessageID id, void (*func)(void*));
void sendACK();
void sendIOPMessage(IOPMessage const&);
void receive();
void pack_ModeCommand(IOPMessage&, RigMode);
void pack_CWConfig(IOPMessage&, CWConfig const&);
void pack_ModeRequest(IOPMessage&);
void unpack(IOPMessage const&);
protected:
void unpack_ModeCommand(IOPMessage const&);
void unpack_CWConfig(IOPMessage const&);
void unpack_ModeRequest(IOPMessage const&);
private:
RigMode& mode;
CWConfig& cwConfig;
Stream& serial;
void (*prefixCb[NUM_PREFIX_IDS])(void*);
void (*messageCb[NUM_MESSAGE_IDS])(void*);
};
*/
#endif
//======================================================================