This commit is contained in:
jfmartel 2023-01-23 21:22:40 -05:00
parent ed0678081f
commit 145d07754d
35 changed files with 2981 additions and 255 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
*.o *.o
*.pro.user *.pro.user
*~* *~*
/Otarcik_CAN/debug/moc_*.cpp

BIN
Doc interne/Big Endian.xlsx Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -42,7 +42,8 @@ SOURCES += Sources/main.cpp \
Sources/Gui/CANViewerPage.cpp \ Sources/Gui/CANViewerPage.cpp \
Sources/CANDatabase/CANDatabase.cpp \ Sources/CANDatabase/CANDatabase.cpp \
Sources/CANDevice.cpp \ Sources/CANDevice.cpp \
Sources/CANSignal.cpp Sources/CANSignal.cpp \
Sources/SystemConfig.cpp
HEADERS += Sources/MainWindow.h \ HEADERS += Sources/MainWindow.h \
Sources/PCANInterface.h \ Sources/PCANInterface.h \
@ -58,7 +59,8 @@ HEADERS += Sources/MainWindow.h \
Sources/Gui/CANViewerPage.h \ Sources/Gui/CANViewerPage.h \
Sources/CANDatabase/CANDatabase.h \ Sources/CANDatabase/CANDatabase.h \
Sources/CANDevice.h \ Sources/CANDevice.h \
Sources/CANSignal.h Sources/CANSignal.h \
Sources/SystemConfig.h
FORMS += Sources/Gui/MainWindow.ui \ FORMS += Sources/Gui/MainWindow.ui \
Sources/Gui/GeneralStatusPage.ui \ Sources/Gui/GeneralStatusPage.ui \

View File

@ -11,9 +11,10 @@ CCANAnalyzer::CCANAnalyzer(QObject *parent) : QObject(parent)
mIsCANInitialized = false; mIsCANInitialized = false;
mDevicePtr = 0; mDevicePtr = 0;
mDeviceMessagesList = 0; mDeviceMessagesList = 0;
mCANPollPeriod = 0;
mCANReadTimer = new QTimer; mCANReadTimer = new QTimer;
mCANReadTimer->setInterval(200); mCANReadTimer->setInterval(1000);
mCANReadTimer->setSingleShot(true); mCANReadTimer->setSingleShot(true);
connect(mCANReadTimer,SIGNAL(timeout()),this,SLOT(CANTimerExpired())); connect(mCANReadTimer,SIGNAL(timeout()),this,SLOT(CANTimerExpired()));
} }
@ -25,16 +26,21 @@ CCANAnalyzer::~CCANAnalyzer()
delete mCANReadTimer; delete mCANReadTimer;
} }
int CCANAnalyzer::Init(TPCANHandle CANDeviceChannel, TPCANBaudrate CANDeviceBaudrate, QList<CCANMessage *> *MsgList) int CCANAnalyzer::Init(TPCANHandle CANDeviceChannel, TPCANBaudrate CANDeviceBaudrate, QList<CCANMessage *> *MsgList, unsigned int PollPeriod)
{ {
if(MsgList == 0) if(MsgList == 0)
{ {
return RET_GENERAL_ERROR; return RET_GENERAL_ERROR;
} }
if(PollPeriod < 200)
{
PollPeriod = 200;
qDebug("CANAnalyzer:: Trying to init with poll period lower tan 200ms");
}
mCANDeviceChannel = CANDeviceChannel; mCANDeviceChannel = CANDeviceChannel;
mCANPollPeriod = PollPeriod;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage d'un module CAN..."); CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage d'un module CAN...");
mDeviceMessagesList = MsgList; mDeviceMessagesList = MsgList;
@ -47,7 +53,7 @@ int CCANAnalyzer::Init(TPCANHandle CANDeviceChannel, TPCANBaudrate CANDeviceBaud
} }
else else
{ {
// mCANReadTimer->start(); mCANReadTimer->start(mCANPollPeriod);
mIsCANInitialized = true; mIsCANInitialized = true;
} }
@ -94,6 +100,8 @@ void CCANAnalyzer::CANTimerExpired()
delete NewMessagesList.takeFirst(); delete NewMessagesList.takeFirst();
} }
mDevicePtr->NewMessageParsed();
if(NewMessagesList.isEmpty()) if(NewMessagesList.isEmpty())
{ {
@ -101,43 +109,6 @@ void CCANAnalyzer::CANTimerExpired()
return; return;
} }
// for(int i = 0; i < NewMessagesList.size(); i++)
// {
// if(mLastMessagesList.isEmpty())
// {
// mLastMessagesList.append(NewMessagesList.at(i));
// }
// else
// {
// //Check if new message ID for this device already exists in the list.
// bool found = false;
// for(int j = 0; j < mLastMessagesList.size(); j++)
// {
// if(NewMessagesList[i]->mCANChannel == mLastMessagesList[j]->mCANChannel &&
// NewMessagesList[i]->mCANMsgID == mLastMessagesList[j]->mCANMsgID)
// {
// //This message ID is already populated in the list. Update the value and delete the new instance
// mLastMessagesList[j]->mCANMsgData = NewMessagesList[i]->mCANMsgData;
// mLastMessagesList[j]->mCANMsgMicrosecs = NewMessagesList[i]->mCANMsgMicrosecs;
// mLastMessagesList[j]->mCANMsgMillisecs = NewMessagesList[i]->mCANMsgMillisecs;
// mLastMessagesList[j]->mCANMsgMillisecsOverflow = NewMessagesList[i]->mCANMsgMillisecsOverflow;
// delete NewMessagesList[i];
// DeletedPtrs++;
// found = true;
// break;
// }
// }
// if(!found)
// {
// //This is the first time we receive this message, just add it to the list.
// mLastMessagesList.append(NewMessagesList[i]);
// }
// }
// }
NewMessagesList.clear(); NewMessagesList.clear();

View File

@ -21,8 +21,9 @@ public:
CPCANInterface *mCANDriverIF; CPCANInterface *mCANDriverIF;
QTimer *mCANReadTimer; QTimer *mCANReadTimer;
unsigned int mCANPollPeriod;
int Init(TPCANHandle CANDeviceChannel, TPCANBaudrate CANDeviceBaudrate, QList<CCANMessage *> *MsgList); int Init(TPCANHandle CANDeviceChannel, TPCANBaudrate CANDeviceBaudrate, QList<CCANMessage *> *MsgList, unsigned int PollPeriod);
int ReadCAN(); int ReadCAN();
QList<CCANMessage *> *mDeviceMessagesList; QList<CCANMessage *> *mDeviceMessagesList;

View File

@ -40,6 +40,7 @@ int CCANDatabase::LoadDatabaseFile(QString Filename)
// Load the database file // Load the database file
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la base de données %1").arg(Filename),true);
status = kvaDbReadFile(mDatabaseDriverHandle, Filename.toLocal8Bit().data()); status = kvaDbReadFile(mDatabaseDriverHandle, Filename.toLocal8Bit().data());
if (status != kvaDbOK) if (status != kvaDbOK)
{ {

View File

@ -1,9 +1,32 @@
#include "CANDevice.h" #include "CANDevice.h"
#include "OtarcikCan.h"
CCANDevice::CCANDevice(QObject *parent) CCANDevice::CCANDevice(QObject *parent)
{ {
mMessageList.clear(); mMessageList.clear();
mMessagesListLoaded = false; mMessagesListLoaded = false;
mCANAnalyzer.mDevicePtr = this;
mProgramPtr = 0;
mCANDeviceDatabaseFilename.clear();
mCANDeviceID = -1;
mCANDeviceBaudrate = -1;
mDeviceDescription.clear();
mDeviceName.clear();
mDevicePollPeriod = 0;
}
CCANDevice::CCANDevice(CCANDevice &Other)
{
mMessageList.clear();
mMessagesListLoaded = false;
mCANAnalyzer.mDevicePtr = this;
mProgramPtr = 0;
mCANDeviceID = Other.mCANDeviceID;
mCANDeviceBaudrate = Other.mCANDeviceBaudrate;
mCANDeviceDatabaseFilename = Other.mCANDeviceDatabaseFilename;
mDeviceName = Other.mDeviceName;
mDeviceDescription = Other.mDeviceDescription;
} }
CCANDevice::~CCANDevice() CCANDevice::~CCANDevice()
@ -14,26 +37,98 @@ CCANDevice::~CCANDevice()
} }
} }
int CCANDevice::Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName) int CCANDevice::Init()
{ {
mCANDeviceID = CANDeviceID; if(mCANDeviceID < 0 || mCANDeviceBaudrate < 0 || mDevicePollPeriod == 0 || mCANDeviceDatabaseFilename.isEmpty() || mDeviceName.isEmpty())
mCANDeviceBaudrate = CANDeviceBaudRate; {
mCANDeviceDatabaseFilename = DatabaseFileName; qDebug("CCANDevice: trying to initialize a CCANDevice with invalid parameters");
mDeviceDescription = DevDescription; return RET_GENERAL_ERROR;
mDeviceName = DeviceName; }
if(mCANDatabase.Init(DatabaseFileName) == RET_OK) CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation du dispositif [%1]").arg(mDeviceName));
if(mCANDatabase.Init(mCANDeviceDatabaseFilename) == RET_OK)
{ {
if(mCANDatabase.BuildMessageList(&mMessageList) == RET_OK) if(mCANDatabase.BuildMessageList(&mMessageList) == RET_OK)
{ {
mMessagesListLoaded = true; mMessagesListLoaded = true;
mProgramPtr->InitCANViewer(&mMessageList);
} }
else else
{ {
mMessagesListLoaded = false; mMessagesListLoaded = false;
} }
} }
mCANAnalyzer.Init(CANDeviceID,CANDeviceBaudRate,&mMessageList); if(mCANAnalyzer.Init(mCANDeviceID,mCANDeviceBaudrate,&mMessageList,mDevicePollPeriod) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceName),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceName));
return RET_OK;
}
int CCANDevice::Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod)
{
mCANDeviceID = CANDeviceID;
mCANDeviceBaudrate = CANDeviceBaudRate;
mCANDeviceDatabaseFilename = DatabaseFileName;
mDeviceDescription = DevDescription;
mDeviceName = DeviceName;
mDevicePollPeriod = DevicePollPeriod;
Init();
return RET_OK; return RET_OK;
} }
int CCANDevice::NewMessageParsed()
{
mProgramPtr->UpdateCANViewerDataRequest(&mMessageList);
}
QDataStream &operator<<(QDataStream &out, const CCANDevice &source)
{
out << source.mCANDeviceID
<< source.mCANDeviceBaudrate
<< source.mCANDeviceDatabaseFilename
<< source.mDeviceDescription
<< source.mDeviceName
<< source.mDevicePollPeriod;
return out;
}
QDataStream &operator>>(QDataStream &in, CCANDevice &dest)
{
in >> dest.mCANDeviceID
>> dest.mCANDeviceBaudrate
>> dest.mCANDeviceDatabaseFilename
>> dest.mDeviceDescription
>> dest.mDeviceName
>> dest.mDevicePollPeriod;
return in;
}
//CAREFUL!!! OPERATOR = DOES NOT COPY THE MESSAGES, ONLY THE DEVICE DESCRIPTION !!//
CCANDevice& CCANDevice::operator=(const CCANDevice *source)
{
if(source == this)
{
return *this;
}
this->mCANDeviceID = source->mCANDeviceID;
this->mCANDeviceBaudrate = source->mCANDeviceBaudrate;
this->mCANDeviceDatabaseFilename = source->mCANDeviceDatabaseFilename;
this->mDeviceDescription = source->mDeviceDescription;
this->mDeviceName = source->mDeviceName;
this->mDevicePollPeriod = source->mDevicePollPeriod;
return *this;
}

