memeditor.cpp
98 lines
| 3.9 KiB
| text/x-c
|
CppLexer
/ genericrwplugin / memeditor.cpp
r0 | /*------------------------------------------------------------------------------ | |||
Jeandet Alexis
|
r4 | -- This file is a part of the SocExplorer Software | ||
r0 | -- Copyright (C) 2011, Laboratory of Plasmas Physic - CNRS | |||
-- | ||||
-- This program 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 Foundation; either version 3 of the License, or | ||||
-- (at your option) any later version. | ||||
-- | ||||
-- 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 | ||||
-- along with this program; if not, write to the Free Software | ||||
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||||
-------------------------------------------------------------------------------*/ | ||||
/*-- Author : Alexis Jeandet | ||||
-- Mail : alexis.jeandet@lpp.polytechnique.fr | ||||
----------------------------------------------------------------------------*/ | ||||
#include "memeditor.h" | ||||
#include "malloc.h" | ||||
memEditor::memEditor(QWidget *parent) : | ||||
QWidget(parent) | ||||
{ | ||||
this->verticalSpliter = new QSplitter; | ||||
this->ctrlWidget = new QWidget; | ||||
this->verticalSpliter->setOrientation(Qt::Horizontal); | ||||
this->mainLayout = new QHBoxLayout; | ||||
this->ctrlLayout = new QVBoxLayout; | ||||
this->hexEditor = new QHexEdit; | ||||
this->addressSpnBx = new QHexSpinBox; | ||||
this->SizeWidget = new MemSizeWdgt(256); | ||||
this->readMemQPb = new QPushButton(tr("Read Mem")); | ||||
this->writeMemQPb = new QPushButton(tr("Write Mem")); | ||||
this->ctrlLayout->addWidget(this->addressSpnBx); | ||||
this->ctrlLayout->addWidget(this->SizeWidget); | ||||
this->ctrlLayout->addWidget(this->readMemQPb); | ||||
this->ctrlLayout->addWidget(this->writeMemQPb); | ||||
this->ctrlWidget->setLayout(this->ctrlLayout); | ||||
this->verticalSpliter->addWidget(this->hexEditor); | ||||
this->verticalSpliter->addWidget(this->ctrlWidget); | ||||
this->mainLayout->addWidget(this->verticalSpliter); | ||||
this->setLayout(this->mainLayout); | ||||
connect(this->readMemQPb,SIGNAL(clicked()),this,SLOT(readMemSlt())); | ||||
connect(this->writeMemQPb,SIGNAL(clicked()),this,SLOT(writeMemSlt())); | ||||
this->SizeWidget->setMaximum(16384); | ||||
} | ||||
void memEditor::writeMemSlt() | ||||
{ | ||||
QByteArray data = this->hexEditor->data(); | ||||
unsigned int length = data.length()/4; | ||||
unsigned int* buffer=(unsigned int*)malloc(length*sizeof(int)); | ||||
unsigned int address = this->hexEditor->addressOffset(); | ||||
for(int i=0;(unsigned int)i<length;i++) | ||||
{ | ||||
buffer[i]=((data[4*i]<<24)&0xFF000000)+((data[(4*i)+1]<<16)&0x00FF0000)+((data[(4*i)+2]<<8)&0x0000FF00)+(data[(4*i)+3]&0x000000FF); | ||||
} | ||||
emit this->WriteSig(buffer,length,address); | ||||
free(buffer); | ||||
} | ||||
void memEditor::setAddress(quint32 address) | ||||
{ | ||||
this->addressSpnBx->setValue(address); | ||||
} | ||||
void memEditor::setLength(quint32 length) | ||||
{ | ||||
this->SizeWidget->setSizeValue(length); | ||||
} | ||||
void memEditor::readMemSlt() | ||||
{ | ||||
this->SizeWidget->updateSizeValue(); | ||||
unsigned int size = this->SizeWidget->getsize()/4; | ||||
unsigned int buffer[16384]; | ||||
unsigned char buffChar[16384*4]; | ||||
unsigned int address = this->addressSpnBx->value(); | ||||
if((emit this->ReadSig(buffer,size,address&(-4)))==size) | ||||
{ | ||||
for(int i=0;(unsigned int)i<size;i++) | ||||
{ | ||||
buffChar[4*i]=(buffer[i]>>24)&0xFF; | ||||
buffChar[(4*i)+1]=(buffer[i]>>16)&0xFF; | ||||
buffChar[(4*i)+2]=(buffer[i]>>8)&0xFF; | ||||
buffChar[(4*i)+3]=(buffer[i])&0xFF; | ||||
} | ||||
QByteArray data = QByteArray((char*)buffChar,size*4); | ||||
this->hexEditor->setData(data); | ||||
this->hexEditor->setAddressOffset(address&(-4)); | ||||
this->addressSpnBx->setValue(address&(-4)); | ||||
} | ||||
} | ||||