diff --git a/lib/tdm_reaper.cpp b/lib/tdm_reaper.cpp index 5e09509..6665bcf 100644 --- a/lib/tdm_reaper.cpp +++ b/lib/tdm_reaper.cpp @@ -70,6 +70,7 @@ void tdm_reaper::process_tdm(bool showlog) this->process_include(showlog); this->process_root(showlog); this->process_channelgroups(showlog); + this->process_channels(showlog); } void tdm_reaper::process_include(bool showlog) @@ -195,23 +196,45 @@ void tdm_reaper::process_channelgroups(bool showlog) if ( showlog ) std::cout<<"number of channelgroups: "< + pugi::xml_node tdmdata = xml_doc_.child("usi:tdm").child("usi:data"); + + // find all its elements + for ( pugi::xml_node channel = tdmdata.child("tdm_channel"); channel; + channel = channel.next_sibling("tdm_channel") ) + { + // declare new channel + tdm_channel tdmchannel; + + // extract properties + tdmchannel.id_ = channel.attribute("id").value(); + tdmchannel.name_ = channel.child_value("name"); + tdmchannel.description_ = channel.child_value("description"); + tdmchannel.unit_string_ = channel.child_value("unit_string"); + tdmchannel.datatype_ = channel.child_value("datatype"); + tdmchannel.minimum_ = std::stod(channel.child_value("minimum")); + tdmchannel.maximum_ = std::stod(channel.child_value("maximum")); + std::vector cg = this->extract_ids(channel.child_value("group")); + if ( cg.size() == 1 ) + { + tdmchannel.group_ = cg.at(0); + } + else + { + throw std::runtime_error("tdm_channel without group id"); + } + tdmchannel.local_columns_ = this->extract_ids(channel.child_value("local_columns")); + + // add channel to map + tdmchannels_.insert( std::pair(tdmchannel.id_,tdmchannel) ); + + if ( showlog ) std::cout< tdmchannelgroups_; + // tdm channels + std::map tdmchannels_; + // // number/names/ids of channels, channelgroups and channels's assignment to groups // int num_channels_, num_groups_; // std::vector channel_id_, inc_id_, units_, channel_name_;