#include "MemDisplayAndEdit.h" #include "ui_memdisplayandedit.h" #include "QLatin1Char" MemDisplayAndEdit::MemDisplayAndEdit(QWidget *parent) : QWidget(parent), ui(new Ui::MemDisplayAndEdit) { ui->setupUi(this); if (sysPara == nullptr) { sysPara = SysPara::ins(); } for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ memLineEdit[i] = new QLineEdit(this); //memLineEdit[i]->setAccessibleName(QString::number(i)); memLineEdit[i]->setEnabled(false); ui->gridLayoutMem->addWidget(memLineEdit[i],(i/MEM_GRID_MAX_COL) + 1,(i%MEM_GRID_MAX_COL) + 1); connect(memLineEdit[i],SIGNAL(editingFinished ()),this,SLOT(onLineEditEditingFinished())); } for(int i = 0; i < MEM_GRID_MAX_ROW; i++){ rowLabel[i] = new QLabel(this); ui->gridLayoutMem->addWidget(rowLabel[i],i + 1,0); } editFlag = false; writeMemMode = false; ui->radioButtonRead->setChecked(!writeMemMode); ui->radioButtonWrite->setChecked(writeMemMode); writeMemBaseAddr = 0; readMemBaseAddr = 0; } MemDisplayAndEdit::~MemDisplayAndEdit() { delete ui; } void MemDisplayAndEdit::updateSysStatusToUI(void){ if(sysPara && !editFlag){ for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ if(writeMemMode) memLineEdit[i]->setText(QString("%1").arg(sysPara->devOp->memWrMap[(writeMemBaseAddr + i)&MAX_WR_MEM_SIZE_MASK],2,16,QLatin1Char('0'))); else memLineEdit[i]->setText(QString("%1").arg(sysPara->devOp->memRdMap[(readMemBaseAddr + i)&MAX_RD_MEM_SIZE_MASK],2,16,QLatin1Char('0'))); } for(int i = 0; i < MEM_GRID_MAX_ROW; i++){ if(writeMemMode) rowLabel[i]->setText(QString("%1").arg((writeMemBaseAddr + i*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK,4,16,QLatin1Char('0'))); else rowLabel[i]->setText(QString("%1").arg((readMemBaseAddr + i*MEM_GRID_MAX_COL)&MAX_RD_MEM_SIZE_MASK,4,16,QLatin1Char('0'))); } } } void MemDisplayAndEdit::on_comboBoxBaseAddress_activated(const QString &str) { bool ok; if(writeMemMode){ writeMemBaseAddr = str.toInt(&ok,0); } else readMemBaseAddr = str.toInt(&ok,0); } void MemDisplayAndEdit::on_radioButtonRead_pressed() { writeMemMode = false; if(sysPara){ ui->pushButtonEdit->setEnabled(sysPara->devOp->fpgaDevOpenFlag?false:true); } if(editFlag) on_pushButtonEdit_pressed(); ui->comboBoxBaseAddress->setEditText(QString("0x%1").arg(readMemBaseAddr,4,16,QLatin1Char('0'))); } void MemDisplayAndEdit::on_radioButtonWrite_pressed() { writeMemMode = true; ui->pushButtonEdit->setEnabled(true); if(editFlag) on_pushButtonEdit_pressed(); ui->comboBoxBaseAddress->setEditText(QString("0x%1").arg(writeMemBaseAddr,4,16,QLatin1Char('0'))); } void MemDisplayAndEdit::on_pushButtonEdit_pressed() { editFlag = !editFlag; for(int i = 0; i < MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL; i++){ memLineEdit[i]->setEnabled(editFlag); } ui->pushButtonEdit->setText(editFlag?tr("完成"):tr("编辑")); } void MemDisplayAndEdit::on_pushButtonLastPage_pressed() { if(writeMemMode){ writeMemBaseAddr = (writeMemBaseAddr - MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; } else readMemBaseAddr = (readMemBaseAddr - MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; } void MemDisplayAndEdit::on_pushButtonNextPage_pressed() { if(writeMemMode){ writeMemBaseAddr = (writeMemBaseAddr + MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_WR_MEM_SIZE_MASK; } else readMemBaseAddr = (readMemBaseAddr + MEM_GRID_MAX_ROW*MEM_GRID_MAX_COL)&MAX_RD_MEM_SIZE_MASK; } unsigned char dataOfTempVal[1]; void MemDisplayAndEdit::onLineEditEditingFinished(){ int val,addr; bool ok; QLineEdit * edit = qobject_cast(sender()); QString name ="" ;// edit->accessibleName(); val = edit->text().toInt(&ok,16); dataOfTempVal[0]=val; if(sysPara){ if(writeMemMode){ addr = writeMemBaseAddr + name.toInt(&ok); sysPara->devOp->fpgaWr(addr,dataOfTempVal,1); } else { if(!sysPara->devOp->fpgaDevOpenFlag){ addr = readMemBaseAddr + name.toInt(&ok); sysPara->devOp->memRdMap[(addr)&MAX_RD_MEM_SIZE_MASK] = (unsigned char)val; } } } } void MemDisplayAndEdit::on_lineEditDec_editingFinished() { bool ok; QLineEdit * edit = qobject_cast(sender()); unsigned int val = edit->text().toUInt(&ok,10); ui->lineEditHex->setText(QString("%1").arg(val,0,16)); } void MemDisplayAndEdit::on_lineEditHex_editingFinished() { bool ok; QLineEdit * edit = qobject_cast(sender()); unsigned int val = edit->text().toUInt(&ok,16); ui->lineEditDec->setText(QString("%1").arg(val,0,10)); }