* add support for datatype 11 = 2-byte-word digital
* usage.py: raise proper exception * usage_adv.py: use different example file
This commit is contained in:
parent
8708d2d008
commit
2b2e69f0e5
@ -149,7 +149,9 @@ namespace imc
|
||||
// constructor takes channel's block environment
|
||||
channel(channel_env chnenv, std::map<std::string,imc::block>* blocks,
|
||||
std::vector<unsigned char>* 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<imc::parameter> prms;
|
||||
@ -292,6 +294,11 @@ namespace imc
|
||||
{
|
||||
imc::convert_data_to_type<imc_double>(CSbuffer,ydata_);
|
||||
}
|
||||
// ...
|
||||
else if ( datatp_ == 11 )
|
||||
{
|
||||
imc::convert_data_to_type<imc_digital>(CSbuffer,ydata_);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::runtime_error(std::string("unsupported/unknown datatype") + std::to_string(datatp_));
|
||||
|
@ -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 <whatever that is ->... > "imc Devices Transitional Recording"
|
||||
// typedf <sometimestamptype> "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<double>(sdigital_);
|
||||
return num;
|
||||
}
|
||||
|
||||
@ -146,6 +163,7 @@ namespace imc
|
||||
else if ( num.dtidx_ == 5 ) out<<num.slint_;
|
||||
else if ( num.dtidx_ == 6 ) out<<num.sfloat_;
|
||||
else if ( num.dtidx_ == 7 ) out<<num.sdouble_;
|
||||
else if ( num.dtidx_ == 10 ) out<<static_cast<double>(num.sdigital_);
|
||||
return out;
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user