View File

@ -10,15 +10,18 @@
#include <QList> #include <QList>
#include "PCANBasic.h" #include "PCANBasic.h"
class COtarcikCan;
class CCANDevice : public QObject class CCANDevice : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CCANDevice(QObject *parent = 0); explicit CCANDevice(QObject *parent = 0);
CCANDevice(CCANDevice &Other);
~CCANDevice(); ~CCANDevice();
int Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName); int Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod);
int Init();
public: public:
TPCANHandle mCANDeviceID; TPCANHandle mCANDeviceID;
@ -26,6 +29,8 @@ public:
QString mCANDeviceDatabaseFilename; QString mCANDeviceDatabaseFilename;
QString mDeviceDescription; QString mDeviceDescription;
QString mDeviceName; QString mDeviceName;
COtarcikCan *mProgramPtr;
unsigned int mDevicePollPeriod;
bool mMessagesListLoaded; bool mMessagesListLoaded;
CCANAnalyzer mCANAnalyzer; //The module that handles the USB puck and decodes the data CCANAnalyzer mCANAnalyzer; //The module that handles the USB puck and decodes the data
@ -33,9 +38,19 @@ public:
QList<CCANMessage*> mMessageList; QList<CCANMessage*> mMessageList;
CCANDevice &operator=(const CCANDevice *source);
int NewMessageParsed();
private:
bool mConfigSet;
signals: signals:
public slots: public slots:
}; };
QDataStream &operator<<(QDataStream &out, const CCANDevice &source);
QDataStream &operator>>(QDataStream &in, CCANDevice &dest);
#endif // CANDEVICE_H #endif // CANDEVICE_H

View File

@ -68,20 +68,26 @@ int CCANMessage::UpdateValue(CCANMessage *NewDeviceMessage)
mCANMsgData = QByteArray(NewDeviceMessage->mCANMsgData); mCANMsgData = QByteArray(NewDeviceMessage->mCANMsgData);
// if(NewDeviceMessage->mCANMsgID == 0x524)
// int toto = 5;
mCANRawDataMotorola = mCANRawDataIntel= 0; mCANRawDataMotorola = mCANRawDataIntel= 0;
for(int i = 0; i < mCANMsgLength; i++) for(unsigned int i = 0; i < mCANMsgLength; i++)
{ {
mCANRawDataIntel += mCANMsgData[i]; mCANRawDataIntel += ((unsigned char)(mCANMsgData[i]) & 0xFF);
mCANRawDataMotorola += mCANMsgData[(mCANMsgLength - 1) - i]; mCANRawDataMotorola += ((unsigned char)(mCANMsgData[(mCANMsgLength - 1) - i]) & 0xFF);
mCANRawDataIntel <<= 8; if(i < mCANMsgLength-1)
mCANRawDataMotorola <<= 8; {
mCANRawDataIntel <<= 8;
mCANRawDataMotorola <<= 8;
}
} }
for(int i = 0; i < mSignalsList.size(); i++) for(int i = 0; i < mSignalsList.size(); i++)
{ {
mSignalsList.at(i)->ComputeNewSignalValue(mCANRawDataMotorola,mCANRawDataIntel); mSignalsList.at(i)->ComputeNewSignalValue(mCANRawDataIntel, mCANMsgLength);
} }

View File

