PC Application: partial firmware update dialog

This commit is contained in:
Jan Käberich 2020-08-30 22:03:41 +02:00
parent 8c8749accd
commit 07ba714f1f
134 changed files with 13954 additions and 7 deletions

View file

@ -0,0 +1,60 @@
#include "eseries.h"
#include <math.h>
#include <vector>
static const std::vector<double> E6 = {
1.0, 1.5, 2.2, 3.3, 4.7, 6.8
};
static const std::vector<double> E12 = {
1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2
};
static const std::vector<double> E24 = {
1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
};
static const std::vector<double> E48 = {
1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69, 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01, 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36, 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53
};
static const std::vector<double> E96 = {
1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76
};
double ESeries::ToESeries(double value, ESeries::Series s, ESeries::Type t)
{
if(s == Series::Ideal) {
// nothing to do
return value;
}
// bring value into [1.0, 10.0) interval
int shift10 = floor(log10(value));
value *= pow(10.0, -shift10);
std::vector<double> series;
switch(s) {
case Series::E96: series = E96; break;
case Series::E48: series = E48; break;
case Series::E24: series = E24; break;
case Series::E12: series = E12; break;
case Series::E6: series = E6; break;
case Series::Ideal: /* already handled */ break;
}
unsigned int index = 1;
while(index < 96 && series[index] <= value) {
index++;
}
auto lower = series[index - 1];
double higher = 10.0;
if(index < series.size()) {
higher = series[index];
}
double approximation;
switch(t) {
case Type::Lower: approximation = lower; break;
case Type::Higher: approximation = higher; break;
case Type::BestMatch:
if(fabs(value - lower) < fabs(value - higher)) {
approximation = lower;
} else {
approximation = higher;
}
}
return approximation * pow(10, shift10);
}

View file

@ -0,0 +1,25 @@
#ifndef ESERIES_H
#define ESERIES_H
class ESeries
{
public:
enum class Series {
Ideal = 0,
E6 = 1,
E12 = 2,
E24 = 3,
E48 = 4,
E96 = 5,
};
enum class Type {
BestMatch = 0,
Lower = 1,
Higher = 2,
};
static double ToESeries(double value, Series s, Type t = Type::BestMatch);
};
#endif // ESERIES_H

View file

