YULTek/Otarcik_CAN/Sources/Gui/CANViewerPage.cpp
2023-01-28 09:01:02 -05:00

201 lines
6.9 KiB
C++

#include "CANViewerPage.h"
#include "ui_CANViewerPage.h"
#include "defines.h"
CCANViewerPage::CCANViewerPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::CCANViewerPage)
{
mMsgList = 0;
ui->setupUi(this);
ui->mCANDataTableWidget->setColumnCount(6);
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()
{
delete ui;
}
int CCANViewerPage::InitCANTable(QList<CCANMessage *> *MsgList)
{
if(MsgList == 0)
{
return RET_GENERAL_ERROR;
}
mMsgList = MsgList;
int row = ui->mCANDataTableWidget->rowCount();
ui->mCANDataTableWidget->setRowCount(MsgList->size());
for(int Msg = 0; Msg < MsgList->size(); Msg++)
{
QTableWidgetItem *NewItem;
NewItem = new QTableWidgetItem("Time");
ui->mCANDataTableWidget->setItem(row,0,NewItem);
//Set Msg name
NewItem = new QTableWidgetItem(QString("%1").arg(MsgList->at(Msg)->mCANMsgName));
ui->mCANDataTableWidget->setItem(row,1,NewItem);
//Set message ID value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgID,0,16));
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
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgType,0,16));
ui->mCANDataTableWidget->setItem(row,3,NewItem);
//Set message length value
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,4,NewItem);
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,5,NewItem);
row++;
// //Set data value
// 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().asprintf("%.2X ",(unsigned char)MsgList->at(msg)->mCANMsgData.at(byte)));
}
ui->mCANDataTableWidget->item(row,5)->setText(Data);
}
}
}
// UpdateSignalsTable();
MessageSelectionChanged();
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);
}
}
}
return RET_OK;
}