SlaveConfig XmlToConfig::Convert(const APLXML_DNP::SlaveConfig_t& arCfg, const APLXML_DNP::AppLayer_t& arApp) { SlaveConfig c; c.mAllowTimeSync = arCfg.TimeIINTask.DoTask; c.mTimeSyncPeriod = arCfg.TimeIINTask.PeriodMS; c.mUnsolPackDelay = arCfg.UnsolDefaults.PackDelayMS; c.mUnsolRetryDelay = arCfg.UnsolDefaults.RetryMS; c.mUnsolMask = ClassMask(arCfg.UnsolDefaults.DoClass1, arCfg.UnsolDefaults.DoClass2, arCfg.UnsolDefaults.DoClass3); c.mStaticBinary = Convert(arCfg.StaticRsp.BinaryGrpVar); c.mStaticAnalog = Convert(arCfg.StaticRsp.AnalogGrpVar); c.mStaticCounter = Convert(arCfg.StaticRsp.CounterGrpVar); c.mStaticSetpointStatus = Convert(arCfg.StaticRsp.SetpointStatusGrpVar); c.mEventBinary = Convert(arCfg.EventRsp.BinaryGrpVar); c.mEventAnalog = Convert(arCfg.EventRsp.AnalogGrpVar); c.mEventCounter = Convert(arCfg.EventRsp.CounterGrpVar); c.mEventMaxConfig.mMaxBinaryEvents = arCfg.MaxBinaryEvents; c.mEventMaxConfig.mMaxAnalogEvents = arCfg.MaxAnalogEvents; c.mEventMaxConfig.mMaxCounterEvents = arCfg.MaxCounterEvents; c.mMaxControls = 1; c.mMaxFragSize = boost::numeric::converter<int, size_t>::convert(arApp.MaxFragSize);; return c; }
void AS_Idle::OnUnsolExpiration(AsyncSlave* c) { if(c->mStartupNullUnsol) { if(c->mRspContext.HasEvents(c->mConfig.mUnsolMask)) { ChangeState(c, AS_WaitForUnsolSuccess::Inst()); c->mRspContext.LoadUnsol(c->mUnsol, c->mIIN, c->mConfig.mUnsolMask); c->SendUnsolicited(c->mUnsol); } } else { // do the startup null unsol task ChangeState(c, AS_WaitForUnsolSuccess::Inst()); c->mRspContext.LoadUnsol(c->mUnsol, c->mIIN, ClassMask(false, false, false)); c->SendUnsolicited(c->mUnsol); } }