kopia lustrzana https://gitlab.com/eliggett/wfview
Porównaj commity
No commits in common. "2277dfee3a510fcf94ca9013c257bc549b54bb2c" and "cb28ba02ba5db7e1925663dad7721db127054c9d" have entirely different histories.
2277dfee3a
...
cb28ba02ba
|
@ -204,7 +204,7 @@ void bandbuttons::jumpToBandWithoutBSR(availableBands band)
|
|||
f.Hz = (b.lowFreq+b.highFreq)/2.0;
|
||||
f.MHzDouble = f.Hz/1000000.0;
|
||||
f.VFO = activeVFO;
|
||||
queue->add(priorityImmediate,queueItem(funcMainFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,10 +41,10 @@ public:
|
|||
|
||||
signals:
|
||||
// look at what cmdSetModeFilter does, can we depreciate it?
|
||||
//void issueCmdUniquePriority(cmds cmd, char c); // to go to a mode
|
||||
//void issueDelayedCommand(cmds cmd); // for data mode and filter
|
||||
//void issueCmdF(cmds cmd, freqt f); // go to frequency
|
||||
//void issueCmd(cmds, char); // to get BSR of a specific band
|
||||
void issueCmdUniquePriority(cmds cmd, char c); // to go to a mode
|
||||
void issueDelayedCommand(cmds cmd); // for data mode and filter
|
||||
void issueCmdF(cmds cmd, freqt f); // go to frequency
|
||||
void issueCmd(cmds, char); // to get BSR of a specific band
|
||||
|
||||
// void getBandStackReg(char band, char regCode); // no, use the queue.
|
||||
// void gotoFreqMode(); // TODO, arguments will contain BSR data
|
||||
|
|
|
@ -81,12 +81,12 @@ void cachingQueue::run()
|
|||
}
|
||||
it--;
|
||||
auto item = it.value();
|
||||
emit haveCommand(item.command,item.param,item.receiver);
|
||||
emit haveCommand(item.command,item.param,item.vfo);
|
||||
it=queue.erase(it);
|
||||
if (item.recurring && prio != priorityImmediate) {
|
||||
queue.insert(prio,item);
|
||||
}
|
||||
updateCache(false,item.command,item.param,item.receiver);
|
||||
updateCache(false,item.command,item.param,item.vfo);
|
||||
}
|
||||
|
||||
QCoreApplication::processEvents();
|
||||
|
@ -109,55 +109,18 @@ void cachingQueue::interval(quint64 val)
|
|||
qInfo() << "Changing queue interval to" << val << "ms";
|
||||
}
|
||||
|
||||
funcs cachingQueue::checkCommandAvailable(funcs cmd,bool set)
|
||||
void cachingQueue::add(queuePriority prio ,funcs func, bool recurring, uchar vfo)
|
||||
{
|
||||
|
||||
// If we don't have rigCaps yet, simply return the command.
|
||||
if (rigCaps != Q_NULLPTR && cmd != funcNone && !rigCaps->commands.contains(cmd)) {
|
||||
// We don't have the requested command, so lets see if we can change it to something we do have.
|
||||
// WFVIEW functions should use funcMain/Sub commands by default,
|
||||
if (cmd == funcMainFreq && rigCaps->commands.contains(funcSelectedFreq))
|
||||
cmd = funcSelectedFreq;
|
||||
else if (cmd == funcSubFreq && rigCaps->commands.contains(funcUnselectedFreq))
|
||||
cmd = funcSelectedFreq;
|
||||
else if (cmd == funcMainMode && rigCaps->commands.contains(funcSelectedMode))
|
||||
cmd = funcSelectedMode;
|
||||
else if (cmd == funcSubMode && rigCaps->commands.contains(funcUnselectedMode))
|
||||
cmd = funcUnselectedFreq;
|
||||
// These are fallback commands for older radios that don't have command 25/26
|
||||
else if(cmd == funcMainMode)
|
||||
{
|
||||
if (set)
|
||||
cmd = funcModeSet;
|
||||
else
|
||||
cmd = funcModeGet;
|
||||
}
|
||||
else if(cmd == funcMainFreq)
|
||||
{
|
||||
if (set)
|
||||
cmd = funcFreqSet;
|
||||
else
|
||||
cmd = funcFreqGet;
|
||||
}
|
||||
else
|
||||
cmd = funcNone;
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
|
||||
void cachingQueue::add(queuePriority prio ,funcs func, bool recurring, uchar receiver)
|
||||
{
|
||||
queueItem q(func,recurring,receiver);
|
||||
queueItem q(func,recurring,vfo);
|
||||
add(prio,q);
|
||||
}
|
||||
|
||||
void cachingQueue::add(queuePriority prio ,queueItem item)
|
||||
{
|
||||
item.command=checkCommandAvailable(item.command,item.param.isValid());
|
||||
if (item.command != funcNone)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
if (!item.recurring || isRecurring(item.command,item.receiver) != prio)
|
||||
if (!item.recurring || isRecurring(item.command,item.vfo) != prio)
|
||||
{
|
||||
if (item.recurring && prio == queuePriority::priorityImmediate) {
|
||||
qWarning() << "Warning, cannot add recurring command with immediate priority!" << funcString[item.command];
|
||||
|
@ -167,7 +130,7 @@ void cachingQueue::add(queuePriority prio ,queueItem item)
|
|||
queueItem it=item;
|
||||
it.recurring=false;
|
||||
queue.insert(queue.cend(),priorityImmediate, it);
|
||||
qDebug() << "adding" << funcString[item.command] << "recurring" << item.recurring << "priority" << prio << "receiver" << item.receiver;
|
||||
qDebug() << "adding" << funcString[item.command] << "recurring" << item.recurring << "priority" << prio << "vfo" << item.vfo;
|
||||
}
|
||||
queue.insert(prio, item);
|
||||
}
|
||||
|
@ -175,10 +138,9 @@ void cachingQueue::add(queuePriority prio ,queueItem item)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void cachingQueue::addUnique(queuePriority prio ,funcs func, bool recurring, uchar receiver)
|
||||
void cachingQueue::addUnique(queuePriority prio ,funcs func, bool recurring, uchar vfo)
|
||||
{
|
||||
queueItem q(func,recurring, receiver);
|
||||
queueItem q(func,recurring, vfo);
|
||||
addUnique(prio,q);
|
||||
}
|
||||
|
||||
|
@ -186,7 +148,6 @@ void cachingQueue::addUnique(queuePriority prio ,funcs func, bool recurring, uch
|
|||
|
||||
void cachingQueue::addUnique(queuePriority prio ,queueItem item)
|
||||
{
|
||||
item.command=checkCommandAvailable(item.command,item.param.isValid());
|
||||
if (item.command != funcNone)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
|
@ -196,9 +157,9 @@ void cachingQueue::addUnique(queuePriority prio ,queueItem item)
|
|||
auto it(queue.begin());
|
||||
// This is quite slow but a new unique command is only added in response to user interaction (mode change etc.)
|
||||
while (it != queue.end()) {
|
||||
if (it.value().command == item.command && it.value().recurring == item.recurring && it.value().receiver == item.receiver && it.value().param.isValid() == item.param.isValid())
|
||||
if (it.value().command == item.command && it.value().recurring == item.recurring && it.value().vfo == item.vfo && it.value().param.isValid() == item.param.isValid())
|
||||
{
|
||||
qDebug() << "deleting" << it.value().id << funcString[it.value().command] << "VFO" << it.value().receiver << "recurring" << it.value().recurring ;
|
||||
qDebug() << "deleting" << it.value().id << funcString[it.value().command] << "VFO" << it.value().vfo << "recurring" << it.value().recurring ;
|
||||
it = queue.erase(it);
|
||||
}
|
||||
else
|
||||
|
@ -211,26 +172,26 @@ void cachingQueue::addUnique(queuePriority prio ,queueItem item)
|
|||
queueItem it = item;
|
||||
it.recurring=false;
|
||||
queue.insert(queue.cend(),priorityImmediate, it);
|
||||
qDebug() << "adding unique" << funcString[item.command] << "recurring" << item.recurring << "priority" << prio << "receiver" << item.receiver;
|
||||
qDebug() << "adding unique" << funcString[item.command] << "recurring" << item.recurring << "priority" << prio << "vfo" << item.vfo;
|
||||
}
|
||||
queue.insert(prio, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cachingQueue::del(funcs func, uchar receiver)
|
||||
void cachingQueue::del(funcs func, uchar vfo)
|
||||
{
|
||||
// This will immediately delete any matching commands.
|
||||
if (func != funcNone)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
auto it = std::find_if(queue.begin(), queue.end(), [func,receiver](const queueItem& c) { return (c.command == func && c.receiver == receiver && c.recurring); });
|
||||
auto it = std::find_if(queue.begin(), queue.end(), [func,vfo](const queueItem& c) { return (c.command == func && c.vfo == vfo && c.recurring); });
|
||||
//auto it(queue.begin());
|
||||
if (it == queue.end())
|
||||
qInfo() << "recurring command" << funcString[func] << "receiver" << receiver << "not found in queue";
|
||||
qInfo() << "recurring command" << funcString[func] << "vfo" << vfo << "not found in queue";
|
||||
while (it != queue.end()) {
|
||||
if (it.value().command == func && it.value().receiver == receiver) {
|
||||
qDebug() << "deleting" << funcString[it.value().command] << "VFO" << it.value().receiver << "recurring" << it.value().recurring;
|
||||
if (it.value().command == func && it.value().vfo == vfo) {
|
||||
qDebug() << "deleting" << funcString[it.value().command] << "VFO" << it.value().vfo << "recurring" << it.value().recurring;
|
||||
it = queue.erase(it);
|
||||
}
|
||||
else
|
||||
|
@ -241,10 +202,10 @@ void cachingQueue::del(funcs func, uchar receiver)
|
|||
}
|
||||
}
|
||||
|
||||
queuePriority cachingQueue::isRecurring(funcs func, uchar receiver)
|
||||
queuePriority cachingQueue::isRecurring(funcs func, uchar vfo)
|
||||
{
|
||||
// Does NOT lock the mutex
|
||||
auto rec = std::find_if(queue.begin(), queue.end(), [func,receiver](const queueItem& c) { return (c.command == func && c.receiver == receiver && c.recurring); });
|
||||
auto rec = std::find_if(queue.begin(), queue.end(), [func,vfo](const queueItem& c) { return (c.command == func && c.vfo == vfo && c.recurring); });
|
||||
if (rec != queue.end())
|
||||
{
|
||||
return rec.key();
|
||||
|
@ -263,12 +224,12 @@ void cachingQueue::message(QString msg)
|
|||
waiting.wakeOne();
|
||||
}
|
||||
|
||||
void cachingQueue::receiveValue(funcs func, QVariant value, uchar receiver)
|
||||
void cachingQueue::receiveValue(funcs func, QVariant value, uchar vfo)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
cacheItem c = cacheItem(func,value,receiver);
|
||||
cacheItem c = cacheItem(func,value,vfo);
|
||||
items.enqueue(c);
|
||||
updateCache(true,func,value,receiver);
|
||||
updateCache(true,func,value,vfo);
|
||||
waiting.wakeOne();
|
||||
}
|
||||
|
||||
|
@ -278,7 +239,7 @@ void cachingQueue::updateCache(bool reply, queueItem item)
|
|||
// Mutex MUST be locked by the calling function.
|
||||
auto cv = cache.find(item.command);
|
||||
while (cv != cache.end() && cv->command == item.command) {
|
||||
if (cv->receiver == item.receiver) {
|
||||
if (cv->vfo == item.vfo) {
|
||||
if (reply) {
|
||||
cv->reply = QDateTime::currentDateTime();
|
||||
} else {
|
||||
|
@ -300,7 +261,7 @@ void cachingQueue::updateCache(bool reply, queueItem item)
|
|||
|
||||
cacheItem c;
|
||||
c.command = item.command;
|
||||
c.receiver = item.receiver;
|
||||
c.vfo = item.vfo;
|
||||
if (reply) {
|
||||
c.reply = QDateTime::currentDateTime();
|
||||
} else {
|
||||
|
@ -314,14 +275,14 @@ void cachingQueue::updateCache(bool reply, queueItem item)
|
|||
}
|
||||
|
||||
|
||||
void cachingQueue::updateCache(bool reply, funcs func, QVariant value, uchar receiver)
|
||||
void cachingQueue::updateCache(bool reply, funcs func, QVariant value, uchar vfo)
|
||||
{
|
||||
queueItem q(func,value,false,receiver);
|
||||
queueItem q(func,value,false,vfo);
|
||||
updateCache(reply,q);
|
||||
}
|
||||
|
||||
|
||||
cacheItem cachingQueue::getCache(funcs func, uchar receiver)
|
||||
cacheItem cachingQueue::getCache(funcs func, uchar vfo)
|
||||
{
|
||||
cacheItem ret;
|
||||
if (func != funcNone) {
|
||||
|
@ -329,7 +290,7 @@ cacheItem cachingQueue::getCache(funcs func, uchar receiver)
|
|||
auto it = cache.find(func);
|
||||
while (it != cache.end() && it->command == func)
|
||||
{
|
||||
if (it->receiver == receiver)
|
||||
if (it->vfo == vfo)
|
||||
ret = cacheItem(*it);
|
||||
++it;
|
||||
}
|
||||
|
@ -338,7 +299,7 @@ cacheItem cachingQueue::getCache(funcs func, uchar receiver)
|
|||
// Using priorityhighest WILL slow down the S-Meter when a command intensive client is connected to rigctl
|
||||
if (func != funcNone && (!ret.value.isValid() || ret.reply.addSecs(QRandomGenerator::global()->bounded(5,20)) <= QDateTime::currentDateTime())) {
|
||||
//qInfo() << "No (or expired) cache found for" << funcString[func] << "requesting";
|
||||
add(priorityHighest,func,false,receiver);
|
||||
add(priorityHighest,func,false,vfo);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -27,28 +27,28 @@ inline QMap<QString,int> priorityMap = {{"None",0},{"Immediate",1},{"Highest",2}
|
|||
// Command with no param is a get by default
|
||||
struct queueItem {
|
||||
queueItem () {}
|
||||
queueItem (funcs command, QVariant param, bool recurring, uchar receiver) : command(command), param(param), receiver(receiver), recurring(recurring){};
|
||||
queueItem (funcs command, QVariant param, bool recurring) : command(command), param(param), receiver(false), recurring(recurring){};
|
||||
queueItem (funcs command, QVariant param) : command(command), param(param),receiver(0), recurring(false){};
|
||||
queueItem (funcs command, bool recurring, uchar receiver) : command(command), param(QVariant()), receiver(receiver), recurring(recurring) {};
|
||||
queueItem (funcs command, bool recurring) : command(command), param(QVariant()), receiver(0), recurring(recurring) {};
|
||||
queueItem (funcs command) : command(command), param(QVariant()), receiver(0), recurring(false){};
|
||||
queueItem (funcs command, QVariant param, bool recurring, uchar vfo) : command(command), param(param), vfo(vfo), recurring(recurring){};
|
||||
queueItem (funcs command, QVariant param, bool recurring) : command(command), param(param), vfo(false), recurring(recurring){};
|
||||
queueItem (funcs command, QVariant param) : command(command), param(param),vfo(0), recurring(false){};
|
||||
queueItem (funcs command, bool recurring, uchar vfo) : command(command), param(QVariant()), vfo(vfo), recurring(recurring) {};
|
||||
queueItem (funcs command, bool recurring) : command(command), param(QVariant()), vfo(0), recurring(recurring) {};
|
||||
queueItem (funcs command) : command(command), param(QVariant()), vfo(0), recurring(false){};
|
||||
funcs command;
|
||||
QVariant param;
|
||||
uchar receiver;
|
||||
uchar vfo;
|
||||
bool recurring;
|
||||
qint64 id = QDateTime::currentMSecsSinceEpoch();
|
||||
};
|
||||
|
||||
struct cacheItem {
|
||||
cacheItem () {};
|
||||
cacheItem (funcs command, QVariant value, uchar receiver=0) : command(command), req(QDateTime()), reply(QDateTime()), value(value), receiver(receiver){};
|
||||
cacheItem (funcs command, QVariant value, uchar vfo=0) : command(command), req(QDateTime()), reply(QDateTime()), value(value), vfo(vfo){};
|
||||
|
||||
funcs command;
|
||||
QDateTime req;
|
||||
QDateTime reply;
|
||||
QVariant value;
|
||||
uchar receiver;
|
||||
uchar vfo;
|
||||
};
|
||||
|
||||
class cachingQueue : public QThread
|
||||
|
@ -56,14 +56,14 @@ class cachingQueue : public QThread
|
|||
Q_OBJECT
|
||||
|
||||
signals:
|
||||
void haveCommand(funcs func, QVariant param, uchar receiver);
|
||||
void haveCommand(funcs func, QVariant param, uchar vfo);
|
||||
void sendValue(cacheItem item);
|
||||
void cacheUpdated(cacheItem item);
|
||||
void rigCapsUpdated(rigCapabilities* caps);
|
||||
|
||||
public slots:
|
||||
// Can be called directly or via emit.
|
||||
void receiveValue(funcs func, QVariant value, uchar receiver);
|
||||
void receiveValue(funcs func, QVariant value, uchar vfo);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -77,8 +77,8 @@ private:
|
|||
QQueue<cacheItem> items;
|
||||
|
||||
// Command to set cache value
|
||||
void setCache(funcs func, QVariant val, uchar receiver=0);
|
||||
queuePriority isRecurring(funcs func, uchar receiver=0);
|
||||
void setCache(funcs func, QVariant val, uchar vfo=0);
|
||||
queuePriority isRecurring(funcs func, uchar vfo=0);
|
||||
bool compare(QVariant a, QVariant b);
|
||||
|
||||
|
||||
|
@ -91,7 +91,6 @@ private:
|
|||
|
||||
// Functions
|
||||
void run();
|
||||
funcs checkCommandAvailable(funcs cmd, bool set=false);
|
||||
|
||||
protected:
|
||||
cachingQueue(QObject* parent = Q_NULLPTR) : QThread(parent) {};
|
||||
|
@ -103,17 +102,17 @@ public:
|
|||
|
||||
static cachingQueue *getInstance(QObject* parent = Q_NULLPTR);
|
||||
void message(QString msg);
|
||||
void add(queuePriority prio ,funcs func, bool recurring=false, uchar receiver=0);
|
||||
void add(queuePriority prio ,funcs func, bool recurring=false, uchar vfo=0);
|
||||
void add(queuePriority prio,queueItem item);
|
||||
void addUnique(queuePriority prio ,funcs func, bool recurring=false, uchar receiver=0);
|
||||
void addUnique(queuePriority prio ,funcs func, bool recurring=false, uchar vfo=0);
|
||||
void addUnique(queuePriority prio,queueItem item);
|
||||
void del(funcs func, uchar receiver=0);
|
||||
void del(funcs func, uchar vfo=0);
|
||||
void clear();
|
||||
void interval(quint64 val);
|
||||
void updateCache(bool reply, queueItem item);
|
||||
void updateCache(bool reply, funcs func, QVariant value=QVariant(), uchar receiver=0);
|
||||
void updateCache(bool reply, funcs func, QVariant value=QVariant(), uchar vfo=0);
|
||||
|
||||
cacheItem getCache(funcs func, uchar receiver=0);
|
||||
cacheItem getCache(funcs func, uchar vfo=0);
|
||||
|
||||
QMultiMap<funcs,cacheItem> getCacheItems();
|
||||
QMultiMap <queuePriority,queueItem> getQueueItems();
|
||||
|
|
|
@ -263,10 +263,10 @@ void dxClusterClient::tcpDisconnected() {
|
|||
// Need to start a timer and attempt reconnect.
|
||||
}
|
||||
|
||||
void dxClusterClient::freqRange(uchar receiver, double low, double high)
|
||||
void dxClusterClient::freqRange(uchar vfo, double low, double high)
|
||||
{
|
||||
freqRanges[receiver] = {low,high};
|
||||
if (receiver) {
|
||||
freqRanges[vfo] = {low,high};
|
||||
if (vfo) {
|
||||
lowSubFreq = low;
|
||||
highSubFreq = high;
|
||||
} else {
|
||||
|
@ -310,7 +310,7 @@ void dxClusterClient::updateSpots()
|
|||
}
|
||||
if (!spots.empty()) {
|
||||
emit sendSpots(range.key(),spots);
|
||||
//qInfo(logCluster()) << "Sending" << spots.size() << "DX spots to receiver" << range.key();
|
||||
//qInfo(logCluster()) << "Sending" << spots.size() << "DX spots to vfo" << range.key();
|
||||
}
|
||||
++range;
|
||||
}
|
||||
|
|
|
@ -63,7 +63,7 @@ signals:
|
|||
void deleteSpot(QString dxcall);
|
||||
void deleteOldSpots(int minutes);
|
||||
void sendOutput(QString text);
|
||||
void sendSpots(uchar receiver, QList<spotData> spots);
|
||||
void sendSpots(uchar vfo, QList<spotData> spots);
|
||||
void sendSubSpots(QList<spotData> spots);
|
||||
|
||||
public slots:
|
||||
|
@ -79,7 +79,7 @@ public slots:
|
|||
void setTcpPassword(QString s) { tcpPassword = s; }
|
||||
void setTcpTimeout(int p) { tcpTimeout = p; }
|
||||
void tcpCleanup();
|
||||
void freqRange(uchar receiver, double low, double high);
|
||||
void freqRange(uchar vfo, double low, double high);
|
||||
void enableSkimmerSpots(bool enable);
|
||||
|
||||
private:
|
||||
|
|
|
@ -127,7 +127,7 @@ void controllerSetup::init(usbDevMap* dev, QVector<BUTTON>* but, QVector<KNOB>*
|
|||
|
||||
for (COMMAND& c : *commands) {
|
||||
if (c.cmdType == commandButton || c.cmdType == commandAny) {
|
||||
if (c.command == funcSeparator) {
|
||||
if (c.command == cmdSeparator) {
|
||||
onEvent->insertSeparator(onEvent->count());
|
||||
offEvent->insertSeparator(offEvent->count());
|
||||
|
||||
|
@ -137,7 +137,7 @@ void controllerSetup::init(usbDevMap* dev, QVector<BUTTON>* but, QVector<KNOB>*
|
|||
}
|
||||
}
|
||||
if (c.cmdType == commandKnob || c.cmdType == commandAny) {
|
||||
if (c.command == funcSeparator) {
|
||||
if (c.command == cmdSeparator) {
|
||||
knobEvent->insertSeparator(knobEvent->count());
|
||||
} else {
|
||||
knobEvent->addItem(c.text, c.index);
|
||||
|
|
|
@ -58,7 +58,7 @@ void debugWindow::getCache()
|
|||
ui->cacheView->item(c,0)->setText(QString::number(i.value().command).rightJustified(3,'0'));
|
||||
ui->cacheView->item(c,1)->setText(funcString[i.value().command]);
|
||||
ui->cacheView->item(c,2)->setText(getValue(i.value().value));
|
||||
ui->cacheView->item(c,3)->setText(QString::number(i.value().receiver));
|
||||
ui->cacheView->item(c,3)->setText(QString::number(i.value().vfo));
|
||||
ui->cacheView->item(c,4)->setText((i.value().req.isValid()?i.value().req.toString("hh:mm:ss.zzz"):"<none>"));
|
||||
ui->cacheView->item(c,5)->setText((i.value().reply.isValid()?i.value().reply.toString("hh:mm:ss.zzz"):"<none>"));
|
||||
c++;
|
||||
|
@ -141,7 +141,7 @@ QString debugWindow::getValue(QVariant val)
|
|||
else if(!strcmp(val.typeName(),"scopeData"))
|
||||
{
|
||||
scopeData s = val.value<scopeData>();
|
||||
value = QString("(V:%0) %1").arg(s.receiver).arg((s.valid?"Valid":"Invalid"));
|
||||
value = QString("(V:%0) %1").arg(s.vfo).arg((s.valid?"Valid":"Invalid"));
|
||||
}
|
||||
else if (!strcmp(val.typeName(),"antennaInfo"))
|
||||
{
|
||||
|
|
|
@ -205,14 +205,14 @@ void frequencyinputwidget::on_goFreqBtn_clicked()
|
|||
// TODO: auto sideband preference
|
||||
if((m.mk != currentMode) && !usingDataMode && automaticSidebandSwitching)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcMainMode,QVariant::fromValue<modeInfo>(m),false,false));
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedMode,QVariant::fromValue<modeInfo>(m),false,false));
|
||||
currentMode = m.mk;
|
||||
}
|
||||
|
||||
f.MHzDouble = (float)f.Hz / 1E6;
|
||||
//emit updateUIFrequency(f);
|
||||
currentFrequency = f;
|
||||
queue->add(priorityImmediate,queueItem(funcMainFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
queue->add(priorityImmediate,queueItem(funcSelectedFreq,QVariant::fromValue<freqt>(f),false,false));
|
||||
} else {
|
||||
qWarning(logGui()) << "Could not understand frequency" << ui->freqMhzLineEdit->text();
|
||||
ui->freqMhzLineEdit->clear();
|
||||
|
|
|
@ -22,8 +22,8 @@ public:
|
|||
~frequencyinputwidget();
|
||||
|
||||
signals:
|
||||
//void issueCmdF(cmds cmd, freqt f);
|
||||
//void issueCmdM(cmds cmd, modeInfo m);
|
||||
void issueCmdF(cmds cmd, freqt f);
|
||||
void issueCmdM(cmds cmd, modeInfo m);
|
||||
void updateUIMode(rigMode_t mode);
|
||||
void updateUIFrequency(freqt f);
|
||||
void gotoMemoryPreset(int presetNumber);
|
||||
|
|
32
memories.cpp
32
memories.cpp
|
@ -465,16 +465,16 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
|
||||
queue->add(priorityImmediate,queueItem(funcSatelliteMode,QVariant::fromValue<bool>(ui->group->currentData().toInt() == MEMORY_SATGROUP)));
|
||||
if (ui->group->currentData().toInt() == MEMORY_SATGROUP) {
|
||||
queue->del(funcMainFreq,false);
|
||||
queue->del(funcMainMode,false);
|
||||
queue->del(funcSubFreq,true);
|
||||
queue->del(funcSubMode,true);
|
||||
queue->del(funcSelectedFreq,false);
|
||||
queue->del(funcSelectedMode,false);
|
||||
queue->del(funcUnselectedFreq,true);
|
||||
queue->del(funcUnselectedMode,true);
|
||||
parser = rigCaps->satParser;
|
||||
} else {
|
||||
queue->addUnique(priorityMedium,funcMainFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcMainMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcSubFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcSubMode,true,true);
|
||||
queue->addUnique(priorityMedium,funcSelectedFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcSelectedMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcUnselectedFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcUnselectedMode,true,true);
|
||||
parser = rigCaps->memParser;
|
||||
}
|
||||
|
||||
|
@ -925,19 +925,19 @@ void memories::on_group_currentIndexChanged(int index)
|
|||
|
||||
void memories::on_vfoMode_clicked()
|
||||
{
|
||||
queue->addUnique(priorityMedium,funcMainFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcMainMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcSubFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcSubMode,true,true);
|
||||
queue->addUnique(priorityMedium,funcSelectedFreq,true,false);
|
||||
queue->addUnique(priorityMedium,funcSelectedMode,true,false);
|
||||
queue->addUnique(priorityMedium,funcUnselectedFreq,true,true);
|
||||
queue->addUnique(priorityMedium,funcUnselectedMode,true,true);
|
||||
}
|
||||
|
||||
void memories::on_memoryMode_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,funcMemoryMode);
|
||||
queue->del(funcMainFreq,false);
|
||||
queue->del(funcMainMode,false);
|
||||
queue->del(funcSubFreq,true);
|
||||
queue->del(funcSubMode,true);
|
||||
queue->del(funcSelectedFreq,false);
|
||||
queue->del(funcSelectedMode,false);
|
||||
queue->del(funcUnselectedFreq,true);
|
||||
queue->del(funcUnselectedMode,true);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -7,12 +7,6 @@ repeaterSetup::repeaterSetup(QWidget *parent) :
|
|||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
this->setObjectName("RepeaterSetup");
|
||||
queue = cachingQueue::getInstance(this);
|
||||
connect(queue, SIGNAL(rigCapsUpdated(rigCapabilities*)), this, SLOT(receiveRigCaps(rigCapabilities*)));
|
||||
rigCaps = queue->getRigCaps();
|
||||
receiveRigCaps(rigCaps);
|
||||
|
||||
ui->autoTrackLiveBtn->setEnabled(false); // until we set split enabled.
|
||||
ui->warningFMLabel->setVisible(false);
|
||||
// populate the CTCSS combo box:
|
||||
|
@ -25,9 +19,103 @@ repeaterSetup::repeaterSetup(QWidget *parent) :
|
|||
repeaterSetup::~repeaterSetup()
|
||||
{
|
||||
// Trying this for more consistent destruction
|
||||
rig.inputs.clear();
|
||||
rig.preamps.clear();
|
||||
rig.attenuators.clear();
|
||||
rig.antennas.clear();
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void repeaterSetup::setRig(rigCapabilities inRig)
|
||||
{
|
||||
this->rig = inRig;
|
||||
haveRig = true;
|
||||
if(rig.commands.contains(funcRepeaterTone)) {
|
||||
ui->rptToneCombo->setDisabled(false);
|
||||
ui->toneTone->setDisabled(false);
|
||||
} else {
|
||||
ui->rptToneCombo->setDisabled(true);
|
||||
ui->toneTone->setDisabled(true);
|
||||
}
|
||||
|
||||
if(rig.commands.contains(funcRepeaterTSQL)) {
|
||||
ui->toneTSQL->setDisabled(false);
|
||||
} else {
|
||||
ui->toneTSQL->setDisabled(true);
|
||||
}
|
||||
|
||||
if(rig.commands.contains(funcToneSquelchType))
|
||||
{
|
||||
ui->rptToneCombo->setDisabled(false);
|
||||
ui->toneTone->setDisabled(false);
|
||||
ui->toneTSQL->setDisabled(false);
|
||||
}
|
||||
|
||||
if(rig.commands.contains(funcRepeaterDTCS))
|
||||
{
|
||||
ui->rptDTCSCombo->setDisabled(false);
|
||||
ui->toneDTCS->setDisabled(false);
|
||||
ui->rptDTCSInvertRx->setDisabled(false);
|
||||
ui->rptDTCSInvertTx->setDisabled(false);
|
||||
} else {
|
||||
ui->rptDTCSCombo->setDisabled(true);
|
||||
ui->toneDTCS->setDisabled(true);
|
||||
ui->rptDTCSInvertRx->setDisabled(true);
|
||||
ui->rptDTCSInvertTx->setDisabled(true);
|
||||
}
|
||||
if(rig.commands.contains(funcVFOEqualAB))
|
||||
{
|
||||
ui->selABtn->setDisabled(false);
|
||||
ui->selBBtn->setDisabled(false);
|
||||
ui->aEqBBtn->setDisabled(false);
|
||||
ui->swapABBtn->setDisabled(false);
|
||||
} else {
|
||||
ui->selABtn->setDisabled(true);
|
||||
ui->selBBtn->setDisabled(true);
|
||||
ui->aEqBBtn->setDisabled(true);
|
||||
ui->swapABBtn->setDisabled(true);
|
||||
}
|
||||
if(rig.commands.contains(funcVFOEqualMS))
|
||||
{
|
||||
ui->selMainBtn->setDisabled(false);
|
||||
ui->selSubBtn->setDisabled(false);
|
||||
ui->mEqSBtn->setDisabled(false);
|
||||
ui->swapMSBtn->setDisabled(false);
|
||||
} else {
|
||||
ui->selMainBtn->setDisabled(true);
|
||||
ui->selSubBtn->setDisabled(true);
|
||||
ui->mEqSBtn->setDisabled(true);
|
||||
ui->swapMSBtn->setDisabled(true);
|
||||
}
|
||||
if(rig.commands.contains(funcVFOEqualAB) && rig.commands.contains(funcVFOEqualMS))
|
||||
{
|
||||
// Rigs that have both AB and MS
|
||||
// do not have a swap AB command.
|
||||
ui->swapABBtn->setDisabled(true);
|
||||
}
|
||||
bool mainSub = rig.commands.contains(funcVFOMainSelect);
|
||||
if(mainSub)
|
||||
{
|
||||
ui->setRptrSubVFOBtn->setEnabled(true);
|
||||
ui->setToneSubVFOBtn->setEnabled(true);
|
||||
ui->setSplitRptrToneChk->setEnabled(true);
|
||||
} else {
|
||||
ui->setRptrSubVFOBtn->setDisabled(true);
|
||||
ui->setToneSubVFOBtn->setDisabled(true);
|
||||
ui->setSplitRptrToneChk->setDisabled(true);
|
||||
}
|
||||
bool rpt = rig.commands.contains(funcToneSquelchType);
|
||||
ui->rptAutoBtn->setEnabled(rpt);
|
||||
ui->rptDupMinusBtn->setEnabled(rpt);
|
||||
ui->rptDupPlusBtn->setEnabled(rpt);
|
||||
ui->rptSimplexBtn->setEnabled(rpt);
|
||||
ui->rptrOffsetEdit->setEnabled(rpt);
|
||||
ui->rptrOffsetSetBtn->setEnabled(rpt);
|
||||
ui->setToneSubVFOBtn->setEnabled(mainSub);
|
||||
ui->setRptrSubVFOBtn->setEnabled(mainSub);
|
||||
ui->quickSplitChk->setVisible(rig.commands.contains(funcQuickSplit));
|
||||
}
|
||||
|
||||
void repeaterSetup::populateTones()
|
||||
{
|
||||
|
@ -373,17 +461,17 @@ void repeaterSetup::handleTransmitStatus(bool amTransmitting)
|
|||
|
||||
void repeaterSetup::showEvent(QShowEvent *event)
|
||||
{
|
||||
|
||||
queue->add(priorityImmediate,funcSplitStatus,false,false);
|
||||
if(rigCaps->commands.contains(funcToneSquelchType))
|
||||
queue->add(priorityImmediate,funcReadFreqOffset,false,false);
|
||||
emit getDuplexMode();
|
||||
emit getSplitModeEnabled();
|
||||
if(rig.commands.contains(funcToneSquelchType))
|
||||
emit getRptDuplexOffset();
|
||||
QMainWindow::showEvent(event);
|
||||
(void)event;
|
||||
}
|
||||
|
||||
void repeaterSetup::on_splitEnableChk_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmSplitOn),false));
|
||||
emit setDuplexMode(dmSplitOn);
|
||||
ui->autoTrackLiveBtn->setEnabled(true);
|
||||
|
||||
if(ui->autoTrackLiveBtn->isChecked() && !ui->splitOffsetEdit->text().isEmpty())
|
||||
|
@ -399,40 +487,40 @@ void repeaterSetup::on_splitEnableChk_clicked()
|
|||
|
||||
void repeaterSetup::on_splitOffBtn_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmSplitOff),false));
|
||||
emit setDuplexMode(dmSplitOff);
|
||||
ui->autoTrackLiveBtn->setDisabled(true);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptSimplexBtn_clicked()
|
||||
{
|
||||
// Simplex
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmSplitOn),false));
|
||||
if(rigCaps->commands.contains(funcToneSquelchType))
|
||||
emit setDuplexMode(dmSplitOff);
|
||||
if(rig.commands.contains(funcToneSquelchType))
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupAutoOff),false));
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmSimplex),false));
|
||||
emit setDuplexMode(dmDupAutoOff);
|
||||
emit setDuplexMode(dmSimplex);
|
||||
}
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptDupPlusBtn_clicked()
|
||||
{
|
||||
// DUP+
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupAutoOff),false));
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupPlus),false));
|
||||
emit setDuplexMode(dmDupAutoOff);
|
||||
emit setDuplexMode(dmDupPlus);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptDupMinusBtn_clicked()
|
||||
{
|
||||
// DUP-
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupAutoOff),false));
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupMinus),false));
|
||||
emit setDuplexMode(dmDupAutoOff);
|
||||
emit setDuplexMode(dmDupMinus);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptAutoBtn_clicked()
|
||||
{
|
||||
// Auto Rptr (enable this feature)
|
||||
// TODO: Hide an AutoOff button somewhere for non-US users
|
||||
queue->add(priorityImmediate,queueItem(funcSplitStatus,QVariant::fromValue<duplexMode_t>(dmDupAutoOn),false));
|
||||
emit setDuplexMode(dmDupAutoOn);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptToneCombo_activated(int tindex)
|
||||
|
@ -444,19 +532,19 @@ void repeaterSetup::on_rptToneCombo_activated(int tindex)
|
|||
bool updateSub = ui->setSplitRptrToneChk->isEnabled() && ui->setSplitRptrToneChk->isChecked();
|
||||
if(ui->toneTone->isChecked())
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setTone(rt);
|
||||
if(updateSub)
|
||||
{
|
||||
rt.useSecondaryVFO = true;
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setTone(rt);
|
||||
}
|
||||
|
||||
} else if (ui->toneTSQL->isChecked()) {
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setTSQL(rt);
|
||||
if(updateSub)
|
||||
{
|
||||
rt.useSecondaryVFO = true;
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setTone(rt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -467,24 +555,7 @@ void repeaterSetup::on_rptDTCSCombo_activated(int index)
|
|||
tone.tinv = ui->rptDTCSInvertTx->isChecked();
|
||||
tone.rinv = ui->rptDTCSInvertRx->isChecked();
|
||||
tone.tone = (quint16)ui->rptDTCSCombo->itemData(index).toUInt();
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterDTCS,QVariant::fromValue<toneInfo>(tone),false));
|
||||
}
|
||||
|
||||
void repeaterSetup::setRptAccessMode(rptrAccessData rd)
|
||||
{
|
||||
if (rigCaps->commands.contains(funcToneSquelchType)) {
|
||||
queue->add(priorityImmediate,queueItem(funcToneSquelchType,QVariant::fromValue<rptrAccessData>(rd),false));
|
||||
} else {
|
||||
if(rd.accessMode == ratrTN) {
|
||||
// recuring=false, vfo if rd.useSEcondaryVFO
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterTone, QVariant::fromValue<bool>(true), false, rd.useSecondaryVFO));
|
||||
} else if (rd.accessMode == ratrTT) {
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterTSQL, QVariant::fromValue<bool>(true), false, rd.useSecondaryVFO));
|
||||
} else if (rd.accessMode == ratrNN) {
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterTone, QVariant::fromValue<bool>(false), false, rd.useSecondaryVFO));
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterTSQL, QVariant::fromValue<bool>(false), false, rd.useSecondaryVFO));
|
||||
}
|
||||
}
|
||||
emit setDTCS(tone);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_toneNone_clicked()
|
||||
|
@ -493,13 +564,13 @@ void repeaterSetup::on_toneNone_clicked()
|
|||
rptrAccessData rd;
|
||||
rm = ratrNN;
|
||||
rd.accessMode = rm;
|
||||
setRptAccessMode(rd);
|
||||
emit setRptAccessMode(rd);
|
||||
bool updateSub = ui->setSplitRptrToneChk->isEnabled() && ui->setSplitRptrToneChk->isChecked();
|
||||
|
||||
if(updateSub)
|
||||
{
|
||||
rd.useSecondaryVFO = true;
|
||||
setRptAccessMode(rd);
|
||||
emit setRptAccessMode(rd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -511,8 +582,8 @@ void repeaterSetup::on_toneTone_clicked()
|
|||
rd.accessMode = rm;
|
||||
toneInfo rt;
|
||||
rt.tone = (quint16)ui->rptToneCombo->currentData().toUInt();
|
||||
setRptAccessMode(rd);
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setRptAccessMode(rd);
|
||||
emit setTone(rt);
|
||||
|
||||
bool updateSub = ui->setSplitRptrToneChk->isEnabled() && ui->setSplitRptrToneChk->isChecked();
|
||||
|
||||
|
@ -520,8 +591,8 @@ void repeaterSetup::on_toneTone_clicked()
|
|||
{
|
||||
rd.useSecondaryVFO = true;
|
||||
rt.useSecondaryVFO = true;
|
||||
setRptAccessMode(rd);
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setRptAccessMode(rd);
|
||||
emit setTone(rt);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -533,16 +604,16 @@ void repeaterSetup::on_toneTSQL_clicked()
|
|||
toneInfo rt;
|
||||
rt.tone = (quint16)ui->rptToneCombo->currentData().toUInt();
|
||||
rd.accessMode = rm;
|
||||
setRptAccessMode(rd);
|
||||
queue->add(priorityImmediate,queueItem(funcTSQLFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setRptAccessMode(rd);
|
||||
emit setTSQL(rt);
|
||||
bool updateSub = ui->setSplitRptrToneChk->isEnabled() && ui->setSplitRptrToneChk->isChecked();
|
||||
|
||||
if(updateSub)
|
||||
{
|
||||
rd.useSecondaryVFO = true;
|
||||
rt.useSecondaryVFO = true;
|
||||
setRptAccessMode(rd);
|
||||
queue->add(priorityImmediate,queueItem(funcTSQLFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setRptAccessMode(rd);
|
||||
emit setTSQL(rt);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -551,12 +622,12 @@ void repeaterSetup::on_toneDTCS_clicked()
|
|||
rptrAccessData rd;
|
||||
|
||||
rd.accessMode = ratrDD;
|
||||
setRptAccessMode(rd);
|
||||
emit setRptAccessMode(rd);
|
||||
toneInfo tone;
|
||||
tone.tinv = ui->rptDTCSInvertTx->isChecked();
|
||||
tone.rinv = ui->rptDTCSInvertRx->isChecked();
|
||||
tone.tone = (quint16)ui->rptDTCSCombo->currentData().toUInt();
|
||||
queue->add(priorityImmediate,queueItem(funcRepeaterDTCS,QVariant::fromValue<toneInfo>(tone),false));
|
||||
emit setDTCS(tone);
|
||||
// TODO: DTCS with subband
|
||||
}
|
||||
|
||||
|
@ -650,8 +721,8 @@ void repeaterSetup::on_splitPlusButton_clicked()
|
|||
return;
|
||||
}
|
||||
if(ui->splitEnableChk->isChecked() || ui->quickSplitChk->isChecked()) {
|
||||
queue->add(priorityImmediate,queueItem(funcSubFreq,QVariant::fromValue<freqt>(f),false));
|
||||
queue->add(priorityImmediate,queueItem(funcModeSet,QVariant::fromValue<modeInfo>(modeTransmitVFO),false));
|
||||
emit setTransmitFrequency(f);
|
||||
emit setTransmitMode(modeTransmitVFO);
|
||||
} else {
|
||||
qWarning(logRptr()) << "Not setting transmit frequency until split mode is enabled.";
|
||||
}
|
||||
|
@ -682,8 +753,8 @@ void repeaterSetup::on_splitMinusBtn_clicked()
|
|||
}
|
||||
|
||||
if(ui->splitEnableChk->isChecked() || ui->quickSplitChk->isChecked()) {
|
||||
queue->add(priorityImmediate,queueItem(funcSubFreq,QVariant::fromValue<freqt>(f),false));
|
||||
queue->add(priorityImmediate,queueItem(funcModeSet,QVariant::fromValue<modeInfo>(modeTransmitVFO),false));
|
||||
emit setTransmitFrequency(f);
|
||||
emit setTransmitMode(modeTransmitVFO);
|
||||
} else {
|
||||
qWarning(logRptr()) << "Not setting transmit frequency until split mode is enabled.";
|
||||
return;
|
||||
|
@ -703,8 +774,8 @@ void repeaterSetup::on_splitTxFreqSetBtn_clicked()
|
|||
f.Hz = fHz;
|
||||
f.VFO = inactiveVFO;
|
||||
f.MHzDouble = f.Hz/1E6;
|
||||
queue->add(priorityImmediate,queueItem(funcSubFreq,QVariant::fromValue<freqt>(f),false));
|
||||
queue->add(priorityImmediate,queueItem(funcModeSet,QVariant::fromValue<modeInfo>(modeTransmitVFO),false));
|
||||
emit setTransmitFrequency(f);
|
||||
emit setTransmitMode(modeTransmitVFO);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -717,45 +788,45 @@ void repeaterSetup::on_splitTransmitFreqEdit_returnPressed()
|
|||
void repeaterSetup::on_selABtn_clicked()
|
||||
{
|
||||
vfo_t v = vfoA;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectVFO,QVariant::fromValue<vfo_t>(v),false));
|
||||
emit selectVFO(v);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_selBBtn_clicked()
|
||||
{
|
||||
vfo_t v = vfoB;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectVFO,QVariant::fromValue<vfo_t>(v),false));
|
||||
emit selectVFO(v);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_aEqBBtn_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,funcVFOEqualAB,false,false);
|
||||
emit equalizeVFOsAB();
|
||||
}
|
||||
|
||||
void repeaterSetup::on_swapABBtn_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,funcVFOSwapAB,false,false);
|
||||
emit swapVFOs();
|
||||
}
|
||||
|
||||
void repeaterSetup::on_selMainBtn_clicked()
|
||||
{
|
||||
vfo_t v = vfoMain;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectVFO,QVariant::fromValue<vfo_t>(v),false));
|
||||
emit selectVFO(v);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_selSubBtn_clicked()
|
||||
{
|
||||
vfo_t v = vfoSub;
|
||||
queue->add(priorityImmediate,queueItem(funcSelectVFO,QVariant::fromValue<vfo_t>(v),false));
|
||||
emit selectVFO(v);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_mEqSBtn_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,funcVFOEqualMS,false,false);
|
||||
emit equalizeVFOsMS();
|
||||
}
|
||||
|
||||
void repeaterSetup::on_swapMSBtn_clicked()
|
||||
{
|
||||
queue->add(priorityImmediate,funcVFOSwapMS,false,false);
|
||||
emit swapVFOs();
|
||||
}
|
||||
|
||||
void repeaterSetup::on_setToneSubVFOBtn_clicked()
|
||||
|
@ -766,7 +837,7 @@ void repeaterSetup::on_setToneSubVFOBtn_clicked()
|
|||
toneInfo rt;
|
||||
rt.tone = (quint16)ui->rptToneCombo->currentData().toUInt();
|
||||
rt.useSecondaryVFO = true;
|
||||
queue->add(priorityImmediate,queueItem(funcToneFreq,QVariant::fromValue<toneInfo>(rt),false, rt.useSecondaryVFO));
|
||||
emit setTone(rt);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_setRptrSubVFOBtn_clicked()
|
||||
|
@ -785,7 +856,7 @@ void repeaterSetup::on_setRptrSubVFOBtn_clicked()
|
|||
if(ui->toneDTCS->isChecked())
|
||||
rd.accessMode=ratrDD;
|
||||
|
||||
setRptAccessMode(rd);
|
||||
emit setRptAccessMode(rd);
|
||||
}
|
||||
|
||||
void repeaterSetup::on_rptrOffsetSetBtn_clicked()
|
||||
|
@ -796,7 +867,7 @@ void repeaterSetup::on_rptrOffsetSetBtn_clicked()
|
|||
f.VFO=activeVFO;
|
||||
if(f.Hz != 0)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcSendFreqOffset,QVariant::fromValue<freqt>(f),false));
|
||||
emit setRptDuplexOffset(f);
|
||||
}
|
||||
ui->rptrOffsetEdit->clearFocus();
|
||||
}
|
||||
|
@ -817,101 +888,5 @@ void repeaterSetup::on_setSplitRptrToneChk_clicked(bool checked)
|
|||
|
||||
void repeaterSetup::on_quickSplitChk_clicked(bool checked)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(funcQuickSplit,QVariant::fromValue<bool>(checked),false));
|
||||
}
|
||||
|
||||
void repeaterSetup::receiveRigCaps(rigCapabilities* rig)
|
||||
{
|
||||
this->rigCaps = rig;
|
||||
if (rig != Q_NULLPTR)
|
||||
{
|
||||
qInfo() << "Got rigcaps for:" << rig->modelName;
|
||||
|
||||
if(rig->commands.contains(funcRepeaterTone)) {
|
||||
ui->rptToneCombo->setDisabled(false);
|
||||
ui->toneTone->setDisabled(false);
|
||||
} else {
|
||||
ui->rptToneCombo->setDisabled(true);
|
||||
ui->toneTone->setDisabled(true);
|
||||
}
|
||||
|
||||
if(rig->commands.contains(funcRepeaterTSQL)) {
|
||||
ui->toneTSQL->setDisabled(false);
|
||||
} else {
|
||||
ui->toneTSQL->setDisabled(true);
|
||||
}
|
||||
|
||||
if(rig->commands.contains(funcToneSquelchType))
|
||||
{
|
||||
ui->rptToneCombo->setDisabled(false);
|
||||
ui->toneTone->setDisabled(false);
|
||||
ui->toneTSQL->setDisabled(false);
|
||||
}
|
||||
|
||||
if(rig->commands.contains(funcRepeaterDTCS))
|
||||
{
|
||||
ui->rptDTCSCombo->setDisabled(false);
|
||||
ui->toneDTCS->setDisabled(false);
|
||||
ui->rptDTCSInvertRx->setDisabled(false);
|
||||
ui->rptDTCSInvertTx->setDisabled(false);
|
||||
} else {
|
||||
ui->rptDTCSCombo->setDisabled(true);
|
||||
ui->toneDTCS->setDisabled(true);
|
||||
ui->rptDTCSInvertRx->setDisabled(true);
|
||||
ui->rptDTCSInvertTx->setDisabled(true);
|
||||
}
|
||||
if(rig->commands.contains(funcVFOEqualAB))
|
||||
{
|
||||
ui->selABtn->setDisabled(false);
|
||||
ui->selBBtn->setDisabled(false);
|
||||
ui->aEqBBtn->setDisabled(false);
|
||||
ui->swapABBtn->setDisabled(false);
|
||||
} else {
|
||||
ui->selABtn->setDisabled(true);
|
||||
ui->selBBtn->setDisabled(true);
|
||||
ui->aEqBBtn->setDisabled(true);
|
||||
ui->swapABBtn->setDisabled(true);
|
||||
}
|
||||
if(rig->commands.contains(funcVFOEqualMS))
|
||||
{
|
||||
ui->selMainBtn->setDisabled(false);
|
||||
ui->selSubBtn->setDisabled(false);
|
||||
ui->mEqSBtn->setDisabled(false);
|
||||
ui->swapMSBtn->setDisabled(false);
|
||||
} else {
|
||||
ui->selMainBtn->setDisabled(true);
|
||||
ui->selSubBtn->setDisabled(true);
|
||||
ui->mEqSBtn->setDisabled(true);
|
||||
ui->swapMSBtn->setDisabled(true);
|
||||
}
|
||||
if(rig->commands.contains(funcVFOEqualAB) && rig->commands.contains(funcVFOEqualMS))
|
||||
{
|
||||
// Rigs that have both AB and MS
|
||||
// do not have a swap AB command.
|
||||
//ui->swapABBtn->setDisabled(true);
|
||||
}
|
||||
|
||||
bool mainSub = rig->commands.contains(funcVFOMainSelect);
|
||||
if(mainSub)
|
||||
{
|
||||
ui->setRptrSubVFOBtn->setEnabled(true);
|
||||
ui->setToneSubVFOBtn->setEnabled(true);
|
||||
ui->setSplitRptrToneChk->setEnabled(true);
|
||||
} else {
|
||||
ui->setRptrSubVFOBtn->setDisabled(true);
|
||||
ui->setToneSubVFOBtn->setDisabled(true);
|
||||
ui->setSplitRptrToneChk->setDisabled(true);
|
||||
}
|
||||
|
||||
bool rpt = rig->commands.contains(funcToneSquelchType);
|
||||
ui->rptAutoBtn->setEnabled(rpt);
|
||||
ui->rptDupMinusBtn->setEnabled(rpt);
|
||||
ui->rptDupPlusBtn->setEnabled(rpt);
|
||||
ui->rptSimplexBtn->setEnabled(rpt);
|
||||
ui->rptrOffsetEdit->setEnabled(rpt);
|
||||
ui->rptrOffsetSetBtn->setEnabled(rpt);
|
||||
ui->setToneSubVFOBtn->setEnabled(mainSub);
|
||||
ui->setRptrSubVFOBtn->setEnabled(mainSub);
|
||||
ui->quickSplitChk->setVisible(rig->commands.contains(funcQuickSplit));
|
||||
}
|
||||
emit setQuickSplit(checked);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include <QMainWindow>
|
||||
#include <QDebug>
|
||||
|
||||
#include "cachingqueue.h"
|
||||
#include "repeaterattributes.h"
|
||||
#include "rigidentities.h"
|
||||
#include "logcategories.h"
|
||||
|
@ -31,6 +30,7 @@ signals:
|
|||
void getTone();
|
||||
void getTSQL();
|
||||
void getDTCS();
|
||||
void setRptAccessMode(rptrAccessData rd);
|
||||
void getRptAccessMode();
|
||||
void setRptDuplexOffset(freqt f);
|
||||
void getRptDuplexOffset();
|
||||
|
@ -60,8 +60,6 @@ public slots:
|
|||
void handleUpdateCurrentMainMode(modeInfo m);
|
||||
void handleTransmitStatus(bool amTransmitting);
|
||||
void handleRptOffsetFrequency(freqt f);
|
||||
void receiveRigCaps(rigCapabilities* caps);
|
||||
|
||||
|
||||
private slots:
|
||||
void showEvent(QShowEvent *event);
|
||||
|
@ -103,7 +101,6 @@ private:
|
|||
void populateDTCS();
|
||||
quint64 getFreqHzFromKHzString(QString khz);
|
||||
quint64 getFreqHzFromMHzString(QString MHz);
|
||||
void setRptAccessMode(rptrAccessData rd);
|
||||
|
||||
rigCapabilities rig;
|
||||
bool haveRig = false;
|
||||
|
@ -114,8 +111,6 @@ private:
|
|||
freqt currentOffset;
|
||||
bool usedPlusSplit = false;
|
||||
bool amTransmitting = false;
|
||||
cachingQueue* queue = Q_NULLPTR;
|
||||
rigCapabilities* rigCaps = Q_NULLPTR;
|
||||
};
|
||||
|
||||
#endif // REPEATERSETUP_H
|
||||
|
|
136
rigcommander.cpp
136
rigcommander.cpp
|
@ -317,7 +317,7 @@ void rigCommander::prepDataAndSend(QByteArray data)
|
|||
emit dataForComm(data);
|
||||
}
|
||||
|
||||
bool rigCommander::getCommand(funcs func, QByteArray &payload, int value, uchar receiver)
|
||||
bool rigCommander::getCommand(funcs func, QByteArray &payload, int value, uchar vfo)
|
||||
{
|
||||
// Value is set to INT_MIN by default as this should be outside any "real" values
|
||||
auto it = rigCaps.commands.find(func);
|
||||
|
@ -335,12 +335,12 @@ bool rigCommander::getCommand(funcs func, QByteArray &payload, int value, uchar
|
|||
{
|
||||
// This can use cmd29 so add sub/main to the command
|
||||
payload.append('\x29');
|
||||
payload.append(static_cast<uchar>(receiver));
|
||||
} else if (!rigCaps.hasCommand29 && receiver)
|
||||
payload.append(static_cast<uchar>(vfo));
|
||||
} else if (!rigCaps.hasCommand29 && vfo)
|
||||
{
|
||||
// We don't have command29 so can't select sub
|
||||
qInfo(logRig()) << "Rig has no Command29, removing command:" << funcString[func] << "VFO" << receiver;
|
||||
queue->del(func,receiver);
|
||||
qInfo(logRig()) << "Rig has no Command29, removing command:" << funcString[func] << "VFO" << vfo;
|
||||
queue->del(func,vfo);
|
||||
return false;
|
||||
}
|
||||
payload.append(it.value().data);
|
||||
|
@ -352,8 +352,8 @@ bool rigCommander::getCommand(funcs func, QByteArray &payload, int value, uchar
|
|||
}
|
||||
} else {
|
||||
// Don't try this command again as the rig doesn't support it!
|
||||
qDebug(logRig()) << "Removing unsupported command from queue" << funcString[func] << "VFO" << receiver;
|
||||
queue->del(func,receiver);
|
||||
qDebug(logRig()) << "Removing unsupported command from queue" << funcString[func] << "VFO" << vfo;
|
||||
queue->del(func,vfo);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -702,7 +702,7 @@ void rigCommander::parseCommand()
|
|||
#endif
|
||||
|
||||
funcs func = funcNone;
|
||||
uchar receiver = 0;
|
||||
uchar vfo = 0;
|
||||
|
||||
if (payloadIn.endsWith((char)0xfd))
|
||||
{
|
||||
|
@ -711,7 +711,7 @@ void rigCommander::parseCommand()
|
|||
|
||||
if (rigCaps.hasCommand29 && payloadIn[0] == '\x29')
|
||||
{
|
||||
receiver = static_cast<uchar>(payloadIn[1]);
|
||||
vfo = static_cast<uchar>(payloadIn[1]);
|
||||
payloadIn.remove(0,2);
|
||||
}
|
||||
|
||||
|
@ -746,9 +746,15 @@ void rigCommander::parseCommand()
|
|||
freqt test;
|
||||
QVector<memParserFormat> memParser;
|
||||
QVariant value;
|
||||
uchar vfo=0; // Used for second VFO
|
||||
switch (func)
|
||||
{
|
||||
case funcFreqGet:
|
||||
case funcFreqTR:
|
||||
case funcReadTXFreq:
|
||||
{
|
||||
value.setValue(parseFreqData(payloadIn,vfo));
|
||||
break;
|
||||
}
|
||||
case funcVFODualWatch:
|
||||
value.setValue(static_cast<bool>(bool(payloadIn[0])));
|
||||
break;
|
||||
|
@ -756,28 +762,19 @@ void rigCommander::parseCommand()
|
|||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
||||
#endif
|
||||
case funcSubFreq:
|
||||
receiver = 1;
|
||||
case funcUnselectedFreq:
|
||||
if (func == funcUnselectedFreq)
|
||||
vfo=1;
|
||||
vfo = 1;
|
||||
case funcSelectedFreq:
|
||||
case funcMainFreq:
|
||||
case funcFreqGet:
|
||||
case funcFreqTR:
|
||||
case funcReadTXFreq:
|
||||
{
|
||||
//qInfo(logRig()) << "Freq len:" << payloadIn.size() << "VFO=" << vfo << "data:" << payloadIn.toHex(' ');
|
||||
value.setValue(parseFreqData(payloadIn,vfo));
|
||||
//qInfo(logRig()) << funcString[func] << "len:" << payloadIn.size() << "receiver=" << receiver << "vfo=" << vfo <<
|
||||
// "value:" << value.value<freqt>().Hz << "data:" << payloadIn.toHex(' ');
|
||||
|
||||
break;
|
||||
}
|
||||
case funcModeGet:
|
||||
case funcModeTR:
|
||||
{
|
||||
modeInfo m;
|
||||
m = parseMode(payloadIn[0], m.filter,receiver);
|
||||
m = parseMode(payloadIn[0], m.filter,vfo);
|
||||
|
||||
if(payloadIn.size() > 1)
|
||||
{
|
||||
|
@ -788,17 +785,15 @@ void rigCommander::parseCommand()
|
|||
value.setValue(m);
|
||||
break;
|
||||
}
|
||||
case funcSubMode:
|
||||
receiver = 1;
|
||||
case funcSelectedMode:
|
||||
case funcUnselectedMode:
|
||||
case funcMainMode:
|
||||
vfo = 1;
|
||||
case funcSelectedMode:
|
||||
{
|
||||
modeInfo m;
|
||||
// New format payload with mode+datamode+filter
|
||||
m = parseMode(bcdHexToUChar(payloadIn[0]), bcdHexToUChar(payloadIn[2]),receiver);
|
||||
m = parseMode(bcdHexToUChar(payloadIn[0]), bcdHexToUChar(payloadIn[2]),vfo);
|
||||
m.data = bcdHexToUChar(payloadIn[1]);
|
||||
m.VFO = selVFO_t(receiver);
|
||||
m.VFO = selVFO_t(vfo);
|
||||
value.setValue(m);
|
||||
break;
|
||||
}
|
||||
|
@ -834,7 +829,7 @@ void rigCommander::parseCommand()
|
|||
case funcScanning:
|
||||
break;
|
||||
case funcReadFreqOffset:
|
||||
value.setValue(parseFreqData(payloadIn,receiver));
|
||||
value.setValue(parseFreqData(payloadIn,vfo));
|
||||
break;
|
||||
// These return a single byte that we convert to a uchar (0-99)
|
||||
case funcTuningStep:
|
||||
|
@ -970,7 +965,7 @@ void rigCommander::parseCommand()
|
|||
if (rigCaps.modelID == 0xAC && bsr.band == 6) {
|
||||
freqLen = 6;
|
||||
}
|
||||
bsr.freq = parseFreqData(payloadIn.mid(2,freqLen),receiver);
|
||||
bsr.freq = parseFreqData(payloadIn.mid(2,freqLen),vfo);
|
||||
// The Band Stacking command returns the regCode in the position that VFO is expected.
|
||||
// As BSR is always on the active VFO, just set that.
|
||||
bsr.freq.VFO = selVFO_t::activeVFO;
|
||||
|
@ -987,7 +982,7 @@ void rigCommander::parseCommand()
|
|||
quint16 calc;
|
||||
quint8 pass = bcdHexToUChar((quint8)payloadIn[0]);
|
||||
modeInfo m;
|
||||
m = queue->getCache((receiver?funcSubMode:funcMainMode),receiver).value.value<modeInfo>();
|
||||
m = queue->getCache((vfo?funcUnselectedMode:funcSelectedMode),vfo).value.value<modeInfo>();
|
||||
|
||||
if (m.mk == modeAM)
|
||||
{
|
||||
|
@ -1001,16 +996,16 @@ void rigCommander::parseCommand()
|
|||
calc = 600 + ((pass - 10) * 100);
|
||||
}
|
||||
value.setValue(calc);
|
||||
//qInfo() << "Got filter width" << calc << "VFO" << receiver;
|
||||
//qInfo() << "Got filter width" << calc << "VFO" << vfo;
|
||||
break;
|
||||
}
|
||||
case funcDataModeWithFilter:
|
||||
{
|
||||
modeInfo m;
|
||||
// New format payload with mode+datamode+filter
|
||||
m = parseMode(uchar(payloadIn[0]), uchar(payloadIn[2]),receiver);
|
||||
m = parseMode(uchar(payloadIn[0]), uchar(payloadIn[2]),vfo);
|
||||
m.data = uchar(payloadIn[1]);
|
||||
m.VFO = selVFO_t(receiver & 0x01);
|
||||
m.VFO = selVFO_t(vfo & 0x01);
|
||||
value.setValue(m);
|
||||
break;
|
||||
}
|
||||
|
@ -1083,7 +1078,7 @@ void rigCommander::parseCommand()
|
|||
case funcScopeMainWaveData:
|
||||
{
|
||||
scopeData d;
|
||||
if (parseSpectrum(d,receiver))
|
||||
if (parseSpectrum(d,vfo))
|
||||
value.setValue(d);
|
||||
break;
|
||||
}
|
||||
|
@ -1095,7 +1090,7 @@ void rigCommander::parseCommand()
|
|||
// This tells us whether we are receiving main or sub data
|
||||
case funcScopeSingleDual:
|
||||
// This tells us whether we are receiving single or dual scopes
|
||||
//qInfo(logRig()) << "funcScopeSingleDual (" << receiver <<") " << static_cast<bool>(payloadIn[0]);
|
||||
//qInfo(logRig()) << "funcScopeSingleDual (" << vfo <<") " << static_cast<bool>(payloadIn[0]);
|
||||
value.setValue(static_cast<bool>(payloadIn[0]));
|
||||
break;
|
||||
#if defined __GNUC__
|
||||
|
@ -1103,7 +1098,7 @@ void rigCommander::parseCommand()
|
|||
#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
|
||||
#endif
|
||||
case funcScopeSubMode:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainMode:
|
||||
// fixed or center
|
||||
// [1] 0x14
|
||||
|
@ -1112,7 +1107,7 @@ void rigCommander::parseCommand()
|
|||
value.setValue(static_cast<spectrumMode_t>(uchar(payloadIn[0])));
|
||||
break;
|
||||
case funcScopeSubSpan:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainSpan:
|
||||
{
|
||||
freqt f = parseFrequency(payloadIn, 3);
|
||||
|
@ -1126,7 +1121,7 @@ void rigCommander::parseCommand()
|
|||
break;
|
||||
}
|
||||
case funcScopeSubEdge:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainEdge:
|
||||
// read edge mode center in edge mode
|
||||
// [1] 0x16
|
||||
|
@ -1135,12 +1130,12 @@ void rigCommander::parseCommand()
|
|||
//emit haveScopeEdge((char)payloadIn[2]);
|
||||
break;
|
||||
case funcScopeSubHold:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainHold:
|
||||
value.setValue(static_cast<bool>(payloadIn[0]));
|
||||
break;
|
||||
case funcScopeSubRef:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainRef:
|
||||
{
|
||||
// scope reference level
|
||||
|
@ -1159,16 +1154,16 @@ void rigCommander::parseCommand()
|
|||
break;
|
||||
}
|
||||
case funcScopeSubSpeed:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainSpeed:
|
||||
value.setValue(static_cast<uchar>(payloadIn[0]));
|
||||
break;
|
||||
case funcScopeSubVBW:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainVBW:
|
||||
break;
|
||||
case funcScopeSubRBW:
|
||||
receiver=1;
|
||||
vfo=1;
|
||||
case funcScopeMainRBW:
|
||||
break;
|
||||
#if defined __GNUC__
|
||||
|
@ -1240,7 +1235,7 @@ void rigCommander::parseCommand()
|
|||
#endif
|
||||
|
||||
if (value.isValid() && queue != Q_NULLPTR) {
|
||||
queue->receiveValue(func,value,receiver);
|
||||
queue->receiveValue(func,value,vfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1289,7 +1284,6 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.modelName = settings->value("Model", "").toString();
|
||||
qInfo(logRig()) << QString("Loading Rig: %0 from %1").arg(rigCaps.modelName,rigCaps.filename);
|
||||
|
||||
rigCaps.numReceiver = settings->value("NumberOfReceivers",1).toUInt();
|
||||
rigCaps.numVFO = settings->value("NumberOfVFOs",1).toUInt();
|
||||
rigCaps.spectSeqMax = settings->value("SpectrumSeqMax",0).toUInt();
|
||||
rigCaps.spectAmpMax = settings->value("SpectrumAmpMax",0).toUInt();
|
||||
|
@ -1569,7 +1563,7 @@ void rigCommander::determineRigCaps()
|
|||
}
|
||||
}
|
||||
|
||||
bool rigCommander::parseSpectrum(scopeData& d, uchar receiver)
|
||||
bool rigCommander::parseSpectrum(scopeData& d, uchar vfo)
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
|
@ -1585,7 +1579,7 @@ bool rigCommander::parseSpectrum(scopeData& d, uchar receiver)
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (receiver)
|
||||
if (vfo)
|
||||
d = subScopeData;
|
||||
else
|
||||
d = mainScopeData;
|
||||
|
@ -1625,7 +1619,7 @@ bool rigCommander::parseSpectrum(scopeData& d, uchar receiver)
|
|||
freqt fStart;
|
||||
freqt fEnd;
|
||||
|
||||
d.receiver = receiver;
|
||||
d.vfo = vfo;
|
||||
unsigned char sequence = bcdHexToUChar(payloadIn[0]);
|
||||
unsigned char sequenceMax = bcdHexToUChar(payloadIn[1]);
|
||||
|
||||
|
@ -1687,9 +1681,9 @@ bool rigCommander::parseSpectrum(scopeData& d, uchar receiver)
|
|||
d.data.clear();
|
||||
|
||||
// For Fixed, and both scroll modes, the following produces correct information:
|
||||
fStart = parseFreqData(payloadIn.mid(3,freqLen),receiver);
|
||||
fStart = parseFreqData(payloadIn.mid(3,freqLen),vfo);
|
||||
d.startFreq = fStart.MHzDouble;
|
||||
fEnd = parseFreqData(payloadIn.mid(3+freqLen,freqLen),receiver);
|
||||
fEnd = parseFreqData(payloadIn.mid(3+freqLen,freqLen),vfo);
|
||||
d.endFreq = fEnd.MHzDouble;
|
||||
|
||||
if(d.mode == spectModeCenter)
|
||||
|
@ -1725,7 +1719,7 @@ bool rigCommander::parseSpectrum(scopeData& d, uchar receiver)
|
|||
|
||||
if (!ret) {
|
||||
// We need to temporarilly store the scope data somewhere.
|
||||
if (receiver)
|
||||
if (vfo)
|
||||
subScopeData = d;
|
||||
else
|
||||
mainScopeData = d;
|
||||
|
@ -1960,13 +1954,12 @@ freqt rigCommander::parseFrequency(QByteArray data, unsigned char lastPosition)
|
|||
}
|
||||
|
||||
|
||||
freqt rigCommander::parseFreqData(QByteArray data, uchar receiver)
|
||||
freqt rigCommander::parseFreqData(QByteArray data, uchar vfo)
|
||||
{
|
||||
freqt freq;
|
||||
freq.Hz = parseFreqDataToInt(data);
|
||||
freq.MHzDouble = freq.Hz/1000000.0;
|
||||
freq.VFO = selVFO_t(receiver);
|
||||
//qInfo(logRig()) << "Received Frequency" << freq.Hz << "vfo" << receiver;
|
||||
freq.VFO = selVFO_t(vfo);
|
||||
return freq;
|
||||
}
|
||||
|
||||
|
@ -1986,7 +1979,7 @@ quint64 rigCommander::parseFreqDataToInt(QByteArray data)
|
|||
}
|
||||
|
||||
|
||||
modeInfo rigCommander::parseMode(quint8 mode, quint8 filter, uchar receiver)
|
||||
modeInfo rigCommander::parseMode(quint8 mode, quint8 filter, uchar vfo)
|
||||
{
|
||||
modeInfo mi;
|
||||
bool found=false;
|
||||
|
@ -2007,13 +2000,13 @@ modeInfo rigCommander::parseMode(quint8 mode, quint8 filter, uchar receiver)
|
|||
|
||||
// We cannot query sub VFO width without command29.
|
||||
if (!rigCaps.hasCommand29)
|
||||
receiver = 0;
|
||||
vfo = 0;
|
||||
|
||||
cacheItem item;
|
||||
|
||||
// Does the current mode support filterwidth?
|
||||
if (mi.bwMin >0 && mi.bwMax > 0) {
|
||||
queue->getCache(funcFilterWidth,receiver);
|
||||
queue->getCache(funcFilterWidth,vfo);
|
||||
}
|
||||
|
||||
if (item.value.isValid()) {
|
||||
|
@ -2398,10 +2391,10 @@ quint8* rigCommander::getGUID() {
|
|||
return guid;
|
||||
}
|
||||
|
||||
uchar rigCommander::makeFilterWidth(ushort pass,uchar receiver)
|
||||
uchar rigCommander::makeFilterWidth(ushort pass,uchar vfo)
|
||||
{
|
||||
unsigned char calc;
|
||||
modeInfo mi = queue->getCache((receiver==1?funcSubMode:funcMainMode),receiver).value.value<modeInfo>();
|
||||
modeInfo mi = queue->getCache((vfo==1?funcUnselectedMode:funcSelectedMode),vfo).value.value<modeInfo>();
|
||||
if (mi.mk == modeAM) { // AM 0-49
|
||||
|
||||
calc = quint16((pass / 200) - 1);
|
||||
|
@ -2431,7 +2424,7 @@ uchar rigCommander::makeFilterWidth(ushort pass,uchar receiver)
|
|||
return b1;
|
||||
}
|
||||
|
||||
void rigCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
||||
void rigCommander::receiveCommand(funcs func, QVariant value, uchar vfo)
|
||||
{
|
||||
//qInfo() << "Got command:" << funcString[func];
|
||||
int val=INT_MIN;
|
||||
|
@ -2461,31 +2454,28 @@ void rigCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
}
|
||||
|
||||
// Need to work out what to do with older dual-VFO rigs.
|
||||
/*
|
||||
if ((func == funcMainFreq || func == funcSubFreq) && !rigCaps.commands.contains(func))
|
||||
if ((func == funcSelectedFreq || func == funcUnselectedFreq) && !rigCaps.commands.contains(func))
|
||||
{
|
||||
if (value.isValid())
|
||||
func = funcFreqSet;
|
||||
else
|
||||
func = funcFreqGet;
|
||||
} else if ((func == funcMainMode || func == funcSubMode) && !rigCaps.commands.contains(func))
|
||||
} else if ((func == funcSelectedMode || func == funcUnselectedMode) && !rigCaps.commands.contains(func))
|
||||
{
|
||||
if (value.isValid())
|
||||
func = funcModeSet;
|
||||
else
|
||||
func = funcModeGet;
|
||||
} else
|
||||
*/
|
||||
if (func == funcSelectVFO) {
|
||||
} else if (func == funcSelectVFO) {
|
||||
// Special command
|
||||
vfo_t v = value.value<vfo_t>();
|
||||
func = (v == vfoA)?funcVFOASelect:(v == vfoB)?funcVFOBSelect:(v = vfoMain)?funcVFOMainSelect:funcVFOSubSelect;
|
||||
func = (v == vfoA)?funcVFOASelect:(v == vfoB)?funcVFOBSelect:(v == vfoMain)?funcVFOMainSelect:funcVFOSubSelect;
|
||||
value.clear();
|
||||
val = INT_MIN;
|
||||
}
|
||||
|
||||
QByteArray payload;
|
||||
if (getCommand(func,payload,val,receiver))
|
||||
if (getCommand(func,payload,val,vfo))
|
||||
{
|
||||
if (value.isValid())
|
||||
{
|
||||
|
@ -2530,8 +2520,8 @@ void rigCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
else if (!strcmp(value.typeName(),"ushort"))
|
||||
{
|
||||
if (func == funcFilterWidth) {
|
||||
payload.append(makeFilterWidth(value.value<ushort>(),receiver));
|
||||
//qInfo() << "Setting filter width" << value.value<ushort>() << "VFO" << receiver << "hex" << payload.toHex();
|
||||
payload.append(makeFilterWidth(value.value<ushort>(),vfo));
|
||||
//qInfo() << "Setting filter width" << value.value<ushort>() << "VFO" << vfo << "hex" << payload.toHex();
|
||||
|
||||
}
|
||||
else if (func == funcKeySpeed){
|
||||
|
@ -2785,7 +2775,7 @@ void rigCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
payload.append(value.value<modeInfo>().filter);
|
||||
} else {
|
||||
payload.append(bcdEncodeChar(value.value<modeInfo>().reg));
|
||||
if (func == funcMainMode || func == funcSubMode || func == funcSelectedMode || func == funcUnselectedMode)
|
||||
if (func == funcSelectedMode || func == funcUnselectedMode)
|
||||
payload.append(value.value<modeInfo>().data);
|
||||
payload.append(value.value<modeInfo>().filter);
|
||||
}
|
||||
|
@ -2858,7 +2848,7 @@ void rigCommander::receiveCommand(funcs func, QVariant value, uchar receiver)
|
|||
// will fail on some commands so they would need to be added here:
|
||||
if (func != funcScopeFixedEdgeFreq && func != funcSpeech && func != funcBandStackReg && func != funcMemoryContents && func != funcSendCW)
|
||||
{
|
||||
queue->addUnique(priorityImmediate,func,false,receiver);
|
||||
queue->addUnique(priorityImmediate,func,false,vfo);
|
||||
}
|
||||
}
|
||||
prepDataAndSend(payload);
|
||||
|
|
|
@ -74,7 +74,7 @@ public slots:
|
|||
void radioUsage(quint8 radio, bool admin, quint8 busy, QString name, QString ip);
|
||||
void setCurrentRadio(quint8 radio);
|
||||
void getDebug();
|
||||
void receiveCommand(funcs func, QVariant value, uchar receiver);
|
||||
void receiveCommand(funcs func, QVariant value, uchar vfo);
|
||||
void setAfGain(unsigned char level);
|
||||
|
||||
signals:
|
||||
|
@ -139,7 +139,7 @@ private:
|
|||
freqt parseFrequency();
|
||||
freqt parseFrequency(QByteArray data, unsigned char lastPosition); // supply index where Mhz is found
|
||||
|
||||
freqt parseFreqData(QByteArray data, uchar receiver);
|
||||
freqt parseFreqData(QByteArray data, uchar vfo);
|
||||
quint64 parseFreqDataToInt(QByteArray data);
|
||||
freqt parseFrequencyRptOffset(QByteArray data);
|
||||
bool parseMemory(QVector<memParserFormat>* memParser, memoryType* mem);
|
||||
|
@ -151,7 +151,7 @@ private:
|
|||
|
||||
toneInfo decodeTone(QByteArray eTone);
|
||||
//quint16 decodeTone(QByteArray eTone, bool &tinv, bool &rinv);
|
||||
uchar makeFilterWidth(ushort width, uchar receiver);
|
||||
uchar makeFilterWidth(ushort width, uchar vfo);
|
||||
|
||||
|
||||
unsigned char audioLevelRxMean[50];
|
||||
|
@ -159,9 +159,9 @@ private:
|
|||
unsigned char audioLevelTxMean[50];
|
||||
unsigned char audioLevelTxPeak[50];
|
||||
|
||||
modeInfo parseMode(quint8 mode, quint8 filter, uchar receiver);
|
||||
bool parseSpectrum(scopeData& d, uchar receiver);
|
||||
bool getCommand(funcs func, QByteArray& payload, int value=INT_MIN, uchar receiver=0);
|
||||
modeInfo parseMode(quint8 mode, quint8 filter, uchar vfo);
|
||||
bool parseSpectrum(scopeData& d, uchar vfo);
|
||||
bool getCommand(funcs func, QByteArray& payload, int value=INT_MIN, uchar vfo=0);
|
||||
|
||||
QByteArray getLANAddr();
|
||||
QByteArray getUSBAddr();
|
||||
|
|
|
@ -141,7 +141,6 @@ void rigCreator::loadRigFile(QString file)
|
|||
ui->model->setText(settings->value("Model","").toString());
|
||||
ui->civAddress->setText(QString("%1").arg(settings->value("CIVAddress",0).toInt(),2,16));
|
||||
ui->rigctldModel->setText(settings->value("RigCtlDModel","").toString());
|
||||
ui->numReceiver->setText(settings->value("NumberOfReceivers","1").toString());
|
||||
ui->numVFO->setText(settings->value("NumberOfVFOs","1").toString());
|
||||
ui->seqMax->setText(settings->value("SpectrumSeqMax","").toString());
|
||||
ui->ampMax->setText(settings->value("SpectrumAmpMax","").toString());
|
||||
|
@ -210,11 +209,12 @@ void rigCreator::loadRigFile(QString file)
|
|||
ui->periodicCommands->insertRow(ui->periodicCommands->rowCount());
|
||||
ui->periodicCommands->model()->setData(ui->periodicCommands->model()->index(c,0),p.priority);
|
||||
ui->periodicCommands->model()->setData(ui->periodicCommands->model()->index(c,1),funcString[p.func]);
|
||||
ui->periodicCommands->model()->setData(ui->periodicCommands->model()->index(c,2),QString::number(p.receiver));
|
||||
ui->periodicCommands->model()->setData(ui->periodicCommands->model()->index(c,2),QString::number(p.vfo));
|
||||
c++;
|
||||
}
|
||||
}
|
||||
else { for (int c = 0; c < numPeriodic; c++)
|
||||
else {
|
||||
for (int c = 0; c < numPeriodic; c++)
|
||||
{
|
||||
settings->setArrayIndex(c);
|
||||
ui->periodicCommands->insertRow(ui->periodicCommands->rowCount());
|
||||
|
@ -275,8 +275,8 @@ void rigCreator::loadRigFile(QString file)
|
|||
ui->bands->insertRow(ui->bands->rowCount());
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,0),QString::number(settings->value("Num", 0).toUInt()).rightJustified(2,'0'));
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,1),QString::number(settings->value("BSR", 0).toUInt()).rightJustified(2,'0'));
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,2),settings->value("Start", 0ULL).toString(),Qt::DisplayRole);
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,3),settings->value("End", 0ULL).toString(),Qt::DisplayRole);
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,2),settings->value("Start", 0ULL).toInt(),Qt::DisplayRole);
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,3),settings->value("End", 0ULL).toInt(),Qt::DisplayRole);
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,4),settings->value("Range", 0.0).toString());
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,5),settings->value("MemoryGroup", -1).toString());
|
||||
ui->bands->model()->setData(ui->bands->model()->index(c,6),settings->value("Name", "").toString());
|
||||
|
@ -403,8 +403,6 @@ void rigCreator::loadRigFile(QString file)
|
|||
connect(ui->modes,SIGNAL(cellChanged(int,int)),SLOT(changed()));
|
||||
connect(ui->preamps,SIGNAL(cellChanged(int,int)),SLOT(changed()));
|
||||
connect(ui->spans,SIGNAL(cellChanged(int,int)),SLOT(changed()));
|
||||
connect(ui->periodicCommands,SIGNAL(cellChanged(int,int)),SLOT(changed()));
|
||||
|
||||
connect(ui->hasCommand29,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
connect(ui->hasEthernet,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
connect(ui->hasFDComms,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
|
@ -412,7 +410,6 @@ void rigCreator::loadRigFile(QString file)
|
|||
connect(ui->hasSpectrum,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
connect(ui->hasTransmit,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
connect(ui->hasWifi,SIGNAL(stateChanged(int)),SLOT(changed()));
|
||||
|
||||
connect(ui->civAddress,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
connect(ui->rigctldModel,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
connect(ui->model,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
|
@ -423,6 +420,7 @@ void rigCreator::loadRigFile(QString file)
|
|||
connect(ui->memoryFormat,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
connect(ui->satMemories,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
connect(ui->satelliteFormat,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
connect(ui->periodicCommands,SIGNAL(editingFinished()),SLOT(changed()));
|
||||
|
||||
settingsChanged = false;
|
||||
}
|
||||
|
@ -431,7 +429,6 @@ void rigCreator::changed()
|
|||
{
|
||||
settingsChanged = true;
|
||||
}
|
||||
|
||||
void rigCreator::on_saveFile_clicked(bool clicked)
|
||||
{
|
||||
Q_UNUSED(clicked)
|
||||
|
@ -474,7 +471,6 @@ void rigCreator::saveRigFile(QString file)
|
|||
settings->setValue("Model",ui->model->text());
|
||||
settings->setValue("CIVAddress",ui->civAddress->text().toInt(nullptr,16));
|
||||
settings->setValue("RigCtlDModel",ui->rigctldModel->text().toInt());
|
||||
settings->setValue("NumberOfReceivers",ui->numReceiver->text().toInt());
|
||||
settings->setValue("NumberOfVFOs",ui->numVFO->text().toInt());
|
||||
settings->setValue("SpectrumSeqMax",ui->seqMax->text().toInt());
|
||||
settings->setValue("SpectrumAmpMax",ui->ampMax->text().toInt());
|
||||
|
@ -529,7 +525,7 @@ void rigCreator::saveRigFile(QString file)
|
|||
|
||||
|
||||
//settings->remove("Spans");
|
||||
ui->spans->sortByColumn(2,Qt::AscendingOrder);
|
||||
ui->spans->sortByColumn(0,Qt::AscendingOrder);
|
||||
settings->beginWriteArray("Spans");
|
||||
for (int n = 0; n<ui->spans->rowCount();n++)
|
||||
{
|
||||
|
|
|
@ -17,10 +17,10 @@
|
|||
|
||||
|
||||
inline QList<periodicType> defaultPeriodic = {
|
||||
{funcMainFreq,"Medium",0},
|
||||
{funcMainMode,"Medium",0},
|
||||
{funcSubFreq,"Medium",1},
|
||||
{funcSubMode,"Medium",1},
|
||||
{funcSelectedFreq,"Medium",0},
|
||||
{funcSelectedMode,"Medium",0},
|
||||
{funcUnselectedFreq,"Medium",1},
|
||||
{funcUnselectedMode,"Medium",1},
|
||||
{funcOverflowStatus,"Medium",0},
|
||||
{funcScopeMainMode,"Medium High",0},
|
||||
{funcScopeSubMode,"Medium High",1},
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1616</width>
|
||||
<height>1042</height>
|
||||
<height>1012</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
|
@ -1005,28 +1005,28 @@
|
|||
<layout class="QVBoxLayout" name="verticalLayout_13">
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
<item row="2" column="0">
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Seq Max</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Len Max</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Amp Max</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="ampMax">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
|
@ -1045,7 +1045,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="lenMax">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
|
@ -1064,7 +1064,7 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="seqMax">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
|
@ -1092,31 +1092,11 @@
|
|||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_14">
|
||||
<property name="text">
|
||||
<string>Num RX</string>
|
||||
<string>Num VFO</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="numReceiver">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>60</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_15">
|
||||
<property name="text">
|
||||
<string>VFO per RX</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="numVFO">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
|
|
|
@ -785,10 +785,10 @@ int rigCtlClient::getCommand(QStringList& response, bool extended, const command
|
|||
int ret = -RIG_EINVAL;
|
||||
funcs func;
|
||||
// Use selected/unselected mode/freq if available
|
||||
if ((cmd.func == funcFreqGet || cmd.func == funcFreqSet) && rigCaps->commands.contains(funcMainFreq)) {
|
||||
func = funcMainFreq;
|
||||
} else if ((cmd.func == funcModeGet || cmd.func == funcModeSet) && rigCaps->commands.contains(funcMainMode)) {
|
||||
func = funcMainMode;
|
||||
if ((cmd.func == funcFreqGet || cmd.func == funcFreqSet) && rigCaps->commands.contains(funcSelectedFreq)) {
|
||||
func = funcSelectedFreq;
|
||||
} else if ((cmd.func == funcModeGet || cmd.func == funcModeSet) && rigCaps->commands.contains(funcSelectedMode)) {
|
||||
func = funcSelectedMode;
|
||||
} else {
|
||||
func = cmd.func;
|
||||
}
|
||||
|
|
|
@ -211,7 +211,6 @@ struct rigCapabilities {
|
|||
quint8 spectSeqMax;
|
||||
quint16 spectAmpMax;
|
||||
quint16 spectLenMax;
|
||||
quint8 numReceiver;
|
||||
quint8 numVFO;
|
||||
|
||||
bool hasNB = false;
|
||||
|
|
115
rigs/IC-7610.rig
115
rigs/IC-7610.rig
|
@ -6,8 +6,7 @@ Manufacturer=Icom
|
|||
Model=IC-7610
|
||||
CIVAddress=152
|
||||
RigCtlDModel=3078
|
||||
NumberOfReceivers=2
|
||||
NumberOfVFOs=1
|
||||
NumberOfVFOs=2
|
||||
SpectrumSeqMax=15
|
||||
SpectrumAmpMax=200
|
||||
SpectrumLenMax=689
|
||||
|
@ -564,22 +563,22 @@ Commands\108\String=\\x21\\x02
|
|||
Commands\108\Min=0
|
||||
Commands\108\Max=1
|
||||
Commands\108\Command29=false
|
||||
Commands\109\Type=Main RX Frequency
|
||||
Commands\109\Type=Selected Freq
|
||||
Commands\109\String=\\x25\\x00
|
||||
Commands\109\Min=0
|
||||
Commands\109\Max=0
|
||||
Commands\109\Command29=false
|
||||
Commands\110\Type=Sub RX Frequency
|
||||
Commands\110\Type=Unselected Freq
|
||||
Commands\110\String=\\x25\\x01
|
||||
Commands\110\Min=0
|
||||
Commands\110\Max=0
|
||||
Commands\110\Command29=false
|
||||
Commands\111\Type=Main RX Mode
|
||||
Commands\111\Type=Selected Mode
|
||||
Commands\111\String=\\x26\\x00
|
||||
Commands\111\Min=0
|
||||
Commands\111\Max=0
|
||||
Commands\111\Command29=false
|
||||
Commands\112\Type=Sub RX Mode
|
||||
Commands\112\Type=Unselected Mode
|
||||
Commands\112\String=\\x26\\x01
|
||||
Commands\112\Min=0
|
||||
Commands\112\Max=0
|
||||
|
@ -743,81 +742,81 @@ Periodic\5\VFO=0
|
|||
Periodic\6\Priority=Medium High
|
||||
Periodic\6\Command=DATA3 Mod Input
|
||||
Periodic\6\VFO=0
|
||||
Periodic\7\Priority=Medium
|
||||
Periodic\7\Command=Main RX Frequency
|
||||
Periodic\7\Priority=Medium Low
|
||||
Periodic\7\Command=Monitor Gain
|
||||
Periodic\7\VFO=0
|
||||
Periodic\8\Priority=Medium
|
||||
Periodic\8\Command=Main RX Mode
|
||||
Periodic\8\Priority=Medium Low
|
||||
Periodic\8\Command=Monitor Status
|
||||
Periodic\8\VFO=0
|
||||
Periodic\9\Priority=Medium Low
|
||||
Periodic\9\Command=Monitor Gain
|
||||
Periodic\9\Priority=Medium
|
||||
Periodic\9\Command=Overflow Status
|
||||
Periodic\9\VFO=0
|
||||
Periodic\10\Priority=Medium Low
|
||||
Periodic\10\Command=Monitor Status
|
||||
Periodic\10\VFO=0
|
||||
Periodic\10\Command=Preamp Status
|
||||
Periodic\10\VFO=-1
|
||||
Periodic\11\Priority=Medium
|
||||
Periodic\11\Command=Overflow Status
|
||||
Periodic\11\Command=RF Gain
|
||||
Periodic\11\VFO=0
|
||||
Periodic\12\Priority=Medium Low
|
||||
Periodic\12\Command=Preamp Status
|
||||
Periodic\12\VFO=-1
|
||||
Periodic\13\Priority=Medium
|
||||
Periodic\13\Command=RF Gain
|
||||
Periodic\13\VFO=0
|
||||
Periodic\12\Priority=Medium
|
||||
Periodic\12\Command=RF Power
|
||||
Periodic\12\VFO=0
|
||||
Periodic\13\Priority=Highest
|
||||
Periodic\13\Command=S Meter
|
||||
Periodic\13\VFO=-1
|
||||
Periodic\14\Priority=Medium
|
||||
Periodic\14\Command=RF Power
|
||||
Periodic\14\Command=Scope Main Hold
|
||||
Periodic\14\VFO=0
|
||||
Periodic\15\Priority=Highest
|
||||
Periodic\15\Command=S Meter
|
||||
Periodic\15\VFO=-1
|
||||
Periodic\16\Priority=Medium
|
||||
Periodic\16\Command=Scope Main Hold
|
||||
Periodic\15\Priority=Medium High
|
||||
Periodic\15\Command=Scope Main Mode
|
||||
Periodic\15\VFO=0
|
||||
Periodic\16\Priority=Medium High
|
||||
Periodic\16\Command=Scope Main Span
|
||||
Periodic\16\VFO=0
|
||||
Periodic\17\Priority=Medium High
|
||||
Periodic\17\Command=Scope Main Mode
|
||||
Periodic\17\Priority=Medium
|
||||
Periodic\17\Command=Scope Main Speed
|
||||
Periodic\17\VFO=0
|
||||
Periodic\18\Priority=Medium High
|
||||
Periodic\18\Command=Scope Main Span
|
||||
Periodic\18\Command=Scope Main/Sub
|
||||
Periodic\18\VFO=0
|
||||
Periodic\19\Priority=Medium
|
||||
Periodic\19\Command=Scope Main Speed
|
||||
Periodic\19\Priority=Medium High
|
||||
Periodic\19\Command=Scope Single/Dual
|
||||
Periodic\19\VFO=0
|
||||
Periodic\20\Priority=Medium High
|
||||
Periodic\20\Command=Scope Main/Sub
|
||||
Periodic\20\VFO=0
|
||||
Periodic\20\Priority=Medium
|
||||
Periodic\20\Command=Scope Sub Hold
|
||||
Periodic\20\VFO=1
|
||||
Periodic\21\Priority=Medium High
|
||||
Periodic\21\Command=Scope Single/Dual
|
||||
Periodic\21\VFO=0
|
||||
Periodic\22\Priority=Medium
|
||||
Periodic\22\Command=Scope Sub Hold
|
||||
Periodic\21\Command=Scope Sub Mode
|
||||
Periodic\21\VFO=1
|
||||
Periodic\22\Priority=Medium High
|
||||
Periodic\22\Command=Scope Sub Span
|
||||
Periodic\22\VFO=1
|
||||
Periodic\23\Priority=Medium High
|
||||
Periodic\23\Command=Scope Sub Mode
|
||||
Periodic\23\Priority=Medium
|
||||
Periodic\23\Command=Scope Sub Speed
|
||||
Periodic\23\VFO=1
|
||||
Periodic\24\Priority=Medium High
|
||||
Periodic\24\Command=Scope Sub Span
|
||||
Periodic\24\VFO=1
|
||||
Periodic\24\Priority=Medium
|
||||
Periodic\24\Command=Selected Freq
|
||||
Periodic\24\VFO=0
|
||||
Periodic\25\Priority=Medium
|
||||
Periodic\25\Command=Scope Sub Speed
|
||||
Periodic\25\VFO=1
|
||||
Periodic\25\Command=Selected Mode
|
||||
Periodic\25\VFO=0
|
||||
Periodic\26\Priority=Medium Low
|
||||
Periodic\26\Command=Squelch
|
||||
Periodic\26\VFO=0
|
||||
Periodic\27\Priority=Medium
|
||||
Periodic\27\Command=Sub RX Frequency
|
||||
Periodic\27\VFO=1
|
||||
Periodic\27\Priority=High
|
||||
Periodic\27\Command=Transceiver Status
|
||||
Periodic\27\VFO=0
|
||||
Periodic\28\Priority=Medium
|
||||
Periodic\28\Command=Sub RX Mode
|
||||
Periodic\28\VFO=1
|
||||
Periodic\29\Priority=High
|
||||
Periodic\29\Command=Transceiver Status
|
||||
Periodic\28\Command=Tuner/ATU Status
|
||||
Periodic\28\VFO=0
|
||||
Periodic\29\Priority=Medium Low
|
||||
Periodic\29\Command=Tuning Step
|
||||
Periodic\29\VFO=0
|
||||
Periodic\30\Priority=Medium
|
||||
Periodic\30\Command=Tuner/ATU Status
|
||||
Periodic\30\VFO=0
|
||||
Periodic\31\Priority=Medium Low
|
||||
Periodic\31\Command=Tuning Step
|
||||
Periodic\31\VFO=0
|
||||
Periodic\30\Command=Unselected Freq
|
||||
Periodic\30\VFO=1
|
||||
Periodic\31\Priority=Medium
|
||||
Periodic\31\Command=Unselected Mode
|
||||
Periodic\31\VFO=1
|
||||
Periodic\32\Priority=Medium
|
||||
Periodic\32\Command=VFO Dual Watch
|
||||
Periodic\32\VFO=0
|
||||
|
|
113
rigs/IC-785x.rig
113
rigs/IC-785x.rig
|
@ -6,8 +6,7 @@ Manufacturer=Icom
|
|||
Model=IC-785x
|
||||
CIVAddress=142
|
||||
RigCtlDModel=3075
|
||||
NumberOfReceivers=2
|
||||
NumberOfVFOs=1
|
||||
NumberOfVFOs=2
|
||||
SpectrumSeqMax=15
|
||||
SpectrumAmpMax=200
|
||||
SpectrumLenMax=689
|
||||
|
@ -574,22 +573,22 @@ Commands\110\String=\\x21\\x02
|
|||
Commands\110\Min=0
|
||||
Commands\110\Max=1
|
||||
Commands\110\Command29=false
|
||||
Commands\111\Type=Main RX Frequency
|
||||
Commands\111\Type=Selected Freq
|
||||
Commands\111\String=\\x25\\x00
|
||||
Commands\111\Min=0
|
||||
Commands\111\Max=0
|
||||
Commands\111\Command29=false
|
||||
Commands\112\Type=Sub RX Frequency
|
||||
Commands\112\Type=Unselected Freq
|
||||
Commands\112\String=\\x25\\x01
|
||||
Commands\112\Min=0
|
||||
Commands\112\Max=0
|
||||
Commands\112\Command29=false
|
||||
Commands\113\Type=Main RX Mode
|
||||
Commands\113\Type=Selected Mode
|
||||
Commands\113\String=\\x26\\x00
|
||||
Commands\113\Min=0
|
||||
Commands\113\Max=0
|
||||
Commands\113\Command29=false
|
||||
Commands\114\Type=Sub RX Mode
|
||||
Commands\114\Type=Unselected Mode
|
||||
Commands\114\String=\\x26\\x01
|
||||
Commands\114\Min=0
|
||||
Commands\114\Max=0
|
||||
|
@ -753,84 +752,84 @@ Periodic\5\VFO=0
|
|||
Periodic\6\Priority=Medium High
|
||||
Periodic\6\Command=DATA3 Mod Input
|
||||
Periodic\6\VFO=0
|
||||
Periodic\7\Priority=Medium
|
||||
Periodic\7\Command=Main RX Frequency
|
||||
Periodic\7\Priority=Medium Low
|
||||
Periodic\7\Command=Monitor Gain
|
||||
Periodic\7\VFO=0
|
||||
Periodic\8\Priority=Medium
|
||||
Periodic\8\Command=Main RX Mode
|
||||
Periodic\8\Priority=Medium Low
|
||||
Periodic\8\Command=Monitor Status
|
||||
Periodic\8\VFO=0
|
||||
Periodic\9\Priority=Medium Low
|
||||
Periodic\9\Command=Monitor Gain
|
||||
Periodic\9\Priority=Medium
|
||||
Periodic\9\Command=Overflow Status
|
||||
Periodic\9\VFO=0
|
||||
Periodic\10\Priority=Medium Low
|
||||
Periodic\10\Command=Monitor Status
|
||||
Periodic\10\Command=Preamp Status
|
||||
Periodic\10\VFO=0
|
||||
Periodic\11\Priority=Medium
|
||||
Periodic\11\Command=Overflow Status
|
||||
Periodic\11\Command=RF Gain
|
||||
Periodic\11\VFO=0
|
||||
Periodic\12\Priority=Medium Low
|
||||
Periodic\12\Command=Preamp Status
|
||||
Periodic\12\Priority=Medium
|
||||
Periodic\12\Command=RF Power
|
||||
Periodic\12\VFO=0
|
||||
Periodic\13\Priority=Medium
|
||||
Periodic\13\Command=RF Gain
|
||||
Periodic\13\Priority=Highest
|
||||
Periodic\13\Command=S Meter
|
||||
Periodic\13\VFO=0
|
||||
Periodic\14\Priority=Medium
|
||||
Periodic\14\Command=RF Power
|
||||
Periodic\14\Command=Scope Main Hold
|
||||
Periodic\14\VFO=0
|
||||
Periodic\15\Priority=Highest
|
||||
Periodic\15\Command=S Meter
|
||||
Periodic\15\Priority=Medium High
|
||||
Periodic\15\Command=Scope Main Mode
|
||||
Periodic\15\VFO=0
|
||||
Periodic\16\Priority=Medium
|
||||
Periodic\16\Command=Scope Main Hold
|
||||
Periodic\16\Priority=Medium High
|
||||
Periodic\16\Command=Scope Main Span
|
||||
Periodic\16\VFO=0
|
||||
Periodic\17\Priority=Medium High
|
||||
Periodic\17\Command=Scope Main Mode
|
||||
Periodic\17\Priority=Medium
|
||||
Periodic\17\Command=Scope Main Speed
|
||||
Periodic\17\VFO=0
|
||||
Periodic\18\Priority=Medium High
|
||||
Periodic\18\Command=Scope Main Span
|
||||
Periodic\18\Command=Scope Main/Sub
|
||||
Periodic\18\VFO=0
|
||||
Periodic\19\Priority=Medium
|
||||
Periodic\19\Command=Scope Main Speed
|
||||
Periodic\19\Priority=Medium High
|
||||
Periodic\19\Command=Scope Single/Dual
|
||||
Periodic\19\VFO=0
|
||||
Periodic\20\Priority=Medium High
|
||||
Periodic\20\Command=Scope Main/Sub
|
||||
Periodic\20\VFO=0
|
||||
Periodic\20\Priority=Medium
|
||||
Periodic\20\Command=Scope Sub Hold
|
||||
Periodic\20\VFO=1
|
||||
Periodic\21\Priority=Medium High
|
||||
Periodic\21\Command=Scope Single/Dual
|
||||
Periodic\21\VFO=0
|
||||
Periodic\22\Priority=Medium
|
||||
Periodic\22\Command=Scope Sub Hold
|
||||
Periodic\21\Command=Scope Sub Mode
|
||||
Periodic\21\VFO=1
|
||||
Periodic\22\Priority=Medium High
|
||||
Periodic\22\Command=Scope Sub Span
|
||||
Periodic\22\VFO=1
|
||||
Periodic\23\Priority=Medium High
|
||||
Periodic\23\Command=Scope Sub Mode
|
||||
Periodic\23\Priority=Medium
|
||||
Periodic\23\Command=Scope Sub Speed
|
||||
Periodic\23\VFO=1
|
||||
Periodic\24\Priority=Medium High
|
||||
Periodic\24\Command=Scope Sub Span
|
||||
Periodic\24\VFO=1
|
||||
Periodic\24\Priority=Medium
|
||||
Periodic\24\Command=Selected Freq
|
||||
Periodic\24\VFO=0
|
||||
Periodic\25\Priority=Medium
|
||||
Periodic\25\Command=Scope Sub Speed
|
||||
Periodic\25\VFO=1
|
||||
Periodic\25\Command=Selected Mode
|
||||
Periodic\25\VFO=0
|
||||
Periodic\26\Priority=Medium Low
|
||||
Periodic\26\Command=Squelch
|
||||
Periodic\26\VFO=0
|
||||
Periodic\27\Priority=Medium
|
||||
Periodic\27\Command=Sub RX Frequency
|
||||
Periodic\27\VFO=1
|
||||
Periodic\28\Priority=Medium
|
||||
Periodic\28\Command=Sub RX Mode
|
||||
Periodic\28\VFO=1
|
||||
Periodic\29\Priority=Medium Low
|
||||
Periodic\29\Command=Tone Squelch Type
|
||||
Periodic\27\Priority=Medium Low
|
||||
Periodic\27\Command=Tone Squelch Type
|
||||
Periodic\27\VFO=0
|
||||
Periodic\28\Priority=High
|
||||
Periodic\28\Command=Transceiver Status
|
||||
Periodic\28\VFO=0
|
||||
Periodic\29\Priority=Medium
|
||||
Periodic\29\Command=Tuner/ATU Status
|
||||
Periodic\29\VFO=0
|
||||
Periodic\30\Priority=High
|
||||
Periodic\30\Command=Transceiver Status
|
||||
Periodic\30\Priority=Medium Low
|
||||
Periodic\30\Command=Tuning Step
|
||||
Periodic\30\VFO=0
|
||||
Periodic\31\Priority=Medium
|
||||
Periodic\31\Command=Tuner/ATU Status
|
||||
Periodic\31\VFO=0
|
||||
Periodic\32\Priority=Medium Low
|
||||
Periodic\32\Command=Tuning Step
|
||||
Periodic\32\VFO=0
|
||||
Periodic\31\Command=Unselected Freq
|
||||
Periodic\31\VFO=1
|
||||
Periodic\32\Priority=Medium
|
||||
Periodic\32\Command=Unselected Mode
|
||||
Periodic\32\VFO=1
|
||||
Periodic\33\Priority=Medium
|
||||
Periodic\33\Command=VFO Dual Watch
|
||||
Periodic\33\VFO=0
|
||||
|
|
|
@ -6,8 +6,7 @@ Manufacturer=Icom
|
|||
Model=IC-905
|
||||
CIVAddress=172
|
||||
RigCtlDModel=0
|
||||
NumberOfReceivers=1
|
||||
NumberOfVFOs=2
|
||||
NumberOfVFOs=1
|
||||
SpectrumSeqMax=11
|
||||
SpectrumAmpMax=160
|
||||
SpectrumLenMax=475
|
||||
|
@ -602,50 +601,50 @@ Periodic\20\Command=Tuning Step
|
|||
Periodic\20\VFO=-1
|
||||
Periodic\21\Priority=Medium
|
||||
Periodic\21\Command=Unselected Freq
|
||||
Periodic\21\VFO=0
|
||||
Periodic\21\VFO=1
|
||||
Periodic\22\Priority=Medium
|
||||
Periodic\22\Command=Unselected Mode
|
||||
Periodic\22\VFO=0
|
||||
Periodic\22\VFO=1
|
||||
Periodic\size=22
|
||||
Spans\1\Num=0
|
||||
Spans\1\Name=±2.5 KHz
|
||||
Spans\1\Freq=2500
|
||||
Spans\2\Num=1
|
||||
Spans\2\Name=±5 KHz
|
||||
Spans\2\Freq=5000
|
||||
Spans\3\Num=2
|
||||
Spans\3\Name=±10 KHz
|
||||
Spans\3\Freq=10000
|
||||
Spans\4\Num=3
|
||||
Spans\4\Name=±25 KHz
|
||||
Spans\4\Freq=25000
|
||||
Spans\5\Num=4
|
||||
Spans\5\Name=±50 KHz
|
||||
Spans\5\Freq=50000
|
||||
Spans\6\Num=5
|
||||
Spans\6\Name=±100 KHz
|
||||
Spans\6\Freq=100000
|
||||
Spans\7\Num=6
|
||||
Spans\7\Name=±250 KHz
|
||||
Spans\7\Freq=250000
|
||||
Spans\8\Num=7
|
||||
Spans\8\Name=±500 KHz
|
||||
Spans\8\Freq=500000
|
||||
Spans\9\Num=8
|
||||
Spans\9\Name=±1 MHz
|
||||
Spans\9\Freq=1000000
|
||||
Spans\10\Num=9
|
||||
Spans\10\Name=±2.5 MHz
|
||||
Spans\10\Freq=2500000
|
||||
Spans\11\Num=0
|
||||
Spans\11\Name=±5 MHz
|
||||
Spans\11\Freq=5000000
|
||||
Spans\12\Num=0
|
||||
Spans\12\Name=±10 MHz
|
||||
Spans\12\Freq=10000000
|
||||
Spans\13\Num=0
|
||||
Spans\13\Name=±25 MHz
|
||||
Spans\13\Freq=25000000
|
||||
Spans\2\Num=0
|
||||
Spans\2\Name=±5 MHz
|
||||
Spans\2\Freq=5000000
|
||||
Spans\3\Num=0
|
||||
Spans\3\Name=±10 MHz
|
||||
Spans\3\Freq=10000000
|
||||
Spans\4\Num=0
|
||||
Spans\4\Name=±25 MHz
|
||||
Spans\4\Freq=25000000
|
||||
Spans\5\Num=1
|
||||
Spans\5\Name=±5 KHz
|
||||
Spans\5\Freq=5000
|
||||
Spans\6\Num=2
|
||||
Spans\6\Name=±10 KHz
|
||||
Spans\6\Freq=10000
|
||||
Spans\7\Num=3
|
||||
Spans\7\Name=±25 KHz
|
||||
Spans\7\Freq=25000
|
||||
Spans\8\Num=4
|
||||
Spans\8\Name=±50 KHz
|
||||
Spans\8\Freq=50000
|
||||
Spans\9\Num=5
|
||||
Spans\9\Name=±100 KHz
|
||||
Spans\9\Freq=100000
|
||||
Spans\10\Num=6
|
||||
Spans\10\Name=±250 KHz
|
||||
Spans\10\Freq=250000
|
||||
Spans\11\Num=7
|
||||
Spans\11\Name=±500 KHz
|
||||
Spans\11\Freq=500000
|
||||
Spans\12\Num=8
|
||||
Spans\12\Name=±1 MHz
|
||||
Spans\12\Freq=1000000
|
||||
Spans\13\Num=9
|
||||
Spans\13\Name=±2.5 MHz
|
||||
Spans\13\Freq=2500000
|
||||
Spans\size=13
|
||||
Inputs\1\Num=0
|
||||
Inputs\1\Reg=0
|
||||
|
@ -668,22 +667,22 @@ Inputs\6\Name=M/A
|
|||
Inputs\size=6
|
||||
Bands\1\Num=0
|
||||
Bands\1\BSR=6
|
||||
Bands\1\Start=10000000000
|
||||
Bands\1\End=10500000000
|
||||
Bands\1\Start=1410065408
|
||||
Bands\1\End=1910065408
|
||||
Bands\1\Range=10500
|
||||
Bands\1\MemoryGroup=-1
|
||||
Bands\1\Name=3 cm
|
||||
Bands\2\Num=1
|
||||
Bands\2\BSR=5
|
||||
Bands\2\Start=5650000000
|
||||
Bands\2\End=5925000000
|
||||
Bands\2\Start=1355032704
|
||||
Bands\2\End=1630032704
|
||||
Bands\2\Range=5925
|
||||
Bands\2\MemoryGroup=-1
|
||||
Bands\2\Name=6 cm
|
||||
Bands\3\Num=3
|
||||
Bands\3\BSR=4
|
||||
Bands\3\Start=2400000000
|
||||
Bands\3\End=2450000000
|
||||
Bands\3\Start=0
|
||||
Bands\3\End=0
|
||||
Bands\3\Range=2450
|
||||
Bands\3\MemoryGroup=-1
|
||||
Bands\3\Name=13 cm
|
||||
|
|
139
rigs/IC-9700.rig
139
rigs/IC-9700.rig
|
@ -6,8 +6,7 @@ Manufacturer=Icom
|
|||
Model=IC-9700
|
||||
CIVAddress=162
|
||||
RigCtlDModel=3081
|
||||
NumberOfReceivers=2
|
||||
NumberOfVFOs=2
|
||||
NumberOfVFOs=1
|
||||
SpectrumSeqMax=11
|
||||
SpectrumAmpMax=160
|
||||
SpectrumLenMax=475
|
||||
|
@ -554,117 +553,87 @@ Commands\106\String=\\x27\\x00\\x00
|
|||
Commands\106\Min=0
|
||||
Commands\106\Max=0
|
||||
Commands\106\Command29=false
|
||||
Commands\107\Type=Scope Sub Wave Data
|
||||
Commands\107\String=\\x27\\x00\\x01
|
||||
Commands\107\Type=Scope On/Off
|
||||
Commands\107\String=\\x27\\x10
|
||||
Commands\107\Min=0
|
||||
Commands\107\Max=0
|
||||
Commands\107\Max=1
|
||||
Commands\107\Command29=false
|
||||
Commands\108\Type=Scope On/Off
|
||||
Commands\108\String=\\x27\\x10
|
||||
Commands\108\Type=Scope Data Output
|
||||
Commands\108\String=\\x27\\x11
|
||||
Commands\108\Min=0
|
||||
Commands\108\Max=1
|
||||
Commands\108\Command29=false
|
||||
Commands\109\Type=Scope Data Output
|
||||
Commands\109\String=\\x27\\x11
|
||||
Commands\109\Type=Scope Main/Sub
|
||||
Commands\109\String=\\x27\\x12
|
||||
Commands\109\Min=0
|
||||
Commands\109\Max=1
|
||||
Commands\109\Command29=false
|
||||
Commands\110\Type=Scope Main/Sub
|
||||
Commands\110\String=\\x27\\x12
|
||||
Commands\110\Type=Scope Main Mode
|
||||
Commands\110\String=\\x27\\x14\\x00
|
||||
Commands\110\Min=0
|
||||
Commands\110\Max=1
|
||||
Commands\110\Max=3
|
||||
Commands\110\Command29=false
|
||||
Commands\111\Type=Scope Main Mode
|
||||
Commands\111\String=\\x27\\x14\\x00
|
||||
Commands\111\Type=Scope Main Span
|
||||
Commands\111\String=\\x27\\x15\\x00
|
||||
Commands\111\Min=0
|
||||
Commands\111\Max=3
|
||||
Commands\111\Max=7
|
||||
Commands\111\Command29=false
|
||||
Commands\112\Type=Scope Sub Mode
|
||||
Commands\112\String=\\x27\\x14\\x01
|
||||
Commands\112\Min=0
|
||||
Commands\112\Max=3
|
||||
Commands\112\Type=Scope Main Edge
|
||||
Commands\112\String=\\x27\\x16\\x00
|
||||
Commands\112\Min=1
|
||||
Commands\112\Max=4
|
||||
Commands\112\Command29=false
|
||||
Commands\113\Type=Scope Main Span
|
||||
Commands\113\String=\\x27\\x15\\x00
|
||||
Commands\113\Type=Scope Main Edge
|
||||
Commands\113\String=\\x27\\x17\\x00
|
||||
Commands\113\Min=0
|
||||
Commands\113\Max=7
|
||||
Commands\113\Max=1
|
||||
Commands\113\Command29=false
|
||||
Commands\114\Type=Scope Sub Span
|
||||
Commands\114\String=\\x27\\x15\\x01
|
||||
Commands\114\Type=Scope Main Ref
|
||||
Commands\114\String=\\x27\\x19\\x00
|
||||
Commands\114\Min=0
|
||||
Commands\114\Max=7
|
||||
Commands\114\Max=0
|
||||
Commands\114\Command29=false
|
||||
Commands\115\Type=Scope Main Edge
|
||||
Commands\115\String=\\x27\\x16\\x00
|
||||
Commands\115\Min=1
|
||||
Commands\115\Max=4
|
||||
Commands\115\Type=Scope Main Speed
|
||||
Commands\115\String=\\x27\\x1a\\x00
|
||||
Commands\115\Min=0
|
||||
Commands\115\Max=2
|
||||
Commands\115\Command29=false
|
||||
Commands\116\Type=Scope Sub Edge
|
||||
Commands\116\String=\\x27\\x16\\x01
|
||||
Commands\116\Min=1
|
||||
Commands\116\Max=4
|
||||
Commands\116\Type=Scope During TX
|
||||
Commands\116\String=\\x27\\x1b
|
||||
Commands\116\Min=0
|
||||
Commands\116\Max=1
|
||||
Commands\116\Command29=false
|
||||
Commands\117\Type=Scope Main Ref
|
||||
Commands\117\String=\\x27\\x19\\x00
|
||||
Commands\117\Type=Scope Center Type
|
||||
Commands\117\String=\\x27\\x1c
|
||||
Commands\117\Min=0
|
||||
Commands\117\Max=0
|
||||
Commands\117\Max=2
|
||||
Commands\117\Command29=false
|
||||
Commands\118\Type=Scope Sub Ref
|
||||
Commands\118\String=\\x27\\x19\\x01
|
||||
Commands\118\Type=Scope Main VBW
|
||||
Commands\118\String=\\x27\\x1d\\x00
|
||||
Commands\118\Min=0
|
||||
Commands\118\Max=0
|
||||
Commands\118\Max=1
|
||||
Commands\118\Command29=false
|
||||
Commands\119\Type=Scope Main Speed
|
||||
Commands\119\String=\\x27\\x1a\\x00
|
||||
Commands\119\Min=0
|
||||
Commands\119\Max=2
|
||||
Commands\119\Type=Scope Fixed Edge Freq
|
||||
Commands\119\String=\\x27\\x1e
|
||||
Commands\119\Min=1
|
||||
Commands\119\Max=0
|
||||
Commands\119\Command29=false
|
||||
Commands\120\Type=Scope Sub Speed
|
||||
Commands\120\String=\\x27\\x1a\\x01
|
||||
Commands\120\Type=Voice TX
|
||||
Commands\120\String=\\x28\\x00
|
||||
Commands\120\Min=0
|
||||
Commands\120\Max=2
|
||||
Commands\120\Max=8
|
||||
Commands\120\Command29=false
|
||||
Commands\121\Type=Scope During TX
|
||||
Commands\121\String=\\x27\\x1b
|
||||
Commands\121\Type=Command Error FA
|
||||
Commands\121\String=\\xfa
|
||||
Commands\121\Min=0
|
||||
Commands\121\Max=1
|
||||
Commands\121\Max=0
|
||||
Commands\121\Command29=false
|
||||
Commands\122\Type=Scope Center Type
|
||||
Commands\122\String=\\x27\\x1c
|
||||
Commands\122\Type=Command OK FB
|
||||
Commands\122\String=\\xfb
|
||||
Commands\122\Min=0
|
||||
Commands\122\Max=2
|
||||
Commands\122\Max=0
|
||||
Commands\122\Command29=false
|
||||
Commands\123\Type=Scope Main VBW
|
||||
Commands\123\String=\\x27\\x1d\\x00
|
||||
Commands\123\Min=0
|
||||
Commands\123\Max=1
|
||||
Commands\123\Command29=false
|
||||
Commands\124\Type=Scope Sub VBW
|
||||
Commands\124\String=\\x27\\x1d\\x01
|
||||
Commands\124\Min=0
|
||||
Commands\124\Max=1
|
||||
Commands\124\Command29=false
|
||||
Commands\125\Type=Scope Fixed Edge Freq
|
||||
Commands\125\String=\\x27\\x1e
|
||||
Commands\125\Min=1
|
||||
Commands\125\Max=0
|
||||
Commands\125\Command29=false
|
||||
Commands\126\Type=Voice TX
|
||||
Commands\126\String=\\x28\\x00
|
||||
Commands\126\Min=0
|
||||
Commands\126\Max=8
|
||||
Commands\126\Command29=false
|
||||
Commands\127\Type=Command Error FA
|
||||
Commands\127\String=\\xfa
|
||||
Commands\127\Min=0
|
||||
Commands\127\Max=0
|
||||
Commands\127\Command29=false
|
||||
Commands\128\Type=Command OK FB
|
||||
Commands\128\String=\\xfb
|
||||
Commands\128\Min=0
|
||||
Commands\128\Max=0
|
||||
Commands\128\Command29=false
|
||||
Commands\size=128
|
||||
Commands\size=122
|
||||
Periodic\1\Priority=Medium Low
|
||||
Periodic\1\Command=Attenuator Status
|
||||
Periodic\1\VFO=-1
|
||||
|
@ -727,10 +696,10 @@ Periodic\20\Command=Tuning Step
|
|||
Periodic\20\VFO=-1
|
||||
Periodic\21\Priority=Medium
|
||||
Periodic\21\Command=Unselected Freq
|
||||
Periodic\21\VFO=0
|
||||
Periodic\21\VFO=1
|
||||
Periodic\22\Priority=Medium
|
||||
Periodic\22\Command=Unselected Mode
|
||||
Periodic\22\VFO=0
|
||||
Periodic\22\VFO=1
|
||||
Periodic\23\Priority=Medium
|
||||
Periodic\23\Command=VFO Dual Watch
|
||||
Periodic\23\VFO=0
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
#include "logcategories.h"
|
||||
#include "rigidentities.h"
|
||||
|
||||
spectrumScope::spectrumScope(uchar receiver, uchar vfo, QWidget *parent)
|
||||
: QGroupBox{parent}, receiver(receiver), numVFO(vfo)
|
||||
spectrumScope::spectrumScope(QWidget *parent)
|
||||
: QGroupBox{parent}
|
||||
{
|
||||
|
||||
QMutexLocker locker(&mutex);
|
||||
|
@ -22,33 +22,13 @@ spectrumScope::spectrumScope(uchar receiver, uchar vfo, QWidget *parent)
|
|||
|
||||
displayLayout = new QHBoxLayout();
|
||||
|
||||
for (uchar i=0;i<numVFO;i++)
|
||||
{
|
||||
qInfo() << "****Adding VFO" << i << "on receiver" << receiver;
|
||||
freqDisplay[i] = new freqCtrl();
|
||||
if (i==0)
|
||||
{
|
||||
freqDisplay[i]->setMinimumSize(280,30);
|
||||
freqDisplay[i]->setMaximumSize(280,30);
|
||||
displayLayout->addWidget(freqDisplay[i]);
|
||||
displaySpacer = new QSpacerItem(0,0,QSizePolicy::Expanding,QSizePolicy::Fixed);
|
||||
displayLayout->addSpacerItem(displaySpacer);
|
||||
} else {
|
||||
freqDisplay[i]->setMinimumSize(180,20);
|
||||
freqDisplay[i]->setMaximumSize(180,20);
|
||||
displayLayout->addWidget(freqDisplay[i]);
|
||||
}
|
||||
connect(this->freqDisplay[i], &freqCtrl::newFrequency, this,
|
||||
[=](const qint64 &freq) { this->newFrequency(freq,i);});
|
||||
|
||||
|
||||
//connect(this->rig, &rigCommander::haveDashRatio,
|
||||
// [=](const unsigned char& ratio) { cw->handleDashRatio(ratio); });
|
||||
|
||||
//connect(freqDisplay[i], SIGNAL(newFrequency(qint64)), this, SLOT(newFrequency(qint64,i)));
|
||||
|
||||
}
|
||||
freqDisplay = new freqCtrl();
|
||||
freqDisplay->setMinimumSize(280,30);
|
||||
freqDisplay->setMaximumSize(280,30);
|
||||
|
||||
displayLayout->addWidget(freqDisplay);
|
||||
displaySpacer = new QSpacerItem(0,0,QSizePolicy::Expanding,QSizePolicy::Fixed);
|
||||
displayLayout->addSpacerItem(displaySpacer);
|
||||
|
||||
controlLayout = new QHBoxLayout();
|
||||
detachButton = new QPushButton("Detach");
|
||||
|
@ -316,51 +296,51 @@ spectrumScope::spectrumScope(uchar receiver, uchar vfo, QWidget *parent)
|
|||
|
||||
connect(configLength, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
prepareWf(val);
|
||||
emit updateSettings(receiver,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
emit updateSettings(vfo,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
});
|
||||
connect(configBottom, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
this->plotFloor = val;
|
||||
this->wfFloor = val;
|
||||
this->setRange(plotFloor,plotCeiling);
|
||||
emit updateSettings(receiver,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
emit updateSettings(vfo,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
});
|
||||
connect(configTop, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
this->plotCeiling = val;
|
||||
this->wfCeiling = val;
|
||||
this->setRange(plotFloor,plotCeiling);
|
||||
emit updateSettings(receiver,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
emit updateSettings(vfo,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
});
|
||||
|
||||
connect(configRef, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
currentRef = (val/5) * 5; // rounded to "nearest 5"
|
||||
queue->add(priorityImmediate,queueItem(receiver?funcScopeSubRef:funcScopeMainRef,QVariant::fromValue(currentRef),false,this->receiver));
|
||||
queue->add(priorityImmediate,queueItem(vfo?funcScopeSubRef:funcScopeMainRef,QVariant::fromValue(currentRef),false,this->vfo));
|
||||
});
|
||||
|
||||
|
||||
connect(configSpeed, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](const int &val) {
|
||||
queue->add(priorityImmediate,queueItem(receiver?funcScopeSubSpeed:funcScopeMainSpeed,configSpeed->itemData(val),false,this->receiver));
|
||||
queue->add(priorityImmediate,queueItem(vfo?funcScopeSubSpeed:funcScopeMainSpeed,configSpeed->itemData(val),false,this->vfo));
|
||||
});
|
||||
|
||||
connect(configTheme, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](const int &val) {
|
||||
Q_UNUSED(val)
|
||||
currentTheme = configTheme->currentData().value<QCPColorGradient::GradientPreset>();
|
||||
colorMap->setGradient(currentTheme);
|
||||
emit updateSettings(receiver,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
emit updateSettings(vfo,currentTheme,wfLength,plotFloor,plotCeiling);
|
||||
});
|
||||
|
||||
|
||||
|
||||
connect(configPbtInner, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(val),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(val),false,vfo));
|
||||
});
|
||||
connect(configPbtOuter, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(val),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(val),false,vfo));
|
||||
});
|
||||
connect(configIfShift, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
queue->add(priorityImmediate,queueItem(funcIFShift,QVariant::fromValue<ushort>(val),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcIFShift,QVariant::fromValue<ushort>(val),false,vfo));
|
||||
});
|
||||
connect(configFilterWidth, &QSlider::valueChanged, this, [=](const int &val) {
|
||||
queue->add(priorityImmediate,queueItem(funcFilterWidth,QVariant::fromValue<ushort>(val),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcFilterWidth,QVariant::fromValue<ushort>(val),false,vfo));
|
||||
});
|
||||
|
||||
configGroup->setVisible(false);
|
||||
|
@ -395,6 +375,7 @@ spectrumScope::spectrumScope(uchar receiver, uchar vfo, QWidget *parent)
|
|||
connect(waterfall, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(scroll(QWheelEvent*)));
|
||||
connect(spectrum, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(scroll(QWheelEvent*)));
|
||||
|
||||
connect(freqDisplay, SIGNAL(newFrequency(qint64)), this, SLOT(newFrequency(qint64)));
|
||||
|
||||
showHideControls(spectrumMode_t::spectModeCenter);
|
||||
}
|
||||
|
@ -559,7 +540,7 @@ bool spectrumScope::updateScope(scopeData data)
|
|||
clearPeaks();
|
||||
}
|
||||
// Inform other threads (cluster) that the frequency range has changed.
|
||||
emit frequencyRange(receiver, data.startFreq, data.endFreq);
|
||||
emit frequencyRange(vfo, data.startFreq, data.endFreq);
|
||||
}
|
||||
|
||||
lowerFreq = data.startFreq;
|
||||
|
@ -788,7 +769,7 @@ bool spectrumScope::updateScope(scopeData data)
|
|||
oorIndicator->setVisible(false);
|
||||
}
|
||||
|
||||
emit elapsedTime(receiver, elapsed.elapsed());
|
||||
emit elapsedTime(vfo, elapsed.elapsed());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -912,14 +893,14 @@ void spectrumScope::updatedScopeMode(int index)
|
|||
//spectrumMode_t s = static_cast<spectrumMode_t>(scopeModeCombo->itemData(index).toInt());
|
||||
spectrumMode_t s = scopeModeCombo->itemData(index).value<spectrumMode_t>();
|
||||
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcScopeSubMode:funcScopeMainMode),QVariant::fromValue(s),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcScopeSubMode:funcScopeMainMode),QVariant::fromValue(s),false,vfo));
|
||||
|
||||
showHideControls(s);
|
||||
}
|
||||
|
||||
void spectrumScope::updatedSpan(int index)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcScopeSubSpan:funcScopeMainSpan),spanCombo->itemData(index),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcScopeSubSpan:funcScopeMainSpan),spanCombo->itemData(index),false,vfo));
|
||||
}
|
||||
|
||||
void spectrumScope::updatedMode(int index)
|
||||
|
@ -935,14 +916,14 @@ void spectrumScope::updatedMode(int index)
|
|||
mi.data = dataCombo->currentIndex();
|
||||
dataCombo->setEnabled(true);
|
||||
}
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubMode:funcMainMode),QVariant::fromValue(mi),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedMode:funcSelectedMode),QVariant::fromValue(mi),false,vfo));
|
||||
|
||||
}
|
||||
|
||||
|
||||
void spectrumScope::updatedEdge(int index)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcScopeSubEdge:funcScopeMainEdge),QVariant::fromValue<uchar>(index+1),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcScopeSubEdge:funcScopeMainEdge),QVariant::fromValue<uchar>(index+1),false,vfo));
|
||||
}
|
||||
|
||||
void spectrumScope::toFixedPressed()
|
||||
|
@ -964,8 +945,8 @@ void spectrumScope::toFixedPressed()
|
|||
edgeCombo->blockSignals(true);
|
||||
edgeCombo->setCurrentIndex(edge-1);
|
||||
edgeCombo->blockSignals(false);
|
||||
queue->add(priorityImmediate,queueItem(funcScopeFixedEdgeFreq,QVariant::fromValue(spectrumBounds(lowerFreq, upperFreq, edge)),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcScopeSubMode:funcScopeMainMode),QVariant::fromValue<uchar>(spectrumMode_t::spectModeFixed),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcScopeFixedEdgeFreq,QVariant::fromValue(spectrumBounds(lowerFreq, upperFreq, edge)),false,vfo));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcScopeSubMode:funcScopeMainMode),QVariant::fromValue<uchar>(spectrumMode_t::spectModeFixed),false,vfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1033,7 +1014,7 @@ void spectrumScope::doubleClick(QMouseEvent *me)
|
|||
freqGo.Hz = roundFrequency(freqGo.Hz, stepSize);
|
||||
freqGo.MHzDouble = (float)freqGo.Hz / 1E6;
|
||||
setFrequency(freqGo);
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubFreq:funcMainFreq),QVariant::fromValue<freqt>(freqGo),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedFreq:funcSelectedFreq),QVariant::fromValue<freqt>(freqGo),false,vfo));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1045,8 +1026,8 @@ void spectrumScope::doubleClick(QMouseEvent *me)
|
|||
{
|
||||
double pbFreq = (pbtDefault / passbandWidth) * 127.0;
|
||||
qint16 newFreq = pbFreq + 128;
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newFreq),false,vfo));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newFreq),false,vfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1082,7 +1063,7 @@ void spectrumScope::scopeClick(QMouseEvent* me)
|
|||
freqGo.Hz = (spot.value()->frequency) * 1E6;
|
||||
freqGo.MHzDouble = spot.value()->frequency;
|
||||
setFrequency(freqGo);
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubFreq:funcMainFreq),QVariant::fromValue<freqt>(freqGo),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedFreq:funcSelectedFreq),QVariant::fromValue<freqt>(freqGo),false,vfo));
|
||||
}
|
||||
}
|
||||
else if (passbandAction == passbandStatic && rectItem != nullptr)
|
||||
|
@ -1217,7 +1198,7 @@ void spectrumScope::scopeMouseMove(QMouseEvent* me)
|
|||
else {
|
||||
pb = passbandIndicator->bottomRight->coords().x() - spectrum->xAxis->pixelToCoord(cursor);
|
||||
}
|
||||
queue->add(priorityImmediate,queueItem(funcFilterWidth,QVariant::fromValue<ushort>(pb * 1000000),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcFilterWidth,QVariant::fromValue<ushort>(pb * 1000000),false,vfo));
|
||||
//qInfo() << "New passband" << uint(pb * 1000000);
|
||||
|
||||
lastFreq = movedFrequency;
|
||||
|
@ -1240,8 +1221,8 @@ void spectrumScope::scopeMouseMove(QMouseEvent* me)
|
|||
if (newInFreq >= 0 && newInFreq <= 255 && newOutFreq >= 0 && newOutFreq <= 255) {
|
||||
qDebug() << QString("Moving passband by %1 Hz (Inner %2) (Outer %3) Mode:%4").arg((qint16)(movedFrequency * 1000000))
|
||||
.arg(newInFreq).arg(newOutFreq).arg(mode.mk);
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newInFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newOutFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newInFreq),false,vfo));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newOutFreq),false,vfo));
|
||||
}
|
||||
lastFreq = movedFrequency;
|
||||
}
|
||||
|
@ -1252,7 +1233,7 @@ void spectrumScope::scopeMouseMove(QMouseEvent* me)
|
|||
double pbFreq = ((double)(PBTInner + movedFrequency) / passbandWidth) * 127.0;
|
||||
qint16 newFreq = pbFreq + 128;
|
||||
if (newFreq >= 0 && newFreq <= 255) {
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTInner,QVariant::fromValue<ushort>(newFreq),false,vfo));
|
||||
}
|
||||
lastFreq = movedFrequency;
|
||||
}
|
||||
|
@ -1263,7 +1244,7 @@ void spectrumScope::scopeMouseMove(QMouseEvent* me)
|
|||
double pbFreq = ((double)(PBTOuter + movedFrequency) / passbandWidth) * 127.0;
|
||||
qint16 newFreq = pbFreq + 128;
|
||||
if (newFreq >= 0 && newFreq <= 255) {
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newFreq),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(funcPBTOuter,QVariant::fromValue<ushort>(newFreq),false,vfo));
|
||||
}
|
||||
lastFreq = movedFrequency;
|
||||
}
|
||||
|
@ -1279,7 +1260,7 @@ void spectrumScope::scopeMouseMove(QMouseEvent* me)
|
|||
freqGo.Hz = roundFrequency(freqGo.Hz, stepSize);
|
||||
freqGo.MHzDouble = (float)freqGo.Hz / 1E6;
|
||||
setFrequency(freqGo);
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubFreq:funcMainFreq),QVariant::fromValue<freqt>(freqGo),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedFreq:funcSelectedFreq),QVariant::fromValue<freqt>(freqGo),false,vfo));
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -1353,25 +1334,22 @@ void spectrumScope::scroll(QWheelEvent *we)
|
|||
freq = f; // Do we need to do this?
|
||||
|
||||
setFrequency(f);
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubFreq:funcMainFreq),QVariant::fromValue<freqt>(f),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedFreq:funcSelectedFreq),QVariant::fromValue<freqt>(f),false,vfo));
|
||||
//qInfo() << "Moving to freq:" << f.Hz << "step" << stepsHz;
|
||||
scrollWheelOffsetAccumulated = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void spectrumScope::receiveMode(modeInfo m, uchar vfo)
|
||||
void spectrumScope::receiveMode(modeInfo m)
|
||||
{
|
||||
// Update mode information if mode/filter/data has changed.
|
||||
// Not all rigs send data so this "might" need to be updated independantly?
|
||||
if (vfo > 0)
|
||||
return;
|
||||
|
||||
if (mode.reg != m.reg || m.filter != mode.filter || m.data != mode.data)
|
||||
{
|
||||
|
||||
qDebug(logSystem()) << __func__ << QString("Received new mode for %0: %1 (%2) filter:%3 data:%4")
|
||||
.arg((receiver?"Sub":"Main")).arg(QString::number(m.mk,16)).arg(m.name).arg(m.filter).arg(m.data) ;
|
||||
.arg((vfo?"Sub":"Main")).arg(QString::number(m.mk,16)).arg(m.name).arg(m.filter).arg(m.data) ;
|
||||
|
||||
if (mode.mk != m.mk) {
|
||||
for (int i=0;i<modeCombo->count();i++)
|
||||
|
@ -1422,13 +1400,13 @@ void spectrumScope::receiveMode(modeInfo m, uchar vfo)
|
|||
|
||||
// If new mode doesn't allow bandwidth control, disable filterwidth and pbt.
|
||||
if (m.bwMin > 0 && m.bwMax > 0) {
|
||||
queue->addUnique(priorityHigh,funcPBTInner,true,receiver);
|
||||
queue->addUnique(priorityHigh,funcPBTOuter,true,receiver);
|
||||
queue->addUnique(priorityHigh,funcFilterWidth,true,receiver);
|
||||
queue->addUnique(priorityHigh,funcPBTInner,true,vfo);
|
||||
queue->addUnique(priorityHigh,funcPBTOuter,true,vfo);
|
||||
queue->addUnique(priorityHigh,funcFilterWidth,true,vfo);
|
||||
} else{
|
||||
queue->del(funcPBTInner,receiver);
|
||||
queue->del(funcPBTOuter,receiver);
|
||||
queue->del(funcFilterWidth,receiver);
|
||||
queue->del(funcPBTInner,vfo);
|
||||
queue->del(funcPBTOuter,vfo);
|
||||
queue->del(funcFilterWidth,vfo);
|
||||
}
|
||||
|
||||
#if defined __GNUC__
|
||||
|
@ -1441,9 +1419,9 @@ void spectrumScope::receiveMode(modeInfo m, uchar vfo)
|
|||
case modeRTTY:
|
||||
case modeRTTY_R:
|
||||
passbandCenterFrequency = 0.00008925;
|
||||
queue->del(funcCwPitch,receiver);
|
||||
queue->del(funcDashRatio,receiver);
|
||||
queue->del(funcKeySpeed,receiver);
|
||||
queue->del(funcCwPitch,vfo);
|
||||
queue->del(funcDashRatio,vfo);
|
||||
queue->del(funcKeySpeed,vfo);
|
||||
break;
|
||||
case modeLSB:
|
||||
case modeUSB:
|
||||
|
@ -1451,15 +1429,15 @@ void spectrumScope::receiveMode(modeInfo m, uchar vfo)
|
|||
case modePSK_R:
|
||||
passbandCenterFrequency = 0.0015;
|
||||
case modeAM:
|
||||
queue->del(funcCwPitch,receiver);
|
||||
queue->del(funcDashRatio,receiver);
|
||||
queue->del(funcKeySpeed,receiver);
|
||||
queue->del(funcCwPitch,vfo);
|
||||
queue->del(funcDashRatio,vfo);
|
||||
queue->del(funcKeySpeed,vfo);
|
||||
break;
|
||||
case modeCW:
|
||||
case modeCW_R:
|
||||
queue->addUnique(priorityLow,funcCwPitch,true,receiver);
|
||||
queue->addUnique(priorityLow,funcDashRatio,true,receiver);
|
||||
queue->addUnique(priorityLow,funcKeySpeed,true,receiver);
|
||||
queue->addUnique(priorityLow,funcCwPitch,true,vfo);
|
||||
queue->addUnique(priorityLow,funcDashRatio,true,vfo);
|
||||
queue->addUnique(priorityLow,funcKeySpeed,true,vfo);
|
||||
break;
|
||||
default:
|
||||
// FM and digital modes are fixed width, not sure about any other modes?
|
||||
|
@ -1470,9 +1448,9 @@ void spectrumScope::receiveMode(modeInfo m, uchar vfo)
|
|||
else
|
||||
passbandWidth = 0.007;
|
||||
break;
|
||||
queue->del(funcCwPitch,receiver);
|
||||
queue->del(funcDashRatio,receiver);
|
||||
queue->del(funcKeySpeed,receiver);
|
||||
queue->del(funcCwPitch,vfo);
|
||||
queue->del(funcDashRatio,vfo);
|
||||
queue->del(funcKeySpeed,vfo);
|
||||
break;
|
||||
}
|
||||
#if defined __GNUC__
|
||||
|
@ -1516,7 +1494,7 @@ void spectrumScope::receiveCwPitch(uchar pitch)
|
|||
if (p != this->cwPitch)
|
||||
{
|
||||
passbandCenterFrequency = p / 2000000.0;
|
||||
qDebug(logSystem()) << QString("%0 Received new CW Pitch %1 Hz was %2 (center freq %3 MHz)").arg((receiver?"Sub":"Main")).arg(p).arg(cwPitch).arg(passbandCenterFrequency);
|
||||
qDebug(logSystem()) << QString("%0 Received new CW Pitch %1 Hz was %2 (center freq %3 MHz)").arg((vfo?"Sub":"Main")).arg(p).arg(cwPitch).arg(passbandCenterFrequency);
|
||||
this->cwPitch = p;
|
||||
}
|
||||
}
|
||||
|
@ -1528,8 +1506,8 @@ void spectrumScope::receivePassband(quint16 pass)
|
|||
if (passbandWidth != pb) {
|
||||
passbandWidth = pb;
|
||||
//trxadj->updatePassband(pass);
|
||||
qDebug(logSystem()) << QString("%0 Received new IF Filter/Passband %1 Hz").arg(receiver?"Sub":"Main").arg(pass);
|
||||
emit showStatusBarText(QString("%0 IF filter width %1 Hz (%2 MHz)").arg(receiver?"Sub":"Main").arg(pass).arg(passbandWidth));
|
||||
qDebug(logSystem()) << QString("%0 Received new IF Filter/Passband %1 Hz").arg(vfo?"Sub":"Main").arg(pass);
|
||||
emit showStatusBarText(QString("%0 IF filter width %1 Hz (%2 MHz)").arg(vfo?"Sub":"Main").arg(pass).arg(passbandWidth));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1545,7 +1523,7 @@ void spectrumScope::selected(bool en)
|
|||
|
||||
void spectrumScope::holdPressed(bool en)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem(receiver?funcScopeSubHold:funcScopeMainHold,QVariant::fromValue(en),false,receiver));
|
||||
queue->add(priorityImmediate,queueItem(vfo?funcScopeSubHold:funcScopeMainHold,QVariant::fromValue(en),false,vfo));
|
||||
}
|
||||
|
||||
void spectrumScope::setHold(bool h)
|
||||
|
@ -1562,9 +1540,9 @@ void spectrumScope::setSpeed(uchar s)
|
|||
}
|
||||
|
||||
|
||||
void spectrumScope::receiveSpots(uchar receiver, QList<spotData> spots)
|
||||
void spectrumScope::receiveSpots(uchar vfo, QList<spotData> spots)
|
||||
{
|
||||
if (receiver != this->receiver) {
|
||||
if (vfo != this->vfo) {
|
||||
return;
|
||||
}
|
||||
//QElapsedTimer timer;
|
||||
|
@ -1723,49 +1701,33 @@ void spectrumScope::setPBTOuter (uchar val) {
|
|||
}
|
||||
}
|
||||
|
||||
void spectrumScope::setFrequency(freqt f, uchar vfo)
|
||||
void spectrumScope::setFrequency(freqt f)
|
||||
{
|
||||
//qInfo() << "Setting Frequency vfo=" << vfo << "Freq:" << f.Hz;
|
||||
|
||||
if (vfo < numVFO)
|
||||
{
|
||||
freqDisplay[vfo]->blockSignals(true);
|
||||
freqDisplay[vfo]->setFrequency(f.Hz);
|
||||
freqDisplay[vfo]->blockSignals(false);
|
||||
}
|
||||
if (vfo==0)
|
||||
freq = f;
|
||||
|
||||
freqDisplay->blockSignals(true);
|
||||
freqDisplay->setFrequency(f.Hz);
|
||||
freqDisplay->blockSignals(false);
|
||||
freq = f;
|
||||
}
|
||||
|
||||
void spectrumScope::displaySettings(int numDigits, qint64 minf, qint64 maxf, int minStep,FctlUnit unit,std::vector<bandType>* bands)
|
||||
{
|
||||
for (uchar i=0;i<numVFO;i++)
|
||||
freqDisplay[i]->setup(numDigits, minf, maxf, minStep, unit, bands);
|
||||
freqDisplay->setup(numDigits, minf, maxf, minStep, unit, bands);
|
||||
}
|
||||
|
||||
void spectrumScope::setUnit(FctlUnit unit)
|
||||
{
|
||||
for (uchar i=0;i<numVFO;i++)
|
||||
freqDisplay[i]->setUnit(unit);
|
||||
freqDisplay->setUnit(unit);
|
||||
}
|
||||
|
||||
|
||||
void spectrumScope::newFrequency(qint64 freq,uchar vfo)
|
||||
void spectrumScope::newFrequency(qint64 freq)
|
||||
{
|
||||
freqt f;
|
||||
f.Hz = freq;
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
if (f.Hz > 0)
|
||||
{
|
||||
if (vfo > 0)
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem((funcUnselectedFreq),QVariant::fromValue<freqt>(f),false,receiver));
|
||||
}
|
||||
else
|
||||
{
|
||||
queue->add(priorityImmediate,queueItem((receiver?funcSubFreq:funcMainFreq),QVariant::fromValue<freqt>(f),false,receiver));
|
||||
}
|
||||
queue->add(priorityImmediate,queueItem((vfo?funcUnselectedFreq:funcSelectedFreq),QVariant::fromValue<freqt>(f),false,vfo));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1785,14 +1747,14 @@ void spectrumScope::detachScope(bool state)
|
|||
{
|
||||
windowLabel = new QLabel();
|
||||
detachButton->setText("Attach");
|
||||
qInfo(logGui()) << "Detaching scope" << (receiver?"Sub":"Main");
|
||||
qInfo(logGui()) << "Detaching scope" << (vfo?"Sub":"Main");
|
||||
this->parentWidget()->layout()->replaceWidget(this,windowLabel);
|
||||
this->setParent(NULL);
|
||||
this-> setWindowFlags(Qt::Window | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
|
||||
this->move(screen()->geometry().center() - frameGeometry().center());
|
||||
} else {
|
||||
detachButton->setText("Detach");
|
||||
qInfo(logGui()) << "Attaching scope" << (receiver?"Sub":"Main");
|
||||
qInfo(logGui()) << "Attaching scope" << (vfo?"Sub":"Main");
|
||||
windowLabel->parentWidget()->layout()->replaceWidget(windowLabel,this);
|
||||
windowLabel->setParent(NULL);
|
||||
delete windowLabel;
|
||||
|
|
|
@ -30,7 +30,7 @@ class spectrumScope : public QGroupBox
|
|||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit spectrumScope(uchar receiver = 0, uchar vfo = 1, QWidget *parent = nullptr);
|
||||
explicit spectrumScope(QWidget *parent = nullptr);
|
||||
|
||||
bool prepareWf(uint wfLength);
|
||||
void prepareScope(uint ampMap, uint spectWidth);
|
||||
|
@ -50,8 +50,8 @@ public:
|
|||
void setPassbandWidth(double hz) { passbandWidth = hz;}
|
||||
double getPassbandWidth() { configFilterWidth->setValue(passbandWidth*1E6); return passbandWidth;}
|
||||
|
||||
void setIdentity(QString name) {this->setTitle(name);}
|
||||
bool getVfo() { return receiver;}
|
||||
void setIdentity(QString name, uchar v) {this->setTitle(name), vfo = v;}
|
||||
bool getVfo() { return vfo;}
|
||||
|
||||
void setTuningFloorZeros(bool tf) {this->tuningFloorZeros = tf;}
|
||||
void setClickDragTuning(bool cg) { this->clickDragTuning = cg;}
|
||||
|
@ -73,11 +73,9 @@ public:
|
|||
void setStepSize (quint16 hz) { stepSize = hz;}
|
||||
|
||||
freqt getFrequency () { return freq;}
|
||||
void setFrequency (freqt f,uchar vfo=0);
|
||||
void setFrequency (freqt f);
|
||||
|
||||
uchar getNumVFO () { return numVFO;}
|
||||
|
||||
void receiveMode (modeInfo m, uchar vfo=0);
|
||||
void receiveMode (modeInfo m);
|
||||
modeInfo currentMode() {return mode;}
|
||||
void clearSpans() { spanCombo->clear();}
|
||||
void clearMode() { modeCombo->clear();}
|
||||
|
@ -102,15 +100,15 @@ public:
|
|||
public slots: // Can be called directly or updated via signal/slot
|
||||
void selectScopeMode(spectrumMode_t m);
|
||||
void selectSpan(centerSpanData s);
|
||||
void receiveSpots(uchar receiver, QList<spotData> spots);
|
||||
void receiveSpots(uchar vfo, QList<spotData> spots);
|
||||
|
||||
signals:
|
||||
void frequencyRange(uchar receiver, double start, double end);
|
||||
void frequencyRange(uchar vfo, double start, double end);
|
||||
void updateScopeMode(spectrumMode_t index);
|
||||
void updateSpan(centerSpanData s);
|
||||
void showStatusBarText(QString text);
|
||||
void updateSettings(uchar receiver, int value, quint16 len, int floor, int ceiling);
|
||||
void elapsedTime(uchar receiver, qint64 ns);
|
||||
void updateSettings(uchar vfo, int value, quint16 len, int floor, int ceiling);
|
||||
void elapsedTime(uchar vfo, qint64 ns);
|
||||
void dataChanged(modeInfo m);
|
||||
|
||||
private slots:
|
||||
|
@ -133,7 +131,7 @@ private slots:
|
|||
void scroll(QWheelEvent *);
|
||||
|
||||
void clearPeaks();
|
||||
void newFrequency(qint64 freq,uchar i=0);
|
||||
void newFrequency(qint64 freq);
|
||||
|
||||
private:
|
||||
void clearPlasma();
|
||||
|
@ -149,7 +147,7 @@ private:
|
|||
QLabel* windowLabel = Q_NULLPTR;
|
||||
QCustomPlot* spectrum = Q_NULLPTR;
|
||||
QCustomPlot* waterfall = Q_NULLPTR;
|
||||
freqCtrl* freqDisplay[2];
|
||||
freqCtrl* freqDisplay;
|
||||
QSpacerItem* displaySpacer;
|
||||
QGroupBox* group;
|
||||
QSplitter* splitter;
|
||||
|
@ -265,7 +263,7 @@ private:
|
|||
QVector <QByteArray> wfimage;
|
||||
|
||||
cachingQueue* queue;
|
||||
uchar receiver=0;
|
||||
uchar vfo=0;
|
||||
double startFrequency;
|
||||
QMap<QString, spotData*> clusterSpots;
|
||||
|
||||
|
@ -273,7 +271,6 @@ private:
|
|||
bool tuningFloorZeros=false;
|
||||
bool clickDragTuning=false;
|
||||
bool isActive;
|
||||
uchar numVFO=1;
|
||||
};
|
||||
|
||||
#endif // SPECTRUMSCOPE_H
|
||||
|
|
|
@ -22,7 +22,7 @@ static const tciCommandStruct tci_commands[] =
|
|||
{ "dds", funcNone, typeUChar,typeFreq},
|
||||
{ "if", funcNone, typeUChar,typeUChar,typeFreq},
|
||||
{ "vfo", funcNone, typeUChar,typeUChar,typeFreq},
|
||||
{ "modulation", funcMainMode, typeUChar,typeShort},
|
||||
{ "modulation", funcSelectedMode, typeUChar,typeShort},
|
||||
{ "trx", funcTransceiverStatus, typeUChar},
|
||||
{ "tune", funcTunerStatus, typeUChar},
|
||||
{ "drive", funcNone, typeUChar},
|
||||
|
@ -182,8 +182,8 @@ void tciServer::onNewConnection()
|
|||
pSocket->sendTextMessage(QString("iq_samplerate:48000;\n"));
|
||||
pSocket->sendTextMessage(QString("audio_samplerate:48000;\n"));
|
||||
pSocket->sendTextMessage(QString("mute:false;\n"));
|
||||
pSocket->sendTextMessage(QString("vfo:0,0,%0;").arg(queue->getCache(funcMainFreq,false).value.value<freqt>().Hz));
|
||||
pSocket->sendTextMessage(QString("modulation:0,%0;").arg(queue->getCache(funcMainMode,false).value.value<modeInfo>().name.toLower()));
|
||||
pSocket->sendTextMessage(QString("vfo:0,0,%0;").arg(queue->getCache(funcSelectedFreq,false).value.value<freqt>().Hz));
|
||||
pSocket->sendTextMessage(QString("modulation:0,%0;").arg(queue->getCache(funcSelectedMode,false).value.value<modeInfo>().name.toLower()));
|
||||
pSocket->sendTextMessage(QString("start;\n"));
|
||||
pSocket->sendTextMessage(QString("ready;\n"));
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ void tciServer::processIncomingTextMessage(QString message)
|
|||
if (cmd.toLower() == "modulation")
|
||||
{
|
||||
reply = QString("%0:%1,%2;").arg(cmd).arg(sub)
|
||||
.arg(queue->getCache(sub?funcSubFreq:funcMainMode,sub).value.value<modeInfo>().name);
|
||||
.arg(queue->getCache(sub?funcUnselectedFreq:funcSelectedMode,sub).value.value<modeInfo>().name);
|
||||
} else if (cmd == "rx_enable" || cmd == "tx_enable") {
|
||||
reply = QString("%0:%1,%2;").arg(cmd).arg(sub).arg("true");
|
||||
}
|
||||
|
@ -254,31 +254,31 @@ void tciServer::processIncomingTextMessage(QString message)
|
|||
{
|
||||
if (arg.size() == 2) {
|
||||
reply = QString("%0:%1,%2,%3;").arg(cmd,arg[0],arg[1])
|
||||
.arg(queue->getCache(sub?funcSubFreq:funcMainFreq,sub).value.value<freqt>().Hz);
|
||||
.arg(queue->getCache(sub?funcUnselectedFreq:funcSelectedFreq,sub).value.value<freqt>().Hz);
|
||||
}
|
||||
else if (arg.size() == 3) {
|
||||
qInfo() << "Freq" << arg[2];
|
||||
freqt f;
|
||||
f.Hz = arg[2].toUInt();
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
queue->add(priorityImmediate,queueItem(sub?funcSubFreq:funcMainFreq,QVariant::fromValue(f),false,sub));
|
||||
queue->add(priorityImmediate,queueItem(sub?funcUnselectedFreq:funcSelectedFreq,QVariant::fromValue(f),false,sub));
|
||||
}
|
||||
}
|
||||
else if (cmd == "modulation")
|
||||
{
|
||||
if (arg.size() == 1) {
|
||||
reply = QString("modulation:%0,%1;").arg(
|
||||
QString::number(sub),queue->getCache(sub?funcSubMode:funcMainMode,sub).value.value<modeInfo>().name.toLower());
|
||||
QString::number(sub),queue->getCache(sub?funcUnselectedMode:funcSelectedMode,sub).value.value<modeInfo>().name.toLower());
|
||||
}
|
||||
else if (arg.size() == 2) {
|
||||
qInfo() << "Mode (TODO)" << arg[1];
|
||||
reply = QString("modulation:%0,%1;").arg(
|
||||
QString::number(sub),queue->getCache(sub?funcSubMode:funcMainMode,sub).value.value<modeInfo>().name.toLower());
|
||||
QString::number(sub),queue->getCache(sub?funcUnselectedMode:funcSelectedMode,sub).value.value<modeInfo>().name.toLower());
|
||||
/*
|
||||
freqt f;
|
||||
f.Hz = arg[2].toUInt();
|
||||
f.MHzDouble = f.Hz / (double)1E6;
|
||||
queue->add(priorityImmediate,queueItem(sub?funcSubFreq:funcMainFreq,QVariant::fromValue(f),false,sub));
|
||||
queue->add(priorityImmediate,queueItem(sub?funcUnselectedFreq:funcSelectedFreq,QVariant::fromValue(f),false,sub));
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
@ -370,17 +370,17 @@ void tciServer::receiveCache(cacheItem item)
|
|||
switch (item.command)
|
||||
{
|
||||
case funcFreqTR:
|
||||
case funcMainFreq:
|
||||
case funcSubFreq:
|
||||
reply = QString("vfo:0,%0,%1;").arg(QString::number(item.receiver),item.value.value<freqt>().Hz);
|
||||
case funcSelectedFreq:
|
||||
case funcUnselectedFreq:
|
||||
reply = QString("vfo:0,%0,%1;").arg(QString::number(item.vfo),item.value.value<freqt>().Hz);
|
||||
break;
|
||||
case funcModeTR:
|
||||
case funcMainMode:
|
||||
case funcSubMode:
|
||||
reply = QString("modulation:%0,%1;").arg(QString::number(item.receiver),item.value.value<modeInfo>().name.toLower());
|
||||
case funcSelectedMode:
|
||||
case funcUnselectedMode:
|
||||
reply = QString("modulation:%0,%1;").arg(QString::number(item.vfo),item.value.value<modeInfo>().name.toLower());
|
||||
break;
|
||||
case funcTransceiverStatus:
|
||||
reply = QString("trx:%0,%1;").arg(QString::number(item.receiver),item.value.value<bool>()?"true":"false");
|
||||
reply = QString("trx:%0,%1;").arg(QString::number(item.vfo),item.value.value<bool>()?"true":"false");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -706,7 +706,7 @@ void usbController::runTimer()
|
|||
if ((!but->isOn) && ((tempButtons >> i & 1) && !(dev->buttons >> i & 1)))
|
||||
{
|
||||
qDebug(logUsbControl()) << QString("On Button event for button %0: %1").arg(but->num).arg(but->onCommand->text);
|
||||
if (but->onCommand->command == funcPageUp)
|
||||
if (but->onCommand->command == cmdPageUp)
|
||||
emit changePage(dev, dev->currentPage+1);
|
||||
else if (but->onCommand->command == funcPageDown)
|
||||
emit changePage(dev, dev->currentPage-1);
|
||||
|
@ -796,7 +796,7 @@ void usbController::runTimer()
|
|||
if (kb != knobList->end()) {
|
||||
// sendCommand mustn't be deleted so we ensure it stays in-scope by declaring it private (we will only ever send one command).
|
||||
sendCommand = *kb->command;
|
||||
if (sendCommand.command != funcMainFreq && sendCommand.command != funcSubFreq) {
|
||||
if (sendCommand.command != funcSelectedFreq && sendCommand.command != funcUnselectedFreq) {
|
||||
int tempVal = dev->knobValues[i].value * dev->sensitivity;
|
||||
tempVal = qMin(qMax(tempVal,0),255);
|
||||
sendCommand.suffix = quint8(tempVal);
|
||||
|
@ -811,7 +811,7 @@ void usbController::runTimer()
|
|||
|
||||
emit button(&sendCommand);
|
||||
|
||||
if (sendCommand.command == funcMainFreq || sendCommand.command == funcSubFreq) {
|
||||
if (sendCommand.command == funcSelectedFreq || sendCommand.command == funcUnselectedFreq) {
|
||||
dev->knobValues[i].value = 0;
|
||||
}
|
||||
dev->knobValues[i].previous=dev->knobValues[i].value;
|
||||
|
@ -1663,10 +1663,10 @@ void usbController::loadCommands()
|
|||
commands.append(COMMAND(num++, "None", commandAny, funcNone, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "PTT On", commandButton, funcTransceiverStatus, (quint8)0x1));
|
||||
commands.append(COMMAND(num++, "PTT Off", commandButton, funcTransceiverStatus, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "VFOA", commandKnob, funcMainFreq, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "VFOB", commandKnob, funcSubFreq, (quint8)0x1));
|
||||
commands.append(COMMAND(num++, "Freq Down", commandButton, funcMainFreq,(int)-1));
|
||||
commands.append(COMMAND(num++, "Freq Up", commandButton, funcMainFreq, (int)1));
|
||||
commands.append(COMMAND(num++, "VFOA", commandKnob, funcSelectedFreq, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "VFOB", commandKnob, funcUnselectedFreq, (quint8)0x1));
|
||||
commands.append(COMMAND(num++, "Freq Down", commandButton, funcSelectedFreq,(int)-1));
|
||||
commands.append(COMMAND(num++, "Freq Up", commandButton, funcSelectedFreq, (int)1));
|
||||
commands.append(COMMAND(num++, "PTT Off", commandButton, funcTransceiverStatus, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "PTT Toggle", commandButton, funcTransceiverStatus, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "Span/Step", commandKnob, funcSeparator, (quint8)0x0));
|
||||
|
@ -1679,38 +1679,38 @@ void usbController::loadCommands()
|
|||
commands.append(COMMAND(num++, "Sub Span+", commandButton, funcScopeSubSpan, 100));
|
||||
commands.append(COMMAND(num++, "Sub Span-", commandButton, funcScopeSubSpan, -100));
|
||||
commands.append(COMMAND(num++, "Modes", commandButton, funcSeparator, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "Main Mode+", commandButton, funcMainMode, 100));
|
||||
commands.append(COMMAND(num++, "Main Mode-", commandButton, funcMainMode, -100));
|
||||
commands.append(COMMAND(num++, "Sub Mode+", commandButton, funcMainMode, 100));
|
||||
commands.append(COMMAND(num++, "Sub Mode-", commandButton, funcMainMode, -100));
|
||||
commands.append(COMMAND(num++, "Main LSB", commandButton, funcMainMode, modeLSB));
|
||||
commands.append(COMMAND(num++, "Main USB", commandButton, funcMainMode, modeUSB));
|
||||
commands.append(COMMAND(num++, "Main LSBD", commandButton, funcMainMode, modeLSB_D));
|
||||
commands.append(COMMAND(num++, "Main USBD", commandButton, funcMainMode, modeUSB_D));
|
||||
commands.append(COMMAND(num++, "Main CW", commandButton, funcMainMode, modeCW));
|
||||
commands.append(COMMAND(num++, "Main CWR", commandButton, funcMainMode, modeCW_R));
|
||||
commands.append(COMMAND(num++, "Main FM", commandButton, funcMainMode, modeFM));
|
||||
commands.append(COMMAND(num++, "Main AM", commandButton, funcMainMode, modeAM));
|
||||
commands.append(COMMAND(num++, "Main RTTY", commandButton, funcMainMode, modeRTTY));
|
||||
commands.append(COMMAND(num++, "Main RTTYR", commandButton, funcMainMode, modeRTTY_R));
|
||||
commands.append(COMMAND(num++, "Main PSK", commandButton, funcMainMode, modePSK));
|
||||
commands.append(COMMAND(num++, "Main PSKR", commandButton, funcMainMode, modePSK_R));
|
||||
commands.append(COMMAND(num++, "Main DV", commandButton, funcMainMode, modeDV));
|
||||
commands.append(COMMAND(num++, "Main DD", commandButton, funcMainMode, modeDD));
|
||||
commands.append(COMMAND(num++, "Sub LSB", commandButton, funcMainMode, modeLSB));
|
||||
commands.append(COMMAND(num++, "Sub USB", commandButton, funcMainMode, modeUSB));
|
||||
commands.append(COMMAND(num++, "Sub LSBD", commandButton, funcMainMode, modeLSB_D));
|
||||
commands.append(COMMAND(num++, "Sub USBD", commandButton, funcMainMode, modeUSB_D));
|
||||
commands.append(COMMAND(num++, "Sub CW", commandButton, funcMainMode, modeCW));
|
||||
commands.append(COMMAND(num++, "Sub CWR", commandButton, funcMainMode, modeCW_R));
|
||||
commands.append(COMMAND(num++, "Sub FM", commandButton, funcMainMode, modeFM));
|
||||
commands.append(COMMAND(num++, "Sub AM", commandButton, funcMainMode, modeAM));
|
||||
commands.append(COMMAND(num++, "Sub RTTY", commandButton, funcMainMode, modeRTTY));
|
||||
commands.append(COMMAND(num++, "Sub RTTYR", commandButton, funcMainMode, modeRTTY_R));
|
||||
commands.append(COMMAND(num++, "Sub PSK", commandButton, funcMainMode, modePSK));
|
||||
commands.append(COMMAND(num++, "Sub PSKR", commandButton, funcMainMode, modePSK_R));
|
||||
commands.append(COMMAND(num++, "Sub DV", commandButton, funcMainMode, modeDV));
|
||||
commands.append(COMMAND(num++, "Sub DD", commandButton, funcMainMode, modeDD));
|
||||
commands.append(COMMAND(num++, "Main Mode+", commandButton, funcSelectedMode, 100));
|
||||
commands.append(COMMAND(num++, "Main Mode-", commandButton, funcSelectedMode, -100));
|
||||
commands.append(COMMAND(num++, "Sub Mode+", commandButton, funcUnselectedMode, 100));
|
||||
commands.append(COMMAND(num++, "Sub Mode-", commandButton, funcUnselectedMode, -100));
|
||||
commands.append(COMMAND(num++, "Main LSB", commandButton, funcSelectedMode, modeLSB));
|
||||
commands.append(COMMAND(num++, "Main USB", commandButton, funcSelectedMode, modeUSB));
|
||||
commands.append(COMMAND(num++, "Main LSBD", commandButton, funcSelectedMode, modeLSB_D));
|
||||
commands.append(COMMAND(num++, "Main USBD", commandButton, funcSelectedMode, modeUSB_D));
|
||||
commands.append(COMMAND(num++, "Main CW", commandButton, funcSelectedMode, modeCW));
|
||||
commands.append(COMMAND(num++, "Main CWR", commandButton, funcSelectedMode, modeCW_R));
|
||||
commands.append(COMMAND(num++, "Main FM", commandButton, funcSelectedMode, modeFM));
|
||||
commands.append(COMMAND(num++, "Main AM", commandButton, funcSelectedMode, modeAM));
|
||||
commands.append(COMMAND(num++, "Main RTTY", commandButton, funcSelectedMode, modeRTTY));
|
||||
commands.append(COMMAND(num++, "Main RTTYR", commandButton, funcSelectedMode, modeRTTY_R));
|
||||
commands.append(COMMAND(num++, "Main PSK", commandButton, funcSelectedMode, modePSK));
|
||||
commands.append(COMMAND(num++, "Main PSKR", commandButton, funcSelectedMode, modePSK_R));
|
||||
commands.append(COMMAND(num++, "Main DV", commandButton, funcSelectedMode, modeDV));
|
||||
commands.append(COMMAND(num++, "Main DD", commandButton, funcSelectedMode, modeDD));
|
||||
commands.append(COMMAND(num++, "Sub LSB", commandButton, funcUnselectedMode, modeLSB));
|
||||
commands.append(COMMAND(num++, "Sub USB", commandButton, funcUnselectedMode, modeUSB));
|
||||
commands.append(COMMAND(num++, "Sub LSBD", commandButton, funcUnselectedMode, modeLSB_D));
|
||||
commands.append(COMMAND(num++, "Sub USBD", commandButton, funcUnselectedMode, modeUSB_D));
|
||||
commands.append(COMMAND(num++, "Sub CW", commandButton, funcUnselectedMode, modeCW));
|
||||
commands.append(COMMAND(num++, "Sub CWR", commandButton, funcUnselectedMode, modeCW_R));
|
||||
commands.append(COMMAND(num++, "Sub FM", commandButton, funcUnselectedMode, modeFM));
|
||||
commands.append(COMMAND(num++, "Sub AM", commandButton, funcUnselectedMode, modeAM));
|
||||
commands.append(COMMAND(num++, "Sub RTTY", commandButton, funcUnselectedMode, modeRTTY));
|
||||
commands.append(COMMAND(num++, "Sub RTTYR", commandButton, funcUnselectedMode, modeRTTY_R));
|
||||
commands.append(COMMAND(num++, "Sub PSK", commandButton, funcUnselectedMode, modePSK));
|
||||
commands.append(COMMAND(num++, "Sub PSKR", commandButton, funcUnselectedMode, modePSK_R));
|
||||
commands.append(COMMAND(num++, "Sub DV", commandButton, funcUnselectedMode, modeDV));
|
||||
commands.append(COMMAND(num++, "Sub DD", commandButton, funcUnselectedMode, modeDD));
|
||||
commands.append(COMMAND(num++, "Bands", commandButton, funcSeparator, (quint8)0x0));
|
||||
commands.append(COMMAND(num++, "Band+", commandButton, funcBandStackReg, 100));
|
||||
commands.append(COMMAND(num++, "Band-", commandButton, funcBandStackReg, -100));
|
||||
|
|
595
wfmain.cpp
595
wfmain.cpp
Plik diff jest za duży
Load Diff
17
wfmain.h
17
wfmain.h
|
@ -123,7 +123,7 @@ signals:
|
|||
// Frequency, mode, band:
|
||||
void getFrequency();
|
||||
void getFrequency(unsigned char);
|
||||
void setFrequency(unsigned char receiver, freqt freq);
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void getMode();
|
||||
void setMode(unsigned char modeIndex, unsigned char modeFilter);
|
||||
void setMode(modeInfo);
|
||||
|
@ -331,7 +331,7 @@ private slots:
|
|||
|
||||
void handleExtConnectBtn();
|
||||
|
||||
void receiveScopeSettings(uchar receiver, int theme, quint16 len, int floor, int ceiling);
|
||||
void receiveScopeSettings(uchar vfo, int theme, quint16 len, int floor, int ceiling);
|
||||
void receiveValue(cacheItem val);
|
||||
void setAudioDevicesUI();
|
||||
void shortcutF1();
|
||||
|
@ -395,7 +395,7 @@ private slots:
|
|||
void receiveIFShift(unsigned char level);
|
||||
|
||||
// Meters:
|
||||
void receiveMeter(meter_t meter, unsigned char level, unsigned char receiver=0);
|
||||
void receiveMeter(meter_t meter, unsigned char level, unsigned char vfo=0);
|
||||
// void receiveSMeter(unsigned char level);
|
||||
// void receivePowerMeter(unsigned char level);
|
||||
// void receiveALCMeter(unsigned char level);
|
||||
|
@ -403,9 +403,9 @@ private slots:
|
|||
|
||||
|
||||
void receiveATUStatus(unsigned char atustatus);
|
||||
void receivePreamp(unsigned char pre, uchar receiver);
|
||||
void receiveAttenuator(unsigned char att, uchar receiver);
|
||||
void receiveAntennaSel(unsigned char ant, bool rx,uchar receiver);
|
||||
void receivePreamp(unsigned char pre, uchar vfo);
|
||||
void receiveAttenuator(unsigned char att, uchar vfo);
|
||||
void receiveAntennaSel(unsigned char ant, bool rx,uchar vfo);
|
||||
|
||||
void receivePortError(errorType err);
|
||||
void receiveStatusUpdate(networkStatus status);
|
||||
|
@ -502,7 +502,7 @@ private slots:
|
|||
|
||||
private:
|
||||
Ui::wfmain *ui; // Main UI
|
||||
QVector<spectrumScope*>receivers; // Spectrum Scope items.
|
||||
QVector<spectrumScope*>vfos; // Spectrum Scope/VFO item.
|
||||
void closeEvent(QCloseEvent *event);
|
||||
QString logFilename;
|
||||
bool debugMode;
|
||||
|
@ -710,9 +710,6 @@ private:
|
|||
|
||||
void updateUsbButtons();
|
||||
|
||||
void displayReceiver(uchar rx, bool active, bool swtch);
|
||||
|
||||
|
||||
int oldFreqDialVal;
|
||||
|
||||
QHash<unsigned char,QString> rigList;
|
||||
|
|
|
@ -140,7 +140,7 @@ struct antennaInfo {
|
|||
struct scopeData {
|
||||
bool valid=false;
|
||||
QByteArray data;
|
||||
uchar receiver;
|
||||
uchar vfo;
|
||||
spectrumMode_t mode;
|
||||
bool oor;
|
||||
double startFreq;
|
||||
|
@ -178,7 +178,6 @@ struct timekind {
|
|||
bool isMinus;
|
||||
};
|
||||
|
||||
/*
|
||||
enum cmds {
|
||||
cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdGetFreqB, cmdSetFreq, cmdGetMode, cmdSetMode,
|
||||
cmdGetDataMode, cmdSetModeFilter, cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue,
|
||||
|
@ -212,11 +211,9 @@ cmdSetSpanUp, cmdSetSpanDown, cmdIFFilterUp, cmdIFFilterDown, cmdPageDown, cmdPa
|
|||
cmdLCDWaterfall, cmdLCDSpectrum, cmdLCDNothing, cmdSeparator
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// funcs and funcString MUST match exactly (and NUMFUNCS must be updated)
|
||||
#define NUMFUNCS 248
|
||||
#define NUMFUNCS 244
|
||||
|
||||
enum funcs { funcNone,
|
||||
funcFreqTR, funcModeTR, funcBandEdgeFreq, funcFreqGet, funcModeGet, funcFreqSet, // \x00
|
||||
|
@ -245,9 +242,8 @@ funcRecorderPTTAuto, funcRecorderPreRec, funcRXAntConnector, funcAnt
|
|||
funcVOXDelay, funcVOXVoiceDelay, funcAPFType, funcAPFTypeLevel, funcPSKTone, funcRTTYMarkTone,
|
||||
funcDataModeWithFilter, funcAFMute, funcToneFreq, funcTSQLFreq, funcDTCSCode, funcCSQLCode,
|
||||
funcTransceiverStatus, funcXFCStatus, funcReadTXFreq, funcCIVOutput, funcReadTXFreqs, funcReadUserTXFreqs,
|
||||
funcUserTXBandEdgeFreq, funcRITFreq, funcRitStatus, funcRitTXStatus, funcSelectedFreq, funcUnselectedFreq,
|
||||
funcSelectedMode, funcUnselectedMode, funcMainFreq, funcSubFreq, funcMainMode, funcSubMode,
|
||||
funcScopeMainWaveData, funcScopeSubWaveData, funcScopeOnOff, funcScopeDataOutput,
|
||||
funcUserTXBandEdgeFreq, funcRITFreq, funcRitStatus, funcRitTXStatus, funcSelectedFreq, funcSelectedMode,
|
||||
funcUnselectedFreq, funcUnselectedMode, funcScopeMainWaveData, funcScopeSubWaveData, funcScopeOnOff, funcScopeDataOutput,
|
||||
funcScopeMainSub, funcScopeSingleDual, funcScopeMainMode, funcScopeSubMode, funcScopeMainSpan, funcScopeSubSpan,
|
||||
funcScopeMainEdge, funcScopeSubEdge, funcScopeMainHold, funcScopeSubHold, funcScopeMainRef, funcScopeSubRef,
|
||||
funcScopeMainSpeed, funcScopeSubSpeed, funcScopeMainVBW, funcScopeSubVBW, funcScopeMainRBW, funcScopeSubRBW,
|
||||
|
@ -293,9 +289,8 @@ static QString funcString[] { "None",
|
|||
"VOX Delay", "VOX Voice Delay", "APF Type", "APF Type Level", "PSK Tone", "RTTY Mark Tone",
|
||||
"Data Mode Filter", "AF Mute Status", "Tone Frequency", "TSQL Frequency", "DTCS Code/Polarity", "CSQL Code",
|
||||
"Transceiver Status", "XFC Status", "Read TX Freq", "CI-V Output", "Read TX Freqs", "Read User TX Freqs",
|
||||
"User TX Band Edge Freq","RIT Frequency", "RIT Status", "RIT TX Status", "Selected Freq", "Unselected Freq",
|
||||
"Selected Mode", "Unselected Mode", "Main RX Frequency", "Sub RX Frequency", "Main RX Mode", "Sub RX Mode",
|
||||
"Scope Main Wave Data", "Scope Sub Wave Data", "Scope On/Off", "Scope Data Output",
|
||||
"User TX Band Edge Freq","RIT Frequency", "RIT Status", "RIT TX Status", "Selected Freq", "Selected Mode",
|
||||
"Unselected Freq", "Unselected Mode", "Scope Main Wave Data", "Scope Sub Wave Data", "Scope On/Off", "Scope Data Output",
|
||||
"Scope Main/Sub", "Scope Single/Dual", "Scope Main Mode", "Scope Sub Mode", "Scope Main Span", "Scope Sub Span",
|
||||
"Scope Main Edge", "Scope Sub Edge", "Scope Main Hold", "Scope Sub Hold", "Scope Main Ref", "Scope Sub Ref",
|
||||
"Scope Main Speed", "Scope Sub Speed", "Scope Main VBW", "Scope Sub VBW", "Scope Main RBW", "Scope Sub RBW",
|
||||
|
@ -331,10 +326,10 @@ struct funcType {
|
|||
bool cmd29;
|
||||
};
|
||||
|
||||
//struct commandtype {
|
||||
// cmds cmd;
|
||||
// std::shared_ptr<void> data;
|
||||
//};
|
||||
struct commandtype {
|
||||
cmds cmd;
|
||||
std::shared_ptr<void> data;
|
||||
};
|
||||
|
||||
struct stepType {
|
||||
stepType(){};
|
||||
|
@ -437,12 +432,12 @@ enum usbFeatureType { featureReset,featureResetKeys, featureEventsA, featureEven
|
|||
|
||||
struct periodicType {
|
||||
periodicType() {};
|
||||
periodicType(funcs func, QString priority, char receiver) : func(func), priority(priority), prioVal(0), receiver(receiver) {};
|
||||
periodicType(funcs func, QString priority, int prioVal, char receiver) : func(func), priority(priority), prioVal(prioVal), receiver(receiver) {};
|
||||
periodicType(funcs func, QString priority, char vfo) : func(func), priority(priority), prioVal(0), vfo(vfo) {};
|
||||
periodicType(funcs func, QString priority, int prioVal, char vfo) : func(func), priority(priority), prioVal(prioVal), vfo(vfo) {};
|
||||
funcs func;
|
||||
QString priority;
|
||||
int prioVal;
|
||||
char receiver;
|
||||
char vfo;
|
||||
};
|
||||
|
||||
inline QString getMeterDebug(meter_t m) {
|
||||
|
@ -502,7 +497,7 @@ Q_DECLARE_METATYPE(duplexMode_t)
|
|||
Q_DECLARE_METATYPE(rptAccessTxRx_t)
|
||||
Q_DECLARE_METATYPE(rptrAccessData)
|
||||
Q_DECLARE_METATYPE(usbFeatureType)
|
||||
//Q_DECLARE_METATYPE(cmds)
|
||||
Q_DECLARE_METATYPE(cmds)
|
||||
Q_DECLARE_METATYPE(funcs)
|
||||
Q_DECLARE_METATYPE(memoryType)
|
||||
Q_DECLARE_METATYPE(antennaInfo)
|
||||
|
|
Ładowanie…
Reference in New Issue