Files
VX5-DiaphragmPump/MemDisplayAndEdit.cpp
T
2026-10-19 17:48:03 +08:00

152 lines
4.5 KiB
C++

#include "MemDisplayAndEdit.h"
#include "ui_memdisplayandedit.h"
#include "QLatin1Char"
MemDisplayAndEdit::MemDisplayAndEdit(QWidget *parent) :
QWidget(parent),
ui(new Ui::MemDisplayAndEdit)
{
ui->setupUi(this);
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<QLineEdit *>(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<QLineEdit *>(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<QLineEdit *>(sender());
unsigned int val = edit->text().toUInt(&ok,16);
ui->lineEditDec->setText(QString("%1").arg(val,0,10));
}