Skip to content

Commit

Permalink
Addition of mutexes protecting table data while editing, and while th…
Browse files Browse the repository at this point in the history
…e ECU is updating application memory.
  • Loading branch information
malcom2073 committed Oct 14, 2013
1 parent b09528f commit f30aa57
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 0 deletions.
4 changes: 4 additions & 0 deletions core/src/tableview3d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -889,6 +889,7 @@ bool TableView3D::updateTable()
selectedlist.append(QPair<int,int>(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();
Expand Down Expand Up @@ -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());
}
Expand Down Expand Up @@ -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;row<tableData->rows();row++)
{
for (int col=0;col<tableData->columns();col++)
Expand All @@ -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)));
}
Expand Down
17 changes: 17 additions & 0 deletions plugins/freeems/fetable2ddata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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<double> FETable2DData::axis()
{
QMutexLocker locker(m_acccessMutex);
return m_axis;
}

QList<double> 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;
Expand Down Expand Up @@ -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<m_axis.size();i++)
{
Expand Down
3 changes: 3 additions & 0 deletions plugins/freeems/fetable2ddata.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
#include <QString>
#include <QList>
#include <QByteArray>
#include <QMutex>

#include "table2ddata.h"
#include "table2dmetadata.h"

Expand Down Expand Up @@ -55,6 +57,7 @@ class FETable2DData : public Table2DData
double calcAxis(int val,QList<QPair<QString,double> > metadata);
int backConvertAxis(double val,QList<QPair<QString,double> > metadata);
private:
QMutex *m_acccessMutex;
unsigned short m_dataSize;
bool m_isSignedData;
bool m_isFlashOnly;
Expand Down
18 changes: 18 additions & 0 deletions plugins/freeems/fetable3ddata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -67,6 +69,7 @@ void FETable3DData::setData(unsigned short locationid,bool isflashonly, QByteArr
}
m_values.append(currrow);
}
m_acccessMutex->unlock();
emit update();
}

Expand All @@ -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));
Expand Down Expand Up @@ -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));
Expand All @@ -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));
Expand All @@ -170,6 +182,7 @@ void FETable3DData::setWritesEnabled(bool enabled)

QByteArray FETable3DData::data()
{
QMutexLocker locker(m_acccessMutex);
QByteArray data;

unsigned short xaxissize = m_xAxis.size();
Expand Down Expand Up @@ -217,26 +230,31 @@ QByteArray FETable3DData::data()

QList<double> FETable3DData::yAxis()
{
QMutexLocker locker(m_acccessMutex);
return m_yAxis;
}

QList<double> FETable3DData::xAxis()
{
QMutexLocker locker(m_acccessMutex);
return m_xAxis;
}

QList<QList<double> > 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<QPair<QString,double> > metadata)
Expand Down
3 changes: 3 additions & 0 deletions plugins/freeems/fetable3ddata.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
#define FETABLE3DDATA_H

#include <QObject>
#include <QMutex>

#include "table3ddata.h"
#include "table3dmetadata.h"

Expand Down Expand Up @@ -54,6 +56,7 @@ class FETable3DData : public Table3DData
double calcAxis(int val,QList<QPair<QString,double> > metadata);
int backConvertAxis(double val,QList<QPair<QString,double> > metadata);
private:
QMutex *m_acccessMutex;
bool m_writesEnabled;
bool m_isFlashOnly;
unsigned short m_locationId;
Expand Down

0 comments on commit f30aa57

Please sign in to comment.