YULTek/Otarcik_CAN/Sources/LANDevicesPresenceMonitor.cpp
2024-03-05 16:29:13 -05:00

69 lines
2.0 KiB
C++

#include "LANDevicesPresenceMonitor.h"
#include "OtarcikCan.h"
CLANDevicesPresenceMonitor::CLANDevicesPresenceMonitor()
{
mProgramPtr = 0;
mLANDevicesPresenceStateUpdateTimer = new QTimer;
mLANDevicesPresenceStateUpdateTimer->setInterval(LAN_DEVICE_MONITOR_PRESENCE_CHECK_TIMEOUT);
mLANDevicesPresenceStateUpdateTimer->setSingleShot(false);
connect(mLANDevicesPresenceStateUpdateTimer,&QTimer::timeout,this,&CLANDevicesPresenceMonitor::DevicesPresenceUpdateTimerExpired);
}
CLANDevicesPresenceMonitor::~CLANDevicesPresenceMonitor()
{
Stop();
delete mLANDevicesPresenceStateUpdateTimer;
}
int CLANDevicesPresenceMonitor::Start(QList<CLANDevicePresenceConfig> *LANDevicesList)
{
mLANMonitorList.clear();
for(int i = 0; i < LANDevicesList->size(); i++)
{
CLANDeviceMonitor *NewMonitor = new CLANDeviceMonitor(LANDevicesList->at(i).mDeviceIPAddress,LANDevicesList->at(i).mCANStatusBit,LANDevicesList->at(i).mIsDetectionActive,LANDevicesList->at(i).mDeviceDescription);
mLANMonitorList.append(NewMonitor);
}
mLANDevicesPresenceStateUpdateTimer->start();
return RET_OK;
}
int CLANDevicesPresenceMonitor::Stop()
{
//destroy all LAN monitors.
for(int i = 0; i < mLANMonitorList.size(); i++)
{
delete mLANMonitorList[i];
}
mLANMonitorList.clear();
mLANDevicesPresenceStateUpdateTimer->stop();
return RET_OK;
}
quint64 CLANDevicesPresenceMonitor::GetDevicesPresenceCANMask()
{
quint64 Mask = 0;
for(int i = 0; i < mLANMonitorList.size(); i++)
{
Mask |= mLANMonitorList[i]->GetDeviceCANStatusMask();
}
return Mask;
}
void CLANDevicesPresenceMonitor::DevicesPresenceUpdateTimerExpired()
{
QList<bool> DevicesStatusList;
for(int i = 0; i < mLANMonitorList.size(); i++)
{
bool Status = mLANMonitorList.at(i)->IsDeviceOnline();
DevicesStatusList.append(Status);
}
mProgramPtr->UpdateLANDevicesPresenceStatusRequest(DevicesStatusList);
}