Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colorEagleStdio
uhd_spectrum
提交
334517de
uhd_spectrum
项目概览
colorEagleStdio
/
uhd_spectrum
通知
18
Star
8
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
uhd_spectrum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
334517de
编写于
2月 24, 2021
作者:
M
manjaro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
界面改进
上级
17d75488
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
92 addition
and
81 deletion
+92
-81
main.cpp
main.cpp
+3
-0
qtgui/plotter.cpp
qtgui/plotter.cpp
+2
-2
specwidget.cpp
specwidget.cpp
+4
-1
uhd_device.cpp
uhd_device.cpp
+55
-52
uhd_device.h
uhd_device.h
+6
-4
uhd_device_win32.cpp
uhd_device_win32.cpp
+16
-17
uhd_device_win32.h
uhd_device_win32.h
+6
-5
未找到文件。
main.cpp
浏览文件 @
334517de
...
...
@@ -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
;
...
...
qtgui/plotter.cpp
浏览文件 @
334517de
...
...
@@ -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 -
16
0.0
#define FFT_MAX_DB 0.0
#define FFT_MIN_DB -
30
0.0
#define FFT_MAX_DB
3
0.0
// Colors of type QRgb in 0xAARRGGBB format (unsigned int)
#define PLOTTER_BGD_COLOR 0xFF1F1D1D
...
...
specwidget.cpp
浏览文件 @
334517de
...
...
@@ -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
();
}
...
...
uhd_device.cpp
浏览文件 @
334517de
...
...
@@ -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
);
...
...
uhd_device.h
浏览文件 @
334517de
...
...
@@ -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
);
...
...
uhd_device_win32.cpp
浏览文件 @
334517de
...
...
@@ -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
;
...
...
uhd_device_win32.h
浏览文件 @
334517de
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录