@ -1,32 +1,45 @@
#include "CANSignal.h" #include "CANSignal.h"
#include "defines.h" #include "defines.h"
CCANSignal::CCANSignal() CCANSignal::CCANSignal()
{ {
mEncoding = CAN_SIGNAL_ENCODING_INVALID; mEncoding = CAN_SIGNAL_ENCODING_INVALID;
} }
int CCANSignal::ComputeNewSignalValue(quint64 MotorolaValue, quint64 IntelValue) int CCANSignal::ComputeNewSignalValue(quint64 NewValue, quint16 MessageSize)
{ {
if(mEncoding == CAN_SIGNAL_ENCODING_INTEL) if(mEncoding == CAN_SIGNAL_ENCODING_INTEL)
{ {
mRawValue = IntelValue; //TODO: trouver un device qui crache du intel??
mRawValue = NewValue;
} }
else if(mEncoding == CAN_SIGNAL_ENCODING_MOTOROLA) else if(mEncoding == CAN_SIGNAL_ENCODING_MOTOROLA)
{ {
mRawValue = MotorolaValue; //mRawValue = MotorolaValue;
mRawValue = NewValue;
int StartIndex = mStartBit - (mStartBit % 8) + 7 - (mStartBit % 8);
int shift = ((MessageSize * 8) - StartIndex -1);
mRawValue >>= shift;
quint64 mask = 1;
mask <<= mSignalSize;
mask -= 1;
mRawValue &= mask;
} }
else else
{ {
return RET_GENERAL_ERROR; return RET_GENERAL_ERROR;
} }
mRawValue >>= mStartBit; // mRawValue >>= mStartBit;
quint64 mask = ((1 << mSignalSize)-1); // quint64 mask = ((1 << mSignalSize)-1);
mRawValue &= mask; // mRawValue &= mask;
mPhysicalValue = ((double) mRawValue * mValueFactor) + mValueOffset;
mPhysicalValue = ((signed) mRawValue * mValueFactor) + mValueOffset;
// mPhysicalValue = (test * mValueFactor) + mValueOffset;
//mPhysicalValue = test;

View File

@ -49,13 +49,13 @@ public:
unsigned int mValueType; unsigned int mValueType;
double mValueFactor; double mValueFactor;
double mValueOffset; double mValueOffset;
double mMinValue; int mMinValue;
double mMaxValue; int mMaxValue;
QString mSignalUnit; QString mSignalUnit;
int ComputeNewSignalValue(quint64 MotorolaValue, quint64 IntelValue); int ComputeNewSignalValue(quint64 NewValue, quint16 MessageSize);
private:
quint64 mRawValue; quint64 mRawValue;
double mPhysicalValue; double mPhysicalValue;

View File

@ -6,10 +6,25 @@ CCANViewerPage::CCANViewerPage(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::CCANViewerPage) ui(new Ui::CCANViewerPage)
{ {
mMsgList = 0;
ui->setupUi(this); ui->setupUi(this);
ui->mCANDataTableWidget->setColumnCount(6); ui->mCANDataTableWidget->setColumnCount(6);
ui->mCANDataTableWidget->setHorizontalHeaderLabels(QStringList() << "Time" << "Channel" << "Msg ID" << "Msg Type" << "Msg Length" << "Data"); ui->mCANDataTableWidget->setHorizontalHeaderLabels(QStringList() << "Time" << "Channel" << "Msg ID" << "Msg Type" << "Msg Length" << "Data");
ui->mCANDataTableWidget->clearContents();
ui->mCANDataTableWidget->setRowCount(0);
ui->mCANDataTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->mCANSignalTableWidget->setColumnCount(4);
ui->mCANSignalTableWidget->setHorizontalHeaderLabels(QStringList() << "Nom du signal" << "Val. physique" << "Val. brute" << "Unités");
connect(ui->mCANDataTableWidget,&QTableWidget::itemSelectionChanged,this,&CCANViewerPage::MessageSelectionChanged);
} }
CCANViewerPage::~CCANViewerPage() CCANViewerPage::~CCANViewerPage()
@ -17,52 +32,167 @@ CCANViewerPage::~CCANViewerPage()
delete ui; delete ui;
} }
int CCANViewerPage::UpdateCANTable(QList<CCANMessage *> MsgList) int CCANViewerPage::InitCANTable(QList<CCANMessage *> *MsgList)
{ {
for(int Col = 0; Col < ui->mCANDataTableWidget->columnCount(); Col++) if(MsgList == 0)
{ {
for(int Row = 0; Row < ui->mCANDataTableWidget->rowCount(); Row++) return RET_GENERAL_ERROR;
{
delete ui->mCANDataTableWidget->item(Row,Col);
}
} }
ui->mCANDataTableWidget->clearContents();
ui->mCANDataTableWidget->setRowCount(0);
ui->mCANDataTableWidget->setRowCount(MsgList.size()); mMsgList = MsgList;
for(int Msg = 0; Msg < MsgList.size(); Msg++)
int row = ui->mCANDataTableWidget->rowCount();
ui->mCANDataTableWidget->setRowCount(MsgList->size());
for(int Msg = 0; Msg < MsgList->size(); Msg++)
{ {
QTableWidgetItem *NewItem; QTableWidgetItem *NewItem;
NewItem = new QTableWidgetItem("Time"); NewItem = new QTableWidgetItem("Time");
ui->mCANDataTableWidget->setItem(Msg,0,NewItem); ui->mCANDataTableWidget->setItem(row,0,NewItem);
//Set chanel value //Set Msg name
NewItem = new QTableWidgetItem(QString("%1").arg(MsgList.at(Msg)->mCANChannel)); NewItem = new QTableWidgetItem(QString("%1").arg(MsgList->at(Msg)->mCANMsgName));
ui->mCANDataTableWidget->setItem(Msg,1,NewItem); ui->mCANDataTableWidget->setItem(row,1,NewItem);
//Set message ID value //Set message ID value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList.at(Msg)->mCANMsgID,0,16)); NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgID,0,16));
ui->mCANDataTableWidget->setItem(Msg,2,NewItem); ui->mCANDataTableWidget->setItem(row,2,NewItem);
NewItem->setData(Qt::UserRole,MsgList->at(Msg)->mCANMsgID); //Set message ID as reference to easily find the row when updating...
//Set message type value //Set message type value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList.at(Msg)->mCANMsgType,0,16)); NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgType,0,16));
ui->mCANDataTableWidget->setItem(Msg,3,NewItem); ui->mCANDataTableWidget->setItem(row,3,NewItem);
//Set message length value //Set message length value
NewItem = new QTableWidgetItem(QString("%1").arg(MsgList.at(Msg)->mCANMsgLength)); NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(Msg,4,NewItem); ui->mCANDataTableWidget->setItem(row,4,NewItem);
//Set data value NewItem = new QTableWidgetItem(QString(" "));
QString Data; ui->mCANDataTableWidget->setItem(row,5,NewItem);
for(int i = 0; i < MsgList.at(Msg)->mCANMsgLength; i++)
{ row++;
unsigned char DataByte = MsgList.at(Msg)->mCANMsgData.at(i);
Data.append(QString("%1 ").arg(DataByte,2,16,QLatin1Char('0')));
}
NewItem = new QTableWidgetItem(Data); // //Set data value
ui->mCANDataTableWidget->setItem(Msg,5,NewItem); // QString Data;
// for(unsigned int i = 0; i < MsgList->at(Msg)->mCANMsgLength; i++)
// {
// unsigned char DataByte = MsgList->at(Msg)->mCANMsgData.at(i);
// Data.append(QString("%1 ").arg(DataByte,2,16,QLatin1Char('0')));
// }
// NewItem = new QTableWidgetItem(Data);
// ui->mCANDataTableWidget->setItem(Msg,5,NewItem);
} }
// ui->mCANSignalTableWidget->setCurrentItem(ui->mCANDataTableWidget->item(0,0));
// MessageSelectionChanged();
return RET_OK;
}
int CCANViewerPage::UpdateCANTable(QList<CCANMessage *> *MsgList)
{
//Find the row of each message and update values in table
for(int msg = 0; msg < MsgList->size(); msg++)
{
int row = 0;
for(row = 0; row < ui->mCANDataTableWidget->rowCount(); row++)
{
// if(ui->mCANDataTableWidget->item(row,2)->text() == QString("0x%1").arg(MsgList->at(msg)->mCANMsgID,0,16))
if(ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt() == MsgList->at(msg)->mCANMsgID)
{
//Set message length value
ui->mCANDataTableWidget->item(row,4)->setText(QString("%1").arg(MsgList->at(msg)->mCANMsgLength));
QString Data;
for(int byte = 0; byte < MsgList->at(msg)->mCANMsgData.size();byte++)
{
// Data.append(QString("%1 ").arg((unsigned int)MsgList->at(msg)->mCANMsgData.at(byte),2,16));
Data.append(QString().sprintf("%.2X ",(unsigned char)MsgList->at(msg)->mCANMsgData.at(byte)));
}
ui->mCANDataTableWidget->item(row,5)->setText(Data);
}
}
}
// UpdateSignalsTable();
MessageSelectionChanged();
return RET_OK; return RET_OK;
} }
void CCANViewerPage::MessageSelectionChanged()
{
if(mMsgList == 0)
{
return;
}
ui->mCANSignalTableWidget->clearContents();
//Find message based on current table selection
int row = ui->mCANDataTableWidget->currentRow();
if(row == -1)
return;
for (int msg = 0; msg < mMsgList->size(); msg++)
{
unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt();
if(ID == mMsgList->at(msg)->mCANMsgID)
{
CCANMessage *Msg = mMsgList->at(msg);
ui->mCANSignalTableWidget->clearContents();
ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size());
for(int signal = 0; signal < Msg->mSignalsList.size(); signal++)
{
//Signal name
QTableWidgetItem *NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal)->mSignalName);
ui->mCANSignalTableWidget->setItem(signal,0,NewItem);
//Phys value
NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal)->mPhysicalValue,0,'f',1));
ui->mCANSignalTableWidget->setItem(signal,1,NewItem);
//Raw value
NewItem = new QTableWidgetItem(QString("0x%1").arg(Msg->mSignalsList.at(signal)->mRawValue,0,16));
ui->mCANSignalTableWidget->setItem(signal,2,NewItem);
//Units
NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal)->mSignalUnit);
ui->mCANSignalTableWidget->setItem(signal,3,NewItem);
}
}
}
}
int CCANViewerPage::UpdateSignalsTable()
{
int row = ui->mCANDataTableWidget->currentRow();
for (int msg = 0; msg < mMsgList->size(); msg++)
{
unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt();
if(ID == mMsgList->at(msg)->mCANMsgID)
{
CCANMessage *Msg = mMsgList->at(msg);
ui->mCANSignalTableWidget->clearContents();
ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size());
for(int signal = 0; signal < Msg->mSignalsList.size(); signal++)
{
//Signal name
ui->mCANSignalTableWidget->item(row,0)->setText(Msg->mSignalsList.at(signal)->mSignalName);
//Phys value
ui->mCANSignalTableWidget->item(row,0)->setText(QString("%1").arg(Msg->mSignalsList.at(signal)->mPhysicalValue,0,'f',1));
//Raw value
ui->mCANSignalTableWidget->item(row,0)->setText(QString("0x%1").arg(Msg->mSignalsList.at(signal)->mRawValue,0,16));
//Units
ui->mCANSignalTableWidget->item(row,0)->setText(Msg->mSignalsList.at(signal)->mSignalUnit);
}
}
}
}

View File

@ -18,7 +18,15 @@ public:
~CCANViewerPage(); ~CCANViewerPage();
int UpdateCANTable(QList<CCANMessage*> MsgList); int UpdateCANTable(QList<CCANMessage*> *MsgList);
int InitCANTable(QList<CCANMessage*> *MsgList);
int UpdateSignalsTable();
QList<CCANMessage*> *mMsgList;
public slots:
void MessageSelectionChanged();
private: private:
Ui::CCANViewerPage *ui; Ui::CCANViewerPage *ui;

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1140</width> <width>1848</width>
<height>581</height> <height>581</height>
</rect> </rect>
</property> </property>
@ -18,7 +18,7 @@
<rect> <rect>
<x>30</x> <x>30</x>
<y>60</y> <y>60</y>
<width>1051</width> <width>671</width>
<height>411</height> <height>411</height>
</rect> </rect>
</property> </property>
@ -36,6 +36,16 @@
<string>Reset</string> <string>Reset</string>
</property> </property>
</widget> </widget>
<widget class="QTableWidget" name="mCANSignalTableWidget">
<property name="geometry">
<rect>
<x>720</x>
<y>60</y>
<width>831</width>
<height>411</height>
</rect>
</property>
</widget>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>

View File

@ -22,6 +22,14 @@
<height>451</height> <height>451</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<family>System</family>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="readOnly"> <property name="readOnly">
<bool>true</bool> <bool>true</bool>
</property> </property>

View File

