98 lines
1.8 KiB
C++
98 lines
1.8 KiB
C++
#include "Buzzer.h"
|
|
#include "config/ConfigManager.h"
|
|
|
|
|
|
Buzzer::Buzzer()
|
|
:m_Thread(INVALID_HANDLE_VALUE)
|
|
, m_RunFlag(false)
|
|
, m_StopAlarmFlag(false)
|
|
, m_PauseAlarmFlag(false)
|
|
{
|
|
}
|
|
|
|
|
|
Buzzer::~Buzzer()
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
m_RunFlag = false;
|
|
m_StopAlarmFlag = false;
|
|
m_PauseAlarmFlag = false;
|
|
WakeConditionVariable(&m_Cv);
|
|
LeaveCriticalSection(&m_Cs);
|
|
Sleep(400);
|
|
DeleteCriticalSection(&m_Cs);
|
|
}
|
|
|
|
void Buzzer::Init()
|
|
{
|
|
m_BuzzerCfg = ConfigManager::GetInstance()->GetIoCfgWrapper()->m_Buzzer;
|
|
InitializeCriticalSection(&m_Cs);
|
|
InitializeConditionVariable(&m_Cv);
|
|
m_RunFlag = true;
|
|
m_Thread = AtlCreateThread(BuzzerProc, this);
|
|
}
|
|
|
|
DWORD WINAPI Buzzer::BuzzerProc(Buzzer* _this)
|
|
{
|
|
if (_this) {
|
|
_this->BuzzerRun();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void Buzzer::BuzzerRun()
|
|
{
|
|
while (m_RunFlag)
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
while (!m_StopAlarmFlag && !m_PauseAlarmFlag) {
|
|
SleepConditionVariableCS(&m_Cv, &m_Cs, INFINITE);
|
|
}
|
|
LeaveCriticalSection(&m_Cs);
|
|
while (m_StopAlarmFlag)
|
|
{
|
|
m_BuzzerCfg->SetActive(true);
|
|
Sleep(500);
|
|
m_BuzzerCfg->SetActive(false);
|
|
Sleep(500);
|
|
}
|
|
while (m_PauseAlarmFlag)
|
|
{
|
|
m_BuzzerCfg->SetActive(true);
|
|
Sleep(1000);
|
|
m_BuzzerCfg->SetActive(false);
|
|
Sleep(1000);
|
|
}
|
|
Sleep(100);
|
|
}
|
|
}
|
|
|
|
void Buzzer::SetStopAlarmEnable()
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
m_StopAlarmFlag = true;
|
|
WakeConditionVariable(&m_Cv);
|
|
LeaveCriticalSection(&m_Cs);
|
|
}
|
|
|
|
void Buzzer::SetStopAlarmDisable()
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
m_StopAlarmFlag = false;
|
|
LeaveCriticalSection(&m_Cs);
|
|
}
|
|
|
|
void Buzzer::SetPauseAlarmEnable()
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
m_PauseAlarmFlag = true;
|
|
WakeConditionVariable(&m_Cv);
|
|
LeaveCriticalSection(&m_Cs);
|
|
}
|
|
|
|
void Buzzer::SetPauseAlarmDisable()
|
|
{
|
|
EnterCriticalSection(&m_Cs);
|
|
m_PauseAlarmFlag = false;
|
|
LeaveCriticalSection(&m_Cs);
|
|
} |