tx-gxx-linux/device/gxx-linux/motorcontroller/MotorController.cpp

77 lines
2.0 KiB
C++
Raw Permalink Normal View History

2023-05-02 01:50:55 +00:00
#include "MotorController.h"
#include "Mt_Count.h"
#include "Mt_Error.h"
#include "Mt_Idel.h"
#include "Mt_Scan.h"
#include "Mt_Set.h"
#include "Mt_Welcome.h"
#include "applog.h"
#include "keymonitor.h"
static const std::string loggername = "motorcontroller";
using namespace std;
MotorController::MotorController():
m_bloop(false)
{
LOG_INIT();
m_threadmsgloop = make_shared<thread>(&MotorController::runloop,this);
auto keycall=[&](int key)
{
auto iter = m_keystats.find((HgBtn)key);
if(iter!=m_keystats.end())
{
m_msg.Put(iter->second);
}
};
m_keyMinitor= make_shared<KeyMonitor>(keycall);
}
MotorController::~MotorController()
{
if(m_threadmsgloop.get() && m_threadmsgloop->joinable())
{
m_bloop = false;
m_threadmsgloop->join();
m_threadmsgloop.reset();
}
LOG_TRACE("MotorController ~ctor exit \n");
}
void MotorController::runloop()
{
m_bloop = true;
IState* mtstate = StateManager<Mt_Welcome>::GetState();
m_msg.Put({HGScannerStatus::Mode_Idel,0});
while (m_bloop)
{
auto msg = m_msg.Take();
printf("\n msg status = %d ",msg.status);
if(msg.status == HGScannerStatus::Mode_Scan_Start)
mtstate = StateManager<Mt_Scan>::GetState();
if(msg.status == HGScannerStatus::Mode_Count)
mtstate = StateManager<Mt_Count>::GetState(msg.value);
if(msg.status == HGScannerStatus::Mode_Set_Key_Manual)
mtstate = StateManager<Mt_Set>::GetState();
if(msg.status >= HGScannerStatus::Mode_Error_Jam && msg.status <= HGScannerStatus::Mode_Error_DogEar || msg.status == HGScannerStatus::Mode_Error_FeedError)
mtstate = StateManager<Mt_Error>::GetState((int)msg.status);
if(msg.status == HGScannerStatus::Mode_Idel)
mtstate = StateManager<Mt_Idel>::GetState();
//mtstate = mtstate->OnState(msg);
}
}
void MotorController::PutMsg(StateInfo mode)
{
m_msg.Put(mode);
}
void MotorController::SendMsg()
{
}