Now supports multiple radios on OEM server

merge-requests/9/merge
Phil Taylor 2022-01-23 15:06:31 +00:00
rodzic ff47fbd82f
commit 264ad231c0
6 zmienionych plików z 148 dodań i 81 usunięć

Wyświetl plik

@ -598,15 +598,36 @@ void servermain::loadSettings()
serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt(); serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt();
serverConfig.civPort = settings->value("ServerCivPort", 50002).toInt(); serverConfig.civPort = settings->value("ServerCivPort", 50002).toInt();
serverConfig.audioPort = settings->value("ServerAudioPort", 50003).toInt(); serverConfig.audioPort = settings->value("ServerAudioPort", 50003).toInt();
int numUsers = settings->value("ServerNumUsers", 2).toInt();
serverConfig.users.clear(); serverConfig.users.clear();
for (int f = 0; f < numUsers; f++)
{ int numUsers = settings->beginReadArray("Users");
SERVERUSER user; if (numUsers > 0) {
user.username = settings->value("ServerUsername_" + QString::number(f), "").toString(); {
user.password = settings->value("ServerPassword_" + QString::number(f), "").toString(); for (int f = 0; f < numUsers; f++)
user.userType = settings->value("ServerUserType_" + QString::number(f), 0).toInt(); {
serverConfig.users.append(user); settings->setArrayIndex(f);
SERVERUSER user;
user.username = settings->value("Username", "").toString();
user.password = settings->value("Password", "").toString();
user.userType = settings->value("UserType", 0).toInt();
serverConfig.users.append(user);
}
}
settings->endArray();
}
else {
/* Support old way of storing users*/
settings->endArray();
numUsers = settings->value("ServerNumUsers", 2).toInt();
for (int f = 0; f < numUsers; f++)
{
SERVERUSER user;
user.username = settings->value("ServerUsername_" + QString::number(f), "").toString();
user.password = settings->value("ServerPassword_" + QString::number(f), "").toString();
user.userType = settings->value("ServerUserType_" + QString::number(f), 0).toInt();
serverConfig.users.append(user);
}
} }
serverRxSetup.isinput = true; serverRxSetup.isinput = true;

Wyświetl plik