@ -2,9 +2,7 @@
#include "ui_ProgramSettingsPage.h" #include "ui_ProgramSettingsPage.h"
#include "CANDevice.h" #include "CANDevice.h"
//#include "CANMessage.h" #include "OtarcikCan.h"
//#include "CANSignal.h"
//#include "PCANBasic.h"
CProgramSettingsPage::CProgramSettingsPage(QWidget *parent) : CProgramSettingsPage::CProgramSettingsPage(QWidget *parent) :
@ -13,11 +11,13 @@ CProgramSettingsPage::CProgramSettingsPage(QWidget *parent) :
{ {
ui->setupUi(this); ui->setupUi(this);
mProgramPtr = 0;
mDevicesList = 0; mDevicesList = 0;
ui->mDBSignalDetailsTable->setColumnCount(10); ui->mDBSignalDetailsTable->setColumnCount(10);
ui->mDBSignalDetailsTable->setHorizontalHeaderLabels(QStringList() << "Signal" << "Bit No" << "Length" << "Type" << "Max Val" << "Min Val" << "Offset" << "Scale factor" << "Unit" << "Byte order"); ui->mDBSignalDetailsTable->setHorizontalHeaderLabels(QStringList() << "Signal" << "Bit No" << "Length" << "Type" << "Max Val" << "Min Val" << "Offset" << "Scale factor" << "Unit" << "Byte order");
ui->mDevicePollPeriodSpinBx->setRange(200,60000);
ui->mCANBaudrateComboBx->clear(); ui->mCANBaudrateComboBx->clear();
@ -59,10 +59,14 @@ CProgramSettingsPage::CProgramSettingsPage(QWidget *parent) :
ui->mDatabaseFileSelectBtn->hide(); ui->mDatabaseFileSelectBtn->hide();
ui->mCANBaudrateComboBx->setEnabled(false); ui->mCANBaudrateComboBx->setEnabled(false);
ui->mCANIDComboBx->setEnabled(false); ui->mCANIDComboBx->setEnabled(false);
ui->mDevicePollPeriodSpinBx->setEnabled(false);
ui->mCancelModifyParamsBtn->hide();
connect(ui->mDevicesList,&QListWidget::itemSelectionChanged,this,&CProgramSettingsPage::DeviceSelectionChanged); connect(ui->mDevicesList,&QListWidget::itemSelectionChanged,this,&CProgramSettingsPage::DeviceSelectionChanged);
connect(ui->mDBMessagesListWidget,&QListWidget::itemSelectionChanged,this,&CProgramSettingsPage::MessageSelectionChanged); connect(ui->mDBMessagesListWidget,&QListWidget::itemSelectionChanged,this,&CProgramSettingsPage::MessageSelectionChanged);
connect(ui->mModifyDevParamsBtn,&QPushButton::clicked,this,&CProgramSettingsPage::ModifyDeviceBtnPressed); connect(ui->mModifyDevParamsBtn,&QPushButton::clicked,this,&CProgramSettingsPage::ModifyDeviceBtnPressed);
connect(ui->mCancelModifyParamsBtn,&QPushButton::clicked,this,&CProgramSettingsPage::CancelModifyDevBtnPressed);
// connect(ui->mDBSignalDetailsTable,&QTableWidget::itemSelectionChanged,this,&CProgramSettingsPage::SignalSelectionChanged); // connect(ui->mDBSignalDetailsTable,&QTableWidget::itemSelectionChanged,this,&CProgramSettingsPage::SignalSelectionChanged);
} }
@ -128,6 +132,9 @@ int CProgramSettingsPage::UpdatePage()
ui->mCANIDComboBx->setCurrentIndex(ui->mCANIDComboBx->findData(Device->mCANDeviceID)); ui->mCANIDComboBx->setCurrentIndex(ui->mCANIDComboBx->findData(Device->mCANDeviceID));
ui->mDeviceDescriptionTxtEdit->setPlainText(Device->mDeviceDescription); ui->mDeviceDescriptionTxtEdit->setPlainText(Device->mDeviceDescription);
ui->mDatabaseFileNameLbl->setText(QString("Database: %1").arg(Device->mCANDeviceDatabaseFilename)); ui->mDatabaseFileNameLbl->setText(QString("Database: %1").arg(Device->mCANDeviceDatabaseFilename));
// ui->mDevicePollPeriodSpinBx->setEnabled(true);
ui->mDevicePollPeriodSpinBx->setValue(Device->mDevicePollPeriod);
// ui->mDevicePollPeriodSpinBx->setEnabled(false);
//update device database information //update device database information
ui->mDBMessagesListWidget->clear(); ui->mDBMessagesListWidget->clear();
@ -208,15 +215,42 @@ int CProgramSettingsPage::UpdateMessageInformation()
ui->mDBSignalDetailsTable->setItem(Sig,2,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,2,NewItem);
//Type //Type
NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mValueType)); switch(Signal->mValueType)
{
case CCANSignal::CAN_SIGNAL_TYPE_INVALID:
{
NewItem = new QTableWidgetItem(QString("INVALIDE"));
break;
}
case CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT:
{
NewItem = new QTableWidgetItem(QString("int"));
break;
}
case CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT:
{
NewItem = new QTableWidgetItem(QString("uint"));
break;
}
case CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT:
{
NewItem = new QTableWidgetItem(QString("Float_32"));
break;
}
case CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE:
{
NewItem = new QTableWidgetItem(QString("Double"));
break;
}
}
ui->mDBSignalDetailsTable->setItem(Sig,3,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,3,NewItem);
//Max Val //Max Val
NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mMaxValue,0,'f',1)); NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mMaxValue));
ui->mDBSignalDetailsTable->setItem(Sig,4,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,4,NewItem);
//Min Val //Min Val
NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mMinValue,0,'f',1)); NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mMinValue));
ui->mDBSignalDetailsTable->setItem(Sig,5,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,5,NewItem);
//Offset //Offset
@ -232,7 +266,26 @@ int CProgramSettingsPage::UpdateMessageInformation()
ui->mDBSignalDetailsTable->setItem(Sig,8,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,8,NewItem);
//Endian //Endian
NewItem = new QTableWidgetItem(QString("%1").arg(Signal->mValueType)); switch(Signal->mEncoding)
{
case CCANSignal::CAN_SIGNAL_ENCODING_INTEL:
{
NewItem = new QTableWidgetItem(QString("Intel"));
break;
}
case CCANSignal::CAN_SIGNAL_ENCODING_MOTOROLA:
{
NewItem = new QTableWidgetItem(QString("Motorola"));
break;
}
case CCANSignal::CAN_SIGNAL_ENCODING_INVALID:
{
NewItem = new QTableWidgetItem(QString("INVALID"));
break;
}
}
ui->mDBSignalDetailsTable->setItem(Sig,9,NewItem); ui->mDBSignalDetailsTable->setItem(Sig,9,NewItem);
} }
@ -259,22 +312,47 @@ void CProgramSettingsPage::ModifyDeviceBtnPressed()
{ {
if(mDeviceChangeModeEnabled) if(mDeviceChangeModeEnabled)
{ {
//Save Data
ui->mDeviceDescriptionTxtEdit->setEnabled(false); ui->mDeviceDescriptionTxtEdit->setEnabled(false);
ui->mDatabaseFileSelectBtn->hide(); ui->mDatabaseFileSelectBtn->hide();
ui->mCANBaudrateComboBx->setEnabled(false); ui->mCANBaudrateComboBx->setEnabled(false);
ui->mCANIDComboBx->setEnabled(false); ui->mCANIDComboBx->setEnabled(false);
ui->mDevicesList->setEnabled(true); ui->mDevicesList->setEnabled(true);
ui->mDevicePollPeriodSpinBx->setEnabled(false);
ui->mModifyDevParamsBtn->setText("Modifier"); ui->mModifyDevParamsBtn->setText("Modifier");
ui->mCancelModifyParamsBtn->hide();
mDeviceChangeModeEnabled = false; mDeviceChangeModeEnabled = false;
} }
else else
{ {
//Modify data
ui->mDeviceDescriptionTxtEdit->setEnabled(true); ui->mDeviceDescriptionTxtEdit->setEnabled(true);
ui->mDatabaseFileSelectBtn->show(); ui->mDatabaseFileSelectBtn->show();
ui->mCANBaudrateComboBx->setEnabled(true); ui->mCANBaudrateComboBx->setEnabled(true);
ui->mCANIDComboBx->setEnabled(true); ui->mCANIDComboBx->setEnabled(true);
ui->mDevicesList->setEnabled(false); ui->mDevicesList->setEnabled(false);
ui->mDevicePollPeriodSpinBx->setEnabled(true);
ui->mModifyDevParamsBtn->setText("Sauvegarder"); ui->mModifyDevParamsBtn->setText("Sauvegarder");
ui->mCancelModifyParamsBtn->show();
mDeviceChangeModeEnabled = true; mDeviceChangeModeEnabled = true;
} }
} }
void CProgramSettingsPage::CancelModifyDevBtnPressed()
{
ui->mDeviceDescriptionTxtEdit->setEnabled(false);
ui->mDatabaseFileSelectBtn->hide();
ui->mCANBaudrateComboBx->setEnabled(false);
ui->mCANIDComboBx->setEnabled(false);
ui->mDevicesList->setEnabled(true);
ui->mDevicePollPeriodSpinBx->setEnabled(false);
ui->mModifyDevParamsBtn->setText("Modifier");
ui->mCancelModifyParamsBtn->hide();
mDeviceChangeModeEnabled = false;
UpdatePage();
}

