Skip to content

Commit

Permalink
ConfigData is now used as a base data type like Table2D/3DData, rathe…
Browse files Browse the repository at this point in the history
…r than ConfigBlocks everywhere for individual config data. Also fixed generation of meta.json file. (38,000ft commit!)
  • Loading branch information
Michael Carpenter authored and Michael Carpenter committed Nov 20, 2013
1 parent e9e791f commit 112511f
Show file tree
Hide file tree
Showing 12 changed files with 348 additions and 25 deletions.
9 changes: 9 additions & 0 deletions core/src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1530,6 +1530,15 @@ void MainWindow::emsCommsConnected()
ui.menuWizards->addAction(action);
connect(action,SIGNAL(triggered(bool)),view,SLOT(setVisible(bool)));
}
//virtual QList<QString> getConfigList()=0;
for (int i=0;i<emsComms->getConfigList().size();i++)
{
parameterView->addConfig(emsComms->getConfigList()[i],emsComms->getConfigData(emsComms->getConfigList()[i]));
for (int j=0;j<m_wizardList.size();j++)
{
m_wizardList[i]->addConfig(emsComms->getConfigList()[i],emsComms->getConfigData(emsComms->getConfigList()[i]));
}
}
//New log and settings file here.
if (m_memoryInfoMap.size() == 0)
{
Expand Down
6 changes: 6 additions & 0 deletions core/src/parameterview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ void ParameterView::itemSelectionChanged()
{
return;
}
void ParameterView::addConfig(QString name,ConfigData *data)
{
Q_UNUSED(name)
Q_UNUSED(data)

}

void ParameterView::currentItemChanged(QTreeWidgetItem *current,QTreeWidgetItem *prev)
{
Expand Down
2 changes: 2 additions & 0 deletions core/src/parameterview.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "ui_parameterview.h"
#include "configblock.h"
#include "parameterwidget.h"
#include "configdata.h"
#include "memorymetadata.h"
#include "menusetup.h"
class ParameterView : public QWidget
Expand All @@ -19,6 +20,7 @@ class ParameterView : public QWidget
void passMetaData(MemoryMetaData *metadata);
void updateValues();
double calcAxis(unsigned short val,QList<QPair<QString,double> > metadata);
void addConfig(QString name,ConfigData *data);
private:
MemoryMetaData *m_metaData;
QList<ParameterWidget*> paramWidgetList;
Expand Down
29 changes: 29 additions & 0 deletions core/src/wizardview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ WizardView::WizardView(QWidget *parent) : QDeclarativeView(parent)
{

}
void WizardView::addConfigRequest(QString name)
{
m_configRequestList.append(name);
}

void WizardView::setFile(EmsComms *comms,QString filename)
{
updateTimer = new QTimer(this);
Expand All @@ -29,6 +34,30 @@ void WizardView::passConfig(QMap<QString,QList<ConfigBlock> > config)
}
}
}
void WizardView::addConfig(QString name,ConfigData *config)
{
if (!m_configRequestList.contains(name))
{
//Throw away, we don't care
return;
}
//We don't actually need to hold on to this object (*config), it is garunteed to live for the life
//of the application. Simply connect the signals/slots, and ignore it otherwise.
connect(config,SIGNAL(update()),this,SLOT(configUpdate()));
}
void WizardView::configUpdate()
{
//Config block got updated.
//ConfigData *data = qobject_cast<ConfigData*>(sender());
//if (!data)
//{
//Someone else fired off this signal!
// return;
//}
//this->rootContext()->setContextProperty(data->name(),data->value());

}