@ -6,8 +6,10 @@
udpHandler::udpHandler(udpPreferences prefs, audioSetup rx, audioSetup tx) : udpHandler::udpHandler(udpPreferences prefs, audioSetup rx, audioSetup tx) :
controlPort(prefs.controlLANPort), controlPort(prefs.controlLANPort),
civPort(50002), civPort(0),
audioPort(50003), audioPort(0),
civLocalPort(0),
audioLocalPort(0),
rxSetup(rx), rxSetup(rx),
txSetup(tx) txSetup(tx)
{ {
@ -55,7 +57,7 @@ udpHandler::udpHandler(udpPreferences prefs, audioSetup rx, audioSetup tx) :
void udpHandler::init() void udpHandler::init()
{ {
udpBase::init(); // Perform UDP socket initialization. udpBase::init(0); // Perform UDP socket initialization.
// Connect socket to my dataReceived function. // Connect socket to my dataReceived function.
QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpHandler::dataReceived); QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpHandler::dataReceived);
@ -219,7 +221,7 @@ void udpHandler::dataReceived()
gotAuthOK = true; gotAuthOK = true;
if (!streamOpened) if (!streamOpened)
{ {
sendRequestStream(); sendRequestStream();
} }
} }
@ -272,6 +274,27 @@ void udpHandler::dataReceived()
else { else {
civPort = qFromBigEndian(in->civport); civPort = qFromBigEndian(in->civport);
audioPort = qFromBigEndian(in->audioport); audioPort = qFromBigEndian(in->audioport);
if (!streamOpened) {
civ = new udpCivData(localIP, radioIP, civPort, civLocalPort);
// TX is not supported
if (txSampleRates < 2) {
txSetup.samplerate = 0;
txSetup.codec = 0;
}
audio = new udpAudio(localIP, radioIP, audioPort, audioLocalPort, rxSetup, txSetup);
QObject::connect(civ, SIGNAL(receive(QByteArray)), this, SLOT(receiveFromCivStream(QByteArray)));
QObject::connect(audio, SIGNAL(haveAudioData(audioPacket)), this, SLOT(receiveAudioData(audioPacket)));
QObject::connect(this, SIGNAL(haveChangeLatency(quint16)), audio, SLOT(changeLatency(quint16)));
QObject::connect(this, SIGNAL(haveSetVolume(unsigned char)), audio, SLOT(setVolume(unsigned char)));
streamOpened = true;
}
qInfo(logUdp()) << this->metaObject()->className() << "Got serial and audio request success, device name: " << devName;
} }
} }
break; break;
@ -365,32 +388,13 @@ void udpHandler::dataReceived()
sendControl(false, 0x00, in->seq); // Respond with an idle sendControl(false, 0x00, in->seq); // Respond with an idle
} }
else { else {
setCurrentRadio(0);
} }
} }
else if (!in->busy && numRadios == 1) else if (!in->busy && numRadios == 1)
{ {
status.message = devName + " available"; status.message = devName + " available";
if (civPort == 0) { setCurrentRadio(0);
qInfo(logUdp()) << this->metaObject()->className() << "civPort not yet configured!";
}
if (radios[0].commoncap == 0x8010) {
memcpy(macaddress, radios[0].macaddress, 6);
useGuid = false;
}
else {
useGuid = true;
guid = radios[0].guid;
}
devName = radios[0].name;
audioType = radios[0].audio;
civId = radios[0].civ;
rxSampleRates = radios[0].rxsample;
txSampleRates = radios[0].txsample;
sendRequestStream(); // Send initial stream request.
} }
} }
else if (streamOpened) else if (streamOpened)
@ -398,7 +402,7 @@ void udpHandler::dataReceived()
a CONNINFO packet, send our details to confirm we still want the stream */ a CONNINFO packet, send our details to confirm we still want the stream */
{ {
// Received while stream is open. // Received while stream is open.
sendRequestStream(); //sendRequestStream();
} }
break; break;
} }
@ -451,6 +455,21 @@ void udpHandler::dataReceived()
void udpHandler::setCurrentRadio(int radio) { void udpHandler::setCurrentRadio(int radio) {
qInfo(logUdp()) << "Got Radio" << radio; qInfo(logUdp()) << "Got Radio" << radio;
qInfo(logUdp()) << "Find available local ports";
/* This seems to be the only way to find some available local ports.
The problem is we need to know the local AND remote ports but send the
local port to the server first and it replies with the remote ports! */
if (civLocalPort == 0 || audioLocalPort == 0) {
QUdpSocket* tempudp = new QUdpSocket();
tempudp->bind(); // Bind to random port.
civLocalPort = tempudp->localPort();
tempudp->close();
tempudp->bind();
audioLocalPort = tempudp->localPort();
tempudp->close();
delete tempudp;
}
int baudrate = qFromBigEndian(radios[radio].baudrate); int baudrate = qFromBigEndian(radios[radio].baudrate);
emit haveBaudRate(baudrate); emit haveBaudRate(baudrate);
@ -469,25 +488,6 @@ void udpHandler::setCurrentRadio(int radio) {
rxSampleRates = radios[radio].rxsample; rxSampleRates = radios[radio].rxsample;
txSampleRates = radios[radio].txsample; txSampleRates = radios[radio].txsample;
if (!streamOpened) {
civ = new udpCivData(localIP, radioIP, civPort);
// TX is not supported
if (txSampleRates < 2) {
txSetup.samplerate = 0;
txSetup.codec = 0;
}
audio = new udpAudio(localIP, radioIP, audioPort, rxSetup, txSetup);
QObject::connect(civ, SIGNAL(receive(QByteArray)), this, SLOT(receiveFromCivStream(QByteArray)));
QObject::connect(audio, SIGNAL(haveAudioData(audioPacket)), this, SLOT(receiveAudioData(audioPacket)));
QObject::connect(this, SIGNAL(haveChangeLatency(quint16)), audio, SLOT(changeLatency(quint16)));
QObject::connect(this, SIGNAL(haveSetVolume(unsigned char)), audio, SLOT(setVolume(unsigned char)));
streamOpened = true;
}
qInfo(logUdp()) << this->metaObject()->className() << "Got serial and audio request success, device name: " << devName;
sendRequestStream(); sendRequestStream();
} }
@ -525,8 +525,8 @@ void udpHandler::sendRequestStream()
memcpy(&p.username, usernameEncoded.constData(), usernameEncoded.length()); memcpy(&p.username, usernameEncoded.constData(), usernameEncoded.length());
p.rxsample = qToBigEndian((quint32)rxSetup.samplerate); p.rxsample = qToBigEndian((quint32)rxSetup.samplerate);
p.txsample = qToBigEndian((quint32)txSetup.samplerate); p.txsample = qToBigEndian((quint32)txSetup.samplerate);
p.civport = qToBigEndian((quint32)civPort); p.civport = qToBigEndian((quint32)civLocalPort);
p.audioport = qToBigEndian((quint32)audioPort); p.audioport = qToBigEndian((quint32)audioLocalPort);
p.txbuffer = qToBigEndian((quint32)txSetup.latency); p.txbuffer = qToBigEndian((quint32)txSetup.latency);
p.convert = 1; p.convert = 1;
sendTrackedPacket(QByteArray::fromRawData((const char*)p.packet, sizeof(p))); sendTrackedPacket(QByteArray::fromRawData((const char*)p.packet, sizeof(p)));
@ -597,14 +597,14 @@ void udpHandler::sendToken(uint8_t magic)
// Class that manages all Civ Data to/from the rig // Class that manages all Civ Data to/from the rig
udpCivData::udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort) udpCivData::udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort,quint16 localPort=0)
{ {
qInfo(logUdp()) << "Starting udpCivData"; qInfo(logUdp()) << "Starting udpCivData";
localIP = local; localIP = local;
port = civPort; port = civPort;
radioIP = ip; radioIP = ip;
udpBase::init(); // Perform connection udpBase::init(localPort); // Perform connection
QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpCivData::dataReceived); QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpCivData::dataReceived);
@ -793,7 +793,7 @@ void udpCivData::dataReceived()
// Audio stream // Audio stream
udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 audioPort, audioSetup rxSetup, audioSetup txSetup) udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 audioPort, quint16 lport, audioSetup rxSetup, audioSetup txSetup)
{ {
qInfo(logUdp()) << "Starting udpAudio"; qInfo(logUdp()) << "Starting udpAudio";
this->localIP = local; this->localIP = local;
@ -804,7 +804,7 @@ udpAudio::udpAudio(QHostAddress local, QHostAddress ip, quint16 audioPort, audio
enableTx = false; enableTx = false;
} }
init(); // Perform connection init(lport); // Perform connection
QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpAudio::dataReceived); QUdpSocket::connect(udp, &QUdpSocket::readyRead, this, &udpAudio::dataReceived);
@ -1065,11 +1065,11 @@ void udpAudio::dataReceived()
void udpBase::init() void udpBase::init(quint16 lport)
{ {
timeStarted.start(); timeStarted.start();
udp = new QUdpSocket(this); udp = new QUdpSocket(this);
udp->bind(); // Bind to random port. udp->bind(lport); // Bind to random port.
localPort = udp->localPort(); localPort = udp->localPort();
qInfo(logUdp()) << "UDP Stream bound to local port:" << localPort << " remote port:" << port; qInfo(logUdp()) << "UDP Stream bound to local port:" << localPort << " remote port:" << port;
uint32_t addr = localIP.toIPv4Address(); uint32_t addr = localIP.toIPv4Address();
@ -1078,7 +1078,6 @@ void udpBase::init()
retransmitTimer = new QTimer(); retransmitTimer = new QTimer();
connect(retransmitTimer, &QTimer::timeout, this, &udpBase::sendRetransmitRequest); connect(retransmitTimer, &QTimer::timeout, this, &udpBase::sendRetransmitRequest);
retransmitTimer->start(RETRANSMIT_PERIOD); retransmitTimer->start(RETRANSMIT_PERIOD);
} }
udpBase::~udpBase() udpBase::~udpBase()

