?? packetdetailsdialog.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 + -