builds
This commit is contained in:
@@ -15,7 +15,10 @@
|
||||
#include <stdexcept>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "string.h"
|
||||
#include "ecmcDataItem.h"
|
||||
#include "ecmcPluginClient.h"
|
||||
#include "ecmcDAQDefs.h"
|
||||
|
||||
enum class ecmcDAQDataFormat { raw = 0,
|
||||
time_micro_s = 1,
|
||||
@@ -36,10 +39,11 @@ enum class ecmcDAQDataFormat { raw = 0,
|
||||
|
||||
class ecmcDAQChannelItem {
|
||||
public:
|
||||
ecmcDAQChannelItem(char* name, ecmcDAQDataFormat format) {
|
||||
ecmcDAQChannelItem(const char* name, ecmcDAQDataFormat format) {
|
||||
dataItem_ = NULL;
|
||||
dataItemInfo_ = NULL;
|
||||
name_ = name;
|
||||
cstrName_ = strdup(name);
|
||||
format_ = format; // micro s in int32
|
||||
sampleTimeCompensation_ = 0;
|
||||
dataIndexToReturn_ = 0;
|
||||
@@ -57,10 +61,15 @@ class ecmcDAQChannelItem {
|
||||
float64Ptr_ = NULL;
|
||||
dataType_ = ECMC_EC_NONE;
|
||||
}
|
||||
|
||||
~ecmcDAQChannelItem() {
|
||||
free(cstrName_);
|
||||
}
|
||||
|
||||
|
||||
void connectToSource() {
|
||||
// Get data item
|
||||
dataItem_ = (ecmcDataItem*) getEcmcDataItem(name_.c_str());
|
||||
dataItem_ = (ecmcDataItem*) getEcmcDataItem(cstrName_);
|
||||
if(!dataItem_) {
|
||||
printf("ERROR: DataItem %s NULL.\n", name_.c_str());
|
||||
throw std::runtime_error( "ERROR: DataItem NULL." );
|
||||
@@ -77,10 +86,10 @@ class ecmcDAQChannelItem {
|
||||
dataType_= dataItemInfo_->dataType;
|
||||
// Execute here to be sure that startup.cmd of ecmc(cfg) has been executed.
|
||||
switch(format_) {
|
||||
case ecmcDAQDataFormat.time_micro_s_minus_period:
|
||||
case ecmcDAQDataFormat::time_micro_s_minus_period:
|
||||
sampleTimeCompensation_ = getEcmcSampleTimeMS()*1000;
|
||||
break;
|
||||
case ecmcDAQDataFormat.time_ns_minus_period:
|
||||
case ecmcDAQDataFormat::time_ns_minus_period:
|
||||
sampleTimeCompensation_ = getEcmcSampleTimeMS()*1000000;
|
||||
break;
|
||||
default:
|
||||
@@ -108,7 +117,7 @@ class ecmcDAQChannelItem {
|
||||
* looping with false will return new data for each call untill theres no more data
|
||||
* before call, check if data is available with notEmpty()
|
||||
*/
|
||||
double getData(bool first) {
|
||||
double getData(int first) {
|
||||
double data = 0;
|
||||
uint64_t time = 0;
|
||||
if(first) {
|
||||
@@ -116,85 +125,85 @@ class ecmcDAQChannelItem {
|
||||
}
|
||||
|
||||
if(dataIndexToReturn_ >= dataElementCount_) {
|
||||
printf("ERROR: Try to read outside data buffer for data item %s\n", name_);
|
||||
printf("ERROR: Try to read outside data buffer for data item %s\n", name_.c_str());
|
||||
return -1;
|
||||
}
|
||||
|
||||
switch (dataType_) {
|
||||
case ECMC_EC_B1:
|
||||
uint8Ptr_ = (uint8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint8Ptr_ = (uint8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)(*uint8Ptr_ & 0x01);
|
||||
break;
|
||||
|
||||
case ECMC_EC_B2:
|
||||
uint8Ptr_ = (uint8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint8Ptr_ = (uint8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)(*uint8Ptr_ & 0x03);
|
||||
break;
|
||||
|
||||
case ECMC_EC_B3:
|
||||
uint8Ptr_ = (uint8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint8Ptr_ = (uint8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)(*uint8Ptr_ & 0x07);
|
||||
break;
|
||||
|
||||
case ECMC_EC_B4:
|
||||
uint8Ptr_ = (uint8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint8Ptr_ = (uint8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)(*uint8Ptr_ & 0x0F);
|
||||
break;
|
||||
case ECMC_EC_U8:
|
||||
uint8Ptr_ = (uint8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint8Ptr_ = (uint8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *uint8Ptr_;
|
||||
data = (double)*uint8Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_S8:
|
||||
int8Ptr_ = (int8_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
int8Ptr_ = (int8_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *int8Ptr_;
|
||||
data = (double)*int8Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_U16:
|
||||
uint16Ptr_ = (uint16_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint16Ptr_ = (uint16_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *uint16Ptr_;
|
||||
data = (double)*uint16Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_S16:
|
||||
int16Ptr_ = (int16_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
int16Ptr_ = (int16_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *int16Ptr_;
|
||||
data = (double)*int16Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_U32:
|
||||
uint32Ptr_ = (uint32_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint32Ptr_ = (uint32_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *uint32Ptr_;
|
||||
data = (double)*uint32Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_S32:
|
||||
int32Ptr_ = (int32_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
int32Ptr_ = (int32_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *int32Ptr_;
|
||||
data = (double)*int32Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_U64:
|
||||
uint64Ptr_ = (uint64_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
uint64Ptr_ = (uint64_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *uint64Ptr_;
|
||||
data = (double)*uint64Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_S64:
|
||||
int64Ptr_ = (int64_t *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
int64Ptr_ = (int64_t *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
time = *uint64Ptr_;
|
||||
data = (double)*int64Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_F32:
|
||||
float32Ptr_ = (float *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
float32Ptr_ = (float *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)*float32Ptr_;
|
||||
break;
|
||||
|
||||
case ECMC_EC_F64:
|
||||
float64Ptr_ = (double *)&buffer_[dataIndexToReturn_ * bytesPerElement_];
|
||||
float64Ptr_ = (double *)&dataItemInfo_->data[dataIndexToReturn_ * bytesPerElement_];
|
||||
data = (double)*float64Ptr_;
|
||||
break;
|
||||
|
||||
@@ -213,16 +222,16 @@ class ecmcDAQChannelItem {
|
||||
double formatData(double data, uint64_t time){
|
||||
// Time format only works for integer values, otherwise a 0 will be returned
|
||||
switch(format_) {
|
||||
case ecmcDAQDataFormat.time_micro_s:
|
||||
case ecmcDAQDataFormat::time_micro_s:
|
||||
time = time / 1000; // micro seconds
|
||||
data = (double)(time & 0xFFFFFFFF); //keep 32bits
|
||||
break;
|
||||
case ecmcDAQDataFormat.time_micro_s_minus_period:
|
||||
case ecmcDAQDataFormat::time_micro_s_minus_period:
|
||||
time = time / 1000; // micro seconds
|
||||
data = (double)(time & 0xFFFFFFFF); //keep 32bits
|
||||
data = data - sampleTimeCompensation_;
|
||||
break;
|
||||
case ecmcDAQDataFormat.time_ns_minus_period:
|
||||
case ecmcDAQDataFormat::time_ns_minus_period:
|
||||
data = (double)(time - (uint64_t)sampleTimeCompensation_);
|
||||
break;
|
||||
default:
|
||||
@@ -246,6 +255,7 @@ class ecmcDAQChannelItem {
|
||||
ecmcDataItem* dataItem_;
|
||||
ecmcDataItemInfo* dataItemInfo_;
|
||||
std::string name_;
|
||||
char *cstrName_;
|
||||
ecmcDAQDataFormat format_;
|
||||
double sampleTimeCompensation_;
|
||||
size_t dataIndexToReturn_;
|
||||
|
||||
Reference in New Issue
Block a user