Ajout polling du statut du board
This commit is contained in:
@@ -45,9 +45,9 @@ int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle,
|
||||
|
||||
void CCANWatchdog::WatchdogTimeoutTimerExpired()
|
||||
{
|
||||
char data = mWDTCANMsg.mCANMsgData[0];
|
||||
char data = mWDTCANMsg.mCANMsgData[7];
|
||||
data ^= (char)0x01;
|
||||
mWDTCANMsg.mCANMsgData[0] = data;
|
||||
mWDTCANMsg.mCANMsgData[7] = data;
|
||||
mCANDriverIF->SendCANMessage(mCANDeviceHandle,mWDTCANMsg);
|
||||
qDebug("Sending 0x%X to CAN",data);
|
||||
//QString LogMsg = QString("Écriture du watchdog. CAN ID %1 Payload: 0x%2 0x%3 0x%4 0x%5 0x%6 0x%7 0x%8 0x%9").arg(mWDTCANMsg.mCANMsgID,0,16).arg(mWDTCANMsg.mCANMsgData.at(7),0,16).arg(mWDTCANMsg.mCANMsgData.at(6),0,16).arg(mWDTCANMsg.mCANMsgData.at(5),0,16).arg(mWDTCANMsg.mCANMsgData.at(4),0,16).arg(mWDTCANMsg.mCANMsgData.at(3),0,16).arg(mWDTCANMsg.mCANMsgData.at(2),0,16).arg(mWDTCANMsg.mCANMsgData.at(1),0,16).arg(mWDTCANMsg.mCANMsgData[0],0,16);
|
||||
|
||||
@@ -96,7 +96,7 @@ int CCANDatabase::BuildMessageList(QList<CCANMessage *> *MsgListPtr, QString Own
|
||||
CCANMessage *NewMsg = new CCANMessage;
|
||||
char msg_name[100];
|
||||
// char msg_qname[200];
|
||||
char msg_comment[200];
|
||||
char msg_comment[400];
|
||||
int dlc = 0;
|
||||
unsigned int id = 0;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#include "OtarcikCan.h"
|
||||
#include "CANDevice.h"
|
||||
#include "defines.h"
|
||||
#include "ComputerBoardInterface.h"
|
||||
|
||||
CMQTTClientWrapper::CMQTTClientWrapper()
|
||||
{
|
||||
@@ -23,6 +24,7 @@ CMQTTClientWrapper::CMQTTClientWrapper()
|
||||
mMQTTQueueFlushTimer->stop();
|
||||
|
||||
mProgramPtr = 0;
|
||||
mCPUInterface = 0;
|
||||
mMessagesQueueMode = MQTT_DROP_MSG_MODE;
|
||||
mDisconnectionIsVoluntary = false;
|
||||
mIsClientConnecting = false;
|
||||
@@ -46,6 +48,11 @@ int CMQTTClientWrapper::SetMQTTParams(CCloudParams *Params)
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
int CMQTTClientWrapper::SetCPUInterface(CComputerBoardInterface *CPUIF)
|
||||
{
|
||||
mCPUInterface = CPUIF;
|
||||
}
|
||||
|
||||
int CMQTTClientWrapper::StartMQTTClient()
|
||||
{
|
||||
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
|
||||
@@ -214,6 +221,11 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
|
||||
{
|
||||
CCANDevice *Device = mCANDevicesList->at(j);
|
||||
QList<CMQTTMessage> *MessagesList = Device->GetMQTTMessagesList();
|
||||
if(mCPUInterface)
|
||||
{
|
||||
CComputerBoardState tmp =mCPUInterface->GetComputerBoardState();
|
||||
}
|
||||
|
||||
if(MessagesList != 0)
|
||||
{
|
||||
for(int i = 0; i < MessagesList->size(); i++)
|
||||
@@ -231,6 +243,11 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
|
||||
{
|
||||
CCANDevice *Device = mCANDevicesList->at(j);
|
||||
QList<CMQTTMessage> *MessagesList = Device->GetMQTTMessagesList();
|
||||
if(mCPUInterface)
|
||||
{
|
||||
CComputerBoardState tmp =mCPUInterface->GetComputerBoardState();
|
||||
}
|
||||
|
||||
if(MessagesList != 0)
|
||||
{
|
||||
for(int i = 0; i < MessagesList->size(); i++)
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
#include <QList>
|
||||
|
||||
|
||||
|
||||
class COtarcikCan;
|
||||
class CCANDevice;
|
||||
class CComputerBoardInterface;
|
||||
|
||||
class CMQTTClientWrapper : public QObject
|
||||
{
|
||||
@@ -27,6 +29,7 @@ public:
|
||||
CMQTTClientWrapper();
|
||||
~CMQTTClientWrapper();
|
||||
int SetMQTTParams(CCloudParams *Params);
|
||||
int SetCPUInterface(CComputerBoardInterface *CPUIF);
|
||||
int ConnectToBroker();
|
||||
int NewMQTTMessages(QList<CMQTTMessage> MessagesList);
|
||||
int DisconnectFromBroker();
|
||||
@@ -50,6 +53,7 @@ private:
|
||||
QList<CMQTTMessage*> mMQTTMessagesQueue;
|
||||
bool mIsClientConnecting;
|
||||
QString mCircularBufferStatusText, mBufferingModeText, mUploadTimeText;
|
||||
CComputerBoardInterface *mCPUInterface;
|
||||
|
||||
int SendNextQueueMessage();
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "GeneralMessagesLogDispatcher.h"
|
||||
#include "CPUWatchdogConfig.h"
|
||||
|
||||
|
||||
CComputerBoardInterface::CComputerBoardInterface()
|
||||
{
|
||||
mWatchdogTimeout = CPU_DEFAULT_WATCHDOG_TIMEOUT;
|
||||
@@ -119,4 +120,39 @@ int CComputerBoardInterface::SetWatchdogSettings(CCPUWatchdogConfig *Settings)
|
||||
{
|
||||
mWatchdogEnabled = Settings->mWatchdogEnabled;
|
||||
mWatchdogTimeout = Settings->mWatchdogTimeout;
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
CComputerBoardState CComputerBoardInterface::GetComputerBoardState()
|
||||
{
|
||||
CComputerBoardState CPUState;
|
||||
|
||||
float tmp;
|
||||
|
||||
AxGetCPUTemp(&CPUState.mSystemTemperature);
|
||||
// qDebug("CPUState.mSystemTemperature %f",CPUState.mSystemTemperature);
|
||||
AxGetSYSTemp(&CPUState.mSystemTemperature);
|
||||
// qDebug("CPUState.mSystemTemperature %f",CPUState.mSystemTemperature);
|
||||
// AxGetGMCHTemp(&tmp);
|
||||
// qDebug("AxGetGMCHTemp %f",tmp);
|
||||
AxGetCPUVcore(&CPUState.mCPUVcore);
|
||||
// qDebug("CPUState.mCPUVcore %f",CPUState.mCPUVcore);
|
||||
// AxGetNBVTT(&tmp);
|
||||
// qDebug("NBVTT %f",tmp);
|
||||
AxGet3V(&CPUState.mSystem3V3);
|
||||
// qDebug("CPUState.mSystem3V3 %f",CPUState.mSystem3V3);
|
||||
AxGet5V(&CPUState.mSystem5V);
|
||||
// qDebug("CPUState.mSystem5V %f",CPUState.mSystem5V);
|
||||
// AxGet12V(&tmp);
|
||||
// qDebug("AxGet12V %f",tmp);
|
||||
// AxGetNeg5V(&tmp);
|
||||
// qDebug("AxGetNeg5V %f",tmp);
|
||||
// AxGetNeg12V(&tmp);
|
||||
// qDebug("AxGetNeg12V %f",tmp);
|
||||
// AxGetVbat(&tmp);
|
||||
// qDebug("AxGetVbat %f",tmp);
|
||||
|
||||
return CPUState;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef COMPUTERBOARDINTERFACE_H
|
||||
#define COMPUTERBOARDINTERFACE_H
|
||||
#include "minwindef.h"
|
||||
#include "ComputerBoardState.h"
|
||||
|
||||
#define CPU_DEFAULT_WATCHDOG_TIMEOUT 600 //10 minutes.
|
||||
#define CPU_LIBRARY_NAME "dtSBC87853x64"
|
||||
@@ -16,6 +17,7 @@ public:
|
||||
int StartCPUWatchdog(/*int TimeoutInSeconds = CPU_DEFAULT_WATCHDOG_TIMEOUT*/); //Timeout in seconds
|
||||
int StopCPUWatchdog();
|
||||
int KickCPUWatchdog();
|
||||
CComputerBoardState GetComputerBoardState();
|
||||
|
||||
|
||||
int SetWatchdogSettings(CCPUWatchdogConfig *Settings);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
#include "ComputerBoardState.h"
|
||||
|
||||
CComputerBoardState::CComputerBoardState()
|
||||
{
|
||||
mSystemTemperature = 0.0;
|
||||
mCPUVcore = 0.0;
|
||||
mSystem3V3 = 0.0;
|
||||
mSystem5V = 0.0;
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef COMPUTERBOARDSTATE_H
|
||||
#define COMPUTERBOARDSTATE_H
|
||||
|
||||
|
||||
class CComputerBoardState
|
||||
{
|
||||
public:
|
||||
CComputerBoardState();
|
||||
|
||||
float mSystemTemperature;
|
||||
float mCPUVcore;
|
||||
float mSystem3V3;
|
||||
float mSystem5V;
|
||||
};
|
||||
|
||||
#endif // COMPUTERBOARDSTATE_H
|
||||
@@ -19,8 +19,8 @@ CCANbusSettingsPage::CCANbusSettingsPage(QWidget *parent) :
|
||||
mCurModifiedDevConfig = 0;
|
||||
mDeviceChangeModeEnabled = false;
|
||||
|
||||
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->setColumnCount(11);
|
||||
ui->mDBSignalDetailsTable->setHorizontalHeaderLabels(QStringList() << "Signal" << "Bit No" << "Length" << "Type" << "Max Val" << "Min Val" << "Offset" << "Scale factor" << "Unit" << "Byte order" << "Comment");
|
||||
|
||||
ui->mDevicePollPeriodSpinBx->setRange(200,60000);
|
||||
|
||||
@@ -336,9 +336,12 @@ int CCANbusSettingsPage::UpdateMessageInformation()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ui->mDBSignalDetailsTable->setItem(Sig,9,NewItem);
|
||||
|
||||
//Comment
|
||||
NewItem = new QTableWidgetItem(Signal.mSignalComment);
|
||||
ui->mDBSignalDetailsTable->setItem(Sig,10,NewItem);
|
||||
|
||||
}
|
||||
ui->mDBSignalDetailsTable->resizeColumnsToContents();
|
||||
}
|
||||
|
||||
@@ -19,13 +19,20 @@ CGeneralStatusPage::CGeneralStatusPage(QWidget *parent) :
|
||||
ui->mCANModuleStatusTableWdgt->setColumnCount(3);
|
||||
ui->mCANModuleStatusTableWdgt->setHorizontalHeaderLabels(QStringList() << "Nom" << "Statut" << "Buffer");
|
||||
|
||||
ui->mPuckCANConStatLbl->setVisible(false);
|
||||
ui->mPuckCANLbl->setVisible(false);
|
||||
mCPUStateUpdtTimer = new QTimer;
|
||||
mCPUStateUpdtTimer->setSingleShot(false);
|
||||
mCPUStateUpdtTimer->setInterval(5000);
|
||||
connect(mCPUStateUpdtTimer,&QTimer::timeout,this,&CGeneralStatusPage::UpdateBoardStatusTimerExpired);
|
||||
mCPUStateUpdtTimer->start();
|
||||
|
||||
mCPUInterface = 0;
|
||||
|
||||
}
|
||||
|
||||
CGeneralStatusPage::~CGeneralStatusPage()
|
||||
{
|
||||
delete ui;
|
||||
delete mCPUStateUpdtTimer;
|
||||
}
|
||||
|
||||
int CGeneralStatusPage::SetGeneralMsgText(QStringList Txt)
|
||||
@@ -129,20 +136,7 @@ int CGeneralStatusPage::SetMQTTConnectionStatus(bool Connected)
|
||||
|
||||
int CGeneralStatusPage::SetCANConnectionStatus(bool Connected)
|
||||
{
|
||||
if(Connected)
|
||||
{
|
||||
ui->mPuckCANConStatLbl->setText("CONNECTÉE");
|
||||
QPalette pal = QPalette(ui->mPuckCANConStatLbl->palette());
|
||||
pal.setColor(QPalette::WindowText,QColor(Qt::darkGreen));
|
||||
ui->mPuckCANConStatLbl->setPalette(pal);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->mPuckCANConStatLbl->setText("DÉCONNECTÉE");
|
||||
QPalette pal = QPalette(ui->mPuckCANConStatLbl->palette());
|
||||
pal.setColor(QPalette::WindowText,QColor(Qt::red));
|
||||
ui->mPuckCANConStatLbl->setPalette(pal);
|
||||
}
|
||||
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
@@ -158,7 +152,7 @@ int CGeneralStatusPage::UpdateMQTTBufferingStatus(QString Mode, QString FIFOSize
|
||||
{
|
||||
ui->mBufferingMode->setText(Mode);
|
||||
ui->mBufferSizeValue->setText(FIFOSize);
|
||||
ui->mBufferTimeRemaining->setText(RemainingTime);
|
||||
// ui->mBufferTimeRemaining->setText(RemainingTime);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
@@ -211,6 +205,14 @@ void CGeneralStatusPage::QuitAppBtnPressed()
|
||||
mProgramPtr->QuitApplicationRequest();
|
||||
}
|
||||
|
||||
int CGeneralStatusPage::UpdateBoardStatus(CComputerBoardState CPUState)
|
||||
{
|
||||
QString BoardState = QString("System Temp: %1C\nCPU VCore: %2V\nSystem 3.3V: %3V\nSystem 5V: %4V").arg(CPUState.mSystemTemperature).arg(CPUState.mCPUVcore).arg(CPUState.mSystem3V3).arg(CPUState.mSystem5V);
|
||||
ui->mSystemStateLbl->setText(BoardState);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
void CGeneralStatusPage::InternetStatusChanged(bool InternetConnected)
|
||||
{
|
||||
if(InternetConnected == true)
|
||||
@@ -228,3 +230,8 @@ void CGeneralStatusPage::InternetStatusChanged(bool InternetConnected)
|
||||
ui->mInternetPresentStatLbl->setPalette(pal);
|
||||
}
|
||||
}
|
||||
|
||||
void CGeneralStatusPage::UpdateBoardStatusTimerExpired()
|
||||
{
|
||||
UpdateBoardStatus(mCPUInterface->GetComputerBoardState());
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
#include <QWidget>
|
||||
#include "defines.h"
|
||||
#include "ComputerBoardInterface.h"
|
||||
#include <QTimer>
|
||||
|
||||
|
||||
namespace Ui {
|
||||
@@ -27,6 +29,9 @@ public:
|
||||
};
|
||||
|
||||
COtarcikCan *mProgramPtr;
|
||||
QTimer *mCPUStateUpdtTimer;
|
||||
CComputerBoardInterface *mCPUInterface;
|
||||
|
||||
|
||||
explicit CGeneralStatusPage(QWidget *parent = 0);
|
||||
~CGeneralStatusPage();
|
||||
@@ -39,6 +44,7 @@ public:
|
||||
int UpdateCANModuleStatus(QString ModuleName, QString ModuleStatus, QString Buffer);
|
||||
int ClearCANModuleStatusTable();
|
||||
int UpdateMQTTBufferingStatus(QString Mode, QString FIFOSize, QString RemainingTime);
|
||||
int UpdateBoardStatus(CComputerBoardState CPUState);
|
||||
|
||||
|
||||
private:
|
||||
@@ -52,6 +58,7 @@ public slots:
|
||||
void ClearGenMsgAreaBtnPressed();
|
||||
void QuitAppBtnPressed();
|
||||
void InternetStatusChanged(bool InternetConnected);
|
||||
void UpdateBoardStatusTimerExpired();
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -47,29 +47,11 @@
|
||||
<string>Nettoyer</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mPuckCANLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1220</x>
|
||||
<y>210</y>
|
||||
<width>81</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Puck CAN:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mClientMQTTLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1200</x>
|
||||
<y>240</y>
|
||||
<y>210</y>
|
||||
<width>101</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
@@ -83,31 +65,11 @@
|
||||
<string>Client MQTT:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mPuckCANConStatLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1300</x>
|
||||
<y>210</y>
|
||||
<width>121</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>12</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Déconnectée</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mClientMQTTConnStatLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1300</x>
|
||||
<y>240</y>
|
||||
<y>210</y>
|
||||
<width>121</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
@@ -170,7 +132,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1230</x>
|
||||
<y>270</y>
|
||||
<y>240</y>
|
||||
<width>61</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
@@ -188,7 +150,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1300</x>
|
||||
<y>270</y>
|
||||
<y>240</y>
|
||||
<width>121</width>
|
||||
<height>16</height>
|
||||
</rect>
|
||||
@@ -207,10 +169,10 @@
|
||||
<widget class="QGroupBox" name="MQTTBufferingGrpBx">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1210</x>
|
||||
<y>320</y>
|
||||
<width>391</width>
|
||||
<height>141</height>
|
||||
<x>1460</x>
|
||||
<y>190</y>
|
||||
<width>251</width>
|
||||
<height>91</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
@@ -252,24 +214,6 @@
|
||||
<string>Taille buffer circulaire:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mBufferTimeRemainingLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>50</x>
|
||||
<y>90</y>
|
||||
<width>91</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>10</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Durée restante:</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mBufferingMode">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
@@ -306,13 +250,26 @@
|
||||
<string>0/5000</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLabel" name="mBufferTimeRemaining">
|
||||
</widget>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>1210</x>
|
||||
<y>290</y>
|
||||
<width>301</width>
|
||||
<height>161</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>État du système</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="mSystemStateLbl">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>150</x>
|
||||
<y>90</y>
|
||||
<width>91</width>
|
||||
<height>21</height>
|
||||
<x>10</x>
|
||||
<y>20</y>
|
||||
<width>281</width>
|
||||
<height>131</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
@@ -321,7 +278,10 @@
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>xxx minutes</string>
|
||||
<string>Système:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
@@ -53,6 +53,7 @@ int COtarcikCan::Start()
|
||||
mMainWindow.mCANbusSettingsPage->mProgramPtr = this;
|
||||
mMainWindow.mDataLoggingSettingsPage->mProgramHandle = this;
|
||||
mMainWindow.mGeneralStatusPage->mProgramPtr = this;
|
||||
mMainWindow.mGeneralStatusPage->mCPUInterface = &mCPUInterface;
|
||||
// mMainWindow.mCANWatchdogSettingsPage->mProgramHandle = this;
|
||||
|
||||
mMainWindow.show();
|
||||
@@ -80,6 +81,7 @@ int COtarcikCan::Start()
|
||||
mMainWindow.mDataLoggingSettingsPage->SetCloudParams(&mCloudLoggingParams);
|
||||
mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams);
|
||||
mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList);
|
||||
mCANBusMQTTClient.SetCPUInterface(&mCPUInterface);
|
||||
|
||||
mGeneralSystemParams = *mSystemConfig.GetGeneralSystemSettings();
|
||||
mMainWindow.mDataLoggingSettingsPage->SetGeneralSettingsParams(&mGeneralSystemParams);
|
||||
@@ -97,6 +99,8 @@ int COtarcikCan::Start()
|
||||
mCPUInterface.StartCPUWatchdog();
|
||||
mWatchdogTimer->start();
|
||||
|
||||
mMainWindow.mGeneralStatusPage->UpdateBoardStatusTimerExpired();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user