YULTek/Otarcik_CAN/Sources/OtarcikCan.cpp

149 lines
4.1 KiB
C++

/*******************************************************************************
* *
* Gros Gin électronique *
* 2023 *
* *
* Project: Otarcik CAN *
* *
* *
* *
*******************************************************************************/
/*
Description:
This is our main program
*/
#include "OtarcikCan.h"
#include "PCANBasic.h"
COtarcikCan::COtarcikCan(QObject *parent) : QObject(parent)
{
}
COtarcikCan::~COtarcikCan()
{
while (!mCANDevicesList.isEmpty())
{
delete mCANDevicesList.takeFirst();
}
mCANDevicesList.clear();
}
int COtarcikCan::Start()
{
mMainWindow.mCANbusSettingsPage->mProgramPtr = this;
mMainWindow.show();
CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage);
CGeneralMessagesLogDispatcher::instance()->Init();
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
if(mSystemConfig.LoadConfig() == RET_OK)
{
QList<CCANDeviceConfig*> *CANDeviceConfigList;
CANDeviceConfigList = mSystemConfig.GetCANDevicesConfigList();
if(CANDeviceConfigList != 0)
{
PopulateCANDevicesList(CANDeviceConfigList);
}
mMainWindow.mCANbusSettingsPage->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);
// SaveSystemConfigRequest();
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
// 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;
}
int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList)
{
return mMainWindow.mCANViewerPage->UpdateCANTable(MsgList);
}
int COtarcikCan::InitCANViewer(QList<CCANMessage *> *MsgList)
{
return mMainWindow.mCANViewerPage->InitCANTable(MsgList);
}
//The device configuration has been modified directly in the master list
//Just save it and refresh display.
int COtarcikCan::SaveCANDevicesConfigRequest(QList<CCANDeviceConfig *> *DevicesConfigList)
{
if(DevicesConfigList == 0)
{
return RET_GENERAL_ERROR;
}
if(mSystemConfig.SetCANDevicesConfigList(DevicesConfigList) != RET_OK)
{
return RET_GENERAL_ERROR;
}
if(mSystemConfig.SaveConfig() == RET_OK)
{
//Config saving is successful. To apply changes we need to reload the devices.
//The easiest way is to delete everything and reload.
PopulateCANDevicesList(DevicesConfigList);
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
}
else
{
return RET_GENERAL_ERROR;
}
return RET_OK;
}
int COtarcikCan::PopulateCANDevicesList(QList<CCANDeviceConfig *> *CANDeviceConfigList)
{
if(CANDeviceConfigList == 0)
{
return RET_GENERAL_ERROR;
}
while(mCANDevicesList.size() != 0)
{
delete mCANDevicesList.takeFirst();
}
for(int i = 0; i < CANDeviceConfigList->size(); i++)
{
CCANDevice *NewDevice = new CCANDevice(*CANDeviceConfigList->at(i));
NewDevice->mProgramPtr = this;
NewDevice->Init();
mCANDevicesList.append(NewDevice);
}
return RET_OK;
}