GrpcPrint/PrintS/Buzzer.cpp

98 lines
1.8 KiB
C++
Raw Permalink Normal View History

2024-03-19 17:45:12 +08:00
#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);
}