⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 packetdetailsdialog.cpp

📁 isdn的完整解决方案。非常强大。不过是国际标准而非国标。
💻 CPP
字号:
/*************************************************************************** *   Copyright (C) 2004 by Roman Schmidt                                   * *   roman.schmidt@fh-stralsund.de                                         * *                                                                         * ***************************************************************************/#include "packetdetailsdialog.h"#include "layer2.h"#include "unnumbcombobox.h"/***@param[in] p Ist ein Zeiger auf das MISDNInterface der ben鰐igt wird, um die erstellten ISDN-Frames verschicken zu k鰊nen.*/PacketDetailsDialog::PacketDetailsDialog(MISDNInterface *p){	initLayer = p->getCurLayer();	hexValue = new ByteArray();	hexValueSaved = new ByteArray();		QObject::connect(	hexEdit, SIGNAL(textChanged(const QString &)),						this, SLOT( onEditTextChanged(const QString &)));							QObject::connect(	sendButton, SIGNAL(clicked()),						this, SLOT( onSendBtnClicked()));						 	QObject::connect(	checkBoxStart, SIGNAL(clicked()),						this, SLOT( onChkBoxStartClicked()));							QObject::connect(	checkBoxEnd, SIGNAL(clicked()),						this, SLOT( onChkBoxEndClicked()));							QObject::connect(	checkBoxChecksum, SIGNAL(clicked()),						this, SLOT( onChkBoxSumClicked()));							QObject::connect(	checkBoxBitStuff, SIGNAL(clicked()),						this, SLOT( onChkBoxBitStuffClicked()));							QObject::connect(	tableLay2, SIGNAL(byteChanged(unsigned char,int)),						this, SLOT( onByteChanged(unsigned char,int)));							QObject::connect(	tableLay3, SIGNAL(byteChanged(unsigned char,int)),						this, SLOT( onByteChanged(unsigned char,int)));							tableLay2->horizontalHeader()->setLabel( 0, tr( "" ) );	tableLay2->horizontalHeader()->setLabel( 1, tr( "Binary" ) );	tableLay2->horizontalHeader()->setLabel( 2, tr( "Information" ) );	tableLay2->horizontalHeader()->setLabel( 3, tr( "Decimal" ) );		tableLay3->horizontalHeader()->setLabel( 0, tr( "" ) );	tableLay3->horizontalHeader()->setLabel( 1, tr( "Binary" ) );	tableLay3->horizontalHeader()->setLabel( 2, tr( "Information" ) );	tableLay3->horizontalHeader()->setLabel( 3, tr( "Decimal" ) );	//this->setMinimumSize(350,350);		this->mIsdnIf = p;		if(initLayer == 3)	{		checkBoxChecksum->setEnabled(false);		checkBoxBitStuff->setEnabled(false);		toolBox->setItemEnabled(0,false);	}	 		updateTable();}PacketDetailsDialog::~PacketDetailsDialog(){}/**Dient zur Aktualisierung des Eingabefeldes zur Anzeige des ISDN-Frames.*@param[in] p Zeiger auf den ISDN-Frame, dessen Inhalt im Eingabefeld des Dialoges dargestellt weden soll.*/void PacketDetailsDialog::updateHexCode(ByteArray *p){   hexEdit->setText(p->getAsString());}/**Die Methode 黚erpr黤t ob der 躡ergebene String ein g黮tiges ISDN-Frame enth鋖t, z.B.:*@li nur hexadezimale Wert*@li gerade Anzahl an Zeichen*Sollte es sich um ein korrektes Frame handeln, werden die graphischen Bedienelement zur Weiterverarbeitung aktiviert, ansonsten deaktiviert.*@param[in] str String der auf G黮tigkeit untersucht werden soll.*/void PacketDetailsDialog::onEditTextChanged(const QString &str){	hexValue->setByString(str.ascii());			QString tmpStr1 = QString(hexValue->getAsString()).remove(' ');		if(!hexEdit->text().remove(' ').lower().compare(tmpStr1))	{		sendButton->setEnabled(true);		updateCheckBoxes();			updateTable(); 				}	else	{		sendButton->setEnabled(false);		checkBoxStart->setEnabled(false);		checkBoxEnd->setEnabled(false);		checkBoxChecksum->setEnabled(false);		checkBoxBitStuff->setEnabled(false);	}}/**Methode 黚erpr黤t ob der zum aktuellen Dialog-Layer passende Layer im ISDN-Interface ausgew鋒lt wurde. Sollte es sich um den korrekten Layer handeln wird der ISDN-Frame verschickt, ansonsten erscheint ein Fehlerdialog.*/void PacketDetailsDialog::onSendBtnClicked(){	/* is the right layer selected? */	if(initLayer != mIsdnIf->getCurLayer())	{		/*a layer is selected which differs from the initlayer */		 QMessageBox mb( "ISDN - TestTool",        "Layer failure.\n\nPlease set up the right layer!",        QMessageBox::Warning,        QMessageBox::Ok | QMessageBox::Default,        QMessageBox::NoButton,        QMessageBox::NoButton );		mb.exec();  				return;	}	/* all fine, we can send out the packet now*/	mIsdnIf->do_write(hexValue);}/**Methode setzt bzw. entfernt das Startflag.*/void PacketDetailsDialog::onChkBoxStartClicked(){	if(checkBoxStart->isChecked() == true)	{		CLayer2::setStartFlag(hexValue);		CLayer2::setStartFlag(hexValueSaved);	}	else	{		CLayer2::removeStartFlag(hexValue);		CLayer2::removeStartFlag(hexValueSaved);	}		hexEdit->setText(hexValue->getAsString());}/**Methode setzt bzw. entfernt das Endeflag.*/void PacketDetailsDialog::onChkBoxEndClicked(){	hexValue->setByString(hexValueSaved->getAsString());	if(checkBoxEnd->isChecked())	{		if(checkBoxStart->isChecked())		{			CLayer2::removeStartFlag(hexValue);			CLayer2::setEndFlag(hexValue);			CLayer2::setStartFlag(hexValue);		}		else		{			CLayer2::setEndFlag(hexValue);		}	}	else	{		if(checkBoxStart->isChecked())		{			CLayer2::removeStartFlag(hexValue);			CLayer2::doBitStuffing(hexValue);			CLayer2::setStartFlag(hexValue);		}		else		{			CLayer2::doBitStuffing(hexValue);		}	}		hexEdit->setText(hexValue->getAsString());	}/**Methode setzt bzw. entfernt die Pr黤summe*/void PacketDetailsDialog::onChkBoxSumClicked(){	if(checkBoxChecksum->isChecked() == true)	{		CLayer2::calcCRC(hexValue);	}	else	{		CLayer2::removeCRC(hexValue);	}		hexEdit->setText(hexValue->getAsString());}/**Methode f黨rt das Bitstuffing durch bzw. macht es r點kg鋘gig.*/void PacketDetailsDialog::onChkBoxBitStuffClicked(){		if(checkBoxBitStuff->isChecked() == true)	{					hexValueSaved->setByString(hexValue->getAsString());		CLayer2::doBitStuffing(hexValue);		hexEdit->setText(hexValue->getAsString());	}	else	{				hexValue->setByString(hexValueSaved->getAsString());		hexEdit->setText(hexValue->getAsString());	}	updateCheckBoxes();		}/**In Abh鋘gigkeit der Aktivierung einzelner Checkboxen, werden nach einem f黵 das ISDN-Schema logischen Verfahren, die jeweils anderen Checkboxen gesetzt.*/void PacketDetailsDialog::updateCheckBoxes(){	if(initLayer == 3)	{		return;	}		if(checkBoxBitStuff->isChecked())	{		checkBoxChecksum->setEnabled(false);		checkBoxStart->setEnabled(true);		checkBoxEnd->setEnabled(true);		checkBoxStart->setChecked(CLayer2::isStartFlag(hexValue));		checkBoxEnd->setChecked(CLayer2::isEndFlag(hexValue));	}	else	{		checkBoxChecksum->setEnabled(!false);		checkBoxStart->setEnabled(!true);		checkBoxEnd->setEnabled(!true);		checkBoxChecksum->setChecked(CLayer2::isCheckSum(hexValue));	}		if(checkBoxStart->isChecked() || checkBoxEnd->isChecked())	{		checkBoxBitStuff->setEnabled(false);			}	else	{		checkBoxBitStuff->setEnabled(!false);	}		if(checkBoxChecksum->isChecked() || checkBoxBitStuff->isChecked())	{		tableLay2->deactivate(true);		tableLay3->deactivate(true);		hexEdit->setReadOnly(true);	}	else	{		tableLay2->deactivate(false);		tableLay3->deactivate(false);		hexEdit->setReadOnly(false);	}		}/**Die Methode 黚ergibt abh鋘gig vom ausgw鋒lten Layer, den ISDN-Frame an die TableLayer(2/3), welche den ISDN-Frame detaillierter darstellen.*/void PacketDetailsDialog::updateTable(){	ByteArray tmpArr(*hexValue);		if(initLayer == 2)	{			if(checkBoxChecksum->isChecked())		{			//cut the two byte of the checksum			tmpArr.erase(tmpArr.getSize()-1);			tmpArr.erase(tmpArr.getSize()-1);		}			tableLay2->updateTable(&tmpArr);		tableLay3->setOffset(tableLay2->getOffset());	}	tableLay3->updateTable(&tmpArr);}/**Aufruf l鰏cht innerhalb des ISDN-Frames ein gew黱schtes Byte und ersetzt es durch ein neues Byte.*@param[in] byte Das neue Byte, welches in den ISDN-Frame eingef黦t werden soll.*@param[in] pos Bestimmt die Position des zu ersetzenden Bytes.*/void PacketDetailsDialog::onByteChanged(unsigned char byte, int pos){	hexValue->erase(pos);	hexValue->insert(pos,byte);	hexEdit->setText(hexValue->getAsString());}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -