From 628ae025310f9507b4d67593be439e8dfa4fa647 Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Tue, 19 Jan 2021 17:37:10 +0100 Subject: [PATCH] finish tdm data model --- lib/tdm_datamodel.hpp | 275 ++++++++++++++++++++++++++++++++++++++++++ lib/tdm_reaper.cpp | 6 +- lib/tdm_reaper.hpp | 164 +------------------------ 3 files changed, 283 insertions(+), 162 deletions(-) create mode 100644 lib/tdm_datamodel.hpp diff --git a/lib/tdm_datamodel.hpp b/lib/tdm_datamodel.hpp new file mode 100644 index 0000000..8cd6d2d --- /dev/null +++ b/lib/tdm_datamodel.hpp @@ -0,0 +1,275 @@ +// ------------------------------------------------------------------------- // +/* + for reference of the tdm data model, see + + https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_headerfile/ + https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_datamodel/ +*/ + +#ifndef TDM_DATAMODEL +#define TDM_DATAMODEL + +#include +#include +#include +#include +#include + +// -------------------------------------------------------------------------- // +// tdm datatypes + +// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_header_tdx_data/ + +struct tdm_datatype { + + std::string name_; + std::string channel_datatype_; + int numeric_; + std::string value_sequence_; + int size_; + std::string description_; + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< tdm_datatypes = { + + {"eInt16Usi",{"eInt16Usi","DT_SHORT",2,"short_sequence",2,"signed 16 bit integer"}}, + {"eInt32Usi",{"eInt32Usi","DT_LONG",6,"long_sequence",4,"signed 32 bit integer"}}, + + {"eUInt8Usi",{"eUInt8Usi","DT_BYTE",5,"byte_sequence",1,"unsigned 8 bit integer"}}, + {"eUInt16Usi",{"eUInt16Usi","DT_SHORT",2,"short_sequence",2,"unsigned 16 bit integer"}}, + {"eUInt32Usi",{"eUInt32Usi","DT_LONG",6,"long_sequence",4,"unsigned 32 bit integer"}}, + + {"eFloat32Usi",{"eFloat32Usi","DT_FLOAT",3,"float_sequence",4,"32 bit float"}}, + {"eFloat64Usi",{"eFloat64Usi","DT_DOUBLE",7,"double_sequence",8,"64 bit double"}}, + + {"eStringUsi",{"eStringUsi","DT_STRING",1,"string_sequence",0,"text"}} + +}; + +// -------------------------------------------------------------------------- // +// tdm_root + +struct tdm_root { + + std::string id_; + std::string name_; + std::string description_; + std::string title_; + std::string author_; + + std::string timestamp_; + // std::chrono::time_point timepoint_; // from string 2008-05-06T17:20:12.65074539184570313 + + // std::stringstream ss; + // ss<<"2008-05-06T17:20:12.65074539184570313"; + // std::cout< channelgroups_; + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< channels_; // referenced by id + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< of ) +// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_waveform/ +struct waveform_channel { + std::string wf_xname_; + std::string wf_xunit_string_; + std::string wf_start_time_; + double wf_start_offset_; + double wf_increment_; + unsigned long wf_samples_; + wf_time_pref_type wf_time_pref; +}; + +struct tdm_channel { + + std::string id_; + std::string name_; + std::string description_; + std::string unit_string_; + std::string datatype_; + double minimum_, maximum_; + std::string group_; + std::vector local_columns_; + + // TODO + waveform_channel wf_channel_; + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< tdm_channelgroup id + std::vector local_columns_; // -> list of type "localcolumn" + unsigned long int number_of_rows_; // -> number of values in channels + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< for implicit_linear_!! + raw_linear_ // datatype is always DT_DOUBLE +}; + +// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_localcolumn/ + +struct localcolumn { + + std::string id_; + std::string name_; + std::string description_; + std::string measurement_quantity_; // -> tdm_channel + std::string submatrix_; + + unsigned long int global_flag_; + unsigned long int independent_; + + double minimum_, maximum_; + // representation sequence_representation_; + std::string sequence_representation_; + std::vector generation_parameters_; // { offset, factor } + + std::string values_; // -> refers to usi:data -> _sequence + + const std::string get_info(int width = 20) + { + std::stringstream ss; + ss< #include @@ -18,163 +18,7 @@ #include #include "pugixml.hpp" - -// -------------------------------------------------------------------------- // -// define datatypes - -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_header_tdx_data/ - -enum class tdm_datatype { - eInt16Usi, - eInt32Usi, - // - eUInt8Usi, - eUInt16Usi, - eUInt32Usi, - // - eFloat32Usi, - eFloat64Usi, - // - eStringUsi -}; - -struct datatype { - std::string name_; - std::string channel_datatype_; - int numeric_; - std::string value_sequence_; - int size_; - std::string description_; - - std::string get_info() - { - std::stringstream ss; - ss<<"name: "< tdm_datatypes = { - - {"eInt16Usi",{"eInt16Usi","DT_SHORT",2,"short_sequence",2,"signed 16 bit integer"}}, - {"eInt32Usi",{"eInt32Usi","DT_LONG",6,"long_sequence",4,"signed 32 bit integer"}}, - - {"eUInt8Usi",{"eUInt8Usi","DT_BYTE",5,"byte_sequence",1,"unsigned 8 bit integer"}}, - {"eUInt16Usi",{"eUInt16Usi","DT_SHORT",2,"short_sequence",2,"unsigned 16 bit integer"}}, - {"eUInt32Usi",{"eUInt32Usi","DT_LONG",6,"long_sequence",4,"unsigned 32 bit integer"}}, - - {"eFloat32Usi",{"eFloat32Usi","DT_FLOAT",3,"float_sequence",4,"32 bit float"}}, - {"eFloat64Usi",{"eFloat64Usi","DT_DOUBLE",7,"double_sequence",8,"64 bit double"}}, - - {"eStringUsi",{"eStringUsi","DT_STRING",1,"string_sequence",0,"text"}} - -}; - -// -------------------------------------------------------------------------- // -// tdm root, tdm group and tdm channel, etc. - -// for reference of the tdm data model, see -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_headerfile/ -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_datamodel/ - -struct tdm_root { - std::string name_; - std::string description_; - std::string title_; - std::string author_; - std::string timestamp_; - // std::chrono::time_point timestamp_; // from string 2008-05-06T17:20:12.65074539184570313 - - // std::stringstream ss; - // ss<<"2008-05-06T17:20:12.65074539184570313"; - // std::cout< channels_; // referenced by id -}; - -enum class wf_time_pref_type { - absolute, - relative -}; - -// additional elements for wave form channels (encoded as attributes in -// of ) -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_waveform/ -struct waveform_channel { - std::string wf_xname_; - std::string wf_xunit_string_; - std::string wf_start_time_; - double wf_start_offset_; - double wf_increment_; - unsigned long wf_samples_; - wf_time_pref_type wf_time_pref; -}; - -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_metadata_channel/ -struct tdm_channel { - unsigned long int id_; - std::string name_; - std::string description_; - std::string unit_string_; - tdm_datatype datatype_; - double minimum_, maximum_; - unsigned long int groupd_id_; - waveform_channel wf_channel_; -}; - -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_submatrix/ -struct tdm_submatrix { - std::string name_; - unsigned long int number_of_rows_; // -> number of values in channels - unsigned long int measurement_id_; // -> channelgroup - unsigned long int local_column_id_; -}; - -enum class representation { - explicit_, // !! explicit is C++ keyword!! - implicit_linear_, // datatype is always DT_DOUBLE, no for implicit_linear_!! - raw_linear_ // datatype is always DT_DOUBLE -}; - -// https://zone.ni.com/reference/de-XX/help/370858P-0113/tdmdatamodel/tdmdatamodel/tdm_tdxdata_localcolumn/ -struct localcolumn { - std::string name_; - unsigned long int global_flag_; - unsigned long int independent_; - double minimum_, maximum_; - representation sequence_representation_; - std::vector generation_parameters_; // { offset, factor } - unsigned long int measurement_quantity_id_; // -> references single channel - unsigned long int submatrix_id_; - unsigned long int values_id_; // -> refers to usi:data -> _sequence -}; +#include "tdm_datamodel.hpp" // -------------------------------------------------------------------------- // @@ -526,3 +370,5 @@ public: }; #endif + +// -------------------------------------------------------------------------- //