/******************************************************************************* * * * 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) { mGPTimer = new QTimer; connect(mGPTimer,SIGNAL(timeout()),this,SLOT(GPTimerExpired())); } 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.show(); CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage); CGeneralMessagesLogDispatcher::instance()->Init(); CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN")); if(mSystemConfig.LoadConfig() == RET_OK) { QList *CANDeviceConfigList; CANDeviceConfigList = mSystemConfig.GetCANDevicesConfigList(); if(CANDeviceConfigList != 0) { PopulateCANDevicesList(CANDeviceConfigList); } mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList); mCloudLoggingParams = *mSystemConfig.GetCloudParams(); mMainWindow.mDataLoggingSettingsPage->SetCloudParams(&mCloudLoggingParams); mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams); mCANBusMQTTClient.ConnectToBroker(); mGPTimer->setSingleShot(false); mGPTimer->start(5000); } // 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 *MsgList) { return mMainWindow.mCANViewerPage->UpdateCANTable(MsgList); } int COtarcikCan::InitCANViewer(QList *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 *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 *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); 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; } void COtarcikCan::GPTimerExpired() { // mCANBusMQTTClient.SendMQTTTestMessage(); }