@ -0,0 +1,275 @@
#include "impedancematchdialog.h"
#include "ui_impedancematchdialog.h"
#include "Tools/eseries.h"
using namespace std;
constexpr double ImpedanceMatchDialog::Z0;
ImpedanceMatchDialog::ImpedanceMatchDialog(TraceMarkerModel &model, TraceMarker *marker, QWidget *parent) :
QDialog(parent),
ui(new Ui::ImpedanceMatchDialog)
{
ui->setupUi(this);
// set SI units and prefixes
ui->zReal->setUnit("Ohm");
ui->zImag->setUnit("Ohm");
ui->zFreq->setUnit("Hz");
ui->zFreq->setPrefixes(" kMG");
ui->mImag->setUnit("Ohm");
ui->mReal->setUnit("Ohm");
ui->mLoss->setUnit("db");
ui->lValue->setUnit("H");
ui->lValue->setPrefixes("pnum ");
ui->cValue->setUnit("F");
ui->cValue->setPrefixes("pnum ");
connect(ui->zFreq, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->zImag, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->zReal, &SIUnitEdit::valueChanged, this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->zGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->cMatchType, qOverload<int>(&QComboBox::currentIndexChanged), this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->lGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->cGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
connect(ui->zGroup, qOverload<int>(&QButtonGroup::buttonClicked), this, &ImpedanceMatchDialog::calculateMatch);
// populate marker options
auto markers = model.getMarker();
for(auto m : markers) {
if(!m->trace()->isReflection()) {
// matching only possible for reflections
continue;
}
ui->cSource->addItem("From Marker "+QString::number(m->getNumber()), QVariant::fromValue<TraceMarker*>(m));
if(m == marker) {
// select the last index, e.i. the just created marker
ui->cSource->setCurrentIndex(ui->cSource->count()-1);
}
}
}
ImpedanceMatchDialog::~ImpedanceMatchDialog()
{
delete ui;
}
void ImpedanceMatchDialog::on_cSource_currentIndexChanged(int index)
{
ui->rbSeries->setEnabled(index == 0);
ui->rbParallel->setEnabled(index == 0);
ui->zReal->setEnabled(index == 0);
ui->zImag->setEnabled(index == 0);
ui->zFreq->setEnabled(index == 0);
if(index > 0) {
auto m = qvariant_cast<TraceMarker*>(ui->cSource->itemData(index));
ui->rbSeries->setChecked(true);
auto data = m->getData();
auto reflection = Z0 * (1.0 + data) / (1.0 - data);
ui->zReal->setValue(reflection.real());
ui->zImag->setValue(reflection.imag());
ui->zFreq->setValue(m->getFrequency());
}
}
void ImpedanceMatchDialog::calculateMatch()
{
try {
double freq = ui->zFreq->value();
complex<double> Z;
if(ui->rbSeries->isChecked()) {
Z.real(ui->zReal->value());
Z.imag(ui->zImag->value());
} else {
auto real = complex<double>(ui->zReal->value(), 0.0);
auto imag = complex<double>(0.0, ui->zImag->value());
// calculate parallel impedance
Z = real * imag / (real + imag);
}
bool seriesC = ui->cMatchType->currentIndex() == 0 ? true : false;
// equations taken from http://www.ittc.ku.edu/~jstiles/723/handouts/section_5_1_Matching_with_Lumped_Elements_package.pdf
double B, X;
if(Z.real() > Z0) {
B = sqrt(Z.real()/Z0)*sqrt(norm(Z)-Z0*Z.real());
if (seriesC) {
B = -B;
}
B += Z.imag();
B /= norm(Z);
X = 1/B + Z.imag()*Z0/Z.real()-Z0/(B*Z.real());
} else {
B = sqrt((Z0-Z.real())/Z.real())/Z0;
X = sqrt(Z.real()*(Z0-Z.real()));
if (seriesC) {
B = -B;
X = -X;
}
X -= Z.imag();
}
// convert X and B to inductor and capacitor
bool twoCs = false;
bool twoLs = false;
double L, C, C2, L2;
if(X >= 0) {
L = X/(2*M_PI*freq);
if(B > 0) {
C = B/(2*M_PI*freq);
} else {
L2 = X/(2*M_PI*freq);
L = -1/(B*2*M_PI*freq);
twoLs = true;
}
} else {
C = -1/(X*2*M_PI*freq);
if(B < 0) {
L = -1/(B*2*M_PI*freq);
} else {
C2 = B/(2*M_PI*freq);
twoCs = true;
}
}
ESeries::Series Lseries;
if(ui->lE6->isChecked()) {
Lseries = ESeries::Series::E6;
} else if(ui->lE12->isChecked()) {
Lseries = ESeries::Series::E12;
} else if(ui->lE24->isChecked()) {
Lseries = ESeries::Series::E24;
} else if(ui->lE48->isChecked()) {
Lseries = ESeries::Series::E48;
} else if(ui->lE96->isChecked()) {
Lseries = ESeries::Series::E96;
} else {
Lseries = ESeries::Series::Ideal;
}
ESeries::Series Cseries;
if(ui->cE6->isChecked()) {
Cseries = ESeries::Series::E6;
} else if(ui->cE12->isChecked()) {
Cseries = ESeries::Series::E12;
} else if(ui->cE24->isChecked()) {
Cseries = ESeries::Series::E24;
} else if(ui->cE48->isChecked()) {
Cseries = ESeries::Series::E48;
} else if(ui->cE96->isChecked()) {
Cseries = ESeries::Series::E96;
} else {
Cseries = ESeries::Series::Ideal;
}
L = ESeries::ToESeries(L, Lseries);
C = ESeries::ToESeries(C, Cseries);
L2 = ESeries::ToESeries(L2, Lseries);
C2 = ESeries::ToESeries(C2, Cseries);
if(twoCs) {
for(auto b : ui->lGroup->buttons()) {
b->setEnabled(false);
}
for(auto b : ui->cGroup->buttons()) {
b->setEnabled(true);
}
ui->lL->setText("C1:");
ui->lC->setText("C2:");
ui->lValue->setUnit("F");
ui->cValue->setUnit("F");
ui->lValue->setValue(C2);
ui->cValue->setValue(C);
} else if(twoLs) {
for(auto b : ui->cGroup->buttons()) {
b->setEnabled(false);
}
for(auto b : ui->lGroup->buttons()) {
b->setEnabled(true);
}
ui->lC->setText("L2:");
ui->lL->setText("L1:");
ui->cValue->setUnit("H");
ui->lValue->setUnit("H");
ui->cValue->setValue(L2);
ui->lValue->setValue(L);
} else {
for(auto b : ui->cGroup->buttons()) {
b->setEnabled(true);
}
for(auto b : ui->lGroup->buttons()) {
b->setEnabled(true);
}
ui->lC->setText("C:");
ui->lL->setText("L:");
ui->lValue->setUnit("H");
ui->cValue->setUnit("F");
ui->lValue->setValue(L);
ui->cValue->setValue(C);
}
// calculate actual matched impedance
complex<double> Zmatched;
complex<double> Zp, Zs;
if(seriesC) {
if(twoLs) {
Zs = complex<double>(0, 2*M_PI*freq*L2);
Zp = complex<double>(0, 2*M_PI*freq*L);
} else if(twoCs) {
Zs = complex<double>(0, -1/(2*M_PI*freq*C2));
Zp = complex<double>(0, -1/(2*M_PI*freq*C));
} else {
Zs = complex<double>(0, -1/(2*M_PI*freq*C));
Zp = complex<double>(0, 2*M_PI*freq*L);
}
} else {
if(twoCs) {
Zs = complex<double>(0, -1/(2*M_PI*freq*C));
Zp = complex<double>(0, -1/(2*M_PI*freq*C2));
} else if(twoLs){
Zs = complex<double>(0, 2*M_PI*freq*L);
Zp = complex<double>(0, 2*M_PI*freq*L2);
} else {
Zs = complex<double>(0, 2*M_PI*freq*L);
Zp = complex<double>(0, -1/(2*M_PI*freq*C));
}
}
if(Z.real() > Z0) {
Zmatched = Z*Zp/(Z+Zp) + Zs;
} else {
Zmatched = Zp*(Z+Zs)/(Zp+Z+Zs);
}
ui->mReal->setValue(Zmatched.real());
ui->mImag->setValue(Zmatched.imag());
double reflection = abs((Zmatched-Z0)/(Zmatched+Z0));
auto loss = 20.0*log10(reflection);
ui->mLoss->setValue(loss);
// set correct image
if(Z.real() > Z0) {
if(X >= 0 && B >= 0) {
ui->Image->setPixmap(QPixmap(":/icons/sLpC_small.png"));
} else if(X < 0 && B < 0) {
ui->Image->setPixmap(QPixmap(":/icons/sCpL_small.png"));
} else if(X >= 0 && B < 0) {
ui->Image->setPixmap(QPixmap(":/icons/sCpC_small.png")); // TODO check
} else {
ui->Image->setPixmap(QPixmap(":/icons/sLpL_small.png")); // TODO check
}
} else {
if(X >= 0 && B >= 0) {
ui->Image->setPixmap(QPixmap(":/icons/pCsL_small.png"));
} else if(X < 0 && B < 0) {
ui->Image->setPixmap(QPixmap(":/icons/pLsC_small.png"));
} else if(X >= 0 && B < 0) {
ui->Image->setPixmap(QPixmap(":/icons/pLsL_small.png"));
} else {
ui->Image->setPixmap(QPixmap(":/icons/pCsC_small.png"));
}
}
} catch (exception e){
// something went wrong, probably caused by (intermediate) invalid input, such as f=0Hz
ui->lValue->setValue(nan(""));
ui->cValue->setValue(nan(""));
ui->mReal->setValue(nan(""));
ui->mImag->setValue(nan(""));
ui->mLoss->setValue(nan(""));
}
}

View file

@ -0,0 +1,28 @@
#ifndef IMPEDANCEMATCHDIALOG_H
#define IMPEDANCEMATCHDIALOG_H
#include <QDialog>
#include "Traces/tracemarkermodel.h"
namespace Ui {
class ImpedanceMatchDialog;
}
class ImpedanceMatchDialog : public QDialog
{
Q_OBJECT
public:
explicit ImpedanceMatchDialog(TraceMarkerModel &model, TraceMarker *marker = nullptr, QWidget *parent = nullptr);
~ImpedanceMatchDialog();
private slots:
void on_cSource_currentIndexChanged(int index);
void calculateMatch();
private:
static constexpr double Z0 = 50.0;
Ui::ImpedanceMatchDialog *ui;
};
#endif // IMPEDANCEMATCHDIALOG_H

View file

@ -0,0 +1,457 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ImpedanceMatchDialog</class>
<widget class="QDialog" name="ImpedanceMatchDialog">
<property name="windowModality">
<enum>Qt::ApplicationModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>664</width>
<height>497</height>
</rect>
</property>
<property name="windowTitle">
<string>Impedance Matching</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,1">
<item>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QGroupBox" name="groupBox_4">
<property name="title">
<string>Unmatched Impedance Z</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QComboBox" name="cSource">
<item>
<property name="text">
<string>Custom</string>
</property>
</item>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QRadioButton" name="rbSeries">
<property name="text">
<string>Series</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">zGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbParallel">
<property name="text">
<string>Parallel</string>
</property>
<attribute name="buttonGroup">
<string notr="true">zGroup</string>
</attribute>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Real:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SIUnitEdit" name="zReal"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Imag:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SIUnitEdit" name="zImag"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="frequencyLabel">
<property name="text">
<string>Frequency:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="SIUnitEdit" name="zFreq"/>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>Matched Impedance</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Real:</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="SIUnitEdit" name="mReal">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Imag:</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="SIUnitEdit" name="mImag">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Return loss:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="SIUnitEdit" name="mLoss">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QGroupBox" name="groupBox_5">
<property name="title">
<string>Settings</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QComboBox" name="cMatchType">
<item>
<property name="text">
<string>Series C - Parallel L</string>
</property>
</item>
<item>
<property name="text">
<string>Parallel C - Series L</string>
</property>
</item>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Inductor</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<widget class="QRadioButton" name="lIdeal">
<property name="text">
<string>Ideal</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="lE24">
<property name="text">
<string>E24</string>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="lE6">
<property name="text">
<string>E6</string>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="lE48">
<property name="text">
<string>E48</string>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="lE12">
<property name="text">
<string>E12</string>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="lE96">
<property name="text">
<string>E96</string>
</property>
<attribute name="buttonGroup">
<string notr="true">lGroup</string>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="lL">
<property name="text">
<string>L:</string>
</property>
</widget>
</item>
<item>
<widget class="SIUnitEdit" name="lValue">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Capacitor</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="1" column="0">
<widget class="QRadioButton" name="cE6">
<property name="text">
<string>E6</string>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="cE12">
<property name="text">
<string>E12</string>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="cIdeal">
<property name="text">
<string>Ideal</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="cE24">
<property name="text">
<string>E24</string>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="cE48">
<property name="text">
<string>E48</string>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="cE96">
<property name="text">
<string>E96</string>
</property>
<attribute name="buttonGroup">
<string notr="true">cGroup</string>
</attribute>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="lC">
<property name="text">
<string>C:</string>
</property>
</widget>
</item>
<item>
<widget class="SIUnitEdit" name="cValue">
<property name="enabled">
<bool>true</bool>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="Image">
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>SIUnitEdit</class>
<extends>QLineEdit</extends>
<header>CustomWidgets/siunitedit.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ImpedanceMatchDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ImpedanceMatchDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
<buttongroups>
<buttongroup name="zGroup"/>
<buttongroup name="cGroup"/>
<buttongroup name="lGroup"/>
</buttongroups>
</ui>