#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(&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(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::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::GetState(); if(msg.status == HGScannerStatus::Mode_Count) mtstate = StateManager::GetState(msg.value); if(msg.status == HGScannerStatus::Mode_Set_Key_Manual) mtstate = StateManager::GetState(); if(msg.status >= HGScannerStatus::Mode_Error_Jam && msg.status <= HGScannerStatus::Mode_Error_DogEar || msg.status == HGScannerStatus::Mode_Error_FeedError) mtstate = StateManager::GetState((int)msg.status); if(msg.status == HGScannerStatus::Mode_Idel) mtstate = StateManager::GetState(); //mtstate = mtstate->OnState(msg); } } void MotorController::PutMsg(StateInfo mode) { m_msg.Put(mode); } void MotorController::SendMsg() { }