100 lines
3.2 KiB
C++
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());
|
||
|
}
|