tx-gxx-linux/device/gxx-linux/display/DisplayCenter.cpp

56 lines
1.1 KiB
C++

#include "DisplayCenter.h"
#include "LCDDisplay.h"
DisplayCenter::DisplayCenter():m_lcd(new LCDDisplay())
,brun(false)
{
m_showthread.reset(new std::thread(&DisplayCenter::runloop,this));
m_distype = DisType::Dis_Idel;
}
DisplayCenter::~DisplayCenter()
{
brun = false;
if(m_showthread.get()&& m_showthread->joinable())
{
m_showthread->join();
m_showthread.reset();
}
if(!m_msgs.IsShutDown())
m_msgs.ShutDown();
m_lcd.reset();
}
void DisplayCenter::PutMsg(DisType distype,int pagenum,ClearScreen clearscreen)
{
m_msgs.Put({distype,clearscreen,(unsigned int )pagenum,""});
m_distype = distype;
printf("\n ----- distype = %d ",distype);
}
void DisplayCenter::ResetMsgQueue()
{
m_msgs.Clear();
}
void DisplayCenter::runloop()
{
brun = true;
while (brun)
{
if(m_msgs.Size()>0)
{
auto msg= m_msgs.Take();
m_lcd->DisplayState(msg.distype,msg.pagenum,msg.clearscree);
}
else
std::this_thread::sleep_for(std::chrono::milliseconds(2));
}
}
DisType DisplayCenter::getcurdistype()
{
return m_distype;
}