Lots of changes, mainly for multi-radio support

merge-requests/9/merge
Phil Taylor 2022-01-21 19:23:32 +00:00
rodzic e4cc2962b3
commit fcc7c9a5dc
16 zmienionych plików z 472 dodań i 416 usunięć

Wyświetl plik

@ -1,6 +1,7 @@
#ifndef PACKETTYPES_H
#define PACKETTYPES_H
#include <QObject>
#include <QtCore/quuid.h>
#pragma pack(push, 1)
@ -29,7 +30,8 @@
#define LOGIN_RESPONSE_SIZE 0x60
#define LOGIN_SIZE 0x80
#define CONNINFO_SIZE 0x90
#define CAPABILITIES_SIZE 0xA8
#define CAPABILITIES_SIZE 0x42
#define RADIO_CAP_SIZE 0x66
// Variable size packets + payload
#define CIV_SIZE 0x15
@ -172,9 +174,8 @@ typedef union token_packet {
quint32 token; // 0x1c
char unusedd[7]; // 0x20
quint16 commoncap; // 0x27
char unuseddd[2]; // 0x29
char identa; // 0x2b
quint32 identb; // 0x2c
char unuseddd; // 0x29
char macaddress[6]; // 0x2a
quint32 response; // 0x30
char unusede[12]; // 0x34
};
@ -201,9 +202,8 @@ typedef union status_packet {
char unusedd[6]; // 0x20
quint16 unknown; // 0x26
char unusede; // 0x28
char unusedf[2]; // 0x29
char identa; // 0x2b
quint32 identb; // 0x2c
char unusedf; // 0x29
quint8 macaddress[6]; // 0x2a
quint32 error; // 0x30
char unusedg[12]; // 0x34
char disc; // 0x40
@ -286,14 +286,18 @@ typedef union conninfo_packet {
char unusedb; // 0x19
quint16 tokrequest; // 0x1a
quint32 token; // 0x1c
quint16 authstartid; // 0x20
char unusedd[5]; // 0x22
quint32 commoncap; // 0x27
char identa; // 0x2b
quint32 identb; // 0x2c
char unusedf[16]; // 0x30
char name[16]; // 0x40
char unusedg[16]; // 0x50
union {
struct {
quint16 authstartid; // 0x20
char unusedg[5]; // 0x22
quint16 commoncap; // 0x27
char unusedh; // 0x29
char macaddress[6]; // 0x2a
};
GUID guid; // 0x20
};
char unusedab[16]; // 0x30
char name[32]; // 0x40
union { // This contains differences between the send/receive packet
struct { // Receive
quint32 busy; // 0x60
@ -321,6 +325,42 @@ typedef union conninfo_packet {
char packet[CONNINFO_SIZE];
} *conninfo_packet_t;
// 0x64 length radio capabilities part of cap packet.
/*
};*/
typedef union radio_cap_packet {
struct
{
union {
struct {
char unusede[7]; // 0x0
quint16 commoncap; // 0x0
char unused; // 0x0
char macaddress[6]; // 0x0
};
GUID guid; // 0x0
};
char name[32]; // 0x10
char audio[32]; // 0x30
quint16 conntype; // 0x50
char civ; // 0x52
quint16 rxsample; // 0x53
quint16 txsample; // 0x55
quint8 enablea; // 0x57
quint8 enableb; // 0x58
quint8 enablec; // 0x59
quint32 baudrate; // 0x5a
quint16 capf; // 0x5e
char unusedi; // 0x60
quint16 capg; // 0x61
char unusedj[3]; // 0x66
};
char packet[RADIO_CAP_SIZE];
} *radio_cap_packet_t;
// 0xA8 length capabilities packet
typedef union capabilities_packet {
struct
@ -330,41 +370,22 @@ typedef union capabilities_packet {
quint16 seq; // 0x06
quint32 sentid; // 0x08
quint32 rcvdid; // 0x0c
char unuseda[3]; // 0x10
quint16 code; // 0x13
quint16 res; // 0x15
quint8 innerseq; // 0x17
char unuseda[2]; // 0x10
quint16 payloadsize; // 0x12
quint16 res; // 0x14
quint16 innerseq; // 0x16
char unusedb; // 0x18
char unusedc; // 0x19
quint16 tokrequest; // 0x1a
quint32 token; // 0x1c
char unusedd[33]; // 0x20
char capa; // 0x41
char unusede[7]; // 0x42
quint16 commoncap; // 0x49
char unused; // 0x4b
char macaddress[6]; // 0x4c
char name[32]; // 0x52
char audio[32]; // 0x72
quint16 conntype; // 0x92
char civ; // 0x94
quint16 rxsample; // 0x95
quint16 txsample; // 0x97
quint8 enablea; // 0x99
quint8 enableb; // 0x9a
quint8 enablec; // 0x9b
quint32 baudrate; // 0x9c
quint16 capf; // 0xa0
char unusedi; // 0xa2
quint16 capg; // 0xa3
char unusedj[3]; // 0xa5
char numradios; // 0x41
};
char packet[CAPABILITIES_SIZE];
} *capabilities_packet_t;
#pragma pack(pop)

Wyświetl plik

@ -138,6 +138,8 @@ void rigCommander::commSetup(unsigned char rigCivAddr, udpPreferences prefs, aud
connect(this, SIGNAL(discoveredRigID(rigCapabilities)), ptty, SLOT(receiveFoundRigID(rigCapabilities)));
connect(udp, SIGNAL(requestRadioSelection(QList<radio_cap_packet>)), this, SLOT(radioSelection(QList<radio_cap_packet>)));
connect(udp, SIGNAL(setRadioUsage(int, QString, QString)), this, SLOT(radioUsage(int, QString, QString)));
emit haveAfGain(rxSetup.localAFgain);
localVolume = rxSetup.localAFgain;
}
@ -4273,6 +4275,20 @@ void rigCommander::sendState()
emit stateInfo(&state);
}
void rigCommander::radioSelection(QList<radio_cap_packet> radios)
{
for (const radio_cap_packet radio : radios)
{
qInfo(logSystem()) << "Radio Name" << radio.name;
}
emit requestRadioSelection(radios);
}
void rigCommander::radioUsage(int radio, QString user, QString ip) {
emit setRadioUsage(radio, user, ip);
}
void rigCommander::stateUpdated()
{
// A remote process has updated the rigState

Wyświetl plik

@ -273,6 +273,8 @@ public slots:
// Housekeeping:
void handleStatusUpdate(const QString text);
void radioSelection(QList<radio_cap_packet> radios);
void radioUsage(int radio, QString name, QString ip);
void sendState();
void getDebug();
@ -365,6 +367,8 @@ signals:
void stateInfo(rigstate* state);
// Housekeeping:
void requestRadioSelection(QList<radio_cap_packet> radios);
void setRadioUsage(int radio, QString user, QString ip);
void getMoreDebug();
void finished();

42
selectradio.cpp 100644
Wyświetl plik

@ -0,0 +1,42 @@
#include "logcategories.h"
#include "selectradio.h"
#include "ui_selectradio.h"
selectRadio::selectRadio(QWidget* parent) :
QDialog(parent),
ui(new Ui::selectRadio)
{
ui->setupUi(this);
}
selectRadio::~selectRadio()
{
delete ui;
}
void selectRadio::populate(QList<radio_cap_packet> radios)
{
ui->table->clearContents();
for (int row = 0; row < radios.count(); row++) {
ui->table->insertRow(ui->table->rowCount());
ui->table->setItem(ui->table->rowCount() - 1, 0, new QTableWidgetItem(QString(radios[row].name)));
ui->table->setItem(ui->table->rowCount() - 1, 1, new QTableWidgetItem(QString("%1").arg((unsigned char)radios[row].civ, 2, 16, QLatin1Char('0')).toUpper()));
ui->table->setItem(ui->table->rowCount() - 1, 2, new QTableWidgetItem(QString::number(qFromBigEndian(radios[row].baudrate))));
}
}
void selectRadio::setInUse(int radio, QString user, QString ip)
{
ui->table->setItem(radio, 3, new QTableWidgetItem(user));
ui->table->setItem(radio, 4, new QTableWidgetItem(ip));
}
void selectRadio::on_table_cellClicked(int row, int col) {
qInfo() << "Clicked on " << row << "," << col;
ui->table->selectRow(row);
emit selectedRadio(row);
}
void selectRadio::on_table_sectionClicked(int index) {
qInfo() << "Section Clicked" << index;
}

36
selectradio.h 100644
Wyświetl plik

@ -0,0 +1,36 @@
#ifndef SELECTRADIO_H
#define SELECTRADIO_H
#include <QDialog>
#include <QList>
#include <QtEndian>
#include <QHostInfo>
#include "packettypes.h"
namespace Ui {
class selectRadio;
}
class selectRadio : public QDialog
{
Q_OBJECT
public:
explicit selectRadio(QWidget* parent = 0);
~selectRadio();
void populate(QList<radio_cap_packet> radios);
public slots:
void on_table_cellClicked(int row, int col);
void on_table_sectionClicked(int index);
void setInUse(int radio, QString user, QString ip);
signals:
void selectedRadio(int radio);
private:
Ui::selectRadio* ui;
};
#endif // SELECTRADIO_H

87
selectradio.ui 100644
Wyświetl plik

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>selectRadio</class>
<widget class="QDialog" name="selectRadio">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>680</width>
<height>498</height>
</rect>
</property>
<property name="windowTitle">
<string>Select Radio From List</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="cancelButton">
<property name="text">
<string>Cancel</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QTableWidget" name="table">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<column>
<property name="text">
<string>Rig Name</string>
</property>
</column>
<column>
<property name="text">
<string>CI-V</string>
</property>
</column>
<column>
<property name="text">
<string>Baud Rate</string>
</property>
</column>
<column>
<property name="text">
<string>Current User</string>
</property>
</column>
<column>
<property name="text">
<string>User IP Address</string>
</property>
</column>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

Wyświetl plik

@ -28,6 +28,7 @@ servermain::servermain(const QString serialPortCL, const QString hostCL, const Q
qRegisterMetaType <timekind>();
qRegisterMetaType <datekind>();
qRegisterMetaType<rigstate*>();
qRegisterMetaType<QList<radio_cap_packet>>() ;
signal(SIGINT, handleCtrlC);

Wyświetl plik

@ -322,8 +322,29 @@ void udpHandler::dataReceived()
}
case (CONNINFO_SIZE):
{
// Once connected, the server will send a conninfo packet for each radio that is connected
conninfo_packet_t in = (conninfo_packet_t)r.constData();
if (in->type != 0x01) {
QHostAddress ip = QHostAddress(qToBigEndian(in->ipaddress));
qInfo(logUdp()) << "Got Connection status for:" << in->name << "Computer" << in->computer << "User" << in->username << "IP" << ip.toString() << "GUID" << in->guid;
// First we need to find this radio in our capabilities packet, there aren't many so just step through
for (int f = 0; f < radios.length(); f++)
{
if ((radios[f].commoncap == 0x8010 &&
radios[f].macaddress[0] == in->macaddress[0] &&
radios[f].macaddress[1] == in->macaddress[1] &&
radios[f].macaddress[2] == in->macaddress[2] &&
radios[f].macaddress[3] == in->macaddress[3] &&
radios[f].macaddress[4] == in->macaddress[4] &&
radios[f].macaddress[5] == in->macaddress[5]) ||
(QUuid)radios[f].guid == (QUuid)in->guid)
{
emit setRadioUsage(f,QString(in->computer),ip.toString());
}
}
if (in->type != 0x01 && numRadios == 1) {
devName = in->name;
QHostAddress ip = QHostAddress(qToBigEndian(in->ipaddress));
@ -367,8 +388,7 @@ void udpHandler::dataReceived()
{
emit haveNetworkStatus(devName + " available");
identa = in->identa;
identb = in->identb;
memcpy(macaddress, in->macaddress, 6);
sendRequestStream();
}
@ -383,28 +403,50 @@ void udpHandler::dataReceived()
break;
}
case (CAPABILITIES_SIZE):
default:
{
capabilities_packet_t in = (capabilities_packet_t)r.constData();
if (in->type != 0x01)
if ((r.length() - CAPABILITIES_SIZE) % RADIO_CAP_SIZE != 0)
{
audioType = in->audio;
devName = in->name;
civId = in->civ;
rxSampleRates = in->rxsample;
txSampleRates = in->txsample;
emit haveBaudRate(qFromBigEndian(in->baudrate));
//replyId = r.mid(0x42, 16);
qInfo(logUdp()) << this->metaObject()->className() << "Received radio capabilities, Name:" <<
devName << " Audio:" <<
audioType << "CIV:" << hex << civId;
qInfo(logUdp()) << this->metaObject()->className() << "Packet received" << r.length() << "not recognised";
break;
}
if (txSampleRates < 2)
int baudrate = 0;
capabilities_packet_t in = (capabilities_packet_t)r.constData();
numRadios = in->numradios;
for (int f = CAPABILITIES_SIZE; f < r.length(); f = f + RADIO_CAP_SIZE) {
radio_cap_packet rad;
const char* tmpRad = r.constData();
memcpy(&rad, tmpRad+f, RADIO_CAP_SIZE);
devName = rad.name;
audioType = rad.audio;
civId = rad.civ;
rxSampleRates = rad.rxsample;
txSampleRates = rad.txsample;
radios.append(rad);
}
for(const radio_cap_packet radio : radios)
{
qInfo(logUdp()) << this->metaObject()->className() << "Received radio capabilities, Name:" <<
radio.name << " Audio:" <<
radio.audio << "CIV:" << hex << (unsigned char)radio.civ <<
"CAPF" << radio.capf;
if (radio.txsample < 2)
{
// TX not supported
qInfo(logUdp()) << this->metaObject()->className() << "TX audio is disabled";
}
if (radio.commoncap != 0x8010) {
// GUID not MAC address
qInfo(logUdp()) << this->metaObject()->className() << "Radio GUID" << radio.guid;
}
baudrate = qFromBigEndian(radio.baudrate);
}
emit requestRadioSelection(radios);
emit haveBaudRate(baudrate);
break;
}
@ -432,8 +474,7 @@ void udpHandler::sendRequestStream()
p.code = 0x0180;
p.res = 0x03;
p.commoncap = 0x8010;
p.identa = identa;
p.identb = identb;
memcpy(p.macaddress, macaddress, 6);
p.innerseq = authSeq++;
p.tokrequest = tokRequest;
p.token = token;

Wyświetl plik

@ -209,6 +209,8 @@ public:
udpCivData* civ = Q_NULLPTR;
udpAudio* audio = Q_NULLPTR;
unsigned char numRadios;
QList<radio_cap_packet> radios;
public slots:
void receiveDataFromUserToRig(QByteArray); // This slot will send data on to
@ -226,7 +228,8 @@ signals:
void haveSetVolume(unsigned char value);
void haveNetworkStatus(QString);
void haveBaudRate(quint32 baudrate);
void requestRadioSelection(QList<radio_cap_packet> radios);
void setRadioUsage(int, QString name, QString mac);
private:
void sendAreYouThere();
@ -261,8 +264,7 @@ private:
quint16 tokRequest;
quint32 token;
// These are for stream ident info.
char identa;
quint32 identb;
quint8 macaddress[8];
QByteArray usernameEncoded;
QByteArray passwordEncoded;

Wyświetl plik

@ -229,8 +229,7 @@ void udpServer::controlReceived()
token_packet_t in = (token_packet_t)r.constData();
current->rxSeq = in->seq;
current->authInnerSeq = in->innerseq;
current->identa = in->identa;
current->identb = in->identb;
memcpy(current->macaddress, in->macaddress, 6);
if (in->res == 0x02) {
// Request for new token
qInfo(logUdpServer()) << current->ipAddress.toString() << ": Received create token request";
@ -301,8 +300,8 @@ void udpServer::controlReceived()
current->txSampleRate = qFromBigEndian<quint32>(in->txsample);
current->txBufferLen = qFromBigEndian<quint32>(in->txbuffer);
current->authInnerSeq = in->innerseq;
current->identa = in->identa;
current->identb = in->identb;
memcpy(current->macaddress, in->macaddress, 6);
sendStatus(current);
current->authInnerSeq = 0x00;
sendConnectionInfo(current);
@ -1040,7 +1039,9 @@ void udpServer::sendCapabilities(CLIENT* c)
qInfo(logUdpServer()) << c->ipAddress.toString() << "(" << c->type << "): Sending Capabilities :" << c->txSeq;
capabilities_packet p;
radio_cap_packet r;
memset(p.packet, 0x0, sizeof(p)); // We can't be sure it is initialized with 0x00!
memset(r.packet, 0x0, sizeof(r)); // We can't be sure it is initialized with 0x00!
p.len = sizeof(p);
p.type = 0x00;
p.seq = c->txSeq;
@ -1049,28 +1050,26 @@ void udpServer::sendCapabilities(CLIENT* c)
p.innerseq = c->authInnerSeq;
p.tokrequest = c->tokenRx;
p.token = c->tokenTx;
p.code = 0x0298;
p.res = 0x02;
p.capa = 0x01;
p.commoncap = c->commonCap;
p.payloadsize = sizeof(p)-0x0f;
p.res = 0x0202;
p.numradios = 0x01;
r.commoncap = c->commonCap;
memcpy(p.macaddress, macAddress.toLocal8Bit(), 6);
memcpy(r.macaddress, macAddress.toLocal8Bit(), 6);
// IRU seems to expect an "Icom" mac address so replace the first 3 octets of our Mac with one in their range!
memcpy(p.macaddress, QByteArrayLiteral("\x00\x90\xc7").constData(), 3);
memcpy(p.name, rigCaps.modelName.toLocal8Bit(), rigCaps.modelName.length());
memcpy(p.audio, QByteArrayLiteral("ICOM_VAUDIO").constData(), 11);
memcpy(r.macaddress, QByteArrayLiteral("\x00\x90\xc7").constData(), 3);
memcpy(r.name, rigCaps.modelName.toLocal8Bit(), rigCaps.modelName.length());
memcpy(r.audio, QByteArrayLiteral("ICOM_VAUDIO").constData(), 11);
if (rigCaps.hasWiFi && !rigCaps.hasEthernet) {
p.conntype = 0x0707; // 0x0707 for wifi rig.
r.conntype = 0x0707; // 0x0707 for wifi rig.
}
else {
p.conntype = 0x073f; // 0x073f for ethernet rig.
r.conntype = 0x073f; // 0x073f for ethernet rig.
}
p.civ = rigCaps.civ;
p.baudrate = (quint32)qToBigEndian(config.baudRate);
r.civ = rigCaps.civ;
r.baudrate = (quint32)qToBigEndian(config.baudRate);
/*
0x80 = 12K only
0x40 = 44.1K only
@ -1082,49 +1081,48 @@ void udpServer::sendCapabilities(CLIENT* c)
0x01 = 8K only
*/
if (rxaudio == Q_NULLPTR) {
p.rxsample = 0x8b01; // all rx sample frequencies supported
r.rxsample = 0x8b01; // all rx sample frequencies supported
}
else {
if (rxSampleRate == 48000) {
p.rxsample = 0x0800; // fixed rx sample frequency
r.rxsample = 0x0800; // fixed rx sample frequency
}
else if (rxSampleRate == 32000) {
p.rxsample = 0x0400;
r.rxsample = 0x0400;
}
else if (rxSampleRate == 24000) {
p.rxsample = 0x0001;
r.rxsample = 0x0001;
}
else if (rxSampleRate == 16000) {
p.rxsample = 0x0200;
r.rxsample = 0x0200;
}
else if (rxSampleRate == 12000) {
p.rxsample = 0x8000;
r.rxsample = 0x8000;
}
}
if (txaudio == Q_NULLPTR) {
p.txsample = 0x8b01; // all tx sample frequencies supported
p.enablea = 0x01; // 0x01 enables TX 24K mode?
r.txsample = 0x8b01; // all tx sample frequencies supported
r.enablea = 0x01; // 0x01 enables TX 24K mode?
qInfo(logUdpServer()) << c->ipAddress.toString() << "(" << c->type << "): Client will have TX audio";
}
else {
qInfo(logUdpServer()) << c->ipAddress.toString() << "(" << c->type << "): Disable tx audio for client";
p.txsample = 0;
r.txsample = 0;
}
// I still don't know what these are?
p.enableb = 0x01; // 0x01 doesn't seem to do anything?
p.enablec = 0x01; // 0x01 doesn't seem to do anything?
p.capf = 0x5001;
p.capg = 0x0190;
r.enableb = 0x01; // 0x01 doesn't seem to do anything?
r.enablec = 0x01; // 0x01 doesn't seem to do anything?
r.capf = 0x5001;
r.capg = 0x0190;
SEQBUFENTRY s;
s.seqNum = p.seq;
s.timeSent = QTime::currentTime();
s.retransmitCount = 0;
s.data = QByteArray::fromRawData((const char*)p.packet, sizeof(p));
s.data.append(QByteArray::fromRawData((const char*)r.packet, sizeof(r)));
if (c->txMutex.try_lock_for(std::chrono::milliseconds(LOCK_PERIOD)))
{
if (c->txSeqBuf.size() > BUFSIZE)
@ -1141,7 +1139,7 @@ void udpServer::sendCapabilities(CLIENT* c)
if (udpMutex.try_lock_for(std::chrono::milliseconds(LOCK_PERIOD)))
{
c->socket->writeDatagram(QByteArray::fromRawData((const char*)p.packet, sizeof(p)), c->ipAddress, c->port);
c->socket->writeDatagram((const char*)s.data, s.data.length(), c->ipAddress, c->port);
udpMutex.unlock();
}
else {
@ -1172,8 +1170,7 @@ void udpServer::sendConnectionInfo(CLIENT* c)
p.token = c->tokenTx;
p.code = 0x0380;
p.commoncap = c->commonCap;
p.identa = c->identa;
p.identb = c->identb;
memcpy(p.macaddress, c->macaddress, 6);
// 0x1a-0x1f is authid (random number?
// memcpy(p + 0x40, QByteArrayLiteral("IC-7851").constData(), 7);
@ -1185,8 +1182,7 @@ void udpServer::sendConnectionInfo(CLIENT* c)
p.busy = 0x01;
memcpy(p.computer, c->clientName.constData(), c->clientName.length());
p.ipaddress = qToBigEndian(c->ipAddress.toIPv4Address());
p.identa = c->identa;
p.identb = c->identb;
memcpy(p.macaddress, c->macaddress, 6);
}
@ -1242,8 +1238,7 @@ void udpServer::sendTokenResponse(CLIENT* c, quint8 type)
p.tokrequest = c->tokenRx;
p.token = c->tokenTx;
p.code = 0x0230;
p.identa = c->identa;
p.identb = c->identb;
memcpy(p.macaddress, c->macaddress, 6);
p.commoncap = c->commonCap;
p.res = type;
@ -1356,8 +1351,8 @@ void udpServer::sendStatus(CLIENT* c)
p.res = 0x03;
p.unknown = 0x1000;
p.unusede = (char)0x80;
p.identa = c->identa;
p.identb = c->identb;
memcpy(p.macaddress, c->macaddress, 6);
p.civport = qToBigEndian(c->civPort);
p.audioport = qToBigEndian(c->audioPort);

Wyświetl plik

@ -104,8 +104,7 @@ private:
quint16 authSeq;
quint16 innerSeq;
quint16 sendAudioSeq;
quint8 identa;
quint32 identb;
quint8 macaddress[4];
quint16 tokenRx;
quint32 tokenTx;
quint32 commonCap;

Wyświetl plik

@ -28,6 +28,7 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString s
sat = new satelliteSetup();
trxadj = new transceiverAdjustments();
abtBox = new aboutbox();
selRad = new selectRadio();
qRegisterMetaType<udpPreferences>(); // Needs to be registered early.
qRegisterMetaType<rigCapabilities>();
@ -44,7 +45,7 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString s
qRegisterMetaType <timekind>();
qRegisterMetaType <datekind>();
qRegisterMetaType<rigstate*>();
qRegisterMetaType<QList<radio_cap_packet>>();
haveRigCaps = false;
@ -420,6 +421,8 @@ void wfmain::makeRig()
// Rig status and Errors:
connect(rig, SIGNAL(haveSerialPortError(QString, QString)), this, SLOT(receiveSerialPortError(QString, QString)));
connect(rig, SIGNAL(haveStatusUpdate(QString)), this, SLOT(receiveStatusUpdate(QString)));
connect(rig, SIGNAL(requestRadioSelection(QList<radio_cap_packet>)), this, SLOT(radioSelection(QList<radio_cap_packet>)));
connect(rig, SIGNAL(setRadioUsage(int, QString, QString)), selRad, SLOT(setInUse(int, QString, QString)));
// Rig comm setup:
connect(this, SIGNAL(sendCommSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)), rig, SLOT(commSetup(unsigned char, udpPreferences, audioSetup, audioSetup, QString)));
@ -1156,6 +1159,7 @@ void wfmain::setSerialDevicesUI()
ui->serialDeviceListCombo->addItem(QString("/dev/")+serialPortInfo.portName(), i++);
#else
ui->serialDeviceListCombo->addItem(serialPortInfo.portName(), i++);
qInfo(logSystem()) << "Serial Port found: " << serialPortInfo.portName() << "Manufacturer:" << serialPortInfo.manufacturer() << "Product ID" << serialPortInfo.description() << "S/N" << serialPortInfo.serialNumber();
#endif
}
#if defined(Q_OS_LINUX) || defined(Q_OS_MAC)
@ -5749,6 +5753,12 @@ void wfmain::on_setClockBtn_clicked()
setRadioTimeDatePrep();
}
void wfmain::radioSelection(QList<radio_cap_packet> radios)
{
selRad->populate(radios);
selRad->setVisible(true);
}
// --- DEBUG FUNCTION ---
void wfmain::on_debugBtn_clicked()
{

Wyświetl plik

@ -31,6 +31,7 @@
#include "qledlabel.h"
#include "rigctld.h"
#include "aboutbox.h"
#include "selectradio.h"
#include <qcustomplot.h>
#include <qserialportinfo.h>
@ -272,6 +273,7 @@ private slots:
void sendRadioCommandLoop();
void showStatusBarText(QString text);
void receiveBaudRate(quint32 baudrate);
void radioSelection(QList<radio_cap_packet> radios);
void setRadioTimeDateSend();
@ -842,7 +844,7 @@ private:
satelliteSetup *sat;
transceiverAdjustments *trxadj;
aboutbox *abtBox;
selectRadio *selRad;
udpServer* udp = Q_NULLPTR;
rigCtlD* rigCtl = Q_NULLPTR;
@ -890,6 +892,7 @@ Q_DECLARE_METATYPE(enum rigInput)
Q_DECLARE_METATYPE(enum meterKind)
Q_DECLARE_METATYPE(enum spectrumMode)
Q_DECLARE_METATYPE(rigstate*)
Q_DECLARE_METATYPE(QList<radio_cap_packet>)
#endif // WFMAIN_H

Wyświetl plik

@ -163,6 +163,7 @@ SOURCES += main.cpp\
rigctld.cpp \
ring/ring.cpp \
transceiveradjustments.cpp \
selectradio.cpp \
aboutbox.cpp
HEADERS += wfmain.h \
@ -190,13 +191,14 @@ HEADERS += wfmain.h \
ring/ring.h \
transceiveradjustments.h \
audiotaper.h \
selectradio.h \
aboutbox.h
FORMS += wfmain.ui \
calibrationwindow.ui \
satellitesetup.ui \
udpserversetup.ui \
selectradio.ui \
repeatersetup.ui \
transceiveradjustments.ui \
aboutbox.ui

Wyświetl plik

@ -16,7 +16,8 @@
<Keyword>QtVS_v304</Keyword>
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion>
<QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild></PropertyGroup>
<QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PlatformToolset>v142</PlatformToolset>
@ -36,7 +37,10 @@
<IntermediateDirectory>debug\</IntermediateDirectory>
<PrimaryOutput>wfview</PrimaryOutput>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /><Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"><Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." /></Target>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
@ -44,8 +48,34 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" />
</ImportGroup>
<PropertyGroup Label="UserMacros" /><ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"><Import Project="$(QtMsBuild)\qt_defaults.props" /></ImportGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"><OutDir>debug\</OutDir><IntDir>debug\</IntDir><TargetName>wfview</TargetName><IgnoreImportLibrary>true</IgnoreImportLibrary></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"><OutDir>release\</OutDir><IntDir>release\</IntDir><TargetName>wfview</TargetName><IgnoreImportLibrary>true</IgnoreImportLibrary><LinkIncremental>false</LinkIncremental></PropertyGroup><PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"><QtInstall>msvc2019</QtInstall><QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules></PropertyGroup><PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"><QtInstall>msvc2019</QtInstall><QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules></PropertyGroup><ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"><Import Project="$(QtMsBuild)\qt.props" /></ImportGroup>
<PropertyGroup Label="UserMacros" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
<Import Project="$(QtMsBuild)\qt_defaults.props" />
</ImportGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<OutDir>debug\</OutDir>
<IntDir>debug\</IntDir>
<TargetName>wfview</TargetName>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<OutDir>release\</OutDir>
<IntDir>release\</IntDir>
<TargetName>wfview</TargetName>
<IgnoreImportLibrary>true</IgnoreImportLibrary>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QtInstall>msvc2019</QtInstall>
<QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<QtInstall>msvc2019</QtInstall>
<QtModules>core;network;gui;multimedia;widgets;serialport;printsupport</QtModules>
</PropertyGroup>
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')">
<Import Project="$(QtMsBuild)\qt.props" />
</ImportGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.;..\qcustomplot;..\opus\include;resampler;release;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -59,12 +89,14 @@
<Optimization>MaxSpeed</Optimization>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION="1.2d";BUILD_WFVIEW;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>
<PreprocessToFile>false</PreprocessToFile>
<ProgramDataBaseFileName></ProgramDataBaseFileName>
<ProgramDataBaseFileName>
</ProgramDataBaseFileName>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation></ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>..\opus\win32\VS2015\Win32\Release\opus.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\Win32\Release;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@ -87,7 +119,26 @@
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFVIEW;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>
</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><QtUic><ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription><QtUicDir>$(ProjectDir)</QtUicDir><QtUicFileName>ui_%(Filename).h</QtUicFileName></QtUic></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>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.;..\qcustomplot;..\opus\include;resampler;debug;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -105,7 +156,8 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<WarningLevel>Level3</WarningLevel>
<MultiProcessorCompilation>true</MultiProcessorCompilation></ClCompile>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>..\opus\win32\VS2015\Win32\Debug\opus.lib;shell32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>..\opus\win32\VS2015\Win32\Debug;C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
@ -126,7 +178,26 @@
<ResourceCompile>
<PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;WFVIEW_VERSION=\"1.2d\";BUILD_WFVIEW;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>
</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><QtUic><ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription><QtUicDir>$(ProjectDir)</QtUicDir><QtUicFileName>ui_%(Filename).h</QtUicFileName></QtUic></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>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<QtUicDir>$(ProjectDir)</QtUicDir>
<QtUicFileName>ui_%(Filename).h</QtUicFileName>
</QtUic>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="aboutbox.cpp" />
<ClCompile Include="audiohandler.cpp" />
@ -146,6 +217,7 @@
<ClCompile Include="rigidentities.cpp" />
<ClCompile Include="ring\ring.cpp" />
<ClCompile Include="satellitesetup.cpp" />
<ClCompile Include="selectradio.cpp" />
<ClCompile Include="transceiveradjustments.cpp" />
<ClCompile Include="udphandler.cpp" />
<ClCompile Include="udpserver.cpp" />
@ -153,188 +225,51 @@
</ItemGroup>
<ItemGroup>
<QtMoc Include="aboutbox.h">
</QtMoc>
<ClInclude Include="resampler\arch.h" />
<QtMoc Include="audiohandler.h">
</QtMoc>
<ClInclude Include="audiotaper.h" />
<QtMoc Include="calibrationwindow.h">
</QtMoc>
<QtMoc Include="commhandler.h">
</QtMoc>
<ClInclude Include="freqmemory.h" />
<ClInclude Include="logcategories.h" />
<QtMoc Include="meter.h">
</QtMoc>
<ClInclude Include="packettypes.h" />
<QtMoc Include="pttyhandler.h">
</QtMoc>
<QtMoc Include="..\qcustomplot\qcustomplot.h">
</QtMoc>
<QtMoc Include="qledlabel.h">
</QtMoc>
<ClInclude Include="repeaterattributes.h" />
<QtMoc Include="repeatersetup.h">
</QtMoc>
<ClInclude Include="resampler\resample_sse.h" />
<QtMoc Include="rigcommander.h">
</QtMoc>
<QtMoc Include="rigctld.h">
</QtMoc>
<ClInclude Include="rigidentities.h" />
<ClInclude Include="ring\ring.h" />
<QtMoc Include="satellitesetup.h">
</QtMoc>
<ClInclude Include="resampler\speex_resampler.h" />
<QtMoc Include="transceiveradjustments.h">
</QtMoc>
<QtMoc Include="udphandler.h">
</QtMoc>
<QtMoc Include="udpserver.h">
</QtMoc>
<QtMoc Include="selectradio.h" />
<ClInclude Include="ulaw.h" />
<QtMoc Include="wfmain.h">
</QtMoc>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<FileType>Document</FileType>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
@ -351,117 +286,22 @@
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\moc_predefs.h;%(Outputs)</Outputs>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="aboutbox.ui">
</QtUic>
<QtUic Include="calibrationwindow.ui">
</QtUic>
<QtUic Include="repeatersetup.ui">
</QtUic>
<QtUic Include="satellitesetup.ui">
</QtUic>
<QtUic Include="selectradio.ui" />
<QtUic Include="transceiveradjustments.ui">
</QtUic>
<QtUic Include="udpserversetup.ui">
</QtUic>
<QtUic Include="wfmain.ui">
</QtUic>
</ItemGroup>
<ItemGroup>
@ -495,30 +335,16 @@
<None Include="qdarkstyle\rc\radio_unchecked_disabled.png" />
<None Include="qdarkstyle\rc\radio_unchecked_focus.png" />
<QtRcc Include="resources\resources.qrc">
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">resources</InitFuncName><InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">resources</InitFuncName></QtRcc>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">resources</InitFuncName>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">resources</InitFuncName>
</QtRcc>
<None Include="qdarkstyle\rc\right_arrow.png" />
<None Include="qdarkstyle\rc\right_arrow_disabled.png" />
<None Include="qdarkstyle\rc\sizegrip.png" />
<QtRcc Include="qdarkstyle\style.qrc">
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">style</InitFuncName><InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">style</InitFuncName></QtRcc>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">style</InitFuncName>
<InitFuncName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">style</InitFuncName>
</QtRcc>
<None Include="qdarkstyle\style.qss" />
<None Include="qdarkstyle\rc\stylesheet-branch-end.png" />
<None Include="qdarkstyle\rc\stylesheet-branch-more.png" />
@ -537,6 +363,9 @@
<ItemGroup>
<ResourceCompile Include=".\wfview_resource.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /><ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')"><Import Project="$(QtMsBuild)\qt.targets" /></ImportGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
<Import Project="$(QtMsBuild)\qt.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets" />
</Project>

Wyświetl plik

@ -123,6 +123,9 @@
<ClCompile Include="wfmain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="selectradio.cpp">
<Filter>Generated Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="aboutbox.h">
@ -206,57 +209,17 @@
<QtMoc Include="wfmain.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="selectradio.h">
<Filter>Generated Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
<CustomBuild Include="release\moc_predefs.h.cbt">
<Filter>Generated Files</Filter>
</CustomBuild>
</ItemGroup>
<ItemGroup>
<QtUic Include="aboutbox.ui">
@ -280,6 +243,9 @@
<QtUic Include="wfmain.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="selectradio.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<None Include="qdarkstyle\rc\Hmovetoolbar.png">
@ -411,6 +377,8 @@
<None Include="resources\wfview.png">
<Filter>Resource Files</Filter>
</None>
<None Include="resources\wfview.png" />
<None Include="resources\wfview.png" />
</ItemGroup>
<ItemGroup>
<None Include="resources\install.sh">
@ -424,6 +392,6 @@
</None>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="C:\Users\Phil\source\repos\wfview\wfview_resource.rc" />
<ResourceCompile Include=".\wfview_resource.rc" />
</ItemGroup>
</Project>