diff --git a/lib/imc_channel.hpp b/lib/imc_channel.hpp index 26f5d3f..2b8896b 100644 --- a/lib/imc_channel.hpp +++ b/lib/imc_channel.hpp @@ -149,7 +149,9 @@ namespace imc // constructor takes channel's block environment channel(channel_env chnenv, std::map* blocks, std::vector* buffer): - chnenv_(chnenv), blocks_(blocks), buffer_(buffer), group_index_(-1) + chnenv_(chnenv), blocks_(blocks), buffer_(buffer), + factor_(1.), offset_(0.), + group_index_(-1) { // declare list of block parameters std::vector prms; @@ -292,6 +294,11 @@ namespace imc { imc::convert_data_to_type(CSbuffer,ydata_); } + // ... + else if ( datatp_ == 11 ) + { + imc::convert_data_to_type(CSbuffer,ydata_); + } else { throw std::runtime_error(std::string("unsupported/unknown datatype") + std::to_string(datatp_)); diff --git a/lib/imc_datatype.hpp b/lib/imc_datatype.hpp index 79360e7..0651fd2 100644 --- a/lib/imc_datatype.hpp +++ b/lib/imc_datatype.hpp @@ -16,25 +16,31 @@ namespace imc typedef signed long int imc_Slongint; typedef float imc_float; typedef double imc_double; - // TODO remaining types are not yet supported + // TODO not all remaining types are supported yet + // typedef ... > "imc Devices Transitional Recording" + // typedf "Timestamp Ascii" + typedef char16_t imc_digital; + // typedef < > imc_sixbyte "6byte unsigned long" class datatype { protected: - imc_Ubyte ubyte_; // 0 - imc_Sbyte sbyte_; // 1 - imc_Ushort ushort_; // 2 - imc_Sshort sshort_; // 3 - imc_Ulongint ulint_; // 4 - imc_Slongint slint_; // 5 - imc_float sfloat_; // 6 - imc_double sdouble_; // 7 - short int dtidx_; // \in \{0,...,7\} + imc_Ubyte ubyte_; // 0 + imc_Sbyte sbyte_; // 1 + imc_Ushort ushort_; // 2 + imc_Sshort sshort_; // 3 + imc_Ulongint ulint_; // 4 + imc_Slongint slint_; // 5 + imc_float sfloat_; // 6 + imc_double sdouble_; // 7 + imc_digital sdigital_; // 10 + short int dtidx_; // \in \{0,...,7,10\} public: datatype(): ubyte_(0), sbyte_(0), ushort_(0), sshort_(0), ulint_(0.0), slint_(0.0), sfloat_(0.0), sdouble_(0.0), + sdigital_(0), dtidx_(0) { }; // every supported datatype gets its own constructor datatype(imc_Ubyte num): ubyte_(num), dtidx_(0) {}; @@ -46,7 +52,10 @@ namespace imc datatype(imc_float num): sfloat_(num), dtidx_(6) {}; datatype(imc_double num): ubyte_(0), sbyte_(0), ushort_(0), sshort_(0), ulint_(0.0), slint_(0.0), sfloat_(0.0), sdouble_(num), - dtidx_(7) {}; + sdigital_(0), dtidx_(7) {}; + datatype(imc_digital num): ubyte_(0), sbyte_(0), ushort_(0), sshort_(0), + ulint_(0.0), slint_(0.0), sfloat_(0.0), sdouble_(num), + sdigital_(num), dtidx_(10) {}; // identify type short int& dtype() { return dtidx_; } @@ -64,6 +73,7 @@ namespace imc this->slint_ = num.slint_; this->sfloat_ = num.sfloat_; this->sdouble_ = num.sdouble_; + this->sdigital_ = num.sdigital_; this->dtidx_ = num.dtidx_; } @@ -119,6 +129,12 @@ namespace imc this->dtidx_ = 7; return *this; } + datatype& operator=(const imc_digital &num) + { + this->sdigital_ = num; + this->dtidx_ = 10; + return *this; + } // obtain number as double double as_double() @@ -132,6 +148,7 @@ namespace imc else if ( dtidx_ == 5 ) num = (double)slint_; else if ( dtidx_ == 6 ) num = (double)sfloat_; else if ( dtidx_ == 7 ) num = (double)sdouble_; + else if ( dtidx_ == 10 ) num = static_cast(sdigital_); return num; } @@ -146,6 +163,7 @@ namespace imc else if ( num.dtidx_ == 5 ) out<(num.sdigital_); return out; } diff --git a/python/usage.py b/python/usage.py index 2efe44a..1726722 100644 --- a/python/usage.py +++ b/python/usage.py @@ -6,7 +6,7 @@ import json try : imcraw = imc_termite.imctermite(b"samples/sampleA.raw") except RuntimeError as e : - print("failed to load/parse raw-file: " + str(e)) + raise Exception("failed to load/parse raw-file: " + str(e)) # obtain list of channels as list of dictionaries (without data) channels = imcraw.get_channels(False) diff --git a/python/usage_adv.py b/python/usage_adv.py index e1424cd..c58c5b4 100644 --- a/python/usage_adv.py +++ b/python/usage_adv.py @@ -8,7 +8,7 @@ from pathlib import Path # list files in sample directory # fileobj1 = Path("samples/").rglob("*.raw") # rawlist1 = [str(fl) for fl in fileobj1] -rawlist1 = ["samples/datasetB/datasetB_32.raw"] +rawlist1 = ["samples/datasetB/datasetB_29.raw"] print(rawlist1) for fl in rawlist1: