Merge branch 'filterwidth'

half-duplex
Roeland Jansen 2023-01-14 19:58:02 +01:00
commit c221fb4a04
11 zmienionych plików z 132 dodań i 74 usunięć

Wyświetl plik

@ -68,16 +68,16 @@ void audioDevices::enumerate()
}
#if ((QT_VERSION >= QT_VERSION_CHECK(5,15,0)) && (QT_VERSION < QT_VERSION_CHECK(6,0,0)))
inputs.append(audioDevice(deviceInfo.deviceName(), deviceInfo, deviceInfo.realm(), isDefault));
inputs.append(new audioDevice(deviceInfo.deviceName(), deviceInfo, deviceInfo.realm(), isDefault));
qInfo(logAudio()) << (deviceInfo.deviceName() == defaultInputDeviceName ? "*" : " ") <<
"(" << numInputDevices <<" " << deviceInfo.realm() << ") Input Device : " <<
deviceInfo.deviceName();
#elif (QT_VERSION < QT_VERSION_CHECK(5,15,0))
inputs.append(audioDevice(deviceInfo.deviceName(), deviceInfo, "", isDefault));
inputs.append(new audioDevice(deviceInfo.deviceName(), deviceInfo, "", isDefault));
qInfo(logAudio()) << (deviceInfo.deviceName() == defaultInputDeviceName ? "*" : " ") <<
"(" << numInputDevices << ") Input Device : " << deviceInfo.deviceName();
#else
inputs.append(audioDevice(deviceInfo.description(), deviceInfo, "", isDefault));
inputs.append(new audioDevice(deviceInfo.description(), deviceInfo, "", isDefault));
qInfo(logAudio()) << (deviceInfo.description() == defaultInputDeviceName ? "*" : " ") <<
"(" << numInputDevices << ") Input Device : " << deviceInfo.description();
#endif
@ -128,16 +128,16 @@ void audioDevices::enumerate()
}
#if ((QT_VERSION >= QT_VERSION_CHECK(5,15,0)) && (QT_VERSION < QT_VERSION_CHECK(6,0,0)))
outputs.append(audioDevice(deviceInfo.deviceName(), deviceInfo, deviceInfo.realm() , isDefault));
outputs.append(new audioDevice(deviceInfo.deviceName(), deviceInfo, deviceInfo.realm() , isDefault));
qInfo(logAudio()) << (deviceInfo.deviceName() == defaultOutputDeviceName ? "*" : " ") <<
"(" << numOutputDevices << " " << deviceInfo.realm() << ") Output Device : " <<
deviceInfo.deviceName();
#elif (QT_VERSION < QT_VERSION_CHECK(5,15,0))
outputs.append(audioDevice(deviceInfo.deviceName(), deviceInfo, "", isDefault));
outputs.append(new audioDevice(deviceInfo.deviceName(), deviceInfo, "", isDefault));
qInfo(logAudio()) << (deviceInfo.deviceName() == defaultOutputDeviceName ? "*" : " ") <<
"(" << numOutputDevices << ") Output Device : " << deviceInfo.deviceName();
#else
outputs.append(audioDevice(deviceInfo.description(), deviceInfo, "", isDefault));
outputs.append(new audioDevice(deviceInfo.description(), deviceInfo, "", isDefault));
qInfo(logAudio()) << (deviceInfo.description() == defaultOutputDeviceName ? "*" : " ") <<
"(" << numOutputDevices << ") Output Device : " << deviceInfo.description();
#endif
@ -189,7 +189,7 @@ void audioDevices::enumerate()
defaultInputDeviceName = info->name;
isDefault = true;
}
inputs.append(audioDevice(QString(info->name), i,isDefault));
inputs.append(new audioDevice(QString(info->name), i,isDefault));
#ifndef BUILD_WFSERVER
if (fm.boundingRect(QString(info->name)).width() > numCharsIn)
numCharsIn = fm.boundingRect(QString(info->name)).width();
@ -204,7 +204,7 @@ void audioDevices::enumerate()
defaultOutputDeviceName = info->name;
isDefault = true;
}
outputs.append(audioDevice(QString(info->name), i,isDefault));
outputs.append(new audioDevice(QString(info->name), i,isDefault));
#ifndef BUILD_WFSERVER
if (fm.boundingRect(QString(info->name)).width() > numCharsOut)
numCharsOut = fm.boundingRect(QString(info->name)).width();
@ -277,9 +277,9 @@ void audioDevices::enumerate()
}
#if (RTAUDIO_VERSION_MAJOR > 5)
inputs.append(audioDevice(QString::fromStdString(info.name), devices[i], isDefault));
inputs.append(new audioDevice(QString::fromStdString(info.name), devices[i], isDefault));
#else
inputs.append(audioDevice(QString::fromStdString(info.name), i, isDefault));
inputs.append(new audioDevice(QString::fromStdString(info.name), i, isDefault));
#endif
#ifndef BUILD_WFSERVER
@ -299,9 +299,9 @@ void audioDevices::enumerate()
}
#if (RTAUDIO_VERSION_MAJOR > 5)
outputs.append(audioDevice(QString::fromStdString(info.name), devices[i], isDefault));
outputs.append(new audioDevice(QString::fromStdString(info.name), devices[i], isDefault));
#else
outputs.append(audioDevice(QString::fromStdString(info.name), i, isDefault));
outputs.append(new audioDevice(QString::fromStdString(info.name), i, isDefault));
#endif
#ifndef BUILD_WFSERVER
@ -322,14 +322,16 @@ void audioDevices::enumerate()
audioDevices::~audioDevices()
{
outputs.clear();
inputs.clear();
}
QStringList audioDevices::getInputs()
{
QStringList list;
foreach(const audioDevice input, inputs) {
list.append(input.name);
for (int f = 0; f < inputs.size(); f++) {
list.append(inputs[f]->name);
}
return list;
@ -337,9 +339,10 @@ QStringList audioDevices::getInputs()
QStringList audioDevices::getOutputs()
{
QStringList list;
foreach(const audioDevice output, outputs) {
list.append(output.name);
QStringList list;
for (int f = 0; f < outputs.size(); f++) {
list.append(outputs[f]->name);
}
return list;
@ -355,15 +358,15 @@ int audioDevices::findInput(QString type, QString name)
for (int f = 0; f < inputs.size(); f++)
{
//qInfo(logAudio()) << "Found device" << inputs[f].name;
if (inputs[f].name.startsWith(name)) {
if (inputs[f]->name.startsWith(name)) {
s << type << " Audio input device " << name << " found! ";
ret = f;
}
if (inputs[f].isDefault == true)
if (inputs[f]->isDefault == true)
{
def = f;
}
if (inputs[f].name.toUpper().contains("USB")) {
if (inputs[f]->name.toUpper().contains("USB")) {
// This is a USB device...
usb = f;
}
@ -374,17 +377,17 @@ int audioDevices::findInput(QString type, QString name)
s << type << " Audio input device " << name << " Not found: ";
if (inputs.size() == 1) {
s << "Selecting first device " << inputs[0].name;
s << "Selecting first device " << inputs[0]->name;
ret = 0;
}
else if (usb > -1 && type != "Client")
{
s << " Selecting found USB device " << inputs[usb].name;
s << " Selecting found USB device " << inputs[usb]->name;
ret = usb;
}
else if (def > -1)
{
s << " Selecting default device " << inputs[def].name;
s << " Selecting default device " << inputs[def]->name;
ret = def;
}
else {
@ -406,15 +409,15 @@ int audioDevices::findOutput(QString type, QString name)
for (int f = 0; f < outputs.size(); f++)
{
//qInfo(logAudio()) << "Found device" << outputs[f].name;
if (outputs[f].name.startsWith(name)) {
if (outputs[f]->name.startsWith(name)) {
ret = f;
s << type << " Audio output device " << name << " found! ";
}
if (outputs[f].isDefault == true)
if (outputs[f]->isDefault == true)
{
def = f;
}
if (outputs[f].name.toUpper().contains("USB")) {
if (outputs[f]->name.toUpper().contains("USB")) {
// This is a USB device...
usb = f;
}
@ -426,17 +429,17 @@ int audioDevices::findOutput(QString type, QString name)
s << type << " Audio output device " << name << " Not found: ";
if (outputs.size() == 1) {
s << " Selecting first device " << outputs[0].name;
s << " Selecting first device " << outputs[0]->name;
ret = 0;
}
else if (usb > -1 && type != "Client")
{
s << " Selecting found USB device " << outputs[usb].name;
s << " Selecting found USB device " << outputs[usb]->name;
ret = usb;
}
else if (def > -1)
{
s << " Selecting default device " << outputs[def].name;
s << " Selecting default device " << outputs[def]->name;
ret = def;
}
else {

Wyświetl plik

@ -56,18 +56,18 @@ public:
int getNumCharsIn() { return numCharsIn; };
int getNumCharsOut() { return numCharsOut; };
QString getInputName(int num) { return inputs[num].name; };
QString getOutputName(int num) { return outputs[num].name; };
QString getInputName(int num) { return inputs[num]->name; };
QString getOutputName(int num) { return outputs[num]->name; };
int getInputDeviceInt(int num) { return inputs[num].deviceInt; };
int getOutputDeviceInt(int num) { return outputs[num].deviceInt; };
int getInputDeviceInt(int num) { return inputs[num]->deviceInt; };
int getOutputDeviceInt(int num) { return outputs[num]->deviceInt; };
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
const QAudioDeviceInfo getInputDeviceInfo(int num) { return inputs[num].deviceInfo; };
const QAudioDeviceInfo getOutputDeviceInfo(int num) { return outputs[num].deviceInfo; };
const QAudioDeviceInfo getInputDeviceInfo(int num) { return inputs[num]->deviceInfo; };
const QAudioDeviceInfo getOutputDeviceInfo(int num) { return outputs[num]->deviceInfo; };
#else
const QAudioDevice getInputDeviceInfo(int num) { return inputs[num].deviceInfo; };
const QAudioDevice getOutputDeviceInfo(int num) { return outputs[num].deviceInfo; };
const QAudioDevice getInputDeviceInfo(int num) { return inputs[num]->deviceInfo; };
const QAudioDevice getOutputDeviceInfo(int num) { return outputs[num]->deviceInfo; };
#endif
void enumerate();
@ -95,12 +95,12 @@ private:
QString defaultOutputDeviceName;
int numInputDevices;
int numOutputDevices;
QList<audioDevice> inputs;
QList<audioDevice> outputs;
QList<audioDevice*> inputs;
QList<audioDevice*> outputs;
int numCharsIn = 0;
int numCharsOut = 0;
QString audioApi = "wasapi";
};
#endif
#endif

Wyświetl plik

@ -70,11 +70,12 @@ public slots:
virtual void incomingAudio(const audioPacket data);
virtual void convertedInput(audioPacket audio);
virtual void convertedOutput(audioPacket audio);
virtual void getNextAudioChunk();
private slots:
virtual void stateChanged(QAudio::State state);
virtual void clearUnderrun();
virtual void getNextAudioChunk();
signals:
void audioMessage(QString message);

Wyświetl plik

@ -36,7 +36,7 @@ public:
int getLatency();
using audioHandler::getNextAudioChunk;
void getNextAudioChunk(QByteArray& data);
quint16 getAmplitude();

Wyświetl plik

@ -889,7 +889,7 @@ void rigCommander::setPassband(quint16 pass)
calc = quint16((pass / 200) - 1);
}
else if (pass >= 600 || pass <=3600) // SSB/CW/PSK 10-40 (10-31 for RTTY)
else if (pass >= 600 && pass <=3600) // SSB/CW/PSK 10-40 (10-31 for RTTY)
{
calc = quint16((pass / 100) + 4);
}

Wyświetl plik

@ -42,7 +42,7 @@ public:
int getLatency();
using audioHandler::getNextAudioChunk;
void getNextAudioChunk(QByteArray& data);
quint16 getAmplitude();

Wyświetl plik

@ -37,13 +37,13 @@ using namespace std;
#define HIDDATALENGTH 64
#define MAX_STR 255
enum commandType {normal,bandswitch,modeswitch};
enum commandType {normalCommand,bandswitch,modeswitch};
struct COMMAND {
COMMAND() {}
COMMAND(int index, QString text, int command, char suffix) :
index(index), text(text), command(command), suffix(suffix), type(normal){}
index(index), text(text), command(command), suffix(suffix), type(normalCommand){}
COMMAND(int index, QString text, int command, bandType band) :
index(index), text(text), command(command), band(band), type(bandswitch) {}
COMMAND(int index, QString text, int command, mode_kind mode) :

Wyświetl plik

@ -375,9 +375,9 @@ void wfmain::rigConnections()
connect(rig, SIGNAL(haveDTCS(quint16,bool,bool)), rpt, SLOT(handleDTCS(quint16,bool,bool)));
connect(rig, SIGNAL(haveRptAccessMode(rptAccessTxRx)), rpt, SLOT(handleRptAccessMode(rptAccessTxRx)));
connect(this, SIGNAL(getDuplexMode()), rig, SLOT(getDuplexMode()));
connect(this, SIGNAL(getPassband()), rig, SLOT(getPassband()));
connect(this, SIGNAL(setPassband(quint16)), rig, SLOT(setPassband(quint16)));
connect(this, SIGNAL(getTone()), rig, SLOT(getTone()));
connect(this, SIGNAL(getTSQL()), rig, SLOT(getTSQL()));
connect(this, SIGNAL(getRptAccessMode()), rig, SLOT(getRptAccessMode()));
@ -1507,7 +1507,7 @@ void wfmain::doShuttle(bool up, unsigned char level)
void wfmain::buttonControl(const COMMAND* cmd)
{
if (cmd->type==normal) {
if (cmd->type==normalCommand) {
//qDebug() << "Other command";
issueCmdUniquePriority((cmds)cmd->command, cmd->suffix);
}
@ -3514,6 +3514,12 @@ void wfmain::doCmd(commandtype cmddata)
emit getBandStackReg(bandStkBand, bandStkRegCode);
break;
}
case cmdSetPassband:
{
quint16 pass = (*std::static_pointer_cast<quint16>(data));
emit setPassband(pass);
break;
}
default:
doCmd(cmd);
break;
@ -3879,6 +3885,14 @@ void wfmain::issueCmd(cmds cmd, unsigned char c)
delayedCmdQue.push_back(cmddata);
}
void wfmain::issueCmd(cmds cmd, quint16 c)
{
commandtype cmddata;
cmddata.cmd = cmd;
cmddata.data = std::shared_ptr<quint16>(new quint16(c));
delayedCmdQue.push_back(cmddata);
}
void wfmain::issueCmdUniquePriority(cmds cmd, bool b)
{
commandtype cmddata;
@ -3915,6 +3929,15 @@ void wfmain::issueCmdUniquePriority(cmds cmd, freqt f)
removeSimilarCommand(cmd);
}
void wfmain::issueCmdUniquePriority(cmds cmd, quint16 c)
{
commandtype cmddata;
cmddata.cmd = cmd;
cmddata.data = std::shared_ptr<quint16>(new quint16(c));
delayedCmdQue.push_front(cmddata);
removeSimilarCommand(cmd);
}
void wfmain::removeSimilarCommand(cmds cmd)
{
// pop anything out that is of the same kind of command:
@ -4568,6 +4591,13 @@ void wfmain::handlePlotClick(QMouseEvent* me)
{
QCPAbstractItem* item = plot->itemAt(me->pos(), true);
QCPItemText* textItem = dynamic_cast<QCPItemText*> (item);
QCPItemRect* rectItem = dynamic_cast<QCPItemRect*> (item);
int leftPix = (int)passbandIndicator->left->pixelPosition().x();
int rightPix = (int)passbandIndicator->right->pixelPosition().x();
if (me->button() == Qt::LeftButton && rectItem != nullptr && (me->pos().x() <= leftPix || me->pos().x() >= rightPix)) {
resizingPassband = true;
}
if (me->button() == Qt::RightButton && textItem != nullptr) {
QMap<QString, spotData*>::iterator spot = clusterSpots.find(textItem->text());
if (spot != clusterSpots.end() && spot.key() == textItem->text()) {
@ -4623,12 +4653,37 @@ void wfmain::handlePlotMouseRelease(QMouseEvent* me)
qInfo(logGui()) << "Mouse release delta: " << delta;
}
if (resizingPassband) {
resizingPassband = false;
}
}
void wfmain::handlePlotMouseMove(QMouseEvent *me)
{
QCPAbstractItem* item = plot->itemAt(me->pos(), true);
QCPItemText* textItem = dynamic_cast<QCPItemText*> (item);
QCPItemRect* rectItem = dynamic_cast<QCPItemRect*> (item);
int leftPix = (int)passbandIndicator->left->pixelPosition().x();
int rightPix = (int)passbandIndicator->right->pixelPosition().x();
if (rectItem != nullptr && (me->pos().x() <= leftPix || me->pos().x() >= rightPix)) {
setCursor(Qt::SizeHorCursor);
}
else if (resizingPassband) {
// We are currently resizing the passband.
double pb=0.0;
if (currentModeInfo.mk == modeUSB || currentModeInfo.mk == modePSK || plot->xAxis->pixelToCoord(me->pos().x()) >= freq.MHzDouble) {
pb = plot->xAxis->pixelToCoord(me->pos().x()) - passbandIndicator->topLeft->coords().x();
}
else {
pb = passbandIndicator->bottomRight->coords().x() - plot->xAxis->pixelToCoord(me->pos().x());
}
issueCmdUniquePriority(cmdSetPassband, (quint16)(pb * 1000000));
}
else {
setCursor(Qt::ArrowCursor);
}
if(me->buttons() == Qt::LeftButton && textItem==nullptr && prefs.clickDragTuningEnable)
{
double delta = plot->xAxis->pixelToCoord(me->pos().x()) - mousePressFreq;
@ -5962,18 +6017,10 @@ void wfmain::receiveLANGain(unsigned char level)
void wfmain::receivePassband(quint16 pass)
{
/* int calc;
if (currentModeInfo.mk == modeAM) {
calc = 200 + (pass * 200);
if (passBand != (double)(pass / 1000000.0)) {
passBand = (double)(pass / 1000000.0);
showStatusBarText(QString("IF filter width %1 Hz").arg(pass));
}
else if (pass <= 10)
{
calc = 50 + (pass * 50);
}
else {
calc = 600 + ((pass - 10) * 100);
} */
passBand = (double)(pass / 1000000.0);
}
void wfmain::receiveMeter(meterKind inMeter, unsigned char level)

Wyświetl plik

@ -105,7 +105,6 @@ signals:
// Repeater:
void getDuplexMode();
void getPassband();
void getTone();
void getTSQL();
void getDTCS();
@ -123,6 +122,9 @@ signals:
void getMicGain();
void getSpectrumRefLevel();
void getModInputLevel(rigInput input);
void getMeters(meterKind meter);
void getPassband();
// Level set:
void setRfGain(unsigned char level);
@ -131,7 +133,7 @@ signals:
void setIFShift(unsigned char level);
void setTPBFInner(unsigned char level);
void setTPBFOuter(unsigned char level);
void setIFShiftWindow(unsigned char level);
void setTPBFInnerWindow(unsigned char level);
void setTPBFOuterWindow(unsigned char level);
@ -149,9 +151,7 @@ signals:
void setACCBGain(unsigned char level);
void setUSBGain(unsigned char level);
void setLANGain(unsigned char level);
void getMeters(meterKind meter);
void setPassband(quint16 pass);
// PTT, ATU, ATT, Antenna, Preamp:
void getPTT();
@ -871,7 +871,7 @@ private:
cmdGetDataMode, cmdSetModeFilter, cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue,
cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdSetRxRfGain, cmdGetAfGain, cmdSetAfGain,
cmdGetSql, cmdSetSql, cmdGetIFShift, cmdSetIFShift, cmdGetTPBFInner, cmdSetTPBFInner,
cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetATUStatus, cmdGetPassband,
cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetATUStatus, cmdGetPassband, cmdSetPassband,
cmdSetATU, cmdStartATU, cmdGetSpectrumMode,
cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode, cmdGetPTT, cmdSetPTT,cmdPTTToggle,
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel,
@ -902,12 +902,14 @@ private:
void issueCmd(cmds cmd, unsigned char c);
void issueCmd(cmds cmd, char c);
void issueCmd(cmds cmd, bool b);
void issueCmd(cmds cmd, quint16 c);
// These commands pop_front and remove similar commands:
void issueCmdUniquePriority(cmds cmd, bool b);
void issueCmdUniquePriority(cmds cmd, unsigned char c);
void issueCmdUniquePriority(cmds cmd, char c);
void issueCmdUniquePriority(cmds cmd, freqt f);
void issueCmdUniquePriority(cmds cmd, quint16 c);
void removeSimilarCommand(cmds cmd);
@ -1069,6 +1071,7 @@ private:
rigstate* rigState = Q_NULLPTR;
bool resizingPassband = false;
SERVERCONFIG serverConfig;
void serverAddUserLine(const QString& user, const QString& pass, const int& type);

BIN
wfview.png 100644

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 116 KiB

Wyświetl plik

@ -87,7 +87,7 @@ isEmpty(PREFIX) {
DEFINES += PREFIX=\\\"$$PREFIX\\\"
macx:INCLUDEPATH += /usr/local/include /opt/local/include
macx:LIBS += -L/usr/local/lib -L/opt/local/lib
macx:LIBS += -L/usr/local/lib -L/opt/local/lib -L../qcustomplot
macx:ICON = ../wfview/resources/wfview.icns
win32:RC_ICONS = ../wfview/resources/wfview.ico
@ -130,12 +130,14 @@ unix:stylesheets.files = qdarkstyle
unix:stylesheets.path = $$PREFIX/share/wfview
INSTALLS += stylesheets
macx:LIBS += -framework CoreAudio -framework CoreFoundation -lpthread -lopus
# Do not do this, it will hang on start:
# CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
CONFIG(debug, release|debug) {
linux: QCPLIB = qcustomplotd
!linux: QCPLIB = qcustomplotd2
win32: QCPLIB = qcustomplotd2
win32 {
contains(QMAKE_TARGET.arch, x86_64) {
LIBS += -L../opus/win32/VS2015/x64/Debug/
@ -153,7 +155,7 @@ CONFIG(debug, release|debug) {
}
} else {
linux: QCPLIB = qcustomplot
!linux: QCPLIB = qcustomplot2
win32: QCPLIB = qcustomplot2
win32 {
contains(QMAKE_TARGET.arch, x86_64) {
LIBS += -L../opus/win32/VS2015/x64/Release/
@ -172,21 +174,23 @@ CONFIG(debug, release|debug) {
}
linux:LIBS += -L./ -l$$QCPLIB -lopus
!linux:LIBS += -l$$QCPLIB -lopus
macx:LIBS += -framework CoreAudio -framework CoreFoundation -lpthread -lopus
win32:LIBS += -l$$QCPLIB -lopus
contains(DEFINES,USB_CONTROLLER){
linux:LIBS += -L./ -l$$QCPLIB -lhidapi-libusb
macx:LIBS += -framework CoreAudio -framework CoreFoundation -lhidapi
macx:LIBS += -lhidapi
win32:INCLUDEPATH += ../hidapi/hidapi
win32:SOURCES += ../hidapi/windows/hid.c
}
macx:SOURCES += ../qcustomplot/qcustomplot.cpp
macx:HEADERS += ../qcustomplot/qcustomplot.h
!linux:INCLUDEPATH += ../qcustomplot
!linux:INCLUDEPATH += ../opus/include
win32:INCLUDEPATH += ../eigen
win32:INCLUDEPATH += ../r8brain-free-src
!linux:INCLUDEPATH += ../eigen
!linux:INCLUDEPATH += ../r8brain-free-src
INCLUDEPATH += resampler