void Slave::HandleWriteIIN(HeaderReadIterator& arHdr) { for (ObjectReadIterator obj = arHdr.BeginRead(); !obj.IsEnd(); ++obj) { switch (obj->Index()) { case IINI_DEVICE_RESTART: { bool value = Group80Var1::Inst()->Read(*obj, obj->Start(), obj->Index()); if (!value) { mIIN.SetDeviceRestart(false); } else { mRspIIN.SetParameterError(true); ERROR_BLOCK(LEV_WARNING, "", SERR_INVALID_IIN_WRITE); } break; } case IINI_NEED_TIME: mpTimeTimer->Cancel(); mpTimeTimer = NULL; mIIN.SetNeedTime(false); LOG_BLOCK(LEV_INFO, "Master forced clear time needed flag"); break; default: mRspIIN.SetParameterError(true); ERROR_BLOCK(LEV_WARNING, "", SERR_INVALID_IIN_WRITE); break; } } }
void ResponseLoader::ReadVto(HeaderReadIterator& arIter, SizeByVariationObject* apObj) { /* Get an iterator to the object data */ ObjectReadIterator objIter = arIter.BeginRead(); /* Copy the object data to a VtoData instance */ VtoData data; data.Copy(*objIter, arIter->GetVariation()); /* Determine the Virtual Terminal port/channel number */ size_t index = objIter->Index(); if(index > std::numeric_limits<boost::uint8_t>::max()) { LOG_BLOCK(LEV_WARNING, "Ignoring VTO index that exceeds bit width of uint8_t: " << index); } else { boost::uint8_t channel = static_cast<boost::uint8_t>(index); Transaction t(mpVtoReader); this->mpVtoReader->Update(data, channel); } }
void Slave::HandleWriteVto(HeaderReadIterator& arHdr) { Transaction tr(mVtoReader); for (ObjectReadIterator obj = arHdr.BeginRead(); !obj.IsEnd(); ++obj) { size_t index = obj->Index(); if(index > std::numeric_limits<boost::uint8_t>::max()) { LOG_BLOCK(LEV_WARNING, "Ignoring VTO index that exceeds bit width of uint8_t: " << index); } else { /* * Pass the data to the vto reader */ boost::uint8_t channel = static_cast<boost::uint8_t>(index); VtoData vto(arHdr->GetVariation()); Group112Var0::Inst()->Read(*obj, arHdr->GetVariation(), vto.mpData); mVtoReader.Update(vto, channel); } } }