View File

@ -6,6 +6,7 @@
class CCANDevice; class CCANDevice;
class CCANMessage; class CCANMessage;
class CCANSignal; class CCANSignal;
class COtarcikCan;
namespace Ui { namespace Ui {
@ -26,6 +27,8 @@ public:
int UpdateMessageInformation(); int UpdateMessageInformation();
COtarcikCan *mProgramPtr;
private: private:
Ui::CProgramSettingsPage *ui; Ui::CProgramSettingsPage *ui;
QList<CCANDevice *> *mDevicesList; QList<CCANDevice *> *mDevicesList;
@ -36,6 +39,7 @@ public slots:
void SignalSelectionChanged(); void SignalSelectionChanged();
void MessageSelectionChanged(); void MessageSelectionChanged();
void ModifyDeviceBtnPressed(); void ModifyDeviceBtnPressed();
void CancelModifyDevBtnPressed();
}; };
#endif // PROGRAMSETTINGSPAGE_H #endif // PROGRAMSETTINGSPAGE_H

View File

@ -57,10 +57,10 @@
<widget class="QGroupBox" name="mDeviceParamsGroupBox"> <widget class="QGroupBox" name="mDeviceParamsGroupBox">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>280</x> <x>270</x>
<y>100</y> <y>100</y>
<width>311</width> <width>321</width>
<height>331</height> <height>371</height>
</rect> </rect>
</property> </property>
<property name="title"> <property name="title">
@ -128,60 +128,11 @@
</rect> </rect>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="mDeviceDatabaseLbl">
<property name="geometry">
<rect>
<x>10</x>
<y>100</y>
<width>111</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Fichier database:</string>
</property>
</widget>
<widget class="QLabel" name="mDatabaseFileNameLbl">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>301</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Fichier...</string>
</property>
</widget>
<widget class="QPushButton" name="mDatabaseFileSelectBtn">
<property name="geometry">
<rect>
<x>280</x>
<y>120</y>
<width>31</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
<widget class="QPushButton" name="mModifyDevParamsBtn"> <widget class="QPushButton" name="mModifyDevParamsBtn">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>20</x> <x>220</x>
<y>300</y> <y>330</y>
<width>80</width> <width>80</width>
<height>22</height> <height>22</height>
</rect> </rect>
@ -194,23 +145,115 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>10</x>
<y>180</y> <y>210</y>
<width>291</width> <width>291</width>
<height>101</height> <height>101</height>
</rect> </rect>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="label_3"> <widget class="QLabel" name="mRefreshRateLbl">
<property name="geometry">
<rect>
<x>10</x>
<y>182</y>
<width>181</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Période rafraîchissement (ms):</string>
</property>
</widget>
<widget class="QGroupBox" name="mDeviceDatabaseGrpBx">
<property name="geometry">
<rect>
<x>10</x>
<y>100</y>
<width>301</width>
<height>51</height>
</rect>
</property>
<property name="title">
<string>Base de données</string>
</property>
<widget class="QLabel" name="mDatabaseFileNameLbl">
<property name="geometry">
<rect>
<x>0</x>
<y>27</y>
<width>301</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Fichier...</string>
</property>
</widget>
<widget class="QPushButton" name="mDatabaseFileSelectBtn">
<property name="geometry">
<rect>
<x>270</x>
<y>24</y>
<width>31</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>...</string>
</property>
</widget>
</widget>
<widget class="QLabel" name="mCANBaudrateLbl_3">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>10</x>
<y>160</y> <y>160</y>
<width>81</width> <width>91</width>
<height>16</height> <height>16</height>
</rect> </rect>
</property> </property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>Description</string> <string>CAN Baudrate:</string>
</property>
</widget>
<widget class="QSpinBox" name="mDevicePollPeriodSpinBx">
<property name="geometry">
<rect>
<x>200</x>
<y>180</y>
<width>91</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QPushButton" name="mCancelModifyParamsBtn">
<property name="geometry">
<rect>
<x>30</x>
<y>330</y>
<width>80</width>
<height>22</height>
</rect>
</property>
<property name="text">
<string>Annuler</string>
</property> </property>
</widget> </widget>
</widget> </widget>

View File

@ -30,6 +30,7 @@ COtarcikCan::~COtarcikCan()
delete mCANDevicesList.takeFirst(); delete mCANDevicesList.takeFirst();
} }
mCANDevicesList.clear(); mCANDevicesList.clear();
mMainWindow.mProgramSettingsPage->mProgramPtr = this;
} }
@ -37,26 +38,83 @@ int COtarcikCan::Start()
{ {
mMainWindow.show(); mMainWindow.show();
CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage); CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage);
CGeneralMessagesLogDispatcher::instance()->Init(); CGeneralMessagesLogDispatcher::instance()->Init();
CCANDevice *NewCANDevice = new CCANDevice(); CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
mCANDevicesList.append(NewCANDevice);
NewCANDevice->Init("IVT-S_all-variations_12082020.dbc",PCAN_USBBUS1,PCAN_BAUD_500K,"Puck CAN USB branchée sur le module Parker qui contrôle la patente", "Module Parker"); if(mSystemConfig.LoadConfig(&mCANDevicesList) == RET_OK)
{
for(int i = 0; i < mCANDevicesList.size(); i++)
{
mCANDevicesList[i]->mProgramPtr = this;
mCANDevicesList.at(i)->Init();
NewCANDevice = new CCANDevice(); }
mCANDevicesList.append(NewCANDevice);
NewCANDevice->Init("Database.dbc",PCAN_USBBUS3,PCAN_BAUD_800K,"Puck CAN USB branchée sur une autre patente", "Module Cossin");
mMainWindow.mProgramSettingsPage->SetDevicesList(&mCANDevicesList); mMainWindow.mProgramSettingsPage->SetDevicesList(&mCANDevicesList);
// CCANDevice *NewCANDevice = new CCANDevice();
// mCANDevicesList.append(NewCANDevice);
// NewCANDevice->mProgramPtr = this;
// NewCANDevice->Init("IVT-S_all-variations_12082020.dbc",PCAN_USBBUS1,PCAN_BAUD_500K,"Puck CAN USB branchée sur le module Parker qui contrôle la patente", "Module Parker",1000);
// NewCANDevice = new CCANDevice();
// mCANDevicesList.append(NewCANDevice);
// NewCANDevice->mProgramPtr = this;
// NewCANDevice->Init("mazda_3_2019.dbc",PCAN_USBBUS3,PCAN_BAUD_800K,"Puck CAN USB branchée sur une autre patente", "Module Cossin",200);
}
return 0; return 0;
} }
int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> MsgList) int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList)
{ {
return mMainWindow.mCANViewerPage->UpdateCANTable(MsgList); return mMainWindow.mCANViewerPage->UpdateCANTable(MsgList);
} }
int COtarcikCan::InitCANViewer(QList<CCANMessage *> *MsgList)
{
return mMainWindow.mCANViewerPage->InitCANTable(MsgList);
}
int COtarcikCan::SaveSystemConfigRequest(QList<CCANDevice *> *DevicesList)
{
if(DevicesList == 0)
{
qDebug("COtarcikCan::Trying to save a config with an invalid devices list");
return RET_GENERAL_ERROR;
}
if(mSystemConfig.SaveConfig(DevicesList) == RET_OK)
{
while(mCANDevicesList.size() != 0)
{
delete mCANDevicesList.takeFirst();
}
while(DevicesList->size() != 0)
{
delete DevicesList->takeFirst();
}
if(mSystemConfig.LoadConfig(&mCANDevicesList) == RET_OK)
{
for(int i = 0; i < mCANDevicesList.size(); i++)
{
mCANDevicesList[i]->mProgramPtr = this;
mCANDevicesList.at(i)->Init();
}
mMainWindow.mProgramSettingsPage->SetDevicesList(&mCANDevicesList);
}
}
}

View File

@ -7,6 +7,7 @@
#include "GeneralMessagesLogDispatcher.h" #include "GeneralMessagesLogDispatcher.h"
#include "CANDevice.h" #include "CANDevice.h"
#include <QList> #include <QList>
#include "SystemConfig.h"
class COtarcikCan : public QObject class COtarcikCan : public QObject
{ {
@ -15,11 +16,16 @@ public:
explicit COtarcikCan(QObject *parent = 0); explicit COtarcikCan(QObject *parent = 0);
~COtarcikCan(); ~COtarcikCan();
CMainWindow mMainWindow; CMainWindow mMainWindow;
CSystemConfig mSystemConfig;
int Start(); int Start();
int UpdateCANViewerDataRequest(QList<CCANMessage*> MsgList); int InitCANViewer(QList<CCANMessage *> *MsgList);
int UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList);
int SaveSystemConfigRequest(QList<CCANDevice*> *DevicesList);
private: private:
QList<CCANDevice*> mCANDevicesList; QList<CCANDevice*> mCANDevicesList;

View File

@ -94,14 +94,14 @@ QList<CCANMessage *> CPCANInterface::ReadCANFullBuffer(unsigned short Channel)
CCANMessage *NewMsg = new CCANMessage(Channel,CANMsg,CANTimeStamp); CCANMessage *NewMsg = new CCANMessage(Channel,CANMsg,CANTimeStamp);
MessagesList.append(NewMsg); MessagesList.append(NewMsg);
// We process the received message // // We process the received message
qDebug("Type: 0x%X ",CANMsg.MSGTYPE); // qDebug("Type: 0x%X ",CANMsg.MSGTYPE);
qDebug("ID: 0x%X",CANMsg.ID); // qDebug("ID: 0x%X",CANMsg.ID);
qDebug("Length: %d",CANMsg.LEN); // qDebug("Length: %d",CANMsg.LEN);
qDebug("Time: micros %d - millis %d - overflow %d", CANTimeStamp.micros, CANTimeStamp.millis, CANTimeStamp.millis_overflow); // qDebug("Time: micros %d - millis %d - overflow %d", CANTimeStamp.micros, CANTimeStamp.millis, CANTimeStamp.millis_overflow);
// qDebug("Data: " << GetDataString(CANMsg.DATA, CANMsg.MSGTYPE, GetLengthFromDLC(CANMsg.DLC)) << "\n"; //// qDebug("Data: " << //GetDataString(CANMsg.DATA, CANMsg.MSGTYPE, GetLengthFromDLC(CANMsg.DLC)) << "\n";
qDebug("Count: %d",cnt++); // qDebug("Count: %d",cnt++);
qDebug("----------------------------------------------------------"); // qDebug("----------------------------------------------------------");
} }
} }

