237 lines
6.8 KiB
C++
237 lines
6.8 KiB
C++
/*******************************************************************************
|
|
* *
|
|
* Gros Gin électronique *
|
|
* 2023 *
|
|
* *
|
|
* Project: Otarcik CAN *
|
|
* *
|
|
* *
|
|
* *
|
|
*******************************************************************************/
|
|
/*
|
|
Description:
|
|
This is our main program
|
|
|
|
*/
|
|
|
|
#include "OtarcikCan.h"
|
|
#include "PCANBasic.h"
|
|
#include "QtEndian"
|
|
|
|
COtarcikCan::COtarcikCan(QObject *parent) : QObject(parent)
|
|
{
|
|
mGPTimer = new QTimer;
|
|
connect(mGPTimer,SIGNAL(timeout()),this,SLOT(GPTimerExpired()));
|
|
mCANBusMQTTClient.mProgramPtr = this;
|
|
}
|
|
|
|
COtarcikCan::~COtarcikCan()
|
|
{
|
|
|
|
while (!mCANDevicesList.isEmpty())
|
|
{
|
|
delete mCANDevicesList.takeFirst();
|
|
}
|
|
mCANDevicesList.clear();
|
|
|
|
mCANBusMQTTClient.DisconnectFromBroker();
|
|
|
|
|
|
delete mGPTimer;
|
|
|
|
|
|
}
|
|
|
|
int COtarcikCan::Start()
|
|
{
|
|
|
|
mMainWindow.mCANbusSettingsPage->mProgramPtr = this;
|
|
mMainWindow.mDataLoggingSettingsPage->mProgramHandle = this;
|
|
// mMainWindow.mCANWatchdogSettingsPage->mProgramHandle = this;
|
|
|
|
mMainWindow.show();
|
|
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage);
|
|
CGeneralMessagesLogDispatcher::instance()->Init();
|
|
// 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);
|
|
mMainWindow.mCANViewerPage->InitCANTable(&mCANDevicesList);
|
|
|
|
mCloudLoggingParams = *mSystemConfig.GetCloudParams();
|
|
mMainWindow.mDataLoggingSettingsPage->SetCloudParams(&mCloudLoggingParams);
|
|
mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams);
|
|
mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList);
|
|
|
|
mGeneralSystemParams = *mSystemConfig.GetGeneralSystemSettings();
|
|
mMainWindow.mDataLoggingSettingsPage->SetGeneralSettingsParams(&mGeneralSystemParams);
|
|
CGeneralMessagesLogDispatcher::instance()->SetLogVerbosities(mGeneralSystemParams.mLogFileVerbosity,mGeneralSystemParams.mLocalLogVerbosity);
|
|
|
|
// mMainWindow.mCANWatchdogSettingsPage->SetCANWatchdogConfig(mSystemConfig.GetCANWatchdogConfig());
|
|
|
|
// mGPTimer->setSingleShot(false);
|
|
// mGPTimer->start(5000);
|
|
|
|
|
|
}
|
|
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
|
|
|
|
// mCANBusMQTTClient.ConnectToBroker();
|
|
mCANBusMQTTClient.StartMQTTClient();
|
|
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
|
|
|
|
return 0;
|
|
}
|
|
|
|
int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList)
|
|
{
|
|
return mMainWindow.mCANViewerPage->UpdateCANTable(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.
|
|
mMainWindow.mGeneralStatusPage->ClearCANModuleStatusTable();
|
|
PopulateCANDevicesList(DevicesConfigList);
|
|
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
|
|
mMainWindow.mCANViewerPage->InitCANTable(&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),&mCANBusMQTTClient,mSystemConfig.mCloudLoggingParams.mMQTTTopicPrefix);
|
|
NewDevice->mProgramPtr = this;
|
|
NewDevice->Init();
|
|
mCANDevicesList.append(NewDevice);
|
|
}
|
|
|
|
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int COtarcikCan::SaveCloudLoggingConfigRequest(CCloudParams *CloudParams)
|
|
{
|
|
if(CloudParams == 0)
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
mCloudLoggingParams = *CloudParams;
|
|
mSystemConfig.SetCloudParams(&mCloudLoggingParams);
|
|
mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams);
|
|
|
|
if(mSystemConfig.SaveConfig() == RET_OK)
|
|
{
|
|
|
|
|
|
//TODO: Reset the MQTT driver with new parameters.
|
|
}
|
|
else
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int COtarcikCan::SaveGeneralParametersSettingsRequest(CGeneralSystemParams *GeneralParams)
|
|
{
|
|
mGeneralSystemParams = *GeneralParams;
|
|
mSystemConfig.SetGeneralSystemParams(&mGeneralSystemParams);
|
|
if(mSystemConfig.SaveConfig() == RET_OK)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
CGeneralMessagesLogDispatcher::instance()->SetLogVerbosities(mGeneralSystemParams.mLogFileVerbosity,mGeneralSystemParams.mLocalLogVerbosity);
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
void COtarcikCan::GPTimerExpired()
|
|
{
|
|
// mCANBusMQTTClient.SendMQTTTestMessage();
|
|
}
|
|
|
|
int COtarcikCan::SetCANConnectionStatusRequest(bool Connected)
|
|
{
|
|
return mMainWindow.mGeneralStatusPage->SetCANConnectionStatus(Connected);
|
|
}
|
|
|
|
int COtarcikCan::SetMQTTConnectionSatusRequest(bool Connected)
|
|
{
|
|
return mMainWindow.mGeneralStatusPage->SetMQTTConnectionStatus(Connected);
|
|
}
|
|
|
|
int COtarcikCan::UpdateCANModuleStatusRequest(QString ModuleName, QString ModuleStatus, QString Buffer)
|
|
{
|
|
return mMainWindow.mGeneralStatusPage->UpdateCANModuleStatus(ModuleName,ModuleStatus,Buffer);
|
|
}
|
|
|
|
|
|
int COtarcikCan::SaveCANWatchdogSettingsRequest(CCANWatchdogConfig *CANWatchdogConfig)
|
|
{
|
|
mSystemConfig.SetCANWatchdogConfig(CANWatchdogConfig);
|
|
return mSystemConfig.SaveConfig();
|
|
}
|
|
|