Updated to 20 rcvrs and fixed a bug with sending the sequence
This commit is contained in:
@@ -4,7 +4,7 @@ derived from his post: http://www.ping.net.au/20140126_cuSDR64src.tar.gz
|
|||||||
This is originally cuSDR written by Hermann, DL3HVH
|
This is originally cuSDR written by Hermann, DL3HVH
|
||||||
https://plus.google.com/107168125384405552048/posts
|
https://plus.google.com/107168125384405552048/posts
|
||||||
|
|
||||||
I added local sound and up'd the number of receivers to 16.
|
I added local sound and up'd the number of receivers to 20.
|
||||||
|
|
||||||
Using the Hermes-Lite (with some minor protocol changes)
|
Using the Hermes-Lite (with some minor protocol changes)
|
||||||
I can do 16 rcvrs @ 96Khz and 9 @ 192Khz:
|
I can do 16 rcvrs @ 96Khz and 9 @ 192Khz:
|
||||||
@@ -17,3 +17,4 @@ the Hermes-Lite rtl supports.
|
|||||||
|
|
||||||
I have only compiled and used this on linux.
|
I have only compiled and used this on linux.
|
||||||
|
|
||||||
|
To make for Hermes-Lite edit Makefile and add -DHL
|
||||||
|
|||||||
+1504
-437
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,3 @@
|
|||||||
[General]
|
[General]
|
||||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0l\0\0\0\x64\0\0\x4\xfb\0\0\x3\x66\0\0\0v\0\0\0\x90\0\0\x4\xf1\0\0\x3\\\0\0\0\0\0\0)
|
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x2\0\0\0\0\x3\x97\0\0\0\x33\0\0\f(\0\0\x6\x1\0\0\x3\x97\0\0\0X\0\0\f(\0\0\x6\x1\0\0\0\0\0\0\0\0\xf\0)
|
||||||
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x2\x11\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x30\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x30\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\x1\0\0\0\xa5\0\0\x2\x11\0\0\x2\x11\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x30\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x30\0\xff\xff\xff\0\0\x3\x84\0\0\x2\x11\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x3\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
|
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x4\xdc\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x34\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x34\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\x1\0\0\0\xb3\0\0\x4\xdc\0\0\x4\xdc\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x34\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x34\0\xff\xff\xff\0\0\a\x97\0\0\x4\xdc\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0U\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
|
||||||
|
|||||||
+3759
-3752
File diff suppressed because it is too large
Load Diff
@@ -420,8 +420,10 @@ private:
|
|||||||
unsigned short m_offset;
|
unsigned short m_offset;
|
||||||
unsigned short m_length;
|
unsigned short m_length;
|
||||||
|
|
||||||
long m_sendSequence;
|
//RRK long m_sendSequence;
|
||||||
long m_oldSendSequence;
|
//RRK long m_oldSendSequence;
|
||||||
|
quint32 m_sendSequence;
|
||||||
|
quint32 m_oldSendSequence;
|
||||||
|
|
||||||
volatile bool m_stopped;
|
volatile bool m_stopped;
|
||||||
|
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ void DataIO::stop() {
|
|||||||
io->networkIOMutex.unlock();
|
io->networkIOMutex.unlock();
|
||||||
|
|
||||||
if(m_pSoundCardOut) {
|
if(m_pSoundCardOut) {
|
||||||
|
SleeperThread::msleep(100);
|
||||||
m_pSoundCardOut->Stop();
|
m_pSoundCardOut->Stop();
|
||||||
delete m_pSoundCardOut;
|
delete m_pSoundCardOut;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,271 +1,302 @@
|
|||||||
/**
|
/**
|
||||||
* @file cusdr_discoverer.cpp
|
* @file cusdr_discoverer.cpp
|
||||||
* @brief HPSDR device discoverer class
|
* @brief HPSDR device discoverer class
|
||||||
* @author Hermann von Hasseln, DL3HVH
|
* @author Hermann von Hasseln, DL3HVH
|
||||||
* @version 0.1
|
* @version 0.1
|
||||||
* @date 2012-05-19
|
* @date 2012-05-19
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* Copyright 2012 Hermann von Hasseln, DL3HVH
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License version 2 as
|
|
||||||
* published by the Free Software Foundation
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public
|
|
||||||
* License along with this program; if not, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define LOG_DISCOVERER
|
|
||||||
|
|
||||||
#include "cusdr_discoverer.h"
|
|
||||||
#include "Util/cusdr_buttons.h"
|
|
||||||
|
|
||||||
|
|
||||||
//#include <QComboBox>
|
|
||||||
//#include <QDialogButtonBox>
|
|
||||||
//#include <QLabel>
|
|
||||||
//#include <QPushButton>
|
|
||||||
//#include <QVBoxLayout>
|
|
||||||
//#include <QCheckBox>
|
|
||||||
//#include <QSlider>
|
|
||||||
//#include <QSpinBox>
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
//#define btn_height 18
|
*
|
||||||
//#define btn_width 74
|
* Copyright 2012 Hermann von Hasseln, DL3HVH
|
||||||
|
*
|
||||||
Discoverer::Discoverer(THPSDRParameter *ioData)
|
* This program is free software; you can redistribute it and/or modify
|
||||||
: QObject()
|
* it under the terms of the GNU Library General Public License version 2 as
|
||||||
, set(Settings::instance())
|
* published by the Free Software Foundation
|
||||||
, io(ioData)
|
*
|
||||||
{
|
* This program is distributed in the hope that it will be useful,
|
||||||
m_deviceCards = set->getMetisCardsList();
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
}
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details
|
||||||
Discoverer::~Discoverer() {
|
*
|
||||||
}
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this program; if not, write to the
|
||||||
void Discoverer::initHPSDRDevice() {
|
* Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
m_searchTime.start();
|
*/
|
||||||
|
|
||||||
int deviceNo = 0;
|
#define LOG_DISCOVERER
|
||||||
while (deviceNo == 0) {
|
|
||||||
|
#include "cusdr_discoverer.h"
|
||||||
deviceNo = findHPSDRDevices();
|
#include "Util/cusdr_buttons.h"
|
||||||
|
|
||||||
if (deviceNo > 1) {
|
|
||||||
|
//#include <QComboBox>
|
||||||
set->setHPSDRDeviceNumber(deviceNo);
|
//#include <QDialogButtonBox>
|
||||||
break;
|
//#include <QLabel>
|
||||||
}
|
//#include <QPushButton>
|
||||||
|
//#include <QVBoxLayout>
|
||||||
if (deviceNo > 0) {
|
//#include <QCheckBox>
|
||||||
|
//#include <QSlider>
|
||||||
set->setHPSDRDeviceNumber(deviceNo);
|
//#include <QSpinBox>
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_searchTime.elapsed() > 1000) {
|
//#define btn_height 18
|
||||||
|
//#define btn_width 74
|
||||||
set->setHPSDRDeviceNumber(0);
|
|
||||||
break;
|
Discoverer::Discoverer(THPSDRParameter *ioData)
|
||||||
}
|
: QObject()
|
||||||
|
, set(Settings::instance())
|
||||||
io->networkIOMutex.lock();
|
, io(ioData)
|
||||||
DISCOVERER_DEBUG << "no device found - trying again...";
|
{
|
||||||
io->networkIOMutex.unlock();
|
m_deviceCards = set->getMetisCardsList();
|
||||||
}
|
}
|
||||||
|
|
||||||
io->networkIOMutex.lock();
|
Discoverer::~Discoverer() {
|
||||||
io->devicefound.wakeAll();
|
}
|
||||||
io->networkIOMutex.unlock();
|
|
||||||
}
|
TNetworkDevicecard mc;
|
||||||
|
|
||||||
int Discoverer::findHPSDRDevices() {
|
void Discoverer::initHPSDRDevice() {
|
||||||
|
|
||||||
int devicesFound = 0;
|
m_searchTime.start();
|
||||||
|
|
||||||
m_findDatagram.resize(63);
|
int deviceNo = 0;
|
||||||
m_findDatagram[0] = (char)0xEF;
|
while (deviceNo == 0) {
|
||||||
m_findDatagram[1] = (char)0xFE;
|
|
||||||
m_findDatagram[2] = (char)0x02;
|
deviceNo = findHPSDRDevices();
|
||||||
for (int i = 3; i < 63; i++)
|
|
||||||
m_findDatagram[i] = (char)0x00;
|
if (deviceNo > 1) {
|
||||||
|
|
||||||
QUdpSocket socket;
|
set->setHPSDRDeviceNumber(deviceNo);
|
||||||
|
break;
|
||||||
CHECKED_CONNECT(
|
}
|
||||||
&socket,
|
|
||||||
SIGNAL(error(QAbstractSocket::SocketError)),
|
if (deviceNo > 0) {
|
||||||
this,
|
|
||||||
SLOT(displayDiscoverySocketError(QAbstractSocket::SocketError)));
|
set->setHPSDRDeviceNumber(deviceNo);
|
||||||
|
break;
|
||||||
io->networkIOMutex.lock();
|
}
|
||||||
DISCOVERER_DEBUG << "using " << qPrintable(QHostAddress(set->getHPSDRDeviceLocalAddr()).toString()) << " for discovery.";
|
|
||||||
io->networkIOMutex.unlock();
|
if (m_searchTime.elapsed() > 1000) {
|
||||||
|
|
||||||
// clear comboBox entries in the network dialogue
|
set->setHPSDRDeviceNumber(0);
|
||||||
set->clearNetworkIOComboBoxEntry();
|
break;
|
||||||
|
}
|
||||||
#if defined(Q_OS_WIN32)
|
|
||||||
|
io->networkIOMutex.lock();
|
||||||
if (socket.bind(
|
DISCOVERER_DEBUG << "no device found - trying again...";
|
||||||
QHostAddress(set->getHPSDRDeviceLocalAddr()), 0,
|
io->networkIOMutex.unlock();
|
||||||
QUdpSocket::ReuseAddressHint | QUdpSocket::ShareAddress))
|
}
|
||||||
//QUdpSocket::ReuseAddressHint))
|
|
||||||
{
|
io->networkIOMutex.lock();
|
||||||
set->setMetisPort(this, socket.localPort());
|
io->devicefound.wakeAll();
|
||||||
io->networkIOMutex.lock();
|
io->networkIOMutex.unlock();
|
||||||
DISCOVERER_DEBUG << "discovery_socket bound successfully to port " << socket.localPort();
|
}
|
||||||
io->networkIOMutex.unlock();
|
|
||||||
}
|
int Discoverer::findHPSDRDevices() {
|
||||||
else {
|
|
||||||
|
int devicesFound = 0;
|
||||||
io->networkIOMutex.lock();
|
|
||||||
DISCOVERER_DEBUG << "discovery_socket bind failed.";
|
m_findDatagram.resize(63);
|
||||||
io->networkIOMutex.unlock();
|
m_findDatagram[0] = (char)0xEF;
|
||||||
|
m_findDatagram[1] = (char)0xFE;
|
||||||
socket.close();
|
m_findDatagram[2] = (char)0x02;
|
||||||
return 0;
|
for (int i = 3; i < 63; i++)
|
||||||
}
|
m_findDatagram[i] = (char)0x00;
|
||||||
#elif defined(Q_OS_LINUX)
|
|
||||||
|
QUdpSocket socket;
|
||||||
if (socket.bind(
|
|
||||||
QHostAddress(set->getHPSDRDeviceLocalAddr()),
|
CHECKED_CONNECT(
|
||||||
QUdpSocket::DefaultForPlatform))
|
&socket,
|
||||||
{
|
SIGNAL(error(QAbstractSocket::SocketError)),
|
||||||
CHECKED_CONNECT(
|
this,
|
||||||
&socket,
|
SLOT(displayDiscoverySocketError(QAbstractSocket::SocketError)));
|
||||||
SIGNAL(error(QAbstractSocket::SocketError)),
|
|
||||||
this,
|
io->networkIOMutex.lock();
|
||||||
SLOT(displayDiscoverySocketError(QAbstractSocket::SocketError)));
|
DISCOVERER_DEBUG << "using " << qPrintable(QHostAddress(set->getHPSDRDeviceLocalAddr()).toString()) << " for discovery.";
|
||||||
|
io->networkIOMutex.unlock();
|
||||||
set->setMetisPort(this, socket.localPort());
|
|
||||||
io->networkIOMutex.lock();
|
// clear comboBox entries in the network dialogue
|
||||||
DISCOVERER_DEBUG << "discovery_socket bound successfully to port " << socket.localPort();
|
set->clearNetworkIOComboBoxEntry();
|
||||||
io->networkIOMutex.unlock();
|
|
||||||
}
|
#if defined(Q_OS_WIN32)
|
||||||
else {
|
|
||||||
|
if (socket.bind(
|
||||||
io->networkIOMutex.lock();
|
QHostAddress(set->getHPSDRDeviceLocalAddr()), 0,
|
||||||
DISCOVERER_DEBUG << "discovery_socket bind failed.";
|
QUdpSocket::ReuseAddressHint | QUdpSocket::ShareAddress))
|
||||||
io->networkIOMutex.unlock();
|
//QUdpSocket::ReuseAddressHint))
|
||||||
|
{
|
||||||
socket.close();
|
set->setMetisPort(this, socket.localPort());
|
||||||
return 0;
|
io->networkIOMutex.lock();
|
||||||
}
|
DISCOVERER_DEBUG << "discovery_socket bound successfully to port " << socket.localPort();
|
||||||
#endif
|
io->networkIOMutex.unlock();
|
||||||
|
}
|
||||||
if (socket.writeDatagram(m_findDatagram, QHostAddress::Broadcast, DEVICE_PORT) == 63) {
|
else {
|
||||||
|
|
||||||
io->networkIOMutex.lock();
|
io->networkIOMutex.lock();
|
||||||
DISCOVERER_DEBUG << "discovery data sent.";
|
DISCOVERER_DEBUG << "discovery_socket bind failed.";
|
||||||
io->networkIOMutex.unlock();
|
io->networkIOMutex.unlock();
|
||||||
}
|
|
||||||
else {
|
socket.close();
|
||||||
|
return 0;
|
||||||
io->networkIOMutex.lock();
|
}
|
||||||
DISCOVERER_DEBUG << "discovery data not sent.";
|
#elif defined(Q_OS_LINUX)
|
||||||
io->networkIOMutex.unlock();
|
|
||||||
}
|
if (socket.bind(
|
||||||
|
QHostAddress(set->getHPSDRDeviceLocalAddr()),
|
||||||
|
QUdpSocket::DefaultForPlatform))
|
||||||
// wait a little
|
{
|
||||||
//SleeperThread::msleep(30);
|
CHECKED_CONNECT(
|
||||||
SleeperThread::msleep(500);
|
&socket,
|
||||||
|
SIGNAL(error(QAbstractSocket::SocketError)),
|
||||||
while (socket.hasPendingDatagrams()) {
|
this,
|
||||||
|
SLOT(displayDiscoverySocketError(QAbstractSocket::SocketError)));
|
||||||
TNetworkDevicecard mc;
|
|
||||||
quint16 port;
|
set->setMetisPort(this, socket.localPort());
|
||||||
|
io->networkIOMutex.lock();
|
||||||
m_deviceDatagram.resize(socket.pendingDatagramSize());
|
DISCOVERER_DEBUG << "discovery_socket bound successfully to port " << socket.localPort();
|
||||||
socket.readDatagram(m_deviceDatagram.data(), m_deviceDatagram.size(), &mc.ip_address, &port);
|
io->networkIOMutex.unlock();
|
||||||
|
}
|
||||||
if (m_deviceDatagram[0] == (char)0xEF && m_deviceDatagram[1] == (char)0xFE) {
|
else {
|
||||||
|
|
||||||
if (m_deviceDatagram[2] == (char)0x02) {
|
io->networkIOMutex.lock();
|
||||||
|
DISCOVERER_DEBUG << "discovery_socket bind failed.";
|
||||||
sprintf(mc.mac_address, "%02X:%02X:%02X:%02X:%02X:%02X",
|
io->networkIOMutex.unlock();
|
||||||
m_deviceDatagram[3] & 0xFF, m_deviceDatagram[4] & 0xFF, m_deviceDatagram[5] & 0xFF,
|
|
||||||
m_deviceDatagram[6] & 0xFF, m_deviceDatagram[7] & 0xFF, m_deviceDatagram[8] & 0xFF);
|
socket.close();
|
||||||
|
return 0;
|
||||||
io->networkIOMutex.lock();
|
}
|
||||||
DISCOVERER_DEBUG << "Device found at " << qPrintable(mc.ip_address.toString()) << ":" << port << "; Mac addr: [" << mc.mac_address << "]";
|
#endif
|
||||||
DISCOVERER_DEBUG << "Device code version: " << qPrintable(QString::number(m_deviceDatagram.at(9), 16));
|
|
||||||
io->networkIOMutex.unlock();
|
if (socket.writeDatagram(m_findDatagram, QHostAddress::Broadcast, DEVICE_PORT) == 63) {
|
||||||
|
|
||||||
int no = m_deviceDatagram.at(10);
|
io->networkIOMutex.lock();
|
||||||
QString str;
|
DISCOVERER_DEBUG << "discovery data sent.";
|
||||||
if (no == 0)
|
io->networkIOMutex.unlock();
|
||||||
str = "Metis";
|
}
|
||||||
else if (no == 1)
|
else {
|
||||||
str = "Hermes";
|
|
||||||
else if (no == 2)
|
io->networkIOMutex.lock();
|
||||||
str = "Griffin";
|
DISCOVERER_DEBUG << "discovery data not sent.";
|
||||||
else if (no == 4)
|
io->networkIOMutex.unlock();
|
||||||
str = "Angelia";
|
}
|
||||||
|
|
||||||
mc.boardID = no;
|
|
||||||
mc.boardName = str;
|
// wait a little
|
||||||
io->networkIOMutex.lock();
|
//SleeperThread::msleep(30);
|
||||||
DISCOVERER_DEBUG << "Device board ID: " << no;
|
SleeperThread::msleep(500);
|
||||||
DISCOVERER_DEBUG << "Device is: " << qPrintable(str);
|
|
||||||
io->networkIOMutex.unlock();
|
while (socket.hasPendingDatagrams()) {
|
||||||
|
|
||||||
m_deviceCards.append(mc);
|
quint16 port;
|
||||||
|
|
||||||
str += " (";
|
m_deviceDatagram.resize(socket.pendingDatagramSize());
|
||||||
str += mc.ip_address.toString();
|
socket.readDatagram(m_deviceDatagram.data(), m_deviceDatagram.size(), &mc.ip_address, &port);
|
||||||
str += ")";
|
|
||||||
|
if (m_deviceDatagram[0] == (char)0xEF && m_deviceDatagram[1] == (char)0xFE) {
|
||||||
set->addNetworkIOComboBoxEntry(str);
|
|
||||||
devicesFound++;
|
if (m_deviceDatagram[2] == (char)0x02) {
|
||||||
}
|
|
||||||
else if (m_deviceDatagram[2] == (char)0x03) {
|
sprintf(mc.mac_address, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||||
|
m_deviceDatagram[3] & 0xFF, m_deviceDatagram[4] & 0xFF, m_deviceDatagram[5] & 0xFF,
|
||||||
io->networkIOMutex.lock();
|
m_deviceDatagram[6] & 0xFF, m_deviceDatagram[7] & 0xFF, m_deviceDatagram[8] & 0xFF);
|
||||||
DISCOVERER_DEBUG << "Device already sending data!";
|
|
||||||
io->networkIOMutex.unlock();
|
io->networkIOMutex.lock();
|
||||||
}
|
DISCOVERER_DEBUG << "Device found at " << qPrintable(mc.ip_address.toString()) << ":" << port << "; Mac addr: [" << mc.mac_address << "]";
|
||||||
}
|
DISCOVERER_DEBUG << "Device code version: " << qPrintable(QString::number(m_deviceDatagram.at(9), 16));
|
||||||
|
io->networkIOMutex.unlock();
|
||||||
}
|
|
||||||
set->setMetisCardList(m_deviceCards);
|
int no = m_deviceDatagram.at(10);
|
||||||
|
QString str;
|
||||||
if (devicesFound == 1) {
|
if (no == 0)
|
||||||
|
str = "Metis";
|
||||||
set->setCurrentHPSDRDevice(m_deviceCards.at(0));
|
else if (no == 1)
|
||||||
io->networkIOMutex.lock();
|
str = "Hermes";
|
||||||
DISCOVERER_DEBUG << "Device selected: " << qPrintable(m_deviceCards.at(0).ip_address.toString());
|
else if (no == 2)
|
||||||
io->networkIOMutex.unlock();
|
str = "Griffin";
|
||||||
}
|
else if (no == 4)
|
||||||
|
str = "Angelia";
|
||||||
socket.close();
|
else if (no == 5)
|
||||||
return devicesFound;
|
str = "Orion";
|
||||||
}
|
else if (no == 6) {
|
||||||
|
str = "Hermes-Lite";
|
||||||
void Discoverer::displayDiscoverySocketError(QAbstractSocket::SocketError error) {
|
}
|
||||||
|
|
||||||
io->networkIOMutex.lock();
|
mc.boardID = no;
|
||||||
DISCOVERER_DEBUG << "discovery socket error: " << error;
|
mc.boardName = str;
|
||||||
io->networkIOMutex.unlock();
|
io->networkIOMutex.lock();
|
||||||
}
|
DISCOVERER_DEBUG << "Device board ID: " << no;
|
||||||
|
DISCOVERER_DEBUG << "Device is: " << qPrintable(str);
|
||||||
void Discoverer::clear() {
|
io->networkIOMutex.unlock();
|
||||||
|
|
||||||
//m_metisDeviceComboBox->clear();
|
m_deviceCards.append(mc);
|
||||||
m_deviceCards.clear();
|
|
||||||
}
|
str += " (";
|
||||||
|
str += mc.ip_address.toString();
|
||||||
|
str += ")";
|
||||||
|
|
||||||
|
set->addNetworkIOComboBoxEntry(str);
|
||||||
|
devicesFound++;
|
||||||
|
}
|
||||||
|
else if (m_deviceDatagram[2] == (char)0x03) {
|
||||||
|
|
||||||
|
io->networkIOMutex.lock();
|
||||||
|
DISCOVERER_DEBUG << "Device already sending data - trying to shut down...";
|
||||||
|
io->networkIOMutex.unlock();
|
||||||
|
|
||||||
|
shutdownHPSDRDevice();
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
set->setMetisCardList(m_deviceCards);
|
||||||
|
|
||||||
|
if (devicesFound == 1) {
|
||||||
|
|
||||||
|
set->setCurrentHPSDRDevice(m_deviceCards.at(0));
|
||||||
|
io->networkIOMutex.lock();
|
||||||
|
DISCOVERER_DEBUG << "Device selected: " << qPrintable(m_deviceCards.at(0).ip_address.toString());
|
||||||
|
io->networkIOMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.close();
|
||||||
|
return devicesFound;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Discoverer::displayDiscoverySocketError(QAbstractSocket::SocketError error) {
|
||||||
|
|
||||||
|
io->networkIOMutex.lock();
|
||||||
|
DISCOVERER_DEBUG << "discovery socket error: " << error;
|
||||||
|
io->networkIOMutex.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Discoverer::clear() {
|
||||||
|
|
||||||
|
//m_metisDeviceComboBox->clear();
|
||||||
|
m_deviceCards.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Discoverer::shutdownHPSDRDevice() {
|
||||||
|
|
||||||
|
QByteArray arr;
|
||||||
|
arr.resize(64);
|
||||||
|
arr[0] = (char)0xEF;
|
||||||
|
arr[1] = (char)0xFE;
|
||||||
|
arr[2] = (char)0x04;
|
||||||
|
arr[3] = (char)0x00;
|
||||||
|
|
||||||
|
for (int i = 4; i < 64; i++) arr[i] = 0x00;
|
||||||
|
|
||||||
|
QUdpSocket socket;
|
||||||
|
QHostAddress addr = mc.ip_address;
|
||||||
|
|
||||||
|
for (int i = 0; i < 10; i++) {
|
||||||
|
|
||||||
|
if (socket.writeDatagram(arr, addr, DEVICE_PORT) < 0) {
|
||||||
|
DISCOVERER_DEBUG << "forced shutdown socket write failed.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ public:
|
|||||||
|
|
||||||
int findHPSDRDevices();
|
int findHPSDRDevices();
|
||||||
void clear();
|
void clear();
|
||||||
|
void shutdownHPSDRDevice();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void initHPSDRDevice();
|
void initHPSDRDevice();
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ void Receiver::dspProcessing() {
|
|||||||
//io.mutex.unlock();
|
//io.mutex.unlock();
|
||||||
|
|
||||||
// spectrum
|
// spectrum
|
||||||
qtdsp->getSpectrum(newSpectrum, set->getFFTMultiplicator());
|
qtdsp->getSpectrum(newSpectrum, set->getFFTMultiplicator(m_receiver));
|
||||||
if (highResTimer->getElapsedTimeInMicroSec() >= getDisplayDelay()) {
|
if (highResTimer->getElapsedTimeInMicroSec() >= getDisplayDelay()) {
|
||||||
|
|
||||||
emit spectrumBufferChanged(m_receiver, newSpectrum);
|
emit spectrumBufferChanged(m_receiver, newSpectrum);
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ QAudioDeviceInfo DeviceInfo;
|
|||||||
if (-1 == OutDevIndx) m_OutDeviceInfo = QAudioDeviceInfo::defaultOutputDevice();
|
if (-1 == OutDevIndx) m_OutDeviceInfo = QAudioDeviceInfo::defaultOutputDevice();
|
||||||
else m_OutDeviceInfo = m_OutDevices.at(OutDevIndx);
|
else m_OutDeviceInfo = m_OutDevices.at(OutDevIndx);
|
||||||
|
|
||||||
#if 0 //RRK get a list of audio devices and the default
|
#if 1 //RRK get a list of audio devices and the default
|
||||||
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
|
foreach (const QAudioDeviceInfo &deviceInfo, QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)) {
|
||||||
qDebug() << "l:" << deviceInfo.deviceName();
|
qDebug() << "l:" << deviceInfo.deviceName();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -760,7 +760,7 @@ void QGLReceiverPanel::drawPanadapter() {
|
|||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0 // remove big red overload indicator
|
#if 0 //RRK remove big red overload indicator
|
||||||
if (m_adcStatus == 2) {
|
if (m_adcStatus == 2) {
|
||||||
|
|
||||||
glBegin(GL_TRIANGLE_STRIP);
|
glBegin(GL_TRIANGLE_STRIP);
|
||||||
@@ -1774,7 +1774,21 @@ void QGLReceiverPanel::drawVFOControl() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FFT size
|
// FFT size
|
||||||
if (m_receiver == 0) {
|
//if (m_receiver == 0) {
|
||||||
|
if (set->getFFTAutoStatus(m_receiver)) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
str = "sample size: %1";
|
||||||
|
x1 = m_panRect.right() - m_fonts.smallFontMetrics->width(str) - 65;
|
||||||
|
|
||||||
|
if (m_dataEngineState == QSDR::DataEngineUp) {
|
||||||
|
|
||||||
|
qglColor(QColor(0, 0, 0, 255));
|
||||||
|
m_oglTextSmall->renderText(x1+3, y1, 0.0f, str.arg(m_sampleSize));
|
||||||
|
qglColor(QColor(255, 170, 90, 200));
|
||||||
|
m_oglTextSmall->renderText(x1+1, y1-2, 1.0f, str.arg(m_sampleSize));
|
||||||
|
}
|
||||||
|
|
||||||
str = "FFT: %1";
|
str = "FFT: %1";
|
||||||
//float res;
|
//float res;
|
||||||
@@ -1797,6 +1811,10 @@ void QGLReceiverPanel::drawVFOControl() {
|
|||||||
case 8:
|
case 8:
|
||||||
s = "32k";
|
s = "32k";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 16:
|
||||||
|
s = "64k";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
x1 = m_panRect.right() - m_fonts.smallFontMetrics->width(str) - 5;
|
x1 = m_panRect.right() - m_fonts.smallFontMetrics->width(str) - 5;
|
||||||
|
|
||||||
@@ -3766,15 +3784,18 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
deltaSampleSize = m_spectrumSize - m_sampleSize;
|
deltaSampleSize = m_spectrumSize - m_sampleSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_receiver == 0) {
|
if (set->getFFTAutoStatus(m_receiver)) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
if (m_sampleSize < 2048) {
|
if (m_sampleSize < 2048) {
|
||||||
|
|
||||||
if (m_fftMult == 1) {
|
if (m_fftMult == 1) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 8192";
|
GRAPHICS_DEBUG << "set sample size to 8192";
|
||||||
set->setSampleSize(this, 0, 8192);
|
set->setSampleSize(this, m_receiver, 8192);
|
||||||
m_dBmPanLogGain += 6.0;
|
//m_dBmPanLogGain += 3.0103;
|
||||||
|
m_dBmPanLogGain += 6;
|
||||||
m_fftMult = 2;
|
m_fftMult = 2;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -3782,8 +3803,9 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
else if (m_fftMult == 2) {
|
else if (m_fftMult == 2) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 16384";
|
GRAPHICS_DEBUG << "set sample size to 16384";
|
||||||
set->setSampleSize(this, 0, 16384);
|
set->setSampleSize(this, m_receiver, 16384);
|
||||||
m_dBmPanLogGain += 6.0;
|
//m_dBmPanLogGain += 3.0103;
|
||||||
|
m_dBmPanLogGain += 6;
|
||||||
m_fftMult = 4;
|
m_fftMult = 4;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -3791,10 +3813,21 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
else if (m_fftMult == 4) {
|
else if (m_fftMult == 4) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 32768";
|
GRAPHICS_DEBUG << "set sample size to 32768";
|
||||||
set->setSampleSize(this, 0, 32768);
|
set->setSampleSize(this, m_receiver, 32768);
|
||||||
m_dBmPanLogGain += 6.0;
|
//m_dBmPanLogGain += 3.0103;
|
||||||
|
m_dBmPanLogGain += 6;
|
||||||
m_fftMult = 8;
|
m_fftMult = 8;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (m_fftMult == 8) {
|
||||||
|
|
||||||
|
GRAPHICS_DEBUG << "set sample size to 65536";
|
||||||
|
set->setSampleSize(this, m_receiver, 65536);
|
||||||
|
//m_dBmPanLogGain += 3.0103;
|
||||||
|
m_dBmPanLogGain += 6;
|
||||||
|
m_fftMult = 16;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3803,8 +3836,9 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
if (m_fftMult == 2) {
|
if (m_fftMult == 2) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 4096";
|
GRAPHICS_DEBUG << "set sample size to 4096";
|
||||||
set->setSampleSize(this, 0, 4096);
|
set->setSampleSize(this, m_receiver, 4096);
|
||||||
m_dBmPanLogGain -= 6.0;
|
//m_dBmPanLogGain -= 3.0103;
|
||||||
|
m_dBmPanLogGain -= 6;
|
||||||
m_fftMult = 1;
|
m_fftMult = 1;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -3812,8 +3846,9 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
else if (m_fftMult == 4) {
|
else if (m_fftMult == 4) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 8192";
|
GRAPHICS_DEBUG << "set sample size to 8192";
|
||||||
set->setSampleSize(this, 0, 8192);
|
set->setSampleSize(this, m_receiver, 8192);
|
||||||
m_dBmPanLogGain -= 6.0;
|
//m_dBmPanLogGain -= 3.0103;
|
||||||
|
m_dBmPanLogGain -= 6;
|
||||||
m_fftMult = 2;
|
m_fftMult = 2;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -3821,10 +3856,21 @@ void QGLReceiverPanel::computeDisplayBins(QVector<float>& buffer, QVector<float>
|
|||||||
else if (m_fftMult == 8) {
|
else if (m_fftMult == 8) {
|
||||||
|
|
||||||
GRAPHICS_DEBUG << "set sample size to 16384";
|
GRAPHICS_DEBUG << "set sample size to 16384";
|
||||||
set->setSampleSize(this, 0, 16384);
|
set->setSampleSize(this, m_receiver, 16384);
|
||||||
m_dBmPanLogGain -= 6.0;
|
//m_dBmPanLogGain -= 3.0103;
|
||||||
|
m_dBmPanLogGain -= 6;
|
||||||
m_fftMult = 4;
|
m_fftMult = 4;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (m_fftMult == 16) {
|
||||||
|
|
||||||
|
GRAPHICS_DEBUG << "set sample size to 32768";
|
||||||
|
set->setSampleSize(this, m_receiver, 32768);
|
||||||
|
//m_dBmPanLogGain -= 3.0103;
|
||||||
|
m_dBmPanLogGain -= 6;
|
||||||
|
m_fftMult = 8;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ void Demodulation::DoSAM(CPX &in, CPX &out ) {
|
|||||||
|
|
||||||
if ((delay0.im) == 0.0 && (delay0.re == 0.0)) {
|
if ((delay0.im) == 0.0 && (delay0.re == 0.0)) {
|
||||||
|
|
||||||
delay0.re = 0.000000000001;
|
delay0.re = 0.000000000001f;
|
||||||
}
|
}
|
||||||
|
|
||||||
difference = sqrt(in.at(i).re * in.at(i).re + in.at(i).im * in.at(i).im) * (qAtan2(delay0.im, delay0.re));
|
difference = sqrt(in.at(i).re * in.at(i).re + in.at(i).im * in.at(i).im) * (qAtan2(delay0.im, delay0.re));
|
||||||
@@ -139,10 +139,10 @@ void Demodulation::DoSAM(CPX &in, CPX &out ) {
|
|||||||
m_phase += m_pll_frequency + m_alpha * difference;
|
m_phase += m_pll_frequency + m_alpha * difference;
|
||||||
|
|
||||||
while (m_phase >= TWOPI)
|
while (m_phase >= TWOPI)
|
||||||
m_phase -= TWOPI;
|
m_phase -= (float)TWOPI;
|
||||||
|
|
||||||
while (m_phase < 0)
|
while (m_phase < 0)
|
||||||
m_phase += TWOPI;
|
m_phase += (float)TWOPI;
|
||||||
|
|
||||||
m_lockcurrent = 0.999 * m_lockcurrent + 0.001 * qAbs(delay0.re);
|
m_lockcurrent = 0.999 * m_lockcurrent + 0.001 * qAbs(delay0.re);
|
||||||
m_lockprevious = m_lockcurrent;
|
m_lockprevious = m_lockcurrent;
|
||||||
@@ -167,7 +167,7 @@ void Demodulation::DoFMN(CPX &in, CPX &out ) {
|
|||||||
|
|
||||||
if ((delay0.im) == 0.0 && (delay0.re == 0.0)) {
|
if ((delay0.im) == 0.0 && (delay0.re == 0.0)) {
|
||||||
|
|
||||||
delay0.re = 0.000000000001;
|
delay0.re = 0.000000000001f;
|
||||||
}
|
}
|
||||||
difference = qAtan2(delay0.im, delay0.re);
|
difference = qAtan2(delay0.im, delay0.re);
|
||||||
|
|
||||||
@@ -181,9 +181,9 @@ void Demodulation::DoFMN(CPX &in, CPX &out ) {
|
|||||||
m_phase += m_pll_frequency + m_alpha * difference;
|
m_phase += m_pll_frequency + m_alpha * difference;
|
||||||
|
|
||||||
while (m_phase >= TWOPI)
|
while (m_phase >= TWOPI)
|
||||||
m_phase -= TWOPI;
|
m_phase -= (float)TWOPI;
|
||||||
while (m_phase < 0)
|
while (m_phase < 0)
|
||||||
m_phase += TWOPI;
|
m_phase += (float)TWOPI;
|
||||||
|
|
||||||
m_afc = 0.99 * m_afc + 0.01 * m_pll_frequency;
|
m_afc = 0.99 * m_afc + 0.01 * m_pll_frequency;
|
||||||
out[i].re = (m_pll_frequency - m_afc) * m_cvt;
|
out[i].re = (m_pll_frequency - m_afc) * m_cvt;
|
||||||
|
|||||||
@@ -33,6 +33,11 @@
|
|||||||
|
|
||||||
#include "qtdsp_dspEngine.h"
|
#include "qtdsp_dspEngine.h"
|
||||||
|
|
||||||
|
double myLog(double x, double base) {
|
||||||
|
|
||||||
|
return log(x) / log(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QDSPEngine::QDSPEngine(QObject *parent, int rx, int size)
|
QDSPEngine::QDSPEngine(QObject *parent, int rx, int size)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
@@ -41,18 +46,18 @@ QDSPEngine::QDSPEngine(QObject *parent, int rx, int size)
|
|||||||
, m_rx(rx)
|
, m_rx(rx)
|
||||||
, m_size(size)
|
, m_size(size)
|
||||||
, m_samplerate(set->getSampleRate())
|
, m_samplerate(set->getSampleRate())
|
||||||
, m_fftMultiplcator(1)
|
, m_fftMultiplier(1)
|
||||||
, m_volume(0.0f)
|
, m_volume(0.0f)
|
||||||
{
|
{
|
||||||
qRegisterMetaType<QVector<cpx> >();
|
qRegisterMetaType<QVector<cpx> >();
|
||||||
qRegisterMetaType<CPX>();
|
qRegisterMetaType<CPX>();
|
||||||
|
|
||||||
fft = new QFFT(m_size);
|
fft = new QFFT(m_size); // m_size = 1024
|
||||||
filter = new QFilter(this, m_size, 2, 12);//8);
|
filter = new QFilter(this, m_size, 2, 12);//8);
|
||||||
wpagc = new QWPAGC(this, m_size);
|
wpagc = new QWPAGC(this, m_size);
|
||||||
spectrum = new PowerSpectrum(this, m_size*2);
|
//spectrum = new PowerSpectrum(this, m_size*2);
|
||||||
|
|
||||||
QString str = "Initializing DSP engine for rx %1: 8k FFT ...please wait";
|
/*QString str = "Initializing DSP engine for rx %1: 8k FFT ...please wait";
|
||||||
set->setSystemMessage(str.arg(m_rx), 0);
|
set->setSystemMessage(str.arg(m_rx), 0);
|
||||||
|
|
||||||
if (m_rx == 0) {
|
if (m_rx == 0) {
|
||||||
@@ -66,6 +71,20 @@ QDSPEngine::QDSPEngine(QObject *parent, int rx, int size)
|
|||||||
str = "Initializing DSP engine for rx %1: 32k FFT ...please wait";
|
str = "Initializing DSP engine for rx %1: 32k FFT ...please wait";
|
||||||
set->setSystemMessage(str.arg(m_rx), 0);
|
set->setSystemMessage(str.arg(m_rx), 0);
|
||||||
spectrum8 = new PowerSpectrum(this, m_size*16);
|
spectrum8 = new PowerSpectrum(this, m_size*16);
|
||||||
|
|
||||||
|
str = "Initializing DSP engine for rx %1: 64k FFT ...please wait";
|
||||||
|
set->setSystemMessage(str.arg(m_rx), 0);
|
||||||
|
spectrum16 = new PowerSpectrum(this, m_size*32);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
int factor = 2;
|
||||||
|
|
||||||
|
while (factor <= 128) {
|
||||||
|
|
||||||
|
PowerSpectrum* spec = new PowerSpectrum(this, m_size*factor);
|
||||||
|
powerSpectraList << spec;
|
||||||
|
|
||||||
|
factor *= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_spectrumSize = m_size*4;
|
m_spectrumSize = m_size*4;
|
||||||
@@ -116,8 +135,13 @@ QDSPEngine::~QDSPEngine() {
|
|||||||
if (wpagc)
|
if (wpagc)
|
||||||
delete wpagc;
|
delete wpagc;
|
||||||
|
|
||||||
if (spectrum)
|
//if (spectrum)
|
||||||
delete spectrum;
|
// delete spectrum;
|
||||||
|
|
||||||
|
if (!powerSpectraList.empty()) {
|
||||||
|
|
||||||
|
powerSpectraList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
if (signalmeter)
|
if (signalmeter)
|
||||||
delete signalmeter;
|
delete signalmeter;
|
||||||
@@ -175,7 +199,7 @@ void QDSPEngine::processDSP(CPX &in, CPX &out, int size) {
|
|||||||
|
|
||||||
m_mutex.lock();
|
m_mutex.lock();
|
||||||
|
|
||||||
switch (m_fftMultiplcator) {
|
/*switch (m_fftMultiplcator) {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
spectrum->ProcessSpectrum(in, size*2, 1);
|
spectrum->ProcessSpectrum(in, size*2, 1);
|
||||||
@@ -192,7 +216,14 @@ void QDSPEngine::processDSP(CPX &in, CPX &out, int size) {
|
|||||||
case 8:
|
case 8:
|
||||||
spectrum8->ProcessSpectrum(in, size*16, 15);
|
spectrum8->ProcessSpectrum(in, size*16, 15);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
case 16:
|
||||||
|
spectrum16->ProcessSpectrum(in, size*32, 31);
|
||||||
|
break;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
int idx = (int)(myLog(m_fftMultiplier, 2));
|
||||||
|
powerSpectraList.at(idx)->ProcessSpectrum(in, size * m_fftMultiplier * 2, m_fftMultiplier*2-1);
|
||||||
|
|
||||||
if (m_NcoFreq != 0)
|
if (m_NcoFreq != 0)
|
||||||
ProcessFrequencyShift(in, in, size);
|
ProcessFrequencyShift(in, in, size);
|
||||||
@@ -214,36 +245,10 @@ void QDSPEngine::processDSP(CPX &in, CPX &out, int size) {
|
|||||||
|
|
||||||
int QDSPEngine::getSpectrum(qVectorFloat &buffer, int mult) {
|
int QDSPEngine::getSpectrum(qVectorFloat &buffer, int mult) {
|
||||||
|
|
||||||
if (m_rx == 0) {
|
m_fftMultiplier = mult;
|
||||||
|
int idx = (int)(myLog(m_fftMultiplier, 2));
|
||||||
m_fftMultiplcator = mult;
|
|
||||||
switch (m_fftMultiplcator) {
|
return powerSpectraList.at(idx)->spectrumResult(buffer, m_size * m_fftMultiplier * 2 - 2048);
|
||||||
|
|
||||||
case 1:
|
|
||||||
return spectrum->spectrumResult(buffer, 0);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
return spectrum2->spectrumResult(buffer, 2048);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
return spectrum4->spectrumResult(buffer, 6144);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
return spectrum8->spectrumResult(buffer, 14336);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return spectrum->spectrumResult(buffer, 0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
return spectrum->spectrumResult(buffer, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
float QDSPEngine::getSMeterInstValue() {
|
float QDSPEngine::getSMeterInstValue() {
|
||||||
@@ -354,9 +359,7 @@ void QDSPEngine::setNCOFrequency(int rx, long ncoFreq) {
|
|||||||
|
|
||||||
void QDSPEngine::setSampleSize(int rx, int size) {
|
void QDSPEngine::setSampleSize(int rx, int size) {
|
||||||
|
|
||||||
Q_UNUSED(rx)
|
if (m_rx == rx) {
|
||||||
|
|
||||||
if (m_rx == 0) {
|
|
||||||
|
|
||||||
m_mutex.lock();
|
m_mutex.lock();
|
||||||
m_spectrumSize = size;
|
m_spectrumSize = size;
|
||||||
|
|||||||
@@ -72,9 +72,13 @@ public:
|
|||||||
PowerSpectrum* spectrum2;
|
PowerSpectrum* spectrum2;
|
||||||
PowerSpectrum* spectrum4;
|
PowerSpectrum* spectrum4;
|
||||||
PowerSpectrum* spectrum8;
|
PowerSpectrum* spectrum8;
|
||||||
|
PowerSpectrum* spectrum16;
|
||||||
|
|
||||||
SignalMeter* signalmeter;
|
SignalMeter* signalmeter;
|
||||||
Demodulation* demod;
|
Demodulation* demod;
|
||||||
|
|
||||||
|
QList<PowerSpectrum* > powerSpectraList;
|
||||||
|
|
||||||
void processDSP(CPX &in, CPX &out, int size);
|
void processDSP(CPX &in, CPX &out, int size);
|
||||||
|
|
||||||
int getSpectrum(qVectorFloat &buffer, int mult);
|
int getSpectrum(qVectorFloat &buffer, int mult);
|
||||||
@@ -108,7 +112,7 @@ private:
|
|||||||
int m_size;
|
int m_size;
|
||||||
int m_spectrumSize;
|
int m_spectrumSize;
|
||||||
int m_samplerate;
|
int m_samplerate;
|
||||||
int m_fftMultiplcator;
|
int m_fftMultiplier;
|
||||||
|
|
||||||
float m_volume;
|
float m_volume;
|
||||||
qreal m_NcoFreq;
|
qreal m_NcoFreq;
|
||||||
|
|||||||
@@ -211,7 +211,7 @@ void QFilter::Normalize(CPX &in, CPX &out, int size) {
|
|||||||
|
|
||||||
void QFilter::Decimate(CPX &in, CPX &out, int downrate) {
|
void QFilter::Decimate(CPX &in, CPX &out, int downrate) {
|
||||||
|
|
||||||
int newsize = qRound((float) m_size/downrate);
|
int newsize = qRound(qreal(m_size / downrate));
|
||||||
|
|
||||||
//memset(out, 0, newsize * sizeof(CPX));
|
//memset(out, 0, newsize * sizeof(CPX));
|
||||||
//memset(tmp, 0, m_size * sizeof(CPX));
|
//memset(tmp, 0, m_size * sizeof(CPX));
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ void QHPainter::drawShadowText (qreal x, qreal y,
|
|||||||
shadowImage.shadowBlur(radius, shadowColor);
|
shadowImage.shadowBlur(radius, shadowColor);
|
||||||
|
|
||||||
// Compose Text and Shadow
|
// Compose Text and Shadow
|
||||||
int addSizeX = (offset.x() > radius) ? (abs(offset.x()) - radius) : 0;
|
int addSizeX = (offset.x() > radius) ? (fabs(offset.x()) - radius) : 0;
|
||||||
int addSizeY = (offset.y() > radius) ? (abs(offset.y()) - radius) : 0;
|
int addSizeY = (offset.y() > radius) ? (fabs(offset.y()) - radius) : 0;
|
||||||
QSize finalSize = shadowImage.size() + QSize(addSizeX, addSizeY);
|
QSize finalSize = shadowImage.size() + QSize(addSizeX, addSizeY);
|
||||||
|
|
||||||
QPointF shadowTopLeft(QPointF((finalSize.width() - shadowImage.width()) / 2.0,
|
QPointF shadowTopLeft(QPointF((finalSize.width() - shadowImage.width()) / 2.0,
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#define CUSDR_PAINTER_H
|
#define CUSDR_PAINTER_H
|
||||||
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
class QHPainter : public QPainter {
|
class QHPainter : public QPainter {
|
||||||
|
|
||||||
@@ -102,4 +103,4 @@ public:
|
|||||||
const QBrush& brush);
|
const QBrush& brush);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CUSDR_PAINTER_H
|
#endif // CUSDR_PAINTER_H
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ void AlexAntennaWidget::createAntennasGroup() {
|
|||||||
|
|
||||||
// band label
|
// band label
|
||||||
QStringList bandNames;
|
QStringList bandNames;
|
||||||
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "gen";
|
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "23 cm" << "13 cm" << "10 cm" << "5 cm" << "gen";
|
||||||
|
|
||||||
QList<QLabel *> bandLabelList;
|
QList<QLabel *> bandLabelList;
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ void ExtCtrlWidget::createReceivePinsGroup() {
|
|||||||
|
|
||||||
// band label
|
// band label
|
||||||
QStringList bandNames;
|
QStringList bandNames;
|
||||||
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm";
|
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "23 cm" << "13 cm" << "10 cm" << "5 cm" << "gen";
|
||||||
|
|
||||||
QList<QLabel *> bandLabelList;
|
QList<QLabel *> bandLabelList;
|
||||||
|
|
||||||
@@ -212,7 +212,7 @@ void ExtCtrlWidget::createTransmitPinsGroup() {
|
|||||||
|
|
||||||
// band label
|
// band label
|
||||||
QStringList bandNames;
|
QStringList bandNames;
|
||||||
bandNames << "2200 m" << "630 m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm";
|
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "23 cm" << "13 cm" << "10 cm" << "5 cm" << "gen";
|
||||||
|
|
||||||
QList<QLabel *> bandLabelList;
|
QList<QLabel *> bandLabelList;
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ typedef enum _hamBand {
|
|||||||
cm125, // 14
|
cm125, // 14
|
||||||
cm70, // 15
|
cm70, // 15
|
||||||
cm33, // 16
|
cm33, // 16
|
||||||
gen // 17
|
cm23, // 17
|
||||||
|
cm13, // 18
|
||||||
|
cm10, // 19
|
||||||
|
cm5, // 21
|
||||||
|
gen // 22
|
||||||
|
|
||||||
} HamBand;
|
} HamBand;
|
||||||
|
|
||||||
@@ -298,6 +302,39 @@ inline QList<THamBandFrequencies> getHamBandFrequencies() {
|
|||||||
hamBandFreq.hamBand = (HamBand) cm33;
|
hamBandFreq.hamBand = (HamBand) cm33;
|
||||||
hamBandFreq.bandString = "33cm";
|
hamBandFreq.bandString = "33cm";
|
||||||
hamBandFreq.region = (IARURegion) region1;
|
hamBandFreq.region = (IARURegion) region1;
|
||||||
|
|
||||||
|
hamBandFreqList << hamBandFreq;
|
||||||
|
|
||||||
|
//RRK TODO FIX
|
||||||
|
hamBandFreq.frequencyLo = 902000000;
|
||||||
|
hamBandFreq.frequencyHi = 928000000;
|
||||||
|
hamBandFreq.hamBand = (HamBand) cm23;
|
||||||
|
hamBandFreq.bandString = "23cm";
|
||||||
|
hamBandFreq.region = (IARURegion) region1;
|
||||||
|
|
||||||
|
hamBandFreqList << hamBandFreq;
|
||||||
|
|
||||||
|
hamBandFreq.frequencyLo = 902000000;
|
||||||
|
hamBandFreq.frequencyHi = 928000000;
|
||||||
|
hamBandFreq.hamBand = (HamBand) cm13;
|
||||||
|
hamBandFreq.bandString = "13cm";
|
||||||
|
hamBandFreq.region = (IARURegion) region1;
|
||||||
|
|
||||||
|
hamBandFreqList << hamBandFreq;
|
||||||
|
|
||||||
|
hamBandFreq.frequencyLo = 902000000;
|
||||||
|
hamBandFreq.frequencyHi = 928000000;
|
||||||
|
hamBandFreq.hamBand = (HamBand) cm10;
|
||||||
|
hamBandFreq.bandString = "10cm";
|
||||||
|
hamBandFreq.region = (IARURegion) region1;
|
||||||
|
|
||||||
|
hamBandFreqList << hamBandFreq;
|
||||||
|
|
||||||
|
hamBandFreq.frequencyLo = 902000000;
|
||||||
|
hamBandFreq.frequencyHi = 928000000;
|
||||||
|
hamBandFreq.hamBand = (HamBand) cm5;
|
||||||
|
hamBandFreq.bandString = "5cm";
|
||||||
|
hamBandFreq.region = (IARURegion) region1;
|
||||||
|
|
||||||
hamBandFreqList << hamBandFreq;
|
hamBandFreqList << hamBandFreq;
|
||||||
|
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ public slots:
|
|||||||
void suspendSignal(QObject *sender);
|
void suspendSignal(QObject *sender);
|
||||||
void startPlaybackSignal(QObject *sender);
|
void startPlaybackSignal(QObject *sender);
|
||||||
void showSettingsDialogSignal(QObject *sender);
|
void showSettingsDialogSignal(QObject *sender);
|
||||||
|
void showWarningDialog(const QString &msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setSystemState(
|
void setSystemState(
|
||||||
@@ -333,7 +334,6 @@ private slots:
|
|||||||
void showStatusBarMessage(const QString &msg, int time);
|
void showStatusBarMessage(const QString &msg, int time);
|
||||||
void clearStatusBarMessage();
|
void clearStatusBarMessage();
|
||||||
void showNetworkIODialog();
|
void showNetworkIODialog();
|
||||||
void showWarningDialog(const QString &msg);
|
|
||||||
|
|
||||||
void addNetworkIOComboBoxEntry(QString str);
|
void addNetworkIOComboBoxEntry(QString str);
|
||||||
void clearNetworkIOComboBoxEntry();
|
void clearNetworkIOComboBoxEntry();
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx)
|
|||||||
CHECKED_CONNECT(stickyBtn, SIGNAL(clicked()), this, SLOT(setSticky()));
|
CHECKED_CONNECT(stickyBtn, SIGNAL(clicked()), this, SLOT(setSticky()));
|
||||||
|
|
||||||
createOptionsBtnGroup();
|
createOptionsBtnGroup();
|
||||||
|
createFFTOptionsGroup();
|
||||||
createBandBtnGroup();
|
createBandBtnGroup();
|
||||||
createModeBtnGroup();
|
createModeBtnGroup();
|
||||||
createAgcBtnGroup();
|
createAgcBtnGroup();
|
||||||
@@ -150,6 +151,8 @@ RadioPopupWidget::RadioPopupWidget(QWidget *parent, int rx)
|
|||||||
mainLayout->addSpacing(16);
|
mainLayout->addSpacing(16);
|
||||||
//mainLayout->addStretch();
|
//mainLayout->addStretch();
|
||||||
mainLayout->addLayout(optionsVBox);
|
mainLayout->addLayout(optionsVBox);
|
||||||
|
mainLayout->addSpacing(8);
|
||||||
|
mainLayout->addLayout(fftOptionsVBox);
|
||||||
mainLayout->addSpacing(16);
|
mainLayout->addSpacing(16);
|
||||||
mainLayout->addLayout(bandVBox);
|
mainLayout->addLayout(bandVBox);
|
||||||
mainLayout->addSpacing(8);
|
mainLayout->addSpacing(8);
|
||||||
@@ -535,6 +538,62 @@ void RadioPopupWidget::createOptionsBtnGroup() {
|
|||||||
optionsVBox->addLayout(hbox5);
|
optionsVBox->addLayout(hbox5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RadioPopupWidget::createFFTOptionsGroup() {
|
||||||
|
|
||||||
|
m_FFTAutoBtn = new AeroButton("Auto", this);
|
||||||
|
m_FFTAutoBtn->setRoundness(10);
|
||||||
|
m_FFTAutoBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_4kFFTBtn = new AeroButton("FFT 4k", this);
|
||||||
|
m_4kFFTBtn->setRoundness(10);
|
||||||
|
m_4kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_8kFFTBtn = new AeroButton("FFT 8k", this);
|
||||||
|
m_8kFFTBtn->setRoundness(10);
|
||||||
|
m_8kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_16kFFTBtn = new AeroButton("FFT 16k", this);
|
||||||
|
m_16kFFTBtn->setRoundness(10);
|
||||||
|
m_16kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_32kFFTBtn = new AeroButton("FFT 32k", this);
|
||||||
|
m_32kFFTBtn->setRoundness(10);
|
||||||
|
m_32kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_64kFFTBtn = new AeroButton("FFT 64k", this);
|
||||||
|
m_64kFFTBtn->setRoundness(10);
|
||||||
|
m_64kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_128kFFTBtn = new AeroButton("FFT 128k", this);
|
||||||
|
m_128kFFTBtn->setRoundness(10);
|
||||||
|
m_128kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
m_256kFFTBtn = new AeroButton("FFT 256k", this);
|
||||||
|
m_256kFFTBtn->setRoundness(10);
|
||||||
|
m_256kFFTBtn->setFont(m_fonts.smallFont);
|
||||||
|
|
||||||
|
QHBoxLayout* hbox1 = new QHBoxLayout();
|
||||||
|
hbox1->setContentsMargins(0, 0, 0, 0);
|
||||||
|
hbox1->setSpacing(0);
|
||||||
|
hbox1->addWidget(m_FFTAutoBtn);
|
||||||
|
hbox1->addWidget(m_4kFFTBtn);
|
||||||
|
hbox1->addWidget(m_8kFFTBtn);
|
||||||
|
hbox1->addWidget(m_16kFFTBtn);
|
||||||
|
|
||||||
|
QHBoxLayout* hbox2 = new QHBoxLayout();
|
||||||
|
hbox2->setContentsMargins(0, 0, 0, 0);
|
||||||
|
hbox2->setSpacing(0);
|
||||||
|
hbox2->addWidget(m_32kFFTBtn);
|
||||||
|
hbox2->addWidget(m_64kFFTBtn);
|
||||||
|
hbox2->addWidget(m_128kFFTBtn);
|
||||||
|
hbox2->addWidget(m_256kFFTBtn);
|
||||||
|
|
||||||
|
fftOptionsVBox = new QVBoxLayout;
|
||||||
|
fftOptionsVBox->setSpacing(1);
|
||||||
|
fftOptionsVBox->addLayout(hbox1);
|
||||||
|
fftOptionsVBox->addLayout(hbox2);
|
||||||
|
}
|
||||||
|
|
||||||
void RadioPopupWidget::createBandBtnGroup() {
|
void RadioPopupWidget::createBandBtnGroup() {
|
||||||
|
|
||||||
band2200mBtn = new AeroButton("2200m", this);
|
band2200mBtn = new AeroButton("2200m", this);
|
||||||
@@ -605,6 +664,22 @@ void RadioPopupWidget::createBandBtnGroup() {
|
|||||||
bandBtnList.append(band33cmBtn);
|
bandBtnList.append(band33cmBtn);
|
||||||
CHECKED_CONNECT(band33cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(band33cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band23cmBtn = new AeroButton("23 cm", this);
|
||||||
|
bandBtnList.append(band23cmBtn);
|
||||||
|
CHECKED_CONNECT(band23cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band13cmBtn = new AeroButton("13 cm", this);
|
||||||
|
bandBtnList.append(band13cmBtn);
|
||||||
|
CHECKED_CONNECT(band13cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band10cmBtn = new AeroButton("10 cm", this);
|
||||||
|
bandBtnList.append(band10cmBtn);
|
||||||
|
CHECKED_CONNECT(band10cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band5cmBtn = new AeroButton("5 cm", this);
|
||||||
|
bandBtnList.append(band5cmBtn);
|
||||||
|
CHECKED_CONNECT(band5cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
bandGenBtn = new AeroButton("Gen", this);
|
bandGenBtn = new AeroButton("Gen", this);
|
||||||
bandBtnList.append(bandGenBtn);
|
bandBtnList.append(bandGenBtn);
|
||||||
CHECKED_CONNECT(bandGenBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(bandGenBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
@@ -637,22 +712,30 @@ void RadioPopupWidget::createBandBtnGroup() {
|
|||||||
hbox2->addWidget(band12mBtn);
|
hbox2->addWidget(band12mBtn);
|
||||||
hbox2->addWidget(band10mBtn);
|
hbox2->addWidget(band10mBtn);
|
||||||
hbox2->addWidget(band6mBtn);
|
hbox2->addWidget(band6mBtn);
|
||||||
hbox2->addWidget(bandGenBtn);
|
hbox2->addWidget(band2mBtn);
|
||||||
|
|
||||||
QHBoxLayout *hbox3 = new QHBoxLayout();
|
QHBoxLayout *hbox3 = new QHBoxLayout();
|
||||||
hbox3->setContentsMargins(0, 0, 0, 0);
|
hbox3->setContentsMargins(0, 0, 0, 0);
|
||||||
hbox3->setSpacing(0);
|
hbox3->setSpacing(0);
|
||||||
hbox3->addWidget(band2mBtn);
|
|
||||||
hbox3->addWidget(band125cmBtn);
|
hbox3->addWidget(band125cmBtn);
|
||||||
hbox3->addWidget(band70cmBtn);
|
hbox3->addWidget(band70cmBtn);
|
||||||
hbox3->addWidget(band12mBtn);
|
|
||||||
hbox3->addWidget(band33cmBtn);
|
hbox3->addWidget(band33cmBtn);
|
||||||
|
hbox3->addWidget(band23cmBtn);
|
||||||
|
hbox3->addWidget(band13cmBtn);
|
||||||
|
hbox3->addWidget(band10cmBtn);
|
||||||
|
hbox3->addWidget(band5cmBtn);
|
||||||
|
|
||||||
|
QHBoxLayout *hbox4 = new QHBoxLayout();
|
||||||
|
hbox4->setContentsMargins(0, 0, 0, 0);
|
||||||
|
hbox4->setSpacing(0);
|
||||||
|
hbox4->addWidget(bandGenBtn);
|
||||||
|
|
||||||
bandVBox = new QVBoxLayout;
|
bandVBox = new QVBoxLayout;
|
||||||
bandVBox->setSpacing(1);
|
bandVBox->setSpacing(1);
|
||||||
bandVBox->addLayout(hbox1);
|
bandVBox->addLayout(hbox1);
|
||||||
bandVBox->addLayout(hbox2);
|
bandVBox->addLayout(hbox2);
|
||||||
bandVBox->addLayout(hbox3);
|
bandVBox->addLayout(hbox3);
|
||||||
|
bandVBox->addLayout(hbox4);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1198,6 +1281,18 @@ void RadioPopupWidget::bandChangedByBtn() {
|
|||||||
if (str == "33 cm")
|
if (str == "33 cm")
|
||||||
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm33));
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm33));
|
||||||
else
|
else
|
||||||
|
if (str == "23 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm23));
|
||||||
|
else
|
||||||
|
if (str == "13 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm13));
|
||||||
|
else
|
||||||
|
if (str == "10 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm10));
|
||||||
|
else
|
||||||
|
if (str == "5 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(cm5));
|
||||||
|
else
|
||||||
if (str == "Gen")
|
if (str == "Gen")
|
||||||
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(gen));
|
set->setVFOFrequency(this, 2, m_receiver, m_lastVfoFrequencyList.at(gen));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,6 +93,7 @@ private:
|
|||||||
WaterfallColorMode m_waterfallColorMode;
|
WaterfallColorMode m_waterfallColorMode;
|
||||||
|
|
||||||
QVBoxLayout* optionsVBox;
|
QVBoxLayout* optionsVBox;
|
||||||
|
QVBoxLayout* fftOptionsVBox;
|
||||||
QVBoxLayout* bandVBox;
|
QVBoxLayout* bandVBox;
|
||||||
QVBoxLayout* modeVBox;
|
QVBoxLayout* modeVBox;
|
||||||
QVBoxLayout* agcVBox;
|
QVBoxLayout* agcVBox;
|
||||||
@@ -130,6 +131,15 @@ private:
|
|||||||
AeroButton* m_WaterfallSimpleBtn;
|
AeroButton* m_WaterfallSimpleBtn;
|
||||||
AeroButton* m_WaterfallEnhancedBtn;
|
AeroButton* m_WaterfallEnhancedBtn;
|
||||||
|
|
||||||
|
AeroButton* m_FFTAutoBtn;
|
||||||
|
AeroButton* m_4kFFTBtn;
|
||||||
|
AeroButton* m_8kFFTBtn;
|
||||||
|
AeroButton* m_16kFFTBtn;
|
||||||
|
AeroButton* m_32kFFTBtn;
|
||||||
|
AeroButton* m_64kFFTBtn;
|
||||||
|
AeroButton* m_128kFFTBtn;
|
||||||
|
AeroButton* m_256kFFTBtn;
|
||||||
|
|
||||||
AeroButton* band2200mBtn;
|
AeroButton* band2200mBtn;
|
||||||
AeroButton* band630mBtn;
|
AeroButton* band630mBtn;
|
||||||
AeroButton* band160mBtn;
|
AeroButton* band160mBtn;
|
||||||
@@ -147,6 +157,10 @@ private:
|
|||||||
AeroButton* band125cmBtn;
|
AeroButton* band125cmBtn;
|
||||||
AeroButton* band70cmBtn;
|
AeroButton* band70cmBtn;
|
||||||
AeroButton* band33cmBtn;
|
AeroButton* band33cmBtn;
|
||||||
|
AeroButton* band23cmBtn;
|
||||||
|
AeroButton* band13cmBtn;
|
||||||
|
AeroButton* band10cmBtn;
|
||||||
|
AeroButton* band5cmBtn;
|
||||||
AeroButton* bandGenBtn;
|
AeroButton* bandGenBtn;
|
||||||
//AeroButton* bandxxBtn;
|
//AeroButton* bandxxBtn;
|
||||||
|
|
||||||
@@ -272,6 +286,7 @@ private slots:
|
|||||||
|
|
||||||
void setSticky();
|
void setSticky();
|
||||||
void createOptionsBtnGroup();
|
void createOptionsBtnGroup();
|
||||||
|
void createFFTOptionsGroup();
|
||||||
void createBandBtnGroup();
|
void createBandBtnGroup();
|
||||||
void createModeBtnGroup();
|
void createModeBtnGroup();
|
||||||
void createAgcBtnGroup();
|
void createAgcBtnGroup();
|
||||||
|
|||||||
@@ -345,40 +345,60 @@ void RadioWidget::createBandBtnGroup() {
|
|||||||
|
|
||||||
band2mBtn = new AeroButton("2 m", this);
|
band2mBtn = new AeroButton("2 m", this);
|
||||||
band2mBtn->setRoundness(0);
|
band2mBtn->setRoundness(0);
|
||||||
//band6mBtn->setGlass(false);
|
|
||||||
band2mBtn->setFixedSize(btn_widths, btn_height);
|
band2mBtn->setFixedSize(btn_widths, btn_height);
|
||||||
band2mBtn->setStyleSheet(set->getMiniButtonStyle());
|
band2mBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
//band6mBtn->setTextColor(QColor(200, 200, 200));
|
|
||||||
bandBtnList.append(band2mBtn);
|
bandBtnList.append(band2mBtn);
|
||||||
CHECKED_CONNECT(band2mBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(band2mBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
band125cmBtn = new AeroButton("125 cm", this);
|
band125cmBtn = new AeroButton("125 cm", this);
|
||||||
band125cmBtn->setRoundness(0);
|
band125cmBtn->setRoundness(0);
|
||||||
//band6mBtn->setGlass(false);
|
|
||||||
band125cmBtn->setFixedSize(btn_widths, btn_height);
|
band125cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
band125cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
band125cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
//band6mBtn->setTextColor(QColor(200, 200, 200));
|
|
||||||
bandBtnList.append(band125cmBtn);
|
bandBtnList.append(band125cmBtn);
|
||||||
CHECKED_CONNECT(band125cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(band125cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
band70cmBtn = new AeroButton("70 cm", this);
|
band70cmBtn = new AeroButton("70 cm", this);
|
||||||
band70cmBtn->setRoundness(0);
|
band70cmBtn->setRoundness(0);
|
||||||
//band6mBtn->setGlass(false);
|
|
||||||
band70cmBtn->setFixedSize(btn_widths, btn_height);
|
band70cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
band70cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
band70cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
//band6mBtn->setTextColor(QColor(200, 200, 200));
|
|
||||||
bandBtnList.append(band70cmBtn);
|
bandBtnList.append(band70cmBtn);
|
||||||
CHECKED_CONNECT(band70cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(band70cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
band33cmBtn = new AeroButton("33 cm", this);
|
band33cmBtn = new AeroButton("33 cm", this);
|
||||||
band33cmBtn->setRoundness(0);
|
band33cmBtn->setRoundness(0);
|
||||||
//band6mBtn->setGlass(false);
|
|
||||||
band33cmBtn->setFixedSize(btn_widths, btn_height);
|
band33cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
band33cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
band33cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
//band6mBtn->setTextColor(QColor(200, 200, 200));
|
|
||||||
bandBtnList.append(band33cmBtn);
|
bandBtnList.append(band33cmBtn);
|
||||||
CHECKED_CONNECT(band33cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
CHECKED_CONNECT(band33cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band23cmBtn = new AeroButton("23 cm", this);
|
||||||
|
band23cmBtn->setRoundness(0);
|
||||||
|
band23cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
|
band23cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
|
bandBtnList.append(band23cmBtn);
|
||||||
|
CHECKED_CONNECT(band23cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band13cmBtn = new AeroButton("13 cm", this);
|
||||||
|
band13cmBtn->setRoundness(0);
|
||||||
|
band13cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
|
band13cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
|
bandBtnList.append(band13cmBtn);
|
||||||
|
CHECKED_CONNECT(band13cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band10cmBtn = new AeroButton("10 cm", this);
|
||||||
|
band10cmBtn->setRoundness(0);
|
||||||
|
band10cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
|
band10cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
|
bandBtnList.append(band10cmBtn);
|
||||||
|
CHECKED_CONNECT(band10cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
|
band5cmBtn = new AeroButton("5 cm", this);
|
||||||
|
band5cmBtn->setRoundness(0);
|
||||||
|
band5cmBtn->setFixedSize(btn_widths, btn_height);
|
||||||
|
band5cmBtn->setStyleSheet(set->getMiniButtonStyle());
|
||||||
|
bandBtnList.append(band5cmBtn);
|
||||||
|
CHECKED_CONNECT(band5cmBtn, SIGNAL(clicked()), this, SLOT(bandChangedByBtn()));
|
||||||
|
|
||||||
bandGenBtn = new AeroButton("Gen", this);
|
bandGenBtn = new AeroButton("Gen", this);
|
||||||
bandGenBtn->setRoundness(0);
|
bandGenBtn->setRoundness(0);
|
||||||
//bandGenBtn->setGlass(false);
|
//bandGenBtn->setGlass(false);
|
||||||
@@ -418,11 +438,15 @@ void RadioWidget::createBandBtnGroup() {
|
|||||||
layout->addWidget(band12mBtn, 1, 4);
|
layout->addWidget(band12mBtn, 1, 4);
|
||||||
layout->addWidget(band10mBtn, 1, 5);
|
layout->addWidget(band10mBtn, 1, 5);
|
||||||
layout->addWidget(band6mBtn, 2, 0);
|
layout->addWidget(band6mBtn, 2, 0);
|
||||||
layout->addWidget(band2mBtn, 2, 0);
|
layout->addWidget(band2mBtn, 2, 1);
|
||||||
layout->addWidget(band125cmBtn, 2, 0);
|
layout->addWidget(band125cmBtn, 2, 2);
|
||||||
layout->addWidget(band70cmBtn, 2, 0);
|
layout->addWidget(band70cmBtn, 2, 3);
|
||||||
layout->addWidget(band33cmBtn, 2, 0);
|
layout->addWidget(band33cmBtn, 2, 4);
|
||||||
layout->addWidget(bandGenBtn, 2, 1);
|
layout->addWidget(band23cmBtn, 2, 5);
|
||||||
|
layout->addWidget(band13cmBtn, 3, 0);
|
||||||
|
layout->addWidget(band10cmBtn, 3, 1);
|
||||||
|
layout->addWidget(band5cmBtn, 3, 2);
|
||||||
|
layout->addWidget(bandGenBtn, 3, 3);
|
||||||
//layout->addWidget(bandxxBtn, 2, 3);
|
//layout->addWidget(bandxxBtn, 2, 3);
|
||||||
|
|
||||||
QHBoxLayout *hbox1 = new QHBoxLayout();
|
QHBoxLayout *hbox1 = new QHBoxLayout();
|
||||||
@@ -1229,6 +1253,18 @@ void RadioWidget::bandChangedByBtn() {
|
|||||||
if (str == "33 cm")
|
if (str == "33 cm")
|
||||||
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm33));
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm33));
|
||||||
else
|
else
|
||||||
|
if (str == "23 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm23));
|
||||||
|
else
|
||||||
|
if (str == "13 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm13));
|
||||||
|
else
|
||||||
|
if (str == "10 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm10));
|
||||||
|
else
|
||||||
|
if (str == "5 cm")
|
||||||
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(cm5));
|
||||||
|
else
|
||||||
if (str == "Gen")
|
if (str == "Gen")
|
||||||
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(gen));
|
set->setVFOFrequency(this, 2, m_currentRx, m_lastVfoFrequencyList.at(gen));
|
||||||
|
|
||||||
|
|||||||
@@ -89,6 +89,10 @@ private:
|
|||||||
AeroButton *band125cmBtn;
|
AeroButton *band125cmBtn;
|
||||||
AeroButton *band70cmBtn;
|
AeroButton *band70cmBtn;
|
||||||
AeroButton *band33cmBtn;
|
AeroButton *band33cmBtn;
|
||||||
|
AeroButton *band23cmBtn;
|
||||||
|
AeroButton *band13cmBtn;
|
||||||
|
AeroButton *band10cmBtn;
|
||||||
|
AeroButton *band5cmBtn;
|
||||||
AeroButton *bandGenBtn;
|
AeroButton *bandGenBtn;
|
||||||
//AeroButton *bandxxBtn;
|
//AeroButton *bandxxBtn;
|
||||||
|
|
||||||
|
|||||||
+4796
-4675
File diff suppressed because it is too large
Load Diff
+1608
-1587
File diff suppressed because it is too large
Load Diff
@@ -133,7 +133,7 @@ void TransmitPAWidget::createGainGroup() {
|
|||||||
|
|
||||||
// band label
|
// band label
|
||||||
QStringList bandNames;
|
QStringList bandNames;
|
||||||
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "gen";
|
bandNames << "2200m" << "630m" << "160 m" << "80 m" << "60 m" << "40 m" << "30 m" << "20 m" << "17 m" << "15 m" << "12 m" << "10 m" << "6 m" << "2 m" << "125 cm" << "70 cm" << "33 cm" << "23 cm" << "13 cm" << "10 cm" << "5 cm" << "gen";
|
||||||
|
|
||||||
QList<QLabel *> bandLabelList;
|
QList<QLabel *> bandLabelList;
|
||||||
|
|
||||||
|
|||||||
+143
-26
@@ -32,6 +32,9 @@
|
|||||||
#include "Util/cusdr_cpuUsage.h"
|
#include "Util/cusdr_cpuUsage.h"
|
||||||
#elif defined(Q_OS_LINUX)
|
#elif defined(Q_OS_LINUX)
|
||||||
#include "Util/cusdr_cpuUsage_unix.h"
|
#include "Util/cusdr_cpuUsage_unix.h"
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#define fopen_s(pFile,filename,mode) ((*(pFile))=fopen((filename), (mode)))==NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "fftw3.h"
|
#include "fftw3.h"
|
||||||
@@ -88,35 +91,51 @@ void cuSDRMessageHandler(QtMsgType type, const QMessageLogContext &context, cons
|
|||||||
ts << txt << endl << flush;
|
ts << txt << endl << flush;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void my_fftw_write_char(char c, void *f) { fputc(c, (FILE *) f); }
|
|
||||||
#define fftw_export_wisdom_to_file(f) fftw_export_wisdom(my_fftw_write_char, (void*) (f))
|
|
||||||
#define fftwf_export_wisdom_to_file(f) fftwf_export_wisdom(my_fftw_write_char, (void*) (f))
|
|
||||||
#define fftwl_export_wisdom_to_file(f) fftwl_export_wisdom(my_fftw_write_char, (void*) (f))
|
|
||||||
|
|
||||||
static int my_fftw_read_char(void *f) { return fgetc((FILE *) f); }
|
|
||||||
#define fftw_import_wisdom_from_file(f) fftw_import_wisdom(my_fftw_read_char, (void*) (f))
|
|
||||||
#define fftwf_import_wisdom_from_file(f) fftwf_import_wisdom(my_fftw_read_char, (void*) (f))
|
|
||||||
#define fftwl_import_wisdom_from_file(f) fftwl_import_wisdom(my_fftw_read_char, (void*) (f))
|
|
||||||
|
|
||||||
void runFFTWWisdom() {
|
void runFFTWWisdom() {
|
||||||
|
|
||||||
QString directory = QDir::currentPath();
|
QString directory = QDir::currentPath();
|
||||||
|
|
||||||
QDir currentDir = QDir(directory);
|
QDir currentDir = QDir(directory);
|
||||||
qDebug() << currentDir;
|
|
||||||
|
int err;
|
||||||
|
FILE* wisdomFile;
|
||||||
|
|
||||||
|
qDebug() << "Init::\tcurrent path: " << qPrintable(currentDir.absolutePath());
|
||||||
|
|
||||||
if (currentDir.exists("wisdom")) {
|
if (currentDir.exists("fftwf_wisdom")) {
|
||||||
|
|
||||||
qDebug() << "wisdom exists !";
|
qDebug() << "Init::\tfftwf_wisdom exists.";
|
||||||
return;
|
|
||||||
|
/*errno_t err;
|
||||||
|
FILE* wisdomFile;*/
|
||||||
|
err = fopen_s(&wisdomFile, "fftwf_wisdom", "r");
|
||||||
|
if (err == 0) {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfound fftwf_wisdom - this will be quick!";
|
||||||
|
fftwf_import_wisdom_from_file(wisdomFile);
|
||||||
|
fclose(wisdomFile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfound fftwf_wisdom but could not open.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
qDebug() << "wisdom does not exist - planning FFT...";
|
qDebug() << "Init::\tfftw_wisdom does not exist - planning FFT...";
|
||||||
|
|
||||||
/*const char* wisdom_file = "wisdom";
|
//string fname = "F:\\Eigene Dokumente\\Visual Studio 2010\\Projects\\cuSDR64\\fftwf_wisdom";
|
||||||
if (!fftw_import_wisdom_from_file(wisdom_file)) {
|
//FILE* wis = fopen (fname.c_str(), "r");
|
||||||
|
|
||||||
|
/*if (wis) {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfound fftwf_wisdom - this will be quick!";
|
||||||
|
fftwf_import_wisdom_from_file(wis);
|
||||||
|
fclose (wis);
|
||||||
|
}
|
||||||
|
else {*/
|
||||||
|
|
||||||
int size = 64;
|
int size = 64;
|
||||||
|
|
||||||
QString str = "Planning FFT size %1";
|
QString str = "Planning FFT size %1";
|
||||||
@@ -127,7 +146,7 @@ void runFFTWWisdom() {
|
|||||||
|
|
||||||
while (size <= MAX_FFTSIZE) {
|
while (size <= MAX_FFTSIZE) {
|
||||||
|
|
||||||
qDebug() << str.arg(size);
|
qDebug() << qPrintable(str.arg(size));
|
||||||
cpxbuf = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * size);
|
cpxbuf = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * size);
|
||||||
|
|
||||||
plan_fwd = fftwf_plan_dft_1d(size , cpxbuf, cpxbuf, FFTW_FORWARD, FFTW_PATIENT);
|
plan_fwd = fftwf_plan_dft_1d(size , cpxbuf, cpxbuf, FFTW_FORWARD, FFTW_PATIENT);
|
||||||
@@ -140,12 +159,22 @@ void runFFTWWisdom() {
|
|||||||
|
|
||||||
size *= 2;
|
size *= 2;
|
||||||
}
|
}
|
||||||
fftw_export_wisdom_to_file(wisdom_file);
|
//FILE* wis = fopen (fname.c_str(), "w");
|
||||||
}*/
|
//if (wis) {
|
||||||
//QProcess process;
|
|
||||||
//process.start("fftwf-wisdom.exe");
|
err = fopen_s(&wisdomFile, "fftwf_wisdom", "w");
|
||||||
//process.waitForFinished();
|
if (err == 0) {
|
||||||
}
|
|
||||||
|
qDebug() << "Init::\texporting fftwf_wisdom for quick measurement.";
|
||||||
|
fftwf_export_wisdom_to_file(wisdomFile);
|
||||||
|
qDebug() << "Init::\texported fftwf_wisdom.";
|
||||||
|
fclose(wisdomFile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tcould not write fftwf_wisdom.";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
@@ -353,6 +382,94 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
SleeperThread::msleep(300);
|
SleeperThread::msleep(300);
|
||||||
|
|
||||||
|
//*************************************************************************
|
||||||
|
// FFTW wisdom
|
||||||
|
|
||||||
|
QString directory = QDir::currentPath();
|
||||||
|
QDir currentDir = QDir(directory);
|
||||||
|
|
||||||
|
int err;
|
||||||
|
FILE* wisdomFile;
|
||||||
|
|
||||||
|
qDebug() << "Init::\tcurrent path: " << qPrintable(currentDir.absolutePath());
|
||||||
|
|
||||||
|
if (currentDir.exists("fftwf_wisdom")) {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfftwf_wisdom exists.";
|
||||||
|
|
||||||
|
err = fopen_s(&wisdomFile, "fftwf_wisdom", "r");
|
||||||
|
if (err == 0) {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfound fftwf_wisdom - this will be quick!";
|
||||||
|
splash->showMessage(
|
||||||
|
"\n " +
|
||||||
|
Settings::instance()->getTitleStr() + " " +
|
||||||
|
Settings::instance()->getVersionStr() +
|
||||||
|
QObject::tr(": found fftwf_wisdom - loading .."),
|
||||||
|
Qt::AlignTop | Qt::AlignLeft, Qt::yellow);
|
||||||
|
|
||||||
|
fftwf_import_wisdom_from_file(wisdomFile);
|
||||||
|
fclose(wisdomFile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfound fftwf_wisdom but could not open.";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tfftw_wisdom does not exist - planning FFT...";
|
||||||
|
|
||||||
|
QString msg = "First time FFT planning. Please be patient, this may take up to 10 min!";
|
||||||
|
mainWindow.showWarningDialog(msg);
|
||||||
|
|
||||||
|
int size = 64;
|
||||||
|
QString str = "planning FFT size %1 ...";
|
||||||
|
|
||||||
|
fftwf_complex* cpxbuf;
|
||||||
|
fftwf_plan plan_fwd;
|
||||||
|
fftwf_plan plan_rev;
|
||||||
|
|
||||||
|
while (size <= MAX_FFTSIZE) {
|
||||||
|
//while (size <= 2048) {
|
||||||
|
|
||||||
|
qDebug() << qPrintable(str.arg(size));
|
||||||
|
splash->showMessage(
|
||||||
|
"\n " +
|
||||||
|
Settings::instance()->getTitleStr() + " " +
|
||||||
|
Settings::instance()->getVersionStr() +
|
||||||
|
QObject::tr(": ") + str.arg(size),
|
||||||
|
Qt::AlignTop | Qt::AlignLeft, Qt::yellow);
|
||||||
|
|
||||||
|
cpxbuf = (fftwf_complex *) fftwf_malloc(sizeof(fftwf_complex) * size);
|
||||||
|
|
||||||
|
plan_fwd = fftwf_plan_dft_1d(size , cpxbuf, cpxbuf, FFTW_FORWARD, FFTW_PATIENT);
|
||||||
|
fftwf_execute(plan_fwd);
|
||||||
|
fftwf_destroy_plan(plan_fwd);
|
||||||
|
|
||||||
|
plan_rev = fftwf_plan_dft_1d(size, cpxbuf, cpxbuf, FFTW_BACKWARD, FFTW_PATIENT);
|
||||||
|
fftwf_execute(plan_rev);
|
||||||
|
fftwf_destroy_plan(plan_rev);
|
||||||
|
|
||||||
|
size *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fopen_s(&wisdomFile, "fftwf_wisdom", "w");
|
||||||
|
if (err == 0) {
|
||||||
|
|
||||||
|
qDebug() << "Init::\texporting fftwf_wisdom for quick measurement.";
|
||||||
|
fftwf_export_wisdom_to_file(wisdomFile);
|
||||||
|
qDebug() << "Init::\texported fftwf_wisdom.";
|
||||||
|
fclose(wisdomFile);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
qDebug() << "Init::\tcould not write fftwf_wisdom.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//app.processEvents();
|
//app.processEvents();
|
||||||
|
|
||||||
mainWindow.show();
|
mainWindow.show();
|
||||||
|
|||||||
Reference in New Issue
Block a user