View File

@ -0,0 +1,118 @@
#include "SystemConfig.h"
#include "GeneralMessagesLogDispatcher.h"
CSystemConfig::CSystemConfig()
{
}
int CSystemConfig::LoadConfig(QList<CCANDevice *> *DevicesList)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la configuration système..."));
if(DevicesList == 0)
{
qDebug("CSystemConfig: Trying to load a config into an invalid devices list");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers liste de devices invalide!!!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
QFile* ConfigFile = new QFile("./Config/Station.cfg");
if(ConfigFile)
{
if(ConfigFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false)
{
// LoadDefaultSettings(Settings);
// SaveSettings(Settings);
qDebug("CSystemConfig: Failed to open config file in config loading");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
}
else
{
// LoadDefaultSettings(Settings);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("CSystemConfig: Invalid QFile pointer in config loading...");
return RET_GENERAL_ERROR;
}
QDataStream * InputStream = new QDataStream(ConfigFile);
quint32 MagicNbr;// = 0xBAADCAFE;
quint32 FileVersion;
*InputStream >> MagicNbr;
if(MagicNbr != OTARCIK_CONFIG_FILE_MAGIC_NBR)
{
// LoadDefaultSettings(Settings);
return RET_GENERAL_ERROR;
}
*InputStream >> FileVersion;
int NbDevices;
*InputStream >> NbDevices;
for(int i = 0; i < NbDevices; i++)
{
CCANDevice *NewDevice = new CCANDevice;
*InputStream >> *NewDevice;
DevicesList->append(NewDevice);
}
ConfigFile->close();
delete ConfigFile;
delete InputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système chargée avec succès!"));
return RET_OK;
}
int CSystemConfig::SaveConfig(QList<CCANDevice *> *DevicesList)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Sauvegarde de la configuration système..."));
QFile *ConfigFile = new QFile("./Config/Station.cfg");
if(ConfigFile)
{
if(ConfigFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
QDataStream * OutputStream = new QDataStream(ConfigFile);
quint32 MagicNbr = OTARCIK_CONFIG_FILE_MAGIC_NBR;
quint32 FileVersion = OTARCIK_CURRENT_CONFIG_FILE_VERSION;
//Setup the config file header
*OutputStream << MagicNbr;
*OutputStream << FileVersion;
//Save the CAN devices config info
*OutputStream << DevicesList->size(); //Number of devices
for(int i = 0; i < DevicesList->size(); i++)
{
*OutputStream << *DevicesList->at(i); //Add each device info to config file
}
ConfigFile->flush();
ConfigFile->close();
delete ConfigFile;
delete OutputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système sauvegardée avec succès."));
return RET_OK;
}

View File

@ -0,0 +1,22 @@
#ifndef SYSTEMCONFIG_H
#define SYSTEMCONFIG_H
#include "CANDevice.h"
#include <QList>
#include <QFile>
#include <QDataStream>
#define OTARCIK_CURRENT_CONFIG_FILE_VERSION 0x01
#define OTARCIK_CONFIG_FILE_MAGIC_NBR 0xDEADBEEF
class CSystemConfig
{
public:
CSystemConfig();
int LoadConfig(QList<CCANDevice*> *DevicesList);
int SaveConfig(QList<CCANDevice*> *DevicesList);
};
#endif // SYSTEMCONFIG_H

Binary file not shown.

View File

@ -22,8 +22,8 @@ QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_CCANViewerPage_t { struct qt_meta_stringdata_CCANViewerPage_t {
QByteArrayData data[1]; QByteArrayData data[3];
char stringdata0[15]; char stringdata0[40];
}; };
#define QT_MOC_LITERAL(idx, ofs, len) \ #define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@ -32,10 +32,13 @@ struct qt_meta_stringdata_CCANViewerPage_t {
) )
static const qt_meta_stringdata_CCANViewerPage_t qt_meta_stringdata_CCANViewerPage = { static const qt_meta_stringdata_CCANViewerPage_t qt_meta_stringdata_CCANViewerPage = {
{ {
QT_MOC_LITERAL(0, 0, 14) // "CCANViewerPage" QT_MOC_LITERAL(0, 0, 14), // "CCANViewerPage"
QT_MOC_LITERAL(1, 15, 23), // "MessageSelectionChanged"
QT_MOC_LITERAL(2, 39, 0) // ""
}, },
"CCANViewerPage" "CCANViewerPage\0MessageSelectionChanged\0"
""
}; };
#undef QT_MOC_LITERAL #undef QT_MOC_LITERAL
@ -45,21 +48,32 @@ static const uint qt_meta_data_CCANViewerPage[] = {
8, // revision 8, // revision
0, // classname 0, // classname
0, 0, // classinfo 0, 0, // classinfo
0, 0, // methods 1, 14, // methods
0, 0, // properties 0, 0, // properties
0, 0, // enums/sets 0, 0, // enums/sets
0, 0, // constructors 0, 0, // constructors
0, // flags 0, // flags
0, // signalCount 0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 19, 2, 0x0a /* Public */,
// slots: parameters
QMetaType::Void,
0 // eod 0 // eod
}; };
void CCANViewerPage::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) void CCANViewerPage::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{ {
Q_UNUSED(_o); if (_c == QMetaObject::InvokeMetaMethod) {
Q_UNUSED(_id); auto *_t = static_cast<CCANViewerPage *>(_o);
Q_UNUSED(_c); Q_UNUSED(_t)
switch (_id) {
case 0: _t->MessageSelectionChanged(); break;
default: ;
}
}
Q_UNUSED(_a); Q_UNUSED(_a);
} }
@ -89,6 +103,17 @@ void *CCANViewerPage::qt_metacast(const char *_clname)
int CCANViewerPage::qt_metacall(QMetaObject::Call _c, int _id, void **_a) int CCANViewerPage::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{ {
_id = QWidget::qt_metacall(_c, _id, _a); _id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 1)
qt_static_metacall(this, _c, _id, _a);
_id -= 1;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 1)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 1;
}
return _id; return _id;
} }
QT_WARNING_POP QT_WARNING_POP

View File

@ -22,8 +22,8 @@ QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_CProgramSettingsPage_t { struct qt_meta_stringdata_CProgramSettingsPage_t {
QByteArrayData data[6]; QByteArrayData data[7];
char stringdata0[115]; char stringdata0[141];
}; };
#define QT_MOC_LITERAL(idx, ofs, len) \ #define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
@ -37,12 +37,13 @@ QT_MOC_LITERAL(1, 21, 22), // "DeviceSelectionChanged"
QT_MOC_LITERAL(2, 44, 0), // "" QT_MOC_LITERAL(2, 44, 0), // ""
QT_MOC_LITERAL(3, 45, 22), // "SignalSelectionChanged" QT_MOC_LITERAL(3, 45, 22), // "SignalSelectionChanged"
QT_MOC_LITERAL(4, 68, 23), // "MessageSelectionChanged" QT_MOC_LITERAL(4, 68, 23), // "MessageSelectionChanged"
QT_MOC_LITERAL(5, 92, 22) // "ModifyDeviceBtnPressed" QT_MOC_LITERAL(5, 92, 22), // "ModifyDeviceBtnPressed"
QT_MOC_LITERAL(6, 115, 25) // "CancelModifyDevBtnPressed"
}, },
"CProgramSettingsPage\0DeviceSelectionChanged\0" "CProgramSettingsPage\0DeviceSelectionChanged\0"
"\0SignalSelectionChanged\0MessageSelectionChanged\0" "\0SignalSelectionChanged\0MessageSelectionChanged\0"
"ModifyDeviceBtnPressed" "ModifyDeviceBtnPressed\0CancelModifyDevBtnPressed"
}; };
#undef QT_MOC_LITERAL #undef QT_MOC_LITERAL
@ -52,7 +53,7 @@ static const uint qt_meta_data_CProgramSettingsPage[] = {
8, // revision 8, // revision
0, // classname 0, // classname
0, 0, // classinfo 0, 0, // classinfo
4, 14, // methods 5, 14, // methods
0, 0, // properties 0, 0, // properties
0, 0, // enums/sets 0, 0, // enums/sets
0, 0, // constructors 0, 0, // constructors
@ -60,15 +61,17 @@ static const uint qt_meta_data_CProgramSettingsPage[] = {
0, // signalCount 0, // signalCount
// slots: name, argc, parameters, tag, flags // slots: name, argc, parameters, tag, flags
1, 0, 34, 2, 0x0a /* Public */, 1, 0, 39, 2, 0x0a /* Public */,
3, 0, 35, 2, 0x0a /* Public */, 3, 0, 40, 2, 0x0a /* Public */,
4, 0, 36, 2, 0x0a /* Public */, 4, 0, 41, 2, 0x0a /* Public */,
5, 0, 37, 2, 0x0a /* Public */, 5, 0, 42, 2, 0x0a /* Public */,
6, 0, 43, 2, 0x0a /* Public */,
// slots: parameters // slots: parameters
QMetaType::Void, QMetaType::Void,
QMetaType::Void, QMetaType::Void,
QMetaType::Void, QMetaType::Void,
QMetaType::Void,
QMetaType::Void, QMetaType::Void,
0 // eod 0 // eod
@ -84,6 +87,7 @@ void CProgramSettingsPage::qt_static_metacall(QObject *_o, QMetaObject::Call _c,
case 1: _t->SignalSelectionChanged(); break; case 1: _t->SignalSelectionChanged(); break;
case 2: _t->MessageSelectionChanged(); break; case 2: _t->MessageSelectionChanged(); break;
case 3: _t->ModifyDeviceBtnPressed(); break; case 3: _t->ModifyDeviceBtnPressed(); break;
case 4: _t->CancelModifyDevBtnPressed(); break;
default: ; default: ;
} }
} }
@ -119,13 +123,13 @@ int CProgramSettingsPage::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
if (_id < 0) if (_id < 0)
return _id; return _id;
if (_c == QMetaObject::InvokeMetaMethod) { if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 4) if (_id < 5)
qt_static_metacall(this, _c, _id, _a); qt_static_metacall(this, _c, _id, _a);
_id -= 4; _id -= 5;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 4) if (_id < 5)
*reinterpret_cast<int*>(_a[0]) = -1; *reinterpret_cast<int*>(_a[0]) = -1;
_id -= 4; _id -= 5;
} }
return _id; return _id;
} }