void WizardView::configRecieved(ConfigBlock block,QVariant value)
{
m_configPropertyMap[block.name()] = value.toString();
Expand Down
4 changes: 4 additions & 0 deletions core/src/wizardview.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,24 @@ class WizardView : public QDeclarativeView
Q_OBJECT

public:
Q_INVOKABLE void addConfigRequest(QString name);
explicit WizardView(QWidget *parent = 0);
Q_INVOKABLE void setMemory(unsigned short locationid,unsigned short offset,unsigned short length,QVariantList array);
void setFile(EmsComms *comms,QString filename);
void passConfig(QMap<QString,QList<ConfigBlock> > config);
void addConfig(QString name,ConfigData *config);
private:
QDeclarativePropertyMap m_configPropertyMap;
QMap<QString,QList<ConfigBlock> > m_configBlock;
QTimer *updateTimer;
QVariantMap m_savedPayload;
EmsComms *emscomms;
QList<QString> m_configRequestList;
signals:
void payloadDecoded(QVariantMap data);
public slots:
void configRecieved(ConfigBlock,QVariant);
void configUpdate();
private slots:
void decoderPayloadDecoded(QVariantMap values);
void updateTimerTick();
Expand Down
21 changes: 10 additions & 11 deletions lib/core/configdata.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,21 +51,20 @@
#ifndef CONFIGDATA_H
#define CONFIGDATA_H

#include <QList>
#include <QObject>
#include <QVariant>
#include <QString>
#include <QPair>

class ConfigData
class ConfigData : public QObject
{
Q_OBJECT
public:
QString configTitle;
QString configDescription;
unsigned short locationId;
unsigned char offset;
unsigned char elementSize;
QList<QPair<QString,double> > elementCalc;
QString type;
unsigned char arraySize;
virtual void setData(QByteArray data)=0;
virtual QString name()=0;
virtual QVariant value()=0;
virtual void setValue(QVariant value)=0;
signals:
void update();
};

#endif // CONFIGDATA_H
3 changes: 3 additions & 0 deletions lib/core/emscomms.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
#include "datapacketdecoder.h"
#include "memorymetadata.h"
#include "rawdata.h"
#include "configdata.h"
//#include "QsLog.h"

namespace QsLogging
Expand Down Expand Up @@ -107,6 +108,8 @@ class EmsComms : public QThread
virtual Table2DData* get2DTableData(unsigned short locationid)=0;
virtual Table3DData* get3DTableData(unsigned short locationid)=0;
virtual RawData* getRawData(unsigned short locationid)=0;
virtual ConfigData* getConfigData(QString name) = 0;
virtual QList<QString> getConfigList()=0;
//virtual void populateDataFields()=0;
virtual QByteArray generatePacket(QByteArray header,QByteArray payload)=0;
virtual int updateBlockInRam(unsigned short location,unsigned short offset, unsigned short size,QByteArray data)=0;
Expand Down
121 changes: 121 additions & 0 deletions plugins/freeems/feconfigdata.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
#include "feconfigdata.h"

FEConfigData::FEConfigData() : ConfigData()
{
}
FEConfigData::FEConfigData(QString name,QString type, QString override,unsigned short locationid, unsigned short size,unsigned short elementsize,unsigned short offset, QList<QPair<QString,double> > calc)
{
m_name = name;
m_type = type;
m_sizeOverride = override;
m_locationId = locationid;
m_size = size;
m_elementSize = elementsize;
m_offset = offset;
m_calc = calc;
//Size of element is the number of bytes per value
//size is the number of values (1 for value, 1+ for array);

}
QVariant FEConfigData::value()
{
return m_value;
}
void FEConfigData::setValue(QVariant value)
{
if (m_type == "value")
{
double dval = value.toDouble();
unsigned short usval = reverseCalcAxis(dval,m_calc);
QByteArray data;
for (int i=0;i<m_elementSize;i++)
{
data.append(usval << (((m_elementSize-1)-i)*8));
}
emit saveSingleDataToFlash(m_locationId,m_offset,m_elementSize,data);
}
else if (m_type == "array")
{

}
}

void FEConfigData::setData(QByteArray data)
{
if (m_type == "value")
{
if (data.size() < m_offset + m_elementSize)
{
QByteArray newdata = data.mid(m_offset,m_elementSize);
unsigned long val = 0;
for (int i=0;i<m_elementSize;i++)
{
val += newdata[i] << (((m_elementSize-1) - i) * 8);
}
m_value = QVariant(calcAxis(val,m_calc));

}

}
else if (m_type == "array")
{
}
emit update();
}

double FEConfigData::calcAxis(unsigned short val,QList<QPair<QString,double> > metadata)
{
if (metadata.size() == 0)
{
return val;
}
double newval = val;
for (int j=0;j<metadata.size();j++)
{
if (metadata[j].first == "add")
{
newval += metadata[j].second;
}
else if (metadata[j].first == "sub")
{
newval -= metadata[j].second;
}
else if (metadata[j].first == "mult")
{
newval *= metadata[j].second;
}
else if (metadata[j].first == "div")
{
newval /= metadata[j].second;
}
}
return newval;
}
unsigned short FEConfigData::reverseCalcAxis(double val,QList<QPair<QString,double> > metadata)
{
if (metadata.size() == 0)
{
return val;
}
double newval = val;
for (int j=metadata.size()-1;j>=0;j--)
{
if (metadata[j].first == "add")
{
newval -= metadata[j].second;
}
else if (metadata[j].first == "sub")
{
newval += metadata[j].second;
}
else if (metadata[j].first == "mult")
{
newval /= metadata[j].second;
}
else if (metadata[j].first == "div")
{
newval *= metadata[j].second;
}
}
return (unsigned short)newval;
}
57 changes: 57 additions & 0 deletions plugins/freeems/feconfigdata.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#ifndef FECONFIGDATA_H
#define FECONFIGDATA_H

#include "configdata.h"
#include <QPair>
#include <QString>
#include <QList>

class FEConfigData : public ConfigData
{
Q_OBJECT
public:
FEConfigData();
FEConfigData(QString name,QString type, QString override,unsigned short locationid, unsigned short size,unsigned short elementsize,unsigned short offset, QList<QPair<QString,double> > calc);

void setName(QString name) { m_name = name; }
void setType(QString type) { m_type = type; }
void setSizeOverride(QString override) { m_sizeOverride = override; }
void setSizeOverrideMult(double mult) { m_sizeOverrideMult = mult; }
void setLocationId(unsigned short locationid) { m_locationId = locationid; }
void setSize(unsigned short size) { m_size = size; }
void setElementSize(unsigned short size) { m_elementSize = size; }
void setOffset(unsigned short offset) { m_offset = offset; }
void setCalc(QList<QPair<QString,double> > calc) { m_calc = calc; }
QString name() { return m_name; }
QString type() { return m_type; }
QString sizeOverride() { return m_sizeOverride; }
double sizeOverrideMult() { return m_sizeOverrideMult; }
unsigned short locationId() { return m_locationId; }
unsigned short offset() { return m_offset; }
unsigned short size() { return m_size; }
unsigned short elementSize() { return m_elementSize; }
QList<QPair<QString,double> > calc() { return m_calc; }
QVariant value();
void setData(QByteArray data);
void setValue(QVariant value);
double calcAxis(unsigned short val,QList<QPair<QString,double> > metadata);
unsigned short reverseCalcAxis(double val,QList<QPair<QString,double> > metadata);
private:
QVariant m_value;
QString m_name;
QString m_type;
QString m_sizeOverride;
double m_sizeOverrideMult;
unsigned short m_locationId;
unsigned short m_size;
unsigned short m_elementSize;
unsigned short m_offset;
QList<QPair<QString,double> > m_calc;
signals:
void update();
void saveSingleDataToFlash(unsigned short locationid,unsigned short offset, unsigned short size,QByteArray data);
void saveSingleDataToRam(unsigned short locationid,unsigned short offset, unsigned short size,QByteArray data);

};

#endif // FECONFIGDATA_H
6 changes: 4 additions & 2 deletions plugins/freeems/freeems.pro
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,8 @@ HEADERS += datapacketdecoder.h \
rawdata.h \
ferawdata.h \
packetdecoder.h \
packet.h
packet.h \
feconfigdata.h

SOURCES += fedatapacketdecoder.cpp \
fetable2ddata.cpp \
Expand All @@ -84,4 +85,5 @@ SOURCES += fedatapacketdecoder.cpp \
memorylocation.cpp \
emsdata.cpp \
ferawdata.cpp \
packetdecoder.cpp
packetdecoder.cpp \
feconfigdata.cpp
Loading

0 comments on commit 112511f

Please sign in to comment.