YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
qosconfigdialog.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: GPL-3.0-or-later
4 */
5
6#include "qosconfigdialog.h"
7#include "ui_qosconfigdialog.h"
8#include <qmessagebox.h>
9
11 QDialog(parent),
12 ui(new Ui::QosConfigDialog)
13{
14 QosConfigDialog::edge = edge;
15 ui->setupUi(this);
16 ui->treeWidgetProperty->setStyleSheet("QTreeWidget::item { border-right: 1px dotted grey;}");
17 ui->treeWidgetProperty->setSelectionMode(QAbstractItemView::NoSelection);
18 connect(ui->applyButton, SIGNAL(clicked()), this, SLOT(apply()));
19 connect(ui->resetButton, SIGNAL(clicked()), this, SLOT(reset()));
20 createGui();
21}
22
23
25{
26 delete ui;
27}
28
29void QosConfigDialog::createGui() {
30 QTreeWidgetItemIterator it(ui->treeWidgetProperty);
31 // source packet priority
32 srcPacketProCombo = new QComboBox(this);
33 srcPacketProCombo->addItems(QStringList() << "LOW" << "NORMAL" << "HIGH" << "CRITIC");
35 if (edge) {
36 level = (yarp::os::QosStyle::PacketPriorityLevel)edge->property.find("FromPacketPriority").asInt32();
37 }
38 switch(level) {
40 srcPacketProCombo->setCurrentIndex(1);
41 break;
43 srcPacketProCombo->setCurrentIndex(0);
44 break;
46 srcPacketProCombo->setCurrentIndex(2);
47 break;
49 srcPacketProCombo->setCurrentIndex(3);
50 break;
51 default:
52 srcPacketProCombo->setCurrentIndex(1);
53 }
54 ui->treeWidgetProperty->setItemWidget(*it++, 1, srcPacketProCombo);
55
56 // source thread priority and policy
57 srcThreadPro = new QLineEdit;
58 srcThreadPro->setValidator( new QIntValidator(-100, 100, this) );
59 if (edge) {
60 srcThreadPro->setText(QString::number(edge->property.find("FromThreadPriority").asInt32()));
61 } else {
62 srcThreadPro->setText(QString::number(0));
63 }
64 ui->treeWidgetProperty->setItemWidget(*it++, 1, srcThreadPro);
65
66 srcThreadPolicy = new QLineEdit;
67 srcThreadPolicy->setValidator( new QIntValidator(-100, 100, this) );
68 if (edge) {
69 srcThreadPolicy->setText(QString::number(edge->property.find("FromThreadPolicy").asInt32()));
70 } else {
71 srcThreadPolicy->setText(QString::number(0));
72 }
73 ui->treeWidgetProperty->setItemWidget(*it++, 1, srcThreadPolicy);
74
75
76 // destination packet priority
77 dstPacketProCombo = new QComboBox(this);
78 dstPacketProCombo->addItems(QStringList() << "LOW" << "NORMAL" << "HIGH" << "CRITIC");
79 if (edge) {
80 level = (yarp::os::QosStyle::PacketPriorityLevel)edge->property.find("ToPacketPriority").asInt32();
81 } else {
83 }
84
85 switch(level) {
87 dstPacketProCombo->setCurrentIndex(1);
88 break;
90 dstPacketProCombo->setCurrentIndex(0);
91 break;
93 dstPacketProCombo->setCurrentIndex(2);
94 break;
96 dstPacketProCombo->setCurrentIndex(3);
97 break;
98 default:
99 dstPacketProCombo->setCurrentIndex(1);
100 }
101 ui->treeWidgetProperty->setItemWidget(*it++, 1, dstPacketProCombo);
102
103 // destination thread priority and policy
104 dstThreadPro = new QLineEdit;
105 dstThreadPro->setValidator( new QIntValidator(-100, 100, this) );
106 if (edge) {
107 dstThreadPro->setText(QString::number(edge->property.find("ToThreadPriority").asInt32()));
108 } else {
109 dstThreadPro->setText(QString::number(0));
110 }
111 ui->treeWidgetProperty->setItemWidget(*it++, 1, dstThreadPro);
112
113 dstThreadPolicy = new QLineEdit;
114 dstThreadPolicy->setValidator( new QIntValidator(-100, 100, this) );
115 if (edge) {
116 dstThreadPolicy->setText(QString::number(edge->property.find("ToThreadPolicy").asInt32()));
117 } else {
118 dstThreadPolicy->setText(QString::number(0));
119 }
120 ui->treeWidgetProperty->setItemWidget(*it++, 1, dstThreadPolicy);
121}
122
123void QosConfigDialog::reset() {
124 srcPacketProCombo->setCurrentIndex(1);
125 srcThreadPro->setText("0");
126 srcThreadPolicy->setText("0");
127 dstPacketProCombo->setCurrentIndex(1);
128 dstThreadPro->setText("0");
129 dstThreadPolicy->setText("0");
130}
131
134 int itemLevel = srcPacketProCombo->currentIndex();
135 switch(itemLevel) {
136 case 0:
138 break;
139 case 1:
141 break;
142 case 2:
144 break;
145 case 3:
147 break;
148 default:
150 }
151 srcStyle.setPacketPriorityByLevel(level);
152 srcStyle.setThreadPriority(srcThreadPro->text().toInt());
153 srcStyle.setThreadPolicy(srcThreadPolicy->text().toInt());
154
155 itemLevel = dstPacketProCombo->currentIndex();
156 switch(itemLevel) {
157 case 0:
159 break;
160 case 1:
162 break;
163 case 2:
165 break;
166 case 3:
168 break;
169 default:
171 }
172 dstStyle.setPacketPriorityByLevel(level);
173 dstStyle.setThreadPriority(dstThreadPro->text().toInt());
174 dstStyle.setThreadPolicy(dstThreadPolicy->text().toInt());
175 return true;
176}
177
178void QosConfigDialog::apply() {
179 if(!edge) {
180 close();
181 setResult(QDialog::Accepted);
182 return;
183 }
184 yarp::os::QosStyle srcStyle, dstStyle;
185 getUserQosStyles(srcStyle, dstStyle);
186
187 std::string from = edge->first().property.find("name").asString();
188 std::string to = edge->second().property.find("name").asString();
189
190 if(yarp::os::Network::setConnectionQos(from, to, srcStyle, dstStyle)) {
191 close();
192 return;
193 }
194
195 // something went wrong
196 QMessageBox messageBox;
197 messageBox.critical(nullptr,"Error","An error has occurred while applying the QoS configuration! \n Please check the QoS parameters carefully.");
198 messageBox.setFixedSize(500,200);
199}
int SIGNAL(int pid, int signum)
QosConfigDialog(yarp::profiler::graph::Edge *edge, QWidget *parent=0)
bool getUserQosStyles(yarp::os::QosStyle &srcStyle, yarp::os::QosStyle &dstStyle)
static bool setConnectionQos(const std::string &src, const std::string &dest, const QosStyle &srcStyle, const QosStyle &destStyle, bool quiet=true)
Adjust the Qos preferences of a connection.
Definition Network.cpp:1072
Value & find(const std::string &key) const override
Gets a value corresponding to a given keyword.
Preferences for the port's Quality of Service.
Definition QosStyle.h:23
void setThreadPriority(int priority)
sets the communication thread priority level
Definition QosStyle.h:127
void setThreadPolicy(int policy)
sets the communication thread scheduling policy
Definition QosStyle.h:137
PacketPriorityLevel
The PacketPriorityLevel defines the packets quality of service (priority) levels.
Definition QosStyle.h:30
void setPacketPriorityByLevel(PacketPriorityLevel level)
sets the packet priority given as PacketPriorityLevel
Definition QosStyle.cpp:30
virtual std::int32_t asInt32() const
Get 32-bit integer value.
Definition Value.cpp:204
virtual std::string asString() const
Get string value.
Definition Value.cpp:234
The yarp::profiler::graph::Edge class.
Definition Graph.h:45
const yarp::profiler::graph::Vertex & second() const
Definition Graph.cpp:44
yarp::os::Property property
Definition Graph.h:61
const yarp::profiler::graph::Vertex & first() const
Definition Graph.cpp:40
yarp::os::Property property
Definition Graph.h:89
Definition aboutdlg.h:11