Wyświetl plik

@ -60,7 +60,9 @@ class udpBase : public QObject
public: public:
~udpBase(); ~udpBase();
void init(); void init(quint16 local);
void reconnect();
void dataReceived(QByteArray r); void dataReceived(QByteArray r);
void sendPing(); void sendPing();
@ -142,7 +144,7 @@ class udpCivData : public udpBase
Q_OBJECT Q_OBJECT
public: public:
udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort); udpCivData(QHostAddress local, QHostAddress ip, quint16 civPort, quint16 lport);
~udpCivData(); ~udpCivData();
QMutex serialmutex; QMutex serialmutex;
@ -168,7 +170,7 @@ class udpAudio : public udpBase
Q_OBJECT Q_OBJECT
public: public:
udpAudio(QHostAddress local, QHostAddress ip, quint16 aport, audioSetup rxSetup, audioSetup txSetup); udpAudio(QHostAddress local, QHostAddress ip, quint16 aport, quint16 lport, audioSetup rxSetup, audioSetup txSetup);
~udpAudio(); ~udpAudio();
int audioLatency = 0; int audioLatency = 0;
@ -271,6 +273,9 @@ private:
quint16 civPort; quint16 civPort;
quint16 audioPort; quint16 audioPort;
quint16 civLocalPort;
quint16 audioLocalPort;
audioSetup rxSetup; audioSetup rxSetup;
audioSetup txSetup; audioSetup txSetup;

