Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colorEagleStdio
taskbus
提交
2b29231b
taskbus
项目概览
colorEagleStdio
/
taskbus
通知
159
Star
11
Fork
3
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
taskbus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2b29231b
编写于
11月 06, 2022
作者:
丁劲犇
😸
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加控制面板的文档
上级
00c86a9b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
149 addition
and
4 deletion
+149
-4
modules/pannel/control_pannel/CMakeLists.txt
modules/pannel/control_pannel/CMakeLists.txt
+6
-0
modules/pannel/control_pannel/control_pannel.md
modules/pannel/control_pannel/control_pannel.md
+109
-0
modules/pannel/control_pannel/control_pannel.pro
modules/pannel/control_pannel/control_pannel.pro
+2
-0
taskbusplatform/gui/taskbusplatformfrm.cpp
taskbusplatform/gui/taskbusplatformfrm.cpp
+9
-0
tb_interface/tb_interface.h
tb_interface/tb_interface.h
+23
-4
未找到文件。
modules/pannel/control_pannel/CMakeLists.txt
浏览文件 @
2b29231b
...
...
@@ -49,3 +49,9 @@ set_target_properties(control_pannel PROPERTIES
)
qt_finalize_executable
(
control_pannel
)
# ====copy doc
add_custom_command
(
TARGET control_pannel
POST_BUILD
COMMAND echo Copy Handbook to EXE path
COMMAND
${
CMAKE_COMMAND
}
-E copy
${
CMAKE_CURRENT_SOURCE_DIR
}
/control_pannel.md
${
CMAKE_RUNTIME_OUTPUT_DIRECTORY
}
/control_pannel.md
)
modules/pannel/control_pannel/control_pannel.md
0 → 100644
浏览文件 @
2b29231b
# 控制面板模块
首次发布:2020-06
最新发布:2022-11
作者:彩鹰工作室
----
控制面板模块用于统一管理各个进程开放的可配置参数表。典型的需求是在模块运行时,动态的修改/显示某个参数。如在调频收音机启动时,动态改变频率、增益。
这个模块的原理参考技术文章:
[
Qt lambda槽在跨进程功能发现与参数同步中的应用
](
https://goldenhawking.blog.csdn.net/article/details/124426795
)
# 1.输入输出专题
本模块没有输入输出专题。
# 2.工作原理
要做到跨进程参数的实时控制,需要经过如下几个步骤。
1.
参数发布:受控模块要广播自身可被配置的参数。
2.
参数更新,包含两个部分。
1.
参数显示:控制面板模块收到广播,创建控件并显示。
2.
参数配置:控制面板模块中的控件被用户点击,取值发生改变。此时,会广播模块修改命令。
## 2.1 参数发布
参数发布使用taskBus的控制专题(0xffffffffu)进行全局广播。控制专题是一种特殊的专题,能够实现模块之间的控制消息传递。传递的消息格式是key=value这样的样式,用分号分割。
一个模块要告诉所有部位,自己在运行时,有哪些可操作的变量。同时,要广播的还有变量的类型、范围,取值等等。这个指令可以看做功能声明,指令类似:
```
txt
source=2;
destin=0;
function=handle_annouce;
handle=rx_freq;
label=接收频率(Hz);
type=double;
range=0:6000000000;
step=100000;
decimal=0;
value=70000000;
```
或者:
```
txt
source=2;
destin=0;
function=handle_annouce;
handle=rx_antenna;
label=接收天线;
type=string;
range=RX,TX/RX;
value=RX2;
```
当模块启动时,向所有人广播这个功能声明,以便发现相应的功能。
上述字符串使用专题0xffffffffu直接写入 stdout,即可完成声明。当然,如果您使用的是C语言,在 tb_interface.h里,已经有了方便的函数直接使用:
```
c
/*!
* \brief annouce_handle 通过广播,公告某个参数可被全局配置
* \param source 本公告的来源。可以自定义,只要确保与配置指令的一致性即可。
* \param destin 一般填“0”,表示向所有模块实例广播
* \param handle 参数的名称(句柄名称),如频率、增益
* \param value 当前取值
* \param label 显示在界面上的友好信息。如果不写,handle会被显示
* \param type 类型,可以为空,则表示字符串。
* \param range 取值范围:用于指定spinbox的范围
* \param step 步进:用于指定spinbox的步进
* \param decimal 小数位数。
* \param pMtx 用于多线程stdout时的互斥量
*/
inline
void
annouce_handle
(
const
std
::
string
&
source
,
const
std
::
string
&
destin
,
const
std
::
string
&
handle
,
const
std
::
string
&
value
,
const
std
::
string
&
label
=
""
,
const
std
::
string
&
type
=
""
,
const
std
::
string
&
range
=
""
,
const
std
::
string
&
step
=
""
,
const
std
::
string
&
decimal
=
""
,
std
::
mutex
*
pMtx
=
nullptr
)...
```
## 2.2 参数更新
一旦要进行参数同步,则由修改方发起,发给被修改方。这种修改可以是双向的,即参数使用进程如果发现参数变更,可以发起同步给界面控制台。界面控制台接到修改请求,发给参数使用进程。指令:
```
txt
source=7;
destin=2;
function=handle_set;
handle=rx_freq;
value=71200000;
```
当然,使用者要保证destin的正确性。
modules/pannel/control_pannel/control_pannel.pro
浏览文件 @
2b29231b
...
...
@@ -36,3 +36,5 @@ DISTFILES += \
RESOURCES
+=
\
control_pannel
.
qrc
QMAKE_POST_LINK
+=
$$
{
QMAKE_COPY
}
$$
PWD
/
control_pannel
.
md
$$
DESTDIR
/
control_pannel
.
md
taskbusplatform/gui/taskbusplatformfrm.cpp
浏览文件 @
2b29231b
...
...
@@ -262,6 +262,15 @@ void taskBusPlatformFrm::on_mdiArea_subWindowActivated(QMdiSubWindow *arg1)
ui
->
dockWidget_props
->
setEnabled
(
!
dv
->
is_running
());
dv
->
setEnabled
(
!
dv
->
is_running
());
}
else
{
ui
->
action_Start_project
->
setEnabled
(
false
);
ui
->
action_stop_project
->
setEnabled
(
false
);
ui
->
action_Save_Project
->
setEnabled
(
false
);
ui
->
dockWidget_props
->
setEnabled
(
false
);
ui
->
treeView_props
->
setModel
(
0
);
return
;
}
}
void
taskBusPlatformFrm
::
on_comboBox_class_currentIndexChanged
(
int
index
)
...
...
tb_interface/tb_interface.h
浏览文件 @
2b29231b
...
...
@@ -380,7 +380,19 @@ namespace TASKBUS{
v
.
push_back
(
0
);
return
v
;
}
//播告功能
/*!
* \brief annouce_handle 通过广播,公告某个参数可被全局配置
* \param source 本公告的来源。可以自定义,只要确保与配置指令的一致性即可。
* \param destin 一般填“0”,表示向所有模块实例广播
* \param handle 参数的名称(句柄名称),如频率、增益
* \param value 当前取值
* \param label 显示在界面上的友好信息。如果不写,handle会被显示
* \param type 类型,可以为空,则表示字符串。
* \param range 取值范围:用于指定spinbox的范围
* \param step 步进:用于指定spinbox的步进
* \param decimal 小数位数。
* \param pMtx 用于多线程stdout时的互斥量
*/
inline
void
annouce_handle
(
const
std
::
string
&
source
,
const
std
::
string
&
destin
,
...
...
@@ -408,10 +420,17 @@ namespace TASKBUS{
std
::
vector
<
unsigned
char
>
v
=
map_to_ctrlpackage
(
mp
);
push_subject
(
TB_SUBJECT_CMD
,
0
,
v
.
size
(),
v
.
data
(),
pMtx
);
}
//播告功能
/*!
* \brief set_handle 设置刷新功能参数的值
* \param source
* \param destin 如果destin是0,则是用于刷新界面显示。如果destin是annouce_handle的source,则是配置参数。
* \param handle 参数的名称(句柄名称),如频率、增益
* \param value 当前取值
* \param pMtx 用于多线程stdout时的互斥量
*/
inline
void
set_handle
(
const
std
::
string
&
source
,
const
std
::
string
&
destin
,
const
std
::
string
&
source
,
//发起参数刷新的来源。注意要和annouce_handle的source一致
const
std
::
string
&
destin
,
//配置目的。这个目的
const
std
::
string
&
handle
,
const
std
::
string
&
value
,
std
::
mutex
*
pMtx
=
nullptr
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录