From f30aa577005a50610567150bec200b58ea6f3c2a Mon Sep 17 00:00:00 2001 From: Michael Carpenter Date: Sun, 13 Oct 2013 21:26:11 -0400 Subject: [PATCH] Addition of mutexes protecting table data while editing, and while the ECU is updating application memory. --- core/src/tableview3d.cpp | 4 ++++ plugins/freeems/fetable2ddata.cpp | 17 +++++++++++++++++ plugins/freeems/fetable2ddata.h | 3 +++ plugins/freeems/fetable3ddata.cpp | 18 ++++++++++++++++++ plugins/freeems/fetable3ddata.h | 3 +++ 5 files changed, 45 insertions(+) diff --git a/core/src/tableview3d.cpp b/core/src/tableview3d.cpp index 24ad537..55f2f46 100644 --- a/core/src/tableview3d.cpp +++ b/core/src/tableview3d.cpp @@ -889,6 +889,7 @@ bool TableView3D::updateTable() selectedlist.append(QPair(ui.tableWidget->selectedItems()[i]->row(),ui.tableWidget->selectedItems()[i]->column())); } } + QLOG_DEBUG() << "updateTable(): Clearing table"; ui.tableWidget->clear(); ui.tableWidget->horizontalHeader()->hide(); ui.tableWidget->verticalHeader()->hide(); @@ -1019,6 +1020,7 @@ bool TableView3D::updateTable() selectedlist.clear(); connect(ui.tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(tableCellChanged(int,int))); connect(ui.tableWidget,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(tableCurrentCellChanged(int,int,int,int))); + QLOG_DEBUG() << "updateTable(): Done with table"; return true; //return passData(locationid,data,physicallocation,Table3DMetaData()); } @@ -1056,6 +1058,7 @@ void TableView3D::reColorTable(int rownum,int colnum) //Recolor the whole table ui.tableWidget->disconnect(SIGNAL(cellChanged(int,int))); ui.tableWidget->disconnect(SIGNAL(currentCellChanged(int,int,int,int))); + QLOG_DEBUG() << "reColorTable(): Starting"; for (int row=0;rowrows();row++) { for (int col=0;colcolumns();col++) @@ -1080,6 +1083,7 @@ void TableView3D::reColorTable(int rownum,int colnum) } } } + QLOG_DEBUG() << "reColorTable(): Finished"; connect(ui.tableWidget,SIGNAL(cellChanged(int,int)),this,SLOT(tableCellChanged(int,int))); connect(ui.tableWidget,SIGNAL(currentCellChanged(int,int,int,int)),this,SLOT(tableCurrentCellChanged(int,int,int,int))); } diff --git a/plugins/freeems/fetable2ddata.cpp b/plugins/freeems/fetable2ddata.cpp index e778255..7ff9589 100644 --- a/plugins/freeems/fetable2ddata.cpp +++ b/plugins/freeems/fetable2ddata.cpp @@ -42,6 +42,7 @@ void FETable2DData::setWritesEnabled(bool enabled) } void FETable2DData::reCalcAxisData() { + QMutexLocker locker(m_acccessMutex); /* m_axis.append(xdouble); m_values.append(ydouble);*/ m_minActualXAxis = calcAxis(65535,m_metaData.xAxisCalc); @@ -76,6 +77,7 @@ void FETable2DData::reCalcAxisData() void FETable2DData::setData(unsigned short locationid, bool isflashonly,QByteArray payload,Table2DMetaData metadata,bool signedData) { + m_acccessMutex->lock(); m_dataSize = payload.size(); m_isSignedData = signedData; m_isFlashOnly = isflashonly; @@ -131,68 +133,82 @@ void FETable2DData::setData(unsigned short locationid, bool isflashonly,QByteArr m_axis.append(xdouble); m_values.append(ydouble); } + m_acccessMutex->unlock(); emit update(); } double FETable2DData::maxActualXAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxActualXAxis; } double FETable2DData::maxActualYAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxActualYAxis; } double FETable2DData::minActualXAxis() { + QMutexLocker locker(m_acccessMutex); return m_minActualXAxis; } double FETable2DData::minActualYAxis() { + QMutexLocker locker(m_acccessMutex); return m_minActualYAxis; } double FETable2DData::maxCalcedXAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxCalcedXAxis; } double FETable2DData::maxCalcedYAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxCalcedYAxis; } double FETable2DData::minCalcedXAxis() { + QMutexLocker locker(m_acccessMutex); return m_minCalcedXAxis; } double FETable2DData::minCalcedYAxis() { + QMutexLocker locker(m_acccessMutex); return m_minCalcedYAxis; } QList FETable2DData::axis() { + QMutexLocker locker(m_acccessMutex); return m_axis; } QList FETable2DData::values() { + QMutexLocker locker(m_acccessMutex); return m_values; } int FETable2DData::columns() { + QMutexLocker locker(m_acccessMutex); return m_axis.size(); } int FETable2DData::rows() { + QMutexLocker locker(m_acccessMutex); return 2; } void FETable2DData::setCell(int row, int column,double newval) { + QMutexLocker locker(m_acccessMutex); //New value has been accepted. Let's write it. //offset = column + (row * 32), size == 2 //QLOG_DEBUG() << "Update:" << row << column << newval; @@ -249,6 +265,7 @@ void FETable2DData::setCell(int row, int column,double newval) QByteArray FETable2DData::data() { + QMutexLocker locker(m_acccessMutex); QByteArray data; for (int i=0;i #include #include +#include + #include "table2ddata.h" #include "table2dmetadata.h" @@ -55,6 +57,7 @@ class FETable2DData : public Table2DData double calcAxis(int val,QList > metadata); int backConvertAxis(double val,QList > metadata); private: + QMutex *m_acccessMutex; unsigned short m_dataSize; bool m_isSignedData; bool m_isFlashOnly; diff --git a/plugins/freeems/fetable3ddata.cpp b/plugins/freeems/fetable3ddata.cpp index a130f33..82eca53 100644 --- a/plugins/freeems/fetable3ddata.cpp +++ b/plugins/freeems/fetable3ddata.cpp @@ -25,9 +25,11 @@ FETable3DData::FETable3DData() : Table3DData() { m_writesEnabled = true; + m_acccessMutex = new QMutex(); } void FETable3DData::setData(unsigned short locationid,bool isflashonly, QByteArray data) { + m_acccessMutex->lock(); Q_UNUSED(locationid) m_isFlashOnly = isflashonly; m_xAxis.clear(); @@ -67,6 +69,7 @@ void FETable3DData::setData(unsigned short locationid,bool isflashonly, QByteArr } m_values.append(currrow); } + m_acccessMutex->unlock(); emit update(); } @@ -79,34 +82,41 @@ void FETable3DData::setData(unsigned short locationid,bool isflashonly,QByteArra } double FETable3DData::maxXAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxXAxis; } double FETable3DData::maxYAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxYAxis; } double FETable3DData::maxZAxis() { + QMutexLocker locker(m_acccessMutex); return m_maxZAxis; } double FETable3DData::minXAxis() { + QMutexLocker locker(m_acccessMutex); return m_minXAxis; } double FETable3DData::minYAxis() { + QMutexLocker locker(m_acccessMutex); return m_minYAxis; } double FETable3DData::minZAxis() { + QMutexLocker locker(m_acccessMutex); return m_minZAxis; } void FETable3DData::setXAxis(int index,double val) { + QMutexLocker locker(m_acccessMutex); QByteArray data; unsigned short newval = backConvertAxis(val,m_metaData.xAxisCalc); data.append((char)((newval >> 8) & 0xFF)); @@ -134,6 +144,7 @@ void FETable3DData::writeWholeLocation(bool ram) void FETable3DData::setYAxis(int index,double val) { + QMutexLocker locker(m_acccessMutex); QByteArray data; unsigned short newval = backConvertAxis(val,m_metaData.yAxisCalc); data.append((char)((newval >> 8) & 0xFF)); @@ -150,6 +161,7 @@ void FETable3DData::setYAxis(int index,double val) void FETable3DData::setCell(int yIndex, int xIndex,double val) { + QMutexLocker locker(m_acccessMutex); QByteArray data; unsigned short newval = backConvertAxis(val,m_metaData.zAxisCalc); data.append((char)((newval >> 8) & 0xFF)); @@ -170,6 +182,7 @@ void FETable3DData::setWritesEnabled(bool enabled) QByteArray FETable3DData::data() { + QMutexLocker locker(m_acccessMutex); QByteArray data; unsigned short xaxissize = m_xAxis.size(); @@ -217,26 +230,31 @@ QByteArray FETable3DData::data() QList FETable3DData::yAxis() { + QMutexLocker locker(m_acccessMutex); return m_yAxis; } QList FETable3DData::xAxis() { + QMutexLocker locker(m_acccessMutex); return m_xAxis; } QList > FETable3DData::values() { + QMutexLocker locker(m_acccessMutex); return m_values; } int FETable3DData::columns() { + QMutexLocker locker(m_acccessMutex); return m_xAxis.size(); } int FETable3DData::rows() { + QMutexLocker locker(m_acccessMutex); return m_yAxis.size(); } double FETable3DData::calcAxis(int val,QList > metadata) diff --git a/plugins/freeems/fetable3ddata.h b/plugins/freeems/fetable3ddata.h index 08889c3..af2e19b 100644 --- a/plugins/freeems/fetable3ddata.h +++ b/plugins/freeems/fetable3ddata.h @@ -23,6 +23,8 @@ #define FETABLE3DDATA_H #include +#include + #include "table3ddata.h" #include "table3dmetadata.h" @@ -54,6 +56,7 @@ class FETable3DData : public Table3DData double calcAxis(int val,QList > metadata); int backConvertAxis(double val,QList > metadata); private: + QMutex *m_acccessMutex; bool m_writesEnabled; bool m_isFlashOnly; unsigned short m_locationId;