Wyświetl plik

@ -1622,16 +1622,38 @@ void wfmain::loadSettings()
serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt(); serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt();
serverConfig.civPort = settings->value("ServerCivPort", 50002).toInt(); serverConfig.civPort = settings->value("ServerCivPort", 50002).toInt();
serverConfig.audioPort = settings->value("ServerAudioPort", 50003).toInt(); serverConfig.audioPort = settings->value("ServerAudioPort", 50003).toInt();
int numUsers = settings->value("ServerNumUsers", 2).toInt();
serverConfig.users.clear(); serverConfig.users.clear();
for (int f = 0; f < numUsers; f++)
{ int numUsers = settings->beginReadArray("Users");
SERVERUSER user; if (numUsers > 0) {
user.username = settings->value("ServerUsername_" + QString::number(f), "").toString(); {
user.password = settings->value("ServerPassword_" + QString::number(f), "").toString(); for (int f = 0; f < numUsers; f++)
user.userType = settings->value("ServerUserType_" + QString::number(f), 0).toInt(); {
serverConfig.users.append(user); settings->setArrayIndex(f);
SERVERUSER user;
user.username = settings->value("Username", "").toString();
user.password = settings->value("Password", "").toString();
user.userType = settings->value("UserType", 0).toInt();
serverConfig.users.append(user);
}
}
settings->endArray();
} }
else {
/* Support old way of storing users*/
settings->endArray();
numUsers = settings->value("ServerNumUsers", 2).toInt();
for (int f = 0; f < numUsers; f++)
{
SERVERUSER user;
user.username = settings->value("ServerUsername_" + QString::number(f), "").toString();
user.password = settings->value("ServerPassword_" + QString::number(f), "").toString();
user.userType = settings->value("ServerUserType_" + QString::number(f), 0).toInt();
serverConfig.users.append(user);
}
}
ui->serverEnableCheckbox->setChecked(serverConfig.enabled); ui->serverEnableCheckbox->setChecked(serverConfig.enabled);
ui->serverControlPortText->setText(QString::number(serverConfig.controlPort)); ui->serverControlPortText->setText(QString::number(serverConfig.controlPort));
@ -2004,18 +2026,32 @@ void wfmain::saveSettings()
settings->setValue("ServerControlPort", serverConfig.controlPort); settings->setValue("ServerControlPort", serverConfig.controlPort);
settings->setValue("ServerCivPort", serverConfig.civPort); settings->setValue("ServerCivPort", serverConfig.civPort);
settings->setValue("ServerAudioPort", serverConfig.audioPort); settings->setValue("ServerAudioPort", serverConfig.audioPort);
settings->setValue("ServerNumUsers", serverConfig.users.count());
settings->setValue("ServerAudioOutput", serverTxSetup.name); settings->setValue("ServerAudioOutput", serverTxSetup.name);
settings->setValue("ServerAudioInput", serverRxSetup.name); settings->setValue("ServerAudioInput", serverRxSetup.name);
/* Remove old format users*/
int numUsers = settings->value("ServerNumUsers", 0).toInt();
if (numUsers > 0) {
settings->remove("ServerNumUsers");
for (int f = 0; f < numUsers; f++)
{
settings->remove("ServerUsername_" + QString::number(f));
settings->remove("ServerPassword_" + QString::number(f));
settings->remove("ServerUserType_" + QString::number(f));
}
}
settings->beginWriteArray("Users");
for (int f = 0; f < serverConfig.users.count(); f++) for (int f = 0; f < serverConfig.users.count(); f++)
{ {
settings->setValue("ServerUsername_" + QString::number(f), serverConfig.users[f].username); settings->setArrayIndex(f);
settings->setValue("ServerPassword_" + QString::number(f), serverConfig.users[f].password); settings->setValue("Username", serverConfig.users[f].username);
settings->setValue("ServerUserType_" + QString::number(f), serverConfig.users[f].userType); settings->setValue("Password", serverConfig.users[f].password);
settings->setValue("UserType", serverConfig.users[f].userType);
} }
settings->endArray();
qInfo() << "Server config stored"; qInfo() << "Server config stored";
settings->endGroup(); settings->endGroup();

