Mercurial > public > ostc_companion
view editlogdialog.cpp @ 12:ac837fe1d590
Switch implementation for reqex class and added RFCOMM as label for Bluetooth based connection by Linux
| author | Ideenmodellierer |
|---|---|
| date | Mon, 12 Jan 2026 13:58:41 +0000 |
| parents | 21ce6187d32e |
| children |
line wrap: on
line source
#include "editlogdialog.h" #include "MainWindow.h" // Needed to propagare retranslate() #include "Utils/Log.h" #include "ui_LogEditor.h" #include "HardwareOperations.h" #include <QApplication> #include <QDialogButtonBox> #include <QDir> #include <QLibraryInfo> #include <QPushButton> #include <QTableWidget> #include <QTranslator> #ifdef Q_OS_WIN #define NOMINMAX 1 #include <Windows.h> #undef NOMINMAX #endif #define HEADER2OFFSET 0x400 EditLogDialog::EditLogDialog(QWidget *parent, HardwareOperations *op) : QDialog(parent) , _ui(new Ui::editLogWnd) , _op(op) { uint32_t index, index2; uint32_t sizeY = 0; _ui->setupUi(this); QTableWidget *headerView = _ui->SectorView; QTableWidget *sampleView = _ui->SampleView; _ui->textBrowser_2->setTabStopDistance( QFontMetricsF(_ui->textBrowser_2->font()).horizontalAdvance(' ') * 4); headerView->horizontalHeader()->setMinimumSectionSize(8); headerView->verticalHeader()->setMinimumSectionSize(8); headerView->horizontalHeader()->setDefaultSectionSize(8); headerView->verticalHeader()->setDefaultSectionSize(8); headerView->setColumnWidth(0, 8); headerView->setRowHeight(0, 8); headerView->horizontalHeader()->hide(); headerView->verticalHeader()->hide(); sampleView->horizontalHeader()->setMinimumSectionSize(8); sampleView->verticalHeader()->setMinimumSectionSize(8); sampleView->horizontalHeader()->setDefaultSectionSize(8); sampleView->verticalHeader()->setDefaultSectionSize(8); sampleView->setColumnWidth(0, 8); sampleView->setRowHeight(0, 8); sampleView->horizontalHeader()->hide(); sampleView->verticalHeader()->hide(); headerView->setRowCount(16); headerView->setColumnCount(16); sampleView->setRowCount(12); sampleView->setColumnCount(16); HeaderBuffer = new unsigned char[0x8000 * 8 + 1]; // 64k Headerbuffer + lastDiveindex SampleBuffer = new unsigned char[0xC00000 + 4]; // 12MB Samplebuffer + nextSampleAddr headerView->resize(8 * 16 + 2, 8 * 16 + 2); sampleView->resize(8 * 16 + 2, 8 * 12 + 2); sizeY = (uint32_t) (headerView->geometry().width()) / 16; if (sizeY < 8) { sizeY = 8; } for (index = 0; index < 16; index++) { headerView->setColumnWidth(index, sizeY); headerView->setRowHeight(index, sizeY); for (index2 = 0; index2 < 16; index2++) { item[index * 16 + index2] = new QTableWidgetItem(" "); headerView->setItem(index, index2, item[index * 16 + index2]); } } for (index = 0; index < 12; index++) { sampleView->setColumnWidth(index, sizeY); sampleView->setRowHeight(index, sizeY); for (index2 = 0; index2 < 16; index2++) { sampleitem[index * 16 + index2] = new QTableWidgetItem(" "); sampleView->setItem(index, index2, sampleitem[index * 16 + index2]); } } headerView->show(); headerView->setShowGrid(true); sampleView->show(); sampleView->setShowGrid(true); } EditLogDialog::~EditLogDialog() { uint32_t index; for (index = 0; index < 256; index++) { delete item[index]; } for (index = 0; index < 192; index++) { delete sampleitem[index]; } delete _ui; delete HeaderBuffer; delete SampleBuffer; } void EditLogDialog::on_WriteAllHeader_clicked() { _op->writeAllHeader(HeaderBuffer); } void EditLogDialog::on_pushButton_clicked() { Q_ASSERT(_op); HeaderBuffer[0] = 0; try { LOG_INFO(tr("Request All Headers...")); _op->getAllHeader(HeaderBuffer); } catch (const std::exception &e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2").arg(tr("Error")).arg(e.what())); } if (HeaderBuffer[0] != 0) { LOG_INFO(tr("Got something")); updateHeaderStatus(); } } void EditLogDialog::on_HeaderUsage_valueChanged(int value) {} void EditLogDialog::on_ReadAllSamples_clicked() { try { LOG_INFO(tr("Request All Samples...")); _op->getAllSamples(SampleBuffer); } catch (const std::exception &e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2").arg(tr("Error")).arg(e.what())); } } void EditLogDialog::on_WriteAllSamples_clicked() { try { LOG_INFO(tr("Request All Samples...")); _op->writeAllSamples(SampleBuffer); } catch (const std::exception &e) { LOG_INFO( QString("<bg><font color='red'>%1</font></color>: %2").arg(tr("Error")).arg(e.what())); } } void EditLogDialog::on_pushButton_2_clicked() { qint64 length; QFile dumpFile; dumpFile.setFileName("Log_Dump.bin"); if (!dumpFile.open(QIODevice::WriteOnly)) { LOG_THROW("Cannot create dump file "); } else { length = 0x8000 * 8 + 1; dumpFile.write((const char *) HeaderBuffer, length); length = 0xC00000 + 4; dumpFile.write((const char *) SampleBuffer, length); dumpFile.close(); } } void EditLogDialog::on_LoadDump_clicked() { qint64 length; QFile dumpFile; dumpFile.setFileName("Log_Dump.bin"); if (!dumpFile.open(QIODevice::ReadOnly)) { LOG_THROW("Cannot read dump file "); } else { length = 0x8000 * 8 + 1; dumpFile.read((char *) HeaderBuffer, length); length = 0xC00000 + 4; dumpFile.read((char *) SampleBuffer, length); dumpFile.close(); updateHeaderStatus(); updateSampleStatus(); } } void EditLogDialog::updateHeaderStatus() { QProgressBar *w = _ui->HeaderUsage; QTableWidget *sv = _ui->SectorView; SLogbookHeader *LogInfo; SSmallHeader *smallHeader; unsigned char HeaderInUse = 0; uint32_t index, index2; uint32_t sampleStartAddr, sampleEndAddr, sampleLength; int row; int colum; for (index = 0; index < 16; index++) { for (index2 = 0; index2 < 16; index2++) { if ((HeaderBuffer[(0x800 * (index * 16 + index2)) + HEADER2OFFSET] == 0xFA) && (HeaderBuffer[(0x800 * (index * 16 + index2)) + HEADER2OFFSET + 1] == 0xFA)) { HeaderInUse++; LogInfo = (SLogbookHeader *) (HeaderBuffer + (0x800 * (index * 16 + index2)) + 0x400); sampleEndAddr = (LogInfo->profileLength[2] << 16) + (LogInfo->profileLength[1] << 8) + LogInfo->profileLength[0]; if (sampleEndAddr == 0) { sv->item(index, index2)->setBackground(Qt::black); } else { LogInfo = (SLogbookHeader *) (HeaderBuffer + (0x800 * (index * 16 + index2))); sampleStartAddr = (LogInfo->pBeginProfileData[2] << 16) + (LogInfo->pBeginProfileData[1] << 8) + LogInfo->pBeginProfileData[0]; smallHeader = (SSmallHeader *) &SampleBuffer[sampleStartAddr - 0x100000]; sampleLength = (smallHeader->profileLength[2] << 16) + (smallHeader->profileLength[1] << 8) + smallHeader->profileLength[0]; if (sampleLength == sampleEndAddr) // - sampleStartAddr)) { sv->item(index, index2)->setBackground(Qt::green); } else { sv->item(index, index2)->setBackground(Qt::red); } } } else { sv->item(index, index2)->setBackground(Qt::white); } } } row = (HeaderBuffer[(0x8000 * 8)]) / 16; colum = (HeaderBuffer[(0x8000 * 8)] % 16); sv->item(row, colum)->setBackground(Qt::blue); w->setMaximum(256); w->setValue(HeaderInUse); } void EditLogDialog::on_SectorView_cellClicked(int row, int column) {} void EditLogDialog::updateSampleStatus() { uint8_t row, colum; uint32_t index; QTableWidget *sv = _ui->SampleView; QProgressBar *w = _ui->SampleUsage; uint8_t SamplesInUse = 0; for (index = 0; index < 192; index++) { row = index / 16; colum = index % 16; if (SampleBuffer[index * 0x10000] != 0xFF) /* used */ { SamplesInUse++; if (SampleBuffer[index * 0x10000 + 0xFFFF] == 0xFF) /* open */ { sv->item(row, colum)->setBackground(Qt::blue); } else { sv->item(row, colum)->setBackground(Qt::green); /* closed */ } } else { sv->item(row, colum)->setBackground(Qt::white); /* empty */ } } w->setMaximum(192); w->setValue(SamplesInUse); } void EditLogDialog::on_SectorView_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { SLogbookHeader *LogInfo; SLogbookHeader *LogInfo2nd; QTextEdit *tf = _ui->textBrowser_2; QString InfoText; QTableWidget *sv = _ui->SampleView; uint32_t sampleAddrStart = 0; uint32_t sampleAddrEnd = 0; uint8_t rowidx, columidx; tf->setReadOnly(true); LogInfo = (SLogbookHeader *) (HeaderBuffer + (0x800 * (currentRow * 16 + currentColumn))); LogInfo2nd = (SLogbookHeader *) (HeaderBuffer + (0x800 * (currentRow * 16 + currentColumn)) + 0x400); updateSampleStatus(); if (LogInfo->diveHeaderStart == 0xFAFA) { sampleAddrStart = (LogInfo->pBeginProfileData[2] << 16) + (LogInfo->pBeginProfileData[1] << 8) + LogInfo->pBeginProfileData[0]; sampleAddrEnd = (LogInfo2nd->pEndProfileData[2] << 16) + (LogInfo2nd->pEndProfileData[1] << 8) + LogInfo2nd->pEndProfileData[0]; // InfoText.sprintf("Header: %d \nNummer: %d\nSamplestart 0x%x\nSampleend 0x%x", currentRow*16+currentColumn, LogInfo->diveNumber,sampleAddrStart,sampleAddrEnd); InfoText = QString::asprintf("Header: %d \nNummer: %d\nSamplestart 0x%x\nSampleend 0x%x", currentRow * 16 + currentColumn, LogInfo->diveNumber, sampleAddrStart, sampleAddrEnd); sampleAddrStart = (LogInfo->pBeginProfileData[2] << 16) + (LogInfo->pBeginProfileData[1] << 8) + LogInfo->pBeginProfileData[0]; if (sampleAddrStart != 0) { sampleAddrStart -= 0x100000; /* substract memory offset */ sampleAddrStart /= 0x10000; /* calc sector */ sv->item(sampleAddrStart / 16, sampleAddrStart % 16)->setBackground(Qt::magenta); } else { sv->item(0, 0)->setBackground(Qt::black); } } else { InfoText = QString::asprintf("Empty"); } tf->setPlainText((InfoText)); } void EditLogDialog::on_SampleView_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { uint16_t sampleSector; uint8_t headerRow, headerColumn; SLogbookHeader *LogInfo; SLogbookHeader *LogInfo2nd; uint32_t sectorStart, sectorEnd; uint32_t sampleAddrStart, sampleAddrEnd; QTableWidget *headerView = _ui->SectorView; sampleSector = currentRow * 16 + currentColumn; sectorStart = sampleSector * 0x10000 + 0x100000; sectorEnd = sectorStart + 0xFFFF; if (SampleBuffer[sectorStart - 0x100000] != 0xFF) // is buffer used? { updateHeaderStatus(); for (headerRow = 0; headerRow < 16; headerRow++) { for (headerColumn = 0; headerColumn < 16; headerColumn++) { LogInfo = (SLogbookHeader *) (HeaderBuffer + (0x800 * (headerRow * 16 + headerColumn))); LogInfo2nd = (SLogbookHeader *) (HeaderBuffer + (0x800 * (headerRow * 16 + headerColumn)) + 0x400); sampleAddrStart = (LogInfo->pBeginProfileData[2] << 16) + (LogInfo->pBeginProfileData[1] << 8) + LogInfo->pBeginProfileData[0]; sampleAddrEnd = (LogInfo2nd->pEndProfileData[2] << 16) + (LogInfo2nd->pEndProfileData[1] << 8) + LogInfo2nd->pEndProfileData[0]; if (((sampleAddrStart >= sectorStart) && (sampleAddrStart < sectorEnd) || (sampleAddrEnd >= sectorStart) && (sampleAddrEnd < sectorEnd))) { headerView->item(headerRow, headerColumn)->setBackground(Qt::magenta); } } } } }
