#include "vsmt_gem.h"

#include "vst_idle_gem.h"
//#include "vst_wait_gem.h"
#include "logic.h"
VSMT_GEM::VSMT_GEM(int iID, const QString &sName)
    :VSM_Thread(iID,sName)
{
//    m_iSerialStyle=TOWRITEONLY;

    m_Variants.add_Variant(Var_Gem_LinkTest_TimeOut_ID,
                           QObject::trUtf8("Link_Test_Timeout"),
                           int(300),false,Variant::TOXML);
}

void VSMT_GEM::run()
{

    Q_ASSERT(m_pCurState);
    VS_Thread* pState=m_pCurState;
    V_Msg msg= m_pCurState->popfront_Msg();
    QMutexLocker locker(&m_SMMutex);
    m_sCurStateName=m_pCurState->m_sName;
    if(msg.m_iID)
    {
        m_LastMsg=msg;
    }
    locker.unlock();
    try
    {
        pState->do_Msg(msg);
    }
    catch(QString &s)
    {
        if(m_pCurState!=m_pState_Idle)
        {SetState(m_pState_Idle);}
        MqDebug()<<"VSMT_GEM::run throw:"<<s;
    }
}

void VSMT_GEM::init_Machine()
{
    m_pState_Idle= new VST_Idle_GEM(VarState_Idle_GEM,QObject::trUtf8("Gem Idle"), this);
    //m_pState_Wait= new VST_Wait_GEM(VarState_Wait_GEM,QObject::trUtf8("Gem Wait"), this);

    VSM_Thread::init_Machine();
}

void VSMT_GEM::exit_Machine()
{
    VSM_Thread::exit_Machine();
}