Wyświetl plik

@ -57,7 +57,7 @@
<ExceptionHandling>Sync</ExceptionHandling> <ExceptionHandling>Sync</ExceptionHandling>
<ObjectFileName>release\</ObjectFileName> <ObjectFileName>release\</ObjectFileName>
<Optimization>MaxSpeed</Optimization> <Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="9f059c9";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="ff47fbd";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile> <PreprocessToFile>false</PreprocessToFile>
<ProgramDataBaseFileName></ProgramDataBaseFileName> <ProgramDataBaseFileName></ProgramDataBaseFileName>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -85,7 +85,7 @@
<WarningLevel>0</WarningLevel> <WarningLevel>0</WarningLevel>
</Midl> </Midl>
<ResourceCompile> <ResourceCompile>
<PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"9f059c9\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"ff47fbd\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile> </ResourceCompile>
<QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc></ItemDefinitionGroup> <QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc></ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@ -99,7 +99,7 @@
<ExceptionHandling>Sync</ExceptionHandling> <ExceptionHandling>Sync</ExceptionHandling>
<ObjectFileName>debug\</ObjectFileName> <ObjectFileName>debug\</ObjectFileName>
<Optimization>Disabled</Optimization> <Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="9f059c9";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX="/usr/local";GITSHORT="ff47fbd";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessToFile>false</PreprocessToFile> <PreprocessToFile>false</PreprocessToFile>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner> <SuppressStartupBanner>true</SuppressStartupBanner>
@ -124,7 +124,7 @@
<WarningLevel>0</WarningLevel> <WarningLevel>0</WarningLevel>
</Midl> </Midl>
<ResourceCompile> <ResourceCompile>
<PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"9f059c9\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> <PreprocessorDefinitions>_CONSOLE;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFSERVER;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;USE_SSE;USE_SSE2;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;PREFIX=\"/usr/local\";GITSHORT=\"ff47fbd\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile> </ResourceCompile>
<QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc></ItemDefinitionGroup> <QtMoc><CompilerFlavor>msvc</CompilerFlavor><Include>./$(Configuration)/moc_predefs.h</Include><ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription><DynamicSource>output</DynamicSource><QtMocDir>$(Configuration)</QtMocDir><QtMocFileName>moc_%(Filename).cpp</QtMocFileName></QtMoc><QtRcc><Compression>default</Compression><ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription><QtRccDir>$(Configuration)</QtRccDir><QtRccFileName>qrc_%(Filename).cpp</QtRccFileName></QtRcc></ItemDefinitionGroup>
<ItemGroup> <ItemGroup>

Wyświetl plik

@ -5,6 +5,8 @@ VisualStudioVersion = 16.0.30804.86
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wfview", "wfview.vcxproj", "{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wfview", "wfview.vcxproj", "{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wfserver", "wfserver.vcxproj", "{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
@ -15,6 +17,10 @@ Global
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x86.Build.0 = Debug|Win32 {326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x86.Build.0 = Debug|Win32
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.ActiveCfg = Release|Win32 {326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.ActiveCfg = Release|Win32
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.Build.0 = Release|Win32 {326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x86.Build.0 = Release|Win32
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|x86.ActiveCfg = Debug|Win32
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|x86.Build.0 = Debug|Win32
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Release|x86.ActiveCfg = Release|Win32
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE