MDF Lib 2.2
Interface against MDF 3/4 files
Loading...
Searching...
No Matches
ichannel.h
Go to the documentation of this file.
1/*
2 * Copyright 2021 Ingemar Hedvall
3 * SPDX-License-Identifier: MIT
4 */
5
9#pragma once
10#include <cstring>
11#include <iomanip>
12#include <sstream>
13#include <string>
14#include <vector>
15
16#include "mdf/iblock.h"
18#include "mdf/imetadata.h"
20#include "mdf/ichannelarray.h"
21#include "mdf/mdfhelper.h"
22#include "mdf/iattachment.h"
23
24namespace mdf {
25
51enum class ChannelType : uint8_t {
52 FixedLength = 0,
53 VariableLength = 1,
54 Master = 2,
55 VirtualMaster = 3,
56 Sync = 4,
57 MaxLength = 5,
58 VirtualData = 6
59};
60
66enum class ChannelSyncType : uint8_t {
67 None = 0,
68 Time = 1,
69 Angle = 2,
70 Distance = 3,
71 Index = 4
72};
73
82enum class ChannelDataType : uint8_t {
85 SignedIntegerLe = 2,
86 SignedIntegerBe = 3,
87 FloatLe = 4,
88 FloatBe = 5,
89 StringAscii = 6,
90 StringUTF8 = 7,
91 StringUTF16Le = 8,
92 StringUTF16Be = 9,
93 ByteArray = 10,
94 MimeSample = 11,
95 MimeStream = 12,
96 CanOpenDate = 13,
97 CanOpenTime = 14,
98 ComplexLe = 15,
99 ComplexBe = 16
100};
101
105namespace CnFlag {
106constexpr uint32_t AllValuesInvalid = 0x0001;
107constexpr uint32_t InvalidValid = 0x0002;
108constexpr uint32_t PrecisionValid = 0x0004;
109constexpr uint32_t RangeValid = 0x0008;
110constexpr uint32_t LimitValid = 0x0010;
111constexpr uint32_t ExtendedLimitValid = 0x0020;
112constexpr uint32_t Discrete = 0x0040;
113constexpr uint32_t Calibration = 0x0080;
114constexpr uint32_t Calculated = 0x0100;
115constexpr uint32_t Virtual = 0x0200;
116constexpr uint32_t BusEvent = 0x0400;
117constexpr uint32_t StrictlyMonotonous = 0x0800;
118constexpr uint32_t DefaultX = 0x1000;
119constexpr uint32_t EventSignal = 0x2000;
120constexpr uint32_t VlsdDataStream = 0x4000;
121} // namespace CnFlag
122
126class IChannel : public IBlock {
127 public:
128
129 virtual void Name(const std::string &name) = 0;
130 [[nodiscard]] virtual std::string Name() const = 0;
131
132 virtual void DisplayName(const std::string &name) = 0;
133 [[nodiscard]] virtual std::string DisplayName() const = 0;
134
136 virtual void Description(const std::string &description) = 0;
137
139 [[nodiscard]] virtual std::string Description() const = 0;
140
149 virtual void Unit(const std::string &unit) = 0;
150
163 [[nodiscard]] virtual std::string Unit() const = 0;
164
166 virtual void Flags(uint32_t flags);
167
169 [[nodiscard]] virtual uint32_t Flags() const;
170
171 [[nodiscard]] virtual bool IsUnitValid() const = 0;
172
173 virtual void Type(ChannelType type) = 0;
174 [[nodiscard]] virtual ChannelType Type() const = 0;
175
176 virtual void Sync(ChannelSyncType type);
177 [[nodiscard]] virtual ChannelSyncType Sync() const;
178
179 virtual void DataType(ChannelDataType type) = 0;
180 [[nodiscard]] virtual ChannelDataType DataType() const = 0;
181
182 virtual void DataBytes(uint64_t nof_bytes) = 0;
183 [[nodiscard]] virtual uint64_t DataBytes() const = 0;
184
186 virtual void Decimals(uint8_t precision);
188 [[nodiscard]] virtual uint8_t Decimals() const = 0;
189
190
191
193 [[nodiscard]] virtual bool IsDecimalUsed() const = 0;
194
196 virtual void Range(double min, double max);
197
199 [[nodiscard]] virtual std::optional<std::pair<double, double>> Range() const;
200
202 virtual void Limit(double min, double max);
203
205 [[nodiscard]] virtual std::optional<std::pair<double, double>> Limit() const;
206
208 virtual void ExtLimit(double min, double max);
209
211 [[nodiscard]] virtual std::optional<std::pair<double, double>> ExtLimit()
212 const;
213
215 virtual void SamplingRate(double sampling_rate) = 0;
216
218 [[nodiscard]] virtual double SamplingRate() const = 0;
219
221 [[nodiscard]] virtual ISourceInformation *SourceInformation() const;
222
225
238 [[nodiscard]] virtual IChannelArray *ChannelArray() const;
239
247 [[nodiscard]] virtual IChannelArray* CreateChannelArray();
248
250 [[nodiscard]] virtual IChannelConversion *ChannelConversion() const = 0;
251
253 [[nodiscard]] virtual IChannelConversion *CreateChannelConversion() = 0;
254
261 [[nodiscard]] virtual IChannel *CreateChannelComposition() = 0;
262
270 [[nodiscard]] virtual IChannel *CreateChannelComposition(
271 const std::string_view& name);
278 [[nodiscard]] virtual std::vector<IChannel*> ChannelCompositions() = 0;
279
281 [[nodiscard]] bool IsNumber() const {
282 // Need to check the cc at well if it is a value to text conversion
283 if (const auto *cc = ChannelConversion();
284 cc != nullptr && cc->Type() <= ConversionType::ValueRangeToValue) {
285 return true;
286 }
288 }
289
291 [[nodiscard]] virtual IMetaData* CreateMetaData();
292
294 [[nodiscard]] virtual IMetaData* MetaData() const;
295
309 virtual void AddAttachmentReference(const IAttachment* attachment);
310
312 virtual std::vector<const IAttachment*> AttachmentList() const;
313
322 void VlsdRecordId(uint64_t record_id) const {
323 vlsd_record_id_ = record_id;
324 }
325
334 [[nodiscard]] uint64_t VlsdRecordId() const {
335 return vlsd_record_id_;
336 }
337
349 template <typename T>
350 bool GetChannelValue(const std::vector<uint8_t> &record_buffer,
351 T &dest, uint64_t array_index = 0) const;
352
368 template <typename T>
369 void SetChannelValue(const T &value, bool valid = true,
370 uint64_t array_index = 0);
371
381 template<typename T>
382 void SetChannelValues(const std::vector<T>& values);
383
391 bool GetUnsignedValue(const std::vector<uint8_t> &record_buffer,
392 uint64_t &dest, uint64_t array_index = 0) const;
399 virtual bool GetTextValue(const std::vector<uint8_t> &record_buffer,
400 std::string &dest) const;
410 void SetTimestamp(double timestamp, std::vector<uint8_t> &record_buffer) const;
411
420 virtual void BitCount(uint32_t bits) = 0;
421
423 [[nodiscard]] virtual uint32_t BitCount() const = 0;
424
433 virtual void BitOffset(uint16_t bits) = 0;
434
436 [[nodiscard]] virtual uint16_t BitOffset() const = 0;
437
446 virtual void ByteOffset(uint32_t bytes) = 0;
447
449 [[nodiscard]] virtual uint32_t ByteOffset() const = 0;
450
459 virtual const IChannelGroup* ChannelGroup() const = 0;
460
467 uint64_t RecordId() const;
468
479 template <typename V>
480 static bool GetVirtualSample(uint64_t sample, V& value) {
481 // No need for array index here. Array is weird usage for virtual channels
482 // as the channel value = sample.
483 value = static_cast<V>(sample);
484 return true;
485 }
486
494 template <typename V = std::string>
495 static bool GetVirtualSample(uint64_t sample, std::string& value) {
496 value = std::to_string(sample);
497 return true;
498 }
499
511 void CalculateMasterTime(bool calculate_master) {
512 calculate_master_time_ = calculate_master;
513 }
514
519 [[nodiscard]] bool CalculateMasterTime() const {
520 return calculate_master_time_;
521 }
522
529 void ArraySize(uint64_t array_size) { channel_array_size_ = array_size;}
534 [[nodiscard]] uint64_t ArraySize() const {return channel_array_size_;}
535 protected:
536
537
539 bool GetSignedValue(const std::vector<uint8_t> &record_buffer,
540 int64_t &dest,
541 uint64_t array_index) const;
543 bool GetFloatValue(const std::vector<uint8_t> &record_buffer,
544 double &dest,
545 uint64_t array_index) const;
546
548 virtual bool GetByteArrayValue(const std::vector<uint8_t> &record_buffer,
549 std::vector<uint8_t> &dest) const;
550
552 bool GetCanOpenDate(const std::vector<uint8_t> &record_buffer,
553 uint64_t &dest) const;
554
556 bool GetCanOpenTime(const std::vector<uint8_t> &record_buffer,
557 uint64_t &dest) const;
558
560 [[nodiscard]] virtual std::vector<uint8_t> &SampleBuffer() const = 0;
561
563 virtual void SetValid(bool valid, uint64_t array_index);
564
566 virtual bool GetValid(const std::vector<uint8_t> &record_buffer,
567 uint64_t array_index) const;
568
570 void SetUnsignedValueLe(uint64_t value, bool valid, uint64_t array_index);
572 void SetUnsignedValueBe(uint64_t value, bool valid, uint64_t array_index);
574 void SetSignedValueLe(int64_t value, bool valid, uint64_t array_index);
576 void SetSignedValueBe(int64_t value, bool valid, uint64_t array_index);
578 void SetFloatValueLe(double value, bool valid, uint64_t array_index);
580 void SetFloatValueBe(double value, bool valid, uint64_t array_index);
582 virtual void SetTextValue(const std::string &value, bool valid);
584 virtual void SetByteArray(const std::vector<uint8_t> &value, bool valid);
585
586
587 private:
588
589 mutable uint64_t vlsd_record_id_ = 0;
590 bool calculate_master_time_ = true;
591 uint64_t channel_array_size_ = 1;
592};
593
594template <typename T>
595bool IChannel::GetChannelValue(const std::vector<uint8_t> &record_buffer,
596 T &dest, uint64_t array_index) const {
597 bool valid = false;
598
599 switch (DataType()) {
602 uint64_t value = 0;
603 valid = GetUnsignedValue(record_buffer, value, array_index);
604 dest = static_cast<T>(value);
605 break;
606 }
607
610 int64_t value = 0;
611 valid = GetSignedValue(record_buffer, value, array_index);
612 dest = static_cast<T>(value);
613 break;
614 }
617 double value = 0;
618 valid = GetFloatValue(record_buffer, value, array_index);
619 dest = static_cast<T>(value);
620 break;
621 }
622
627 std::string text;
628 valid = GetTextValue(record_buffer, text);
629 std::istringstream data(text);
630 data >> dest;
631 break;
632 }
633
637 std::vector<uint8_t> list;
638 valid = GetByteArrayValue(record_buffer, list);
639 dest = list.empty() ? T{} : list[0];
640 break;
641 }
642
644 uint64_t ms_since_1970 = 0;
645 valid = GetCanOpenDate(record_buffer, ms_since_1970);
646 dest = static_cast<T>(ms_since_1970);
647 break;
648 }
649
651 uint64_t ms_since_1970 = 0;
652 valid = GetCanOpenTime(record_buffer, ms_since_1970);
653 dest = static_cast<T>(ms_since_1970);
654 break;
655 }
656 default:
657 break;
658 }
659 if (valid) {
660 valid = GetValid(record_buffer, array_index);
661 }
662 return valid;
663}
664
666template <>
667bool IChannel::GetChannelValue(const std::vector<uint8_t> &record_buffer,
668 std::vector<uint8_t> &dest, uint64_t array_index) const;
669
671template <>
672bool IChannel::GetChannelValue(const std::vector<uint8_t> &record_buffer,
673 std::string &dest, uint64_t array_index) const;
674
675template <typename T>
676void IChannel::SetChannelValue(const T &value, bool valid,
677 uint64_t array_index ) {
678 switch (DataType()) {
680 SetUnsignedValueLe(static_cast<uint64_t>(value), valid, array_index);
681 break;
682
684 SetUnsignedValueBe(static_cast<uint64_t>(value), valid, array_index);
685 break;
686
688 SetSignedValueLe(static_cast<int64_t>(value), valid, array_index);
689 break;
690
692 SetSignedValueBe(static_cast<int64_t>(value), valid, array_index);
693 break;
694
696 SetFloatValueLe(static_cast<double>(value), valid, array_index);
697 break;
698
700 SetFloatValueBe(static_cast<double>(value), valid, array_index);
701 break;
702
707 SetTextValue(std::to_string(value), valid);
708 break;
709
713 // SetByteArray(value, valid);
714 break;
715
717 if (typeid(T) == typeid(uint64_t) && DataBytes() == 7) {
718 const auto date_array =
719 MdfHelper::NsToCanOpenDateArray(static_cast<uint64_t>(value));
720 SetByteArray(date_array, valid);
721 } else {
722 SetValid(false, array_index);
723 }
724 break;
725
727 if (typeid(T) == typeid(uint64_t) && DataBytes() == 6) {
728 const auto time_array =
729 MdfHelper::NsToCanOpenTimeArray(static_cast<uint64_t>(value));
730 SetByteArray(time_array, valid);
731 } else {
732 SetValid(false, array_index);
733 }
734 break;
735
736 default:
737 SetValid(false, array_index);
738 break;
739 }
740};
741
743template <>
744void IChannel::SetChannelValue(const std::string &value, bool valid,
745 uint64_t array_index);
746
748template <>
749void IChannel::SetChannelValue(const std::vector<uint8_t> &values, bool valid,
750 uint64_t array_index);
751
752template <typename T>
753void IChannel::SetChannelValues(const std::vector<T>& values) {
754 const auto* array = ChannelArray();
755 const auto array_size = array != nullptr ?
756 array->NofArrayValues() : 1;
757 uint64_t index = 0;
758 for (const T& value : values) {
759 if (index < array_size) {
760 SetChannelValue(value, true, index);
761 }
762 ++index;
763 }
764}
765
766} // namespace mdf
Interface against an attached file.
Definition iattachment.h:21
Base class for all MDF blocks.
Definition iblock.h:19
Defines an interface against an array (CA) block.
Definition ichannelarray.h:74
Defines a channel conversion (CC) block.
Definition ichannelconversion.h:142
virtual void Type(ConversionType type)=0
Sets the conversion type.
Interface against a channel group (CG) block.
Definition ichannelgroup.h:66
Defines a MDF channel (CN) block.
Definition ichannel.h:126
virtual void Range(double min, double max)
Sets the ranges.
virtual std::optional< std::pair< double, double > > Limit() const
Returns the limits.
void SetChannelValue(const T &value, bool valid=true, uint64_t array_index=0)
Sets a channel value.
Definition ichannel.h:676
virtual const IChannelGroup * ChannelGroup() const =0
Support function that returns its channel group.
virtual IChannelArray * ChannelArray() const
Returns the channel array object if any exist in this channel.
void ArraySize(uint64_t array_size)
Sets the array size for the channel.
Definition ichannel.h:529
virtual std::string Description() const =0
Returns the description.
virtual double SamplingRate() const =0
Returns the sample rate (s). This is a MDF 3 feature.
void CalculateMasterTime(bool calculate_master)
Defines if the master channel time should be calculated or not.
Definition ichannel.h:511
virtual void SetByteArray(const std::vector< uint8_t > &value, bool valid)
Support function that sets array values.
virtual ISourceInformation * SourceInformation() const
Returns the source information, if any.
uint64_t RecordId() const
Returns th channel group (CG) record ID.
virtual ISourceInformation * CreateSourceInformation()
Creates a source information block.
virtual bool IsDecimalUsed() const =0
Returns true if decimals is used
virtual std::vector< const IAttachment * > AttachmentList() const
Returns a list of attachment pointers.
virtual bool GetTextValue(const std::vector< uint8_t > &record_buffer, std::string &dest) const
Internally used function mainly for fetching VLSD text values.
void SetUnsignedValueLe(uint64_t value, bool valid, uint64_t array_index)
Support function that sets unsigned little endian values.
void SetTimestamp(double timestamp, std::vector< uint8_t > &record_buffer) const
The function change the supplied records time channel value.
uint64_t VlsdRecordId() const
Returns the VLSD record id.
Definition ichannel.h:334
virtual void Unit(const std::string &unit)=0
Sets unit string or or the MIME text string.
bool GetUnsignedValue(const std::vector< uint8_t > &record_buffer, uint64_t &dest, uint64_t array_index=0) const
Internally used function mainly for fetching VLSD index values.
virtual uint32_t ByteOffset() const =0
Returns the byte offset to data in the record.
static bool GetVirtualSample(uint64_t sample, std::string &value)
Specialization that returns virtual sample values.
Definition ichannel.h:495
virtual void Type(ChannelType type)=0
Sets the type of channel.
virtual void SamplingRate(double sampling_rate)=0
Sets the sample rate (s). This is a MDF 3 feature.
virtual void Sync(ChannelSyncType type)
Sets the type of sync.
virtual uint32_t BitCount() const =0
Returns the data size in number of bits.
virtual uint64_t DataBytes() const =0
Data size (bytes);.
virtual ChannelType Type() const =0
Type of channel.
virtual void ByteOffset(uint32_t bytes)=0
Sets the byte offset in record to to data.
virtual void Flags(uint32_t flags)
Sets channel flags. Flags are defined in the CnFlag namespace
virtual IChannelConversion * CreateChannelConversion()=0
Creates a conversion block.
virtual IMetaData * MetaData() const
Returns the meta-data (MD) block if it exist.
virtual std::vector< uint8_t > & SampleBuffer() const =0
Support function that gets the channel group sample buffer.
virtual std::string Name() const =0
Returns channel name.
virtual IMetaData * CreateMetaData()
Creates a metadata (MD) block.
virtual std::vector< IChannel * > ChannelCompositions()=0
Creates a composition channel.
bool GetCanOpenDate(const std::vector< uint8_t > &record_buffer, uint64_t &dest) const
Support function that get CANOpen date values from a record.
void SetFloatValueBe(double value, bool valid, uint64_t array_index)
Support function that sets float big endian values.
void SetSignedValueBe(int64_t value, bool valid, uint64_t array_index)
Support function that sets signed big endian values.
virtual void DataBytes(uint64_t nof_bytes)=0
Sets the data size (bytes)
virtual void SetTextValue(const std::string &value, bool valid)
Support function that sets text values.
virtual IChannel * CreateChannelComposition(const std::string_view &name)
Creates a composition channel with a specific name or returns an existing channel.
virtual std::optional< std::pair< double, double > > Range() const
Returns the ranges.
virtual IChannelArray * CreateChannelArray()
Create or returns an existing channel array (CA) block.
virtual void Description(const std::string &description)=0
Sets the description.
virtual uint8_t Decimals() const =0
Number of decimals (floating points)
virtual void BitCount(uint32_t bits)=0
Sets the size of data in bits.
virtual ChannelDataType DataType() const =0
Data type.
virtual void SetValid(bool valid, uint64_t array_index)
Support function that sets the valid flag.
void SetFloatValueLe(double value, bool valid, uint64_t array_index)
Support function that sets float little endian values.
void SetUnsignedValueBe(uint64_t value, bool valid, uint64_t array_index)
Support function that sets unsigned big endian values.
bool GetFloatValue(const std::vector< uint8_t > &record_buffer, double &dest, uint64_t array_index) const
Support function that get float values from a record.
bool GetCanOpenTime(const std::vector< uint8_t > &record_buffer, uint64_t &dest) const
Support function that get CANOpen time values from a record.
bool GetSignedValue(const std::vector< uint8_t > &record_buffer, int64_t &dest, uint64_t array_index) const
Support function that get signed integer from a record.
virtual void BitOffset(uint16_t bits)=0
Sets the offset to data in bits.
virtual std::string DisplayName() const =0
Display name.
bool IsNumber() const
Returns true if the channel is a number.
Definition ichannel.h:281
virtual uint16_t BitOffset() const =0
Returns offset to data (0..7).
virtual bool GetValid(const std::vector< uint8_t > &record_buffer, uint64_t array_index) const
Support function that return true if the valid bit is set.
virtual void AddAttachmentReference(const IAttachment *attachment)
Adds an attachment reference to the channel.
virtual void Limit(double min, double max)
Sets the limits.
virtual std::string Unit() const =0
Returns the unit string or the MIME content type string.
uint64_t ArraySize() const
Returns 1 if no array and > 1 if it is an array.
Definition ichannel.h:534
virtual bool IsUnitValid() const =0
True if unit exists.
virtual bool GetByteArrayValue(const std::vector< uint8_t > &record_buffer, std::vector< uint8_t > &dest) const
Support function that get array values from a record.
void SetSignedValueLe(int64_t value, bool valid, uint64_t array_index)
Support function that sets signed little endian values.
virtual IChannelConversion * ChannelConversion() const =0
Returns the conversion block, if any.
virtual void DataType(ChannelDataType type)=0
Sets the data type.
virtual void Name(const std::string &name)=0
Sets channel name.
virtual IChannel * CreateChannelComposition()=0
Creates a composition channel.
void SetChannelValues(const std::vector< T > &values)
Sets channel array values.
Definition ichannel.h:753
static bool GetVirtualSample(uint64_t sample, V &value)
Returns the value for a virtual sample.
Definition ichannel.h:480
virtual void Decimals(uint8_t precision)
Sets number of decimals (floating points only)
virtual ChannelSyncType Sync() const
Type of sync.
void VlsdRecordId(uint64_t record_id) const
Sets the VLSD record id.
Definition ichannel.h:322
virtual void DisplayName(const std::string &name)=0
Sets display name.
bool GetChannelValue(const std::vector< uint8_t > &record_buffer, T &dest, uint64_t array_index=0) const
Parse out the channel value from a data record.
Definition ichannel.h:595
virtual std::optional< std::pair< double, double > > ExtLimit() const
Returns the extended limits.
virtual void ExtLimit(double min, double max)
Sets the extended limits.
bool CalculateMasterTime() const
Defines if the master channel time is calculated or user defined.
Definition ichannel.h:519
virtual uint32_t Flags() const
Channel flags are defined in the CnFlag namespace
Interface against an meta data block (MD) in a MDF4 file.
Definition imetadata.h:27
Interface to a source information (SI) block.
Definition isourceinformation.h:51
static std::vector< uint8_t > NsToCanOpenTimeArray(uint64_t ns_since_1970)
Converts from nanoseconds to CANopen 6 byte Time array.
static std::vector< uint8_t > NsToCanOpenDateArray(uint64_t ns_since_1970)
Converts from nanoseconds to CANopen 7 byte Date array.
Interface against an attached file.
All MDF blocks inherits from the IBlock class. The interface class is used internally in lists....
Defines a channel array (CA) block.
Defines a channel conversion (CC) block.
Interface against a source information (SI) block.
Support class for the MDF library.
constexpr uint32_t LimitValid
Limit is used.
Definition ichannel.h:110
constexpr uint32_t Discrete
Discrete channel.
Definition ichannel.h:112
constexpr uint32_t BusEvent
Bus event channel.
Definition ichannel.h:116
constexpr uint32_t PrecisionValid
Precision is used.
Definition ichannel.h:108
constexpr uint32_t Calibration
Calibrated channel.
Definition ichannel.h:113
constexpr uint32_t StrictlyMonotonous
Strict monotonously.
Definition ichannel.h:117
constexpr uint32_t Virtual
Virtual channel.
Definition ichannel.h:115
constexpr uint32_t Calculated
Calculated channel.
Definition ichannel.h:114
constexpr uint32_t DefaultX
Default x-axis channel.
Definition ichannel.h:118
constexpr uint32_t VlsdDataStream
VLSD data stream channel.
Definition ichannel.h:120
constexpr uint32_t ExtendedLimitValid
Extended limit is used.
Definition ichannel.h:111
constexpr uint32_t RangeValid
Range is used.
Definition ichannel.h:109
constexpr uint32_t AllValuesInvalid
All values are invalid.
Definition ichannel.h:106
constexpr uint32_t InvalidValid
Invalid bit is used.
Definition ichannel.h:107
constexpr uint32_t EventSignal
Event signal.
Definition ichannel.h:119
Main namespace for the MDF library.
Definition canmessage.h:17
std::vector< uint8_t > ByteArray
Defines a dynamic byte array.
Definition zlibutil.h:17
ChannelSyncType
Synchronization type.
Definition ichannel.h:66
@ Distance
Distance type.
@ Angle
Angle type.
@ None
No synchronization (default value)
@ Index
Sample number.
@ ValueRangeToValue
Value range to value conversion without interpolation. Defined by a list of Key min/max value triplet...
ChannelType
Channel functional type.
Definition ichannel.h:51
@ VirtualMaster
Virtual master channel.
@ FixedLength
Fixed length data (default type)
@ MaxLength
Max length channel.
@ VirtualData
Virtual data channel.
@ VariableLength
Variable length data.
@ Sync
Synchronize channel.
@ Master
Master channel.
ChannelDataType
Channel data type.
Definition ichannel.h:82
@ StringUTF16Le
Text, UTF16 coded little endian.
@ StringUTF8
Text, UTF8 coded.
@ ByteArray
Byte array.
@ CanOpenDate
7-byte CANOpen date.
@ SignedIntegerBe
Signed integer, big endian.
@ UnsignedIntegerLe
Unsigned integer, little endian.
@ ComplexBe
Complex value, big endian.
@ StringUTF16Be
Text, UTF16 coded big endian.
@ FloatLe
Float, little endian.
@ MimeSample
MIME sample byte array.
@ StringAscii
Text, ISO-8859-1 coded.
@ FloatBe
Float, big endian.
@ SignedIntegerLe
Signed integer, little endian.
@ ComplexLe
Complex value, little endian.
@ CanOpenTime
6-byte CANOpen time.
@ UnsignedIntegerBe
Unsigned integer, big endian.
@ MimeStream
MIME stream byte array.