ostinato/common/tosdscp.cpp
2018-05-18 22:19:54 +05:30

100 lines
3.2 KiB
C++

/*
Copyright (C) 2018 Srivats P.
This file is part of "Ostinato"
This is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software FoundatiTosDscpWidget::on, either versiTosDscpWidget::on 3 of the License, or
(at your optiTosDscpWidget::on) any later versiTosDscpWidget::on.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
alTosDscpWidget::ong with this program. If not, see <http://www.gnu.org/licenses/>
*/
#include "tosdscp.h"
TosDscpWidget::TosDscpWidget(QWidget *parent)
: QWidget(parent)
{
codePoints_.insert("cs0", 0);
codePoints_.insert("cs1", 8);
codePoints_.insert("cs2", 16);
codePoints_.insert("cs3", 24);
codePoints_.insert("cs4", 32);
codePoints_.insert("cs5", 40);
codePoints_.insert("cs6", 48);
codePoints_.insert("cs7", 56);
codePoints_.insert("af11", 10);
codePoints_.insert("af12", 12);
codePoints_.insert("af13", 14);
codePoints_.insert("af21", 18);
codePoints_.insert("af22", 20);
codePoints_.insert("af23", 22);
codePoints_.insert("af31", 26);
codePoints_.insert("af32", 28);
codePoints_.insert("af33", 30);
codePoints_.insert("af41", 34);
codePoints_.insert("af42", 36);
codePoints_.insert("af43", 38);
codePoints_.insert("ef", 46);
codePoints_.insert("voice-admit", 44);
setupUi(this);
dscp->addItems(codePoints_.keys());
connect(precedence, SIGNAL(activated(int)), SLOT(setTosValue()));
connect(lowDelay, SIGNAL(clicked(bool)), SLOT(setTosValue()));
connect(highThroughput, SIGNAL(clicked(bool)), SLOT(setTosValue()));
connect(highReliability, SIGNAL(clicked(bool)), SLOT(setTosValue()));
connect(dscp, SIGNAL(activated(int)), SLOT(setDscpValue()));
connect(ecn, SIGNAL(activated(int)), SLOT(setDscpValue()));
connect(customValue, SIGNAL(valueChanged(int)), SLOT(setValue(int)));
}
int TosDscpWidget::value()
{
return customValue->value() & 0xff;
}
void TosDscpWidget::setValue(int value)
{
value &= 0xff;
qDebug("value %02x", value);
customValue->blockSignals(true);
customValue->setValue(value); // avoid signal-slot loop
customValue->blockSignals(false);
dscp->setCurrentIndex(codePoints_.values().indexOf(value >> 2));
ecn->setCurrentIndex(value & 0x03);
precedence->setCurrentIndex(value >> 5);
lowDelay->setChecked(value & 0x10);
highThroughput->setChecked(value & 0x08);
highReliability->setChecked(value & 0x04);
}
void TosDscpWidget::setTosValue()
{
qDebug("prec %d", precedence->currentIndex());
qDebug("delay %d", lowDelay->isChecked() ? 1 : 0);
setValue((precedence->currentIndex() << 5)
| (lowDelay->isChecked() ? 0x10 : 0x00)
| (highThroughput->isChecked() ? 0x08 : 0x00)
| (highReliability->isChecked() ? 0x04 : 0x00)
| 0x00);
}
void TosDscpWidget::setDscpValue()
{
setValue((codePoints_.value(dscp->currentText()) << 2)
| ecn->currentIndex());
}