diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index debb6b7..83cb7cc 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -119,44 +119,128 @@ namespace imc // collect meta-data of channels according to env, // just everything valueable in here std::string uuid_; - std::string name_, comment_; + std::string name_, comment_, origin_, text_; std::string yname_, yunit_; - imc::datatype dattyp_; std::string xname_, xunit_; + double xstepwidth_; + + // buffer and data + int signbits_, num_bytes_; + // unsigned long int byte_offset_; + unsigned long int buffer_offset_, buffer_size_; + int datatp_; + imc::datatype dattyp_; std::vector ydata_; std::vector xdata_; + // range, factor and offset + double factor_, offset_; + // group reference the channel belongs to int group_index_; - std::string group_uuid_, group_name_; - - // + std::string group_uuid_, group_name_, group_comment_; // constructor takes channel's block environment channel(channel_env chnenv, std::map* blocks): - chnenv_(chnenv), blocks_(blocks) + chnenv_(chnenv), blocks_(blocks), group_index_(-1) { - // extract info from corresponding blocks in environment + // declare list of block parameters + std::vector prms; + + // use uuid from CN block uuid_ = chnenv_.CNuuid_; - std::vector prms = blocks->at(chnenv_.CNuuid_).get_parameters(); - name_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[6]); - comment_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[8]); - group_index_ = std::stoi(blocks->at(chnenv_.CNuuid_).get_parameter(prms[2])); + + // extract associated CB data + if ( blocks->count(chnenv_.CBuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CBuuid_).get_parameters(); + group_index_ = std::stoi(blocks->at(chnenv_.CBuuid_).get_parameter(prms[2])); + group_name_ = blocks->at(chnenv_.CBuuid_).get_parameter(prms[4]); + group_comment_ = blocks->at(chnenv_.CBuuid_).get_parameter(prms[6]); + } + + // extract associated CT data + if ( blocks->count(chnenv_.CTuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CTuuid_).get_parameters(); + text_ = blocks->at(chnenv_.CTuuid_).get_parameter(prms[4]) + std::string(" - ") + + blocks->at(chnenv_.CTuuid_).get_parameter(prms[6]) + std::string(" - ") + + blocks->at(chnenv_.CTuuid_).get_parameter(prms[8]); + } + + // extract associated CD data + if ( blocks->count(chnenv_.CDuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CDuuid_).get_parameters(); + xstepwidth_ = std::stod(blocks->at(chnenv_.CDuuid_).get_parameter(prms[2])); + xunit_ = blocks->at(chnenv_.CDuuid_).get_parameter(prms[5]); + // TODO + xname_ = std::string("time"); + } + + // extract associated CP data + if ( blocks->count(chnenv_.CPuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CPuuid_).get_parameters(); + datatp_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[3])); + num_bytes_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[4])); + signbits_ = std::stoi(blocks->at(chnenv_.CPuuid_).get_parameter(prms[5])); + // byte_offset_ = std::stoul(blocks->at(chnenv_.CPuuid_).get_parameter(prms[7])); + } + + // extract associated Cb data + if ( blocks->count(chnenv_.Cbuuid_) == 1 ) + { + prms = blocks->at(chnenv_.Cbuuid_).get_parameters(); + buffer_offset_ = std::stoul(blocks->at(chnenv_.Cbuuid_).get_parameter(prms[6])); + buffer_size_ = std::stoul(blocks->at(chnenv_.Cbuuid_).get_parameter(prms[7])); + } + + // extract associated CR data + if ( blocks->count(chnenv_.CRuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CRuuid_).get_parameters(); + factor_ = std::stod(blocks->at(chnenv_.CRuuid_).get_parameter(prms[3])); + offset_ = std::stod(blocks->at(chnenv_.CRuuid_).get_parameter(prms[4])); + yunit_ = blocks->at(chnenv_.CRuuid_).get_parameter(prms[7]); + } + + // extract associated CN data + if ( blocks->count(chnenv_.CNuuid_) == 1 ) + { + prms = blocks->at(chnenv_.CNuuid_).get_parameters(); + name_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[6]); + yname_ = name_; + comment_ = blocks->at(chnenv_.CNuuid_).get_parameter(prms[8]); + // group_index_ = std::stoi(blocks->at(chnenv_.CNuuid_).get_parameter(prms[2])); + } } // get info string std::string get_info(int width = 20) { std::stringstream ss; - ss<<"uuid:"<(ydata_)<<"\n" + <(xdata_)<<"\n" + <(ydata_) <<"\",\"xdata\":\""<(xdata_) <<"\",\"aff. blocks\":\""<* buffer, const std::vector& parameters) { - if ( parameters.size() < 10 ) throw std::runtime_error("invalid number of parameters in CD2"); + if ( parameters.size() < 10 ) throw std::runtime_error("invalid number of parameters in CP"); buffer_reference_ = std::stoi(get_parameter(buffer,¶meters[2])); - bytes_ = std::stoi(get_parameter(buffer,¶meters[3])); - numeric_type_ = (numtype)std::stoi(get_parameter(buffer,¶meters[4])); + numeric_type_ = (numtype)std::stoi(get_parameter(buffer,¶meters[3])); + bytes_ = std::stoi(get_parameter(buffer,¶meters[4])); signbits_ = std::stoi(get_parameter(buffer,¶meters[5])); mask_ = std::stoi(get_parameter(buffer,¶meters[6])); offset_ = std::stoul(get_parameter(buffer,¶meters[7])); diff --git a/lib/imc_raw.hpp b/lib/imc_raw.hpp index cdef55f..5a4ea72 100644 --- a/lib/imc_raw.hpp +++ b/lib/imc_raw.hpp @@ -302,7 +302,7 @@ namespace imc for ( std::map::iterator it = channels_.begin(); it != channels_.end(); ++it) { - chns.push_back(it->second.get_json()); + chns.push_back(it->second.get_info()); } return chns; }