提交 334517de 编写于 作者: M manjaro

界面改进

上级 17d75488
......@@ -9,7 +9,10 @@ int main(int argc, char *argv[])
{
#ifdef Q_OS_LINUX
nice(0);
#else
QThread::currentThread()->setPriority(QThread::HighestPriority);
#endif
QApplication a(argc, argv);
//Install translators
QTranslator qtTranslator;
......
......@@ -72,8 +72,8 @@ int gettimeofday(struct timeval * tp, struct timezone * tzp)
#define CUR_CUT_DELTA 5 //cursor capture delta in pixels
#define FFT_MIN_DB -160.0
#define FFT_MAX_DB 0.0
#define FFT_MIN_DB -300.0
#define FFT_MAX_DB 30.0
// Colors of type QRgb in 0xAARRGGBB format (unsigned int)
#define PLOTTER_BGD_COLOR 0xFF1F1D1D
......
......@@ -699,7 +699,10 @@ void specWidget::on_comboBox_fftSize_activated(int index)
if (m_nFFTSize<128)
m_nFFTSize = 128;
if (usrp)
resetProgram();
{
freeFFTW();
initFFTW();
}
saveSettings();
}
......
......@@ -38,6 +38,7 @@ uhd_device::uhd_device()
:stop_signal_called(false)
,m_rx_streaming(false)
,m_rx_points(0)
,m_initThread (new uhd_io_thread(0))
{
m_data_iq_rx = new short [m_rx_bufsz+1024*1024][2]{{0,0}};
m_data_iq_tx = new short [m_tx_bufsz+1024*1024][2]{{0,0}};
......@@ -48,6 +49,7 @@ uhd_device::uhd_device(const std::string &args)
,m_rx_streaming(false)
,m_dev_args (args)
,m_rx_points(0)
,m_initThread (new uhd_io_thread(0))
{
m_data_iq_rx = new short [m_rx_bufsz+1024*1024][2]{{0,0}};
......@@ -56,6 +58,8 @@ uhd_device::uhd_device(const std::string &args)
uhd_device::~uhd_device()
{
stop_signal_called = true;
m_initThread->terminate();
m_initThread->deleteLater();
while (m_rx_streaming)
{
QThread::msleep(100);
......@@ -80,23 +84,22 @@ bool uhd_device::open_device()
{
string ref = "internal";
std::atomic<bool> finished(false);
std::thread thr([&]()->void{
try{
usrp = multi_usrp::make(m_dev_args);
}
catch (...)
{
fprintf (stderr,"Error in USRP init.\n");
}
finished = true;
});
while (!finished)
m_initThread->setRunner([&]()->void{
try{
usrp = multi_usrp::make(m_dev_args);
}
catch (...)
{
fprintf (stderr,"Error in USRP init.\n");
}
finished = true;
});
m_initThread->start();
while (!m_initThread->wait(100))
{
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
QThread::msleep(20);
}
thr.join();
......@@ -151,38 +154,38 @@ void uhd_device::run_RxIO()
rx_stream->issue_stream_cmd(stream_cmd);
while (!stop_signal_called)
{
try {
while (!stop_signal_called)
{
const size_t off = m_rx_points % m_rx_bufsz;
size_t real_size = rx_stream->recv((void *)(m_data_iq_rx[off]),m_rxblock_size,md_rx,10,false);
m_rx_points += real_size;
const size_t new_begin = m_rx_points % m_rx_bufsz;
if (new_begin < m_rxblock_size)
memcpy(m_data_iq_rx, &m_data_iq_rx[m_rx_bufsz], sizeof(short)*2*new_begin);
//md_rx可以读取时戳
//m_buffer_tmFrag[off] = md_rx.time_spec.get_frac_secs();
//m_buffer_tmSec[off] = md_rx.time_spec.get_full_secs();
if (md_rx.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT)
{
fputs("Tout",stderr);
rx_stream->issue_stream_cmd(stream_cmd);
}
else if (md_rx.error_code == uhd::rx_metadata_t::ERROR_CODE_OVERFLOW)
{
fputs("O",stderr);
rx_stream->issue_stream_cmd(stream_cmd);
}
else if (md_rx.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE)
try {
while (!stop_signal_called)
{
cerr << "Receiver error: "<< md_rx.strerror() << endl ;
rx_stream->issue_stream_cmd(stream_cmd);
const size_t off = m_rx_points % m_rx_bufsz;
size_t real_size = rx_stream->recv((void *)(m_data_iq_rx[off]),m_rxblock_size,md_rx,10,false);
m_rx_points += real_size;
const size_t new_begin = m_rx_points % m_rx_bufsz;
if (new_begin < m_rxblock_size)
memcpy(m_data_iq_rx, &m_data_iq_rx[m_rx_bufsz], sizeof(short)*2*new_begin);
//md_rx可以读取时戳
//m_buffer_tmFrag[off] = md_rx.time_spec.get_frac_secs();
//m_buffer_tmSec[off] = md_rx.time_spec.get_full_secs();
if (md_rx.error_code == uhd::rx_metadata_t::ERROR_CODE_TIMEOUT)
{
fputs("Tout",stderr);
rx_stream->issue_stream_cmd(stream_cmd);
}
else if (md_rx.error_code == uhd::rx_metadata_t::ERROR_CODE_OVERFLOW)
{
fputs("O",stderr);
rx_stream->issue_stream_cmd(stream_cmd);
}
else if (md_rx.error_code != uhd::rx_metadata_t::ERROR_CODE_NONE)
{
cerr << "Receiver error: "<< md_rx.strerror() << endl ;
rx_stream->issue_stream_cmd(stream_cmd);
}
}
}
} catch (...) {
//stop_signal_called = true;
}
} catch (...) {
//stop_signal_called = true;
}
}
stream_cmd.stream_now = false;
rx_stream->issue_stream_cmd(stream_cmd);
......@@ -268,13 +271,13 @@ void uhd_device::run_TxIO()
memset (m_data_iq_tx,0,m_tx_bufsz*sizeof(m_data_iq_tx[0]));
//发射线程
auto thcall_tx = [&]()->void{
uhd::tx_metadata_t md_tx;
m_tx_streaming = true;
md_tx.has_time_spec = false;
md_tx.start_of_burst = false;
md_tx.end_of_burst = false;
while (!stop_signal_called)
{
uhd::tx_metadata_t md_tx;
m_tx_streaming = true;
md_tx.has_time_spec = false;
md_tx.start_of_burst = false;
md_tx.end_of_burst = false;
while (!stop_signal_called)
{
try {
while (!stop_signal_called)
{
......@@ -291,8 +294,8 @@ void uhd_device::run_TxIO()
//stop_signal_called = true;
}
QThread::msleep(10);
}
m_tx_streaming = false;
}
m_tx_streaming = false;
};
//启动线程
uhd_io_thread * tx_thread = new uhd_io_thread(thcall_tx,0);
......
......@@ -14,6 +14,7 @@
#include <atomic>
#include <QThread>
#include <string>
#include <QAtomicInteger>
class uhd_io_thread: public QThread{
Q_OBJECT
public:
......@@ -40,6 +41,7 @@ public:
void run_RxIO();
void run_TxIO();
protected:
uhd_io_thread * m_initThread;
std::atomic<bool> stop_signal_called;
std::atomic<bool> m_rx_streaming;
std::atomic<bool> m_tx_streaming;
......@@ -53,11 +55,11 @@ protected:
//初始化队列
short (*m_data_iq_rx)[2] = nullptr;
short (*m_data_iq_tx)[2] = nullptr;
size_t m_rx_bufsz = 1024*1024*4;
size_t m_tx_bufsz = 1024*1024*4;
size_t m_rx_bufsz = 1024*1024;
size_t m_tx_bufsz = 1024*1024;
//收发计数
unsigned long long m_rx_points = 0;
unsigned long long m_tx_points = 0;
QAtomicInteger<unsigned long long> m_rx_points = 0;
QAtomicInteger<unsigned long long> m_tx_points = 0;
public:
quint64 set_rx_freq(const quint64 freq_in_hz);
double set_rx_rate(const double sprate);
......
......@@ -44,6 +44,7 @@ uhd_device::uhd_device()
:stop_signal_called(false)
,m_rx_streaming(false)
,m_rx_points(0)
,m_initThread (new uhd_io_thread(0))
{
m_data_iq_rx = new short [m_rx_bufsz+1024*1024][2]{{0,0}};
m_data_iq_tx = new short [m_tx_bufsz+1024*1024][2]{{0,0}};
......@@ -54,7 +55,7 @@ uhd_device::uhd_device(const std::string &args)
,m_rx_streaming(false)
,m_dev_args (args)
,m_rx_points(0)
,m_initThread (new uhd_io_thread(0))
{
m_data_iq_rx = new short [m_rx_bufsz+1024*1024][2]{{0,0}};
m_data_iq_tx = new short [m_tx_bufsz+1024*1024][2]{{0,0}};
......@@ -62,6 +63,8 @@ uhd_device::uhd_device(const std::string &args)
uhd_device::~uhd_device()
{
stop_signal_called = true;
m_initThread->terminate();
m_initThread->deleteLater();
while (m_rx_streaming)
{
QThread::msleep(100);
......@@ -86,25 +89,21 @@ std::string uhd_device::devArgs() const
bool uhd_device::open_device()
{
string ref = "internal";
std::atomic<bool> finished(false);
std::thread thr([&]()->void{
try{
UHD_DO(uhd_usrp_make(&usrp, m_dev_args.c_str()));
}
catch(std::string er)
{
fputs(er.c_str(),stderr);
}
finished = true;
});
while (!finished)
m_initThread->setRunner([&]()->void{
try{
UHD_DO(uhd_usrp_make(&usrp, m_dev_args.c_str()));
}
catch(std::string er)
{
fputs(er.c_str(),stderr);
}
});
m_initThread->start();
while (!m_initThread->wait(100))
{
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
QThread::msleep(20);
}
thr.join();
if (!usrp)
return false;
......
......@@ -5,7 +5,7 @@
#include <atomic>
#include <QThread>
#include <uhd.h>
#include <QAtomicInteger>
class uhd_io_thread: public QThread{
Q_OBJECT
public:
......@@ -44,14 +44,15 @@ protected:
int m_rx_channel = 0;
int m_tx_channel = 0;
protected:
uhd_io_thread * m_initThread;
//初始化队列
short (*m_data_iq_rx)[2] = nullptr;
size_t m_rx_bufsz = 1024*1024*8;
size_t m_rx_bufsz = 1024*1024;
short (*m_data_iq_tx)[2] = nullptr;
size_t m_tx_bufsz = 1024*1024*8;
size_t m_tx_bufsz = 1024*1024;
//收发计数
unsigned long long m_rx_points = 0;
unsigned long long m_tx_points = 0;
QAtomicInteger<unsigned long long> m_rx_points = 0;
QAtomicInteger<unsigned long long> m_tx_points = 0;
public:
quint64 set_rx_freq(const quint64 freq_in_hz);
double set_rx_rate(const double sprate);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册