View File

@ -11,6 +11,7 @@ debug/CANViewerPage.o
debug/CANDatabase.o debug/CANDatabase.o
debug/CANDevice.o debug/CANDevice.o
debug/CANSignal.o debug/CANSignal.o
debug/SystemConfig.o
debug/moc_MainWindow.o debug/moc_MainWindow.o
debug/moc_PCANInterface.o debug/moc_PCANInterface.o
debug/moc_OtarcikCan.o debug/moc_OtarcikCan.o

View File

@ -11,6 +11,7 @@ release/CANViewerPage.o
release/CANDatabase.o release/CANDatabase.o
release/CANDevice.o release/CANDevice.o
release/CANSignal.o release/CANSignal.o
release/SystemConfig.o
release/moc_MainWindow.o release/moc_MainWindow.o
release/moc_PCANInterface.o release/moc_PCANInterface.o
release/moc_OtarcikCan.o release/moc_OtarcikCan.o

View File

@ -23,18 +23,22 @@ class Ui_CCANViewerPage
public: public:
QTableWidget *mCANDataTableWidget; QTableWidget *mCANDataTableWidget;
QPushButton *mClearCANDataBtn; QPushButton *mClearCANDataBtn;
QTableWidget *mCANSignalTableWidget;
void setupUi(QWidget *CCANViewerPage) void setupUi(QWidget *CCANViewerPage)
{ {
if (CCANViewerPage->objectName().isEmpty()) if (CCANViewerPage->objectName().isEmpty())
CCANViewerPage->setObjectName(QString::fromUtf8("CCANViewerPage")); CCANViewerPage->setObjectName(QString::fromUtf8("CCANViewerPage"));
CCANViewerPage->resize(1140, 581); CCANViewerPage->resize(1848, 581);
mCANDataTableWidget = new QTableWidget(CCANViewerPage); mCANDataTableWidget = new QTableWidget(CCANViewerPage);
mCANDataTableWidget->setObjectName(QString::fromUtf8("mCANDataTableWidget")); mCANDataTableWidget->setObjectName(QString::fromUtf8("mCANDataTableWidget"));
mCANDataTableWidget->setGeometry(QRect(30, 60, 1051, 411)); mCANDataTableWidget->setGeometry(QRect(30, 60, 671, 411));
mClearCANDataBtn = new QPushButton(CCANViewerPage); mClearCANDataBtn = new QPushButton(CCANViewerPage);
mClearCANDataBtn->setObjectName(QString::fromUtf8("mClearCANDataBtn")); mClearCANDataBtn->setObjectName(QString::fromUtf8("mClearCANDataBtn"));
mClearCANDataBtn->setGeometry(QRect(70, 500, 80, 22)); mClearCANDataBtn->setGeometry(QRect(70, 500, 80, 22));
mCANSignalTableWidget = new QTableWidget(CCANViewerPage);
mCANSignalTableWidget->setObjectName(QString::fromUtf8("mCANSignalTableWidget"));
mCANSignalTableWidget->setGeometry(QRect(720, 60, 831, 411));
retranslateUi(CCANViewerPage); retranslateUi(CCANViewerPage);

View File

@ -29,6 +29,12 @@ public:
mGenMsgTextEdit = new QTextEdit(CGeneralStatusPage); mGenMsgTextEdit = new QTextEdit(CGeneralStatusPage);
mGenMsgTextEdit->setObjectName(QString::fromUtf8("mGenMsgTextEdit")); mGenMsgTextEdit->setObjectName(QString::fromUtf8("mGenMsgTextEdit"));
mGenMsgTextEdit->setGeometry(QRect(460, 30, 651, 451)); mGenMsgTextEdit->setGeometry(QRect(460, 30, 651, 451));
QFont font;
font.setFamily(QString::fromUtf8("System"));
font.setPointSize(12);
font.setBold(true);
font.setWeight(75);
mGenMsgTextEdit->setFont(font);
mGenMsgTextEdit->setReadOnly(true); mGenMsgTextEdit->setReadOnly(true);
retranslateUi(CGeneralStatusPage); retranslateUi(CGeneralStatusPage);

View File

@ -17,6 +17,7 @@
#include <QtWidgets/QLabel> #include <QtWidgets/QLabel>
#include <QtWidgets/QListWidget> #include <QtWidgets/QListWidget>
#include <QtWidgets/QPushButton> #include <QtWidgets/QPushButton>
#include <QtWidgets/QSpinBox>
#include <QtWidgets/QTableWidget> #include <QtWidgets/QTableWidget>
#include <QtWidgets/QTextEdit> #include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget> #include <QtWidgets/QWidget>
@ -34,12 +35,15 @@ public:
QComboBox *mCANIDComboBx; QComboBox *mCANIDComboBx;
QLabel *mCANBaudrateLbl; QLabel *mCANBaudrateLbl;
QComboBox *mCANBaudrateComboBx; QComboBox *mCANBaudrateComboBx;
QLabel *mDeviceDatabaseLbl;
QLabel *mDatabaseFileNameLbl;
QPushButton *mDatabaseFileSelectBtn;
QPushButton *mModifyDevParamsBtn; QPushButton *mModifyDevParamsBtn;
QTextEdit *mDeviceDescriptionTxtEdit; QTextEdit *mDeviceDescriptionTxtEdit;
QLabel *label_3; QLabel *mRefreshRateLbl;
QGroupBox *mDeviceDatabaseGrpBx;
QLabel *mDatabaseFileNameLbl;
QPushButton *mDatabaseFileSelectBtn;
QLabel *mCANBaudrateLbl_3;
QSpinBox *mDevicePollPeriodSpinBx;
QPushButton *mCancelModifyParamsBtn;
QGroupBox *mDatabaseGroupBox; QGroupBox *mDatabaseGroupBox;
QLabel *mDBMessageNameLbl; QLabel *mDBMessageNameLbl;
QLabel *mDBMessageIDLbl; QLabel *mDBMessageIDLbl;
@ -68,7 +72,7 @@ public:
label_2->setGeometry(QRect(52, 100, 81, 16)); label_2->setGeometry(QRect(52, 100, 81, 16));
mDeviceParamsGroupBox = new QGroupBox(CProgramSettingsPage); mDeviceParamsGroupBox = new QGroupBox(CProgramSettingsPage);
mDeviceParamsGroupBox->setObjectName(QString::fromUtf8("mDeviceParamsGroupBox")); mDeviceParamsGroupBox->setObjectName(QString::fromUtf8("mDeviceParamsGroupBox"));
mDeviceParamsGroupBox->setGeometry(QRect(280, 100, 311, 331)); mDeviceParamsGroupBox->setGeometry(QRect(270, 100, 321, 371));
mCANIDLbl = new QLabel(mDeviceParamsGroupBox); mCANIDLbl = new QLabel(mDeviceParamsGroupBox);
mCANIDLbl->setObjectName(QString::fromUtf8("mCANIDLbl")); mCANIDLbl->setObjectName(QString::fromUtf8("mCANIDLbl"));
mCANIDLbl->setGeometry(QRect(10, 40, 91, 16)); mCANIDLbl->setGeometry(QRect(10, 40, 91, 16));
@ -87,26 +91,40 @@ public:
mCANBaudrateComboBx->setObjectName(QString::fromUtf8("mCANBaudrateComboBx")); mCANBaudrateComboBx->setObjectName(QString::fromUtf8("mCANBaudrateComboBx"));
mCANBaudrateComboBx->setEnabled(true); mCANBaudrateComboBx->setEnabled(true);
mCANBaudrateComboBx->setGeometry(QRect(100, 70, 131, 21)); mCANBaudrateComboBx->setGeometry(QRect(100, 70, 131, 21));
mDeviceDatabaseLbl = new QLabel(mDeviceParamsGroupBox);
mDeviceDatabaseLbl->setObjectName(QString::fromUtf8("mDeviceDatabaseLbl"));
mDeviceDatabaseLbl->setGeometry(QRect(10, 100, 111, 16));
mDeviceDatabaseLbl->setFont(font1);
mDatabaseFileNameLbl = new QLabel(mDeviceParamsGroupBox);
mDatabaseFileNameLbl->setObjectName(QString::fromUtf8("mDatabaseFileNameLbl"));
mDatabaseFileNameLbl->setGeometry(QRect(10, 120, 301, 16));
mDatabaseFileNameLbl->setFont(font1);
mDatabaseFileSelectBtn = new QPushButton(mDeviceParamsGroupBox);
mDatabaseFileSelectBtn->setObjectName(QString::fromUtf8("mDatabaseFileSelectBtn"));
mDatabaseFileSelectBtn->setGeometry(QRect(280, 120, 31, 22));
mModifyDevParamsBtn = new QPushButton(mDeviceParamsGroupBox); mModifyDevParamsBtn = new QPushButton(mDeviceParamsGroupBox);
mModifyDevParamsBtn->setObjectName(QString::fromUtf8("mModifyDevParamsBtn")); mModifyDevParamsBtn->setObjectName(QString::fromUtf8("mModifyDevParamsBtn"));
mModifyDevParamsBtn->setGeometry(QRect(20, 300, 80, 22)); mModifyDevParamsBtn->setGeometry(QRect(220, 330, 80, 22));
mDeviceDescriptionTxtEdit = new QTextEdit(mDeviceParamsGroupBox); mDeviceDescriptionTxtEdit = new QTextEdit(mDeviceParamsGroupBox);
mDeviceDescriptionTxtEdit->setObjectName(QString::fromUtf8("mDeviceDescriptionTxtEdit")); mDeviceDescriptionTxtEdit->setObjectName(QString::fromUtf8("mDeviceDescriptionTxtEdit"));
mDeviceDescriptionTxtEdit->setGeometry(QRect(10, 180, 291, 101)); mDeviceDescriptionTxtEdit->setGeometry(QRect(10, 210, 291, 101));
label_3 = new QLabel(mDeviceParamsGroupBox); mRefreshRateLbl = new QLabel(mDeviceParamsGroupBox);
label_3->setObjectName(QString::fromUtf8("label_3")); mRefreshRateLbl->setObjectName(QString::fromUtf8("mRefreshRateLbl"));
label_3->setGeometry(QRect(10, 160, 81, 16)); mRefreshRateLbl->setGeometry(QRect(10, 182, 181, 16));
mRefreshRateLbl->setFont(font1);
mDeviceDatabaseGrpBx = new QGroupBox(mDeviceParamsGroupBox);
mDeviceDatabaseGrpBx->setObjectName(QString::fromUtf8("mDeviceDatabaseGrpBx"));
mDeviceDatabaseGrpBx->setGeometry(QRect(10, 100, 301, 51));
mDatabaseFileNameLbl = new QLabel(mDeviceDatabaseGrpBx);
mDatabaseFileNameLbl->setObjectName(QString::fromUtf8("mDatabaseFileNameLbl"));
mDatabaseFileNameLbl->setGeometry(QRect(0, 27, 301, 16));
QFont font2;
font2.setPointSize(10);
font2.setBold(true);
font2.setWeight(75);
mDatabaseFileNameLbl->setFont(font2);
mDatabaseFileSelectBtn = new QPushButton(mDeviceDatabaseGrpBx);
mDatabaseFileSelectBtn->setObjectName(QString::fromUtf8("mDatabaseFileSelectBtn"));
mDatabaseFileSelectBtn->setGeometry(QRect(270, 24, 31, 22));
mCANBaudrateLbl_3 = new QLabel(mDeviceParamsGroupBox);
mCANBaudrateLbl_3->setObjectName(QString::fromUtf8("mCANBaudrateLbl_3"));
mCANBaudrateLbl_3->setGeometry(QRect(10, 160, 91, 16));
mCANBaudrateLbl_3->setFont(font1);
mDevicePollPeriodSpinBx = new QSpinBox(mDeviceParamsGroupBox);
mDevicePollPeriodSpinBx->setObjectName(QString::fromUtf8("mDevicePollPeriodSpinBx"));
mDevicePollPeriodSpinBx->setGeometry(QRect(200, 180, 91, 22));
mCancelModifyParamsBtn = new QPushButton(mDeviceParamsGroupBox);
mCancelModifyParamsBtn->setObjectName(QString::fromUtf8("mCancelModifyParamsBtn"));
mCancelModifyParamsBtn->setGeometry(QRect(30, 330, 80, 22));
mDatabaseGroupBox = new QGroupBox(CProgramSettingsPage); mDatabaseGroupBox = new QGroupBox(CProgramSettingsPage);
mDatabaseGroupBox->setObjectName(QString::fromUtf8("mDatabaseGroupBox")); mDatabaseGroupBox->setObjectName(QString::fromUtf8("mDatabaseGroupBox"));
mDatabaseGroupBox->setGeometry(QRect(620, 100, 851, 491)); mDatabaseGroupBox->setGeometry(QRect(620, 100, 851, 491));
@ -132,9 +150,9 @@ public:
mDBMessageNameLbl_2 = new QLabel(mDatabaseGroupBox); mDBMessageNameLbl_2 = new QLabel(mDatabaseGroupBox);
mDBMessageNameLbl_2->setObjectName(QString::fromUtf8("mDBMessageNameLbl_2")); mDBMessageNameLbl_2->setObjectName(QString::fromUtf8("mDBMessageNameLbl_2"));
mDBMessageNameLbl_2->setGeometry(QRect(1, 23, 171, 16)); mDBMessageNameLbl_2->setGeometry(QRect(1, 23, 171, 16));
QFont font2; QFont font3;
font2.setPointSize(8); font3.setPointSize(8);
mDBMessageNameLbl_2->setFont(font2); mDBMessageNameLbl_2->setFont(font3);
mDBSignalDetailsTable = new QTableWidget(mDatabaseGroupBox); mDBSignalDetailsTable = new QTableWidget(mDatabaseGroupBox);
mDBSignalDetailsTable->setObjectName(QString::fromUtf8("mDBSignalDetailsTable")); mDBSignalDetailsTable->setObjectName(QString::fromUtf8("mDBSignalDetailsTable"));
mDBSignalDetailsTable->setGeometry(QRect(0, 250, 851, 241)); mDBSignalDetailsTable->setGeometry(QRect(0, 250, 851, 241));
@ -152,11 +170,13 @@ public:
mDeviceParamsGroupBox->setTitle(QCoreApplication::translate("CProgramSettingsPage", "Param\303\250tres", nullptr)); mDeviceParamsGroupBox->setTitle(QCoreApplication::translate("CProgramSettingsPage", "Param\303\250tres", nullptr));
mCANIDLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Driver CAN ID:", nullptr)); mCANIDLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Driver CAN ID:", nullptr));
mCANBaudrateLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "CAN Baudrate:", nullptr)); mCANBaudrateLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "CAN Baudrate:", nullptr));
mDeviceDatabaseLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Fichier database:", nullptr)); mModifyDevParamsBtn->setText(QCoreApplication::translate("CProgramSettingsPage", "Modifier", nullptr));
mRefreshRateLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "P\303\251riode rafra\303\256chissement (ms):", nullptr));
mDeviceDatabaseGrpBx->setTitle(QCoreApplication::translate("CProgramSettingsPage", "Base de donn\303\251es", nullptr));
mDatabaseFileNameLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Fichier...", nullptr)); mDatabaseFileNameLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Fichier...", nullptr));
mDatabaseFileSelectBtn->setText(QCoreApplication::translate("CProgramSettingsPage", "...", nullptr)); mDatabaseFileSelectBtn->setText(QCoreApplication::translate("CProgramSettingsPage", "...", nullptr));
mModifyDevParamsBtn->setText(QCoreApplication::translate("CProgramSettingsPage", "Modifier", nullptr)); mCANBaudrateLbl_3->setText(QCoreApplication::translate("CProgramSettingsPage", "CAN Baudrate:", nullptr));
label_3->setText(QCoreApplication::translate("CProgramSettingsPage", "Description", nullptr)); mCancelModifyParamsBtn->setText(QCoreApplication::translate("CProgramSettingsPage", "Annuler", nullptr));
mDatabaseGroupBox->setTitle(QCoreApplication::translate("CProgramSettingsPage", "Database", nullptr)); mDatabaseGroupBox->setTitle(QCoreApplication::translate("CProgramSettingsPage", "Database", nullptr));
mDBMessageNameLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Message Name: ", nullptr)); mDBMessageNameLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Message Name: ", nullptr));
mDBMessageIDLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Message ID: ", nullptr)); mDBMessageIDLbl->setText(QCoreApplication::translate("CProgramSettingsPage", "Message ID: ", nullptr));