/* 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 */ #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()); }