新增PQDIF解析线程,新增各项PQDIF解析逻辑
This commit is contained in:
347
LFtid1056/pqdif_semantic_ids.h
Normal file
347
LFtid1056/pqdif_semantic_ids.h
Normal file
@@ -0,0 +1,347 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
|
||||
#include "pqdif/include/pqdif_ph.h"
|
||||
#include "pqdif/include/pqdif_id.h"
|
||||
|
||||
namespace pqdif_sem
|
||||
{
|
||||
|
||||
// ============================================================================
|
||||
// ˵<><CBB5>
|
||||
// ----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͡<EFBFBD><CDA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﱣ<EFBFBD><EFB1A3>ԭʼ<D4AD>ֶ<EFBFBD>ֵ<EFBFBD><D6B5>UINT4 / GUID<49><44>
|
||||
// ӳ<><D3B3><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼֵ<CABC><D6B5><EFBFBD>ͳɡ<CDB3><C9A1><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ============================================================================
|
||||
|
||||
// ------------------------------
|
||||
// GUID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ------------------------------
|
||||
|
||||
inline bool GuidEqual(const GUID& a, const GUID& b)
|
||||
{
|
||||
return std::memcmp(&a, &b, sizeof(GUID)) == 0;
|
||||
}
|
||||
|
||||
struct GuidHash
|
||||
{
|
||||
std::size_t operator()(const GUID& g) const noexcept
|
||||
{
|
||||
const unsigned char* p = reinterpret_cast<const unsigned char*>(&g);
|
||||
std::size_t h = 1469598103934665603ull; // FNV-1a <20><><EFBFBD><EFBFBD>
|
||||
for (std::size_t i = 0; i < sizeof(GUID); ++i)
|
||||
{
|
||||
h ^= static_cast<std::size_t>(p[i]);
|
||||
h *= 1099511628211ull;
|
||||
}
|
||||
return h;
|
||||
}
|
||||
};
|
||||
|
||||
std::string GuidToString(const GUID& g);
|
||||
|
||||
// ============================================================================
|
||||
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID ö<>٣<EFBFBD><D9A3><EFBFBD>Դ<EFBFBD><D4B4>PDF <20><> B.2 / B.3 / B.4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pqdif_id.h <20><><EFBFBD>к궨<D0BA>壩
|
||||
// ============================================================================
|
||||
|
||||
// ------------------------------
|
||||
// 1) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagPhaseID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
||||
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
||||
// ------------------------------
|
||||
enum class PhaseId : uint32_t
|
||||
{
|
||||
None = ID_PHASE_NONE,
|
||||
AN = ID_PHASE_AN,
|
||||
BN = ID_PHASE_BN,
|
||||
CN = ID_PHASE_CN,
|
||||
NG = ID_PHASE_NG,
|
||||
AB = ID_PHASE_AB,
|
||||
BC = ID_PHASE_BC,
|
||||
CA = ID_PHASE_CA,
|
||||
RES = ID_PHASE_RES,
|
||||
NET = ID_PHASE_NET,
|
||||
Total = ID_PHASE_TOTAL,
|
||||
LnAve = ID_PHASE_LN_AVE,
|
||||
LlAve = ID_PHASE_LL_AVE,
|
||||
Worst = ID_PHASE_WORST,
|
||||
Plus = ID_PHASE_PLUS,
|
||||
Minus = ID_PHASE_MINUS,
|
||||
|
||||
General1 = ID_PHASE_GENERAL_1,
|
||||
General2 = ID_PHASE_GENERAL_2,
|
||||
General3 = ID_PHASE_GENERAL_3,
|
||||
General4 = ID_PHASE_GENERAL_4,
|
||||
General5 = ID_PHASE_GENERAL_5,
|
||||
General6 = ID_PHASE_GENERAL_6,
|
||||
General7 = ID_PHASE_GENERAL_7,
|
||||
General8 = ID_PHASE_GENERAL_8,
|
||||
General9 = ID_PHASE_GENERAL_9,
|
||||
General10 = ID_PHASE_GENERAL_10,
|
||||
General11 = ID_PHASE_GENERAL_11,
|
||||
General12 = ID_PHASE_GENERAL_12,
|
||||
General13 = ID_PHASE_GENERAL_13,
|
||||
General14 = ID_PHASE_GENERAL_14,
|
||||
General15 = ID_PHASE_GENERAL_15,
|
||||
General16 = ID_PHASE_GENERAL_16
|
||||
};
|
||||
|
||||
// ------------------------------
|
||||
// 2) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tagQuantityMeasuredID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
||||
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
||||
// ע<>⣺<EFBFBD><E2A3BA><EFBFBD><EFBFBD>û<EFBFBD><C3BB> Frequency<63><79>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD> characteristic <20><><EFBFBD>
|
||||
// ------------------------------
|
||||
enum class QuantityMeasuredId : uint32_t
|
||||
{
|
||||
None = ID_QM_NONE,
|
||||
Voltage = ID_QM_VOLTAGE,
|
||||
Current = ID_QM_CURRENT,
|
||||
Power = ID_QM_POWER,
|
||||
Energy = ID_QM_ENERGY,
|
||||
Temperature = ID_QM_TEMPERATURE,
|
||||
Pressure = ID_QM_PRESSURE,
|
||||
Charge = ID_QM_CHARGE,
|
||||
EField = ID_QM_EFIELD,
|
||||
MField = ID_QM_MFIELD,
|
||||
Velocity = ID_QM_VELOCITY,
|
||||
Bearing = ID_QM_BEARING,
|
||||
Force = ID_QM_FORCE,
|
||||
Torque = ID_QM_TORQUE,
|
||||
Position = ID_QM_POSITION,
|
||||
FluxLinkage = ID_QM_FLUXLINKAGE,
|
||||
FluxDensity = ID_QM_FLUXDENSITY,
|
||||
Status = ID_QM_STATUS
|
||||
};
|
||||
|
||||
// ------------------------------
|
||||
// 3) <20><>λ<EFBFBD><CEBB>tagQuantityUnitsID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
||||
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
||||
// ------------------------------
|
||||
enum class QuantityUnitsId : uint32_t
|
||||
{
|
||||
None = ID_QU_NONE,
|
||||
Timestamp = ID_QU_TIMESTAMP,
|
||||
Seconds = ID_QU_SECONDS,
|
||||
Cycles = ID_QU_CYCLES,
|
||||
Volts = ID_QU_VOLTS,
|
||||
Amps = ID_QU_AMPS,
|
||||
VA = ID_QU_VA,
|
||||
Watts = ID_QU_WATTS,
|
||||
Vars = ID_QU_VARS,
|
||||
Ohms = ID_QU_OHMS,
|
||||
Siemens = ID_QU_SIEMENS,
|
||||
VoltsPerAmp = ID_QU_VOLTSPERAMP,
|
||||
Joules = ID_QU_JOULES,
|
||||
Hertz = ID_QU_HERTZ,
|
||||
Celcius = ID_QU_CELCIUS,
|
||||
Degrees = ID_QU_DEGREES,
|
||||
Db = ID_QU_DB,
|
||||
Percent = ID_QU_PERCENT,
|
||||
PerUnit = ID_QU_PERUNIT,
|
||||
Samples = ID_QU_SAMPLES,
|
||||
VarHours = ID_QU_VARHOURS,
|
||||
WattHours = ID_QU_WATTHOURS,
|
||||
VaHours = ID_QU_VAHOURS,
|
||||
Mps = ID_QU_MPS,
|
||||
Mph = ID_QU_MPH,
|
||||
Bars = ID_QU_BARS,
|
||||
Pascals = ID_QU_PASCALS,
|
||||
Newtons = ID_QU_NEWTONS,
|
||||
NewtonMeters = ID_QU_NEWTONMETERS,
|
||||
Rpm = ID_QU_RPM,
|
||||
RadPerSec = ID_QU_RADPERSEC,
|
||||
Meters = ID_QU_METERS,
|
||||
WeberTurns = ID_QU_WEBERTURNS,
|
||||
Teslas = ID_QU_TESLAS,
|
||||
Webers = ID_QU_WEBERS,
|
||||
VoltsPerVolt = ID_QU_VOLTSPERVOLT,
|
||||
AmpsPerAmp = ID_QU_AMPSPERAMP,
|
||||
AmpsPerVolt = ID_QU_AMPSPERVOLT
|
||||
};
|
||||
|
||||
// ------------------------------
|
||||
// 4) <20><><EFBFBD>д洢<D0B4><E6B4A2>ʽ<EFBFBD><CABD>tagStorageMethodID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
||||
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
||||
// ------------------------------
|
||||
enum class StorageMethodId : uint32_t
|
||||
{
|
||||
Values = ID_SERIES_METHOD_VALUES,
|
||||
Scaled = ID_SERIES_METHOD_SCALED,
|
||||
Increment = ID_SERIES_METHOD_INCREMENT
|
||||
};
|
||||
|
||||
// ------------------------------
|
||||
// 5) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>tagTriggerMethodID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UINT4
|
||||
// <20><>Դ<EFBFBD><D4B4>PDF <20><> B.3 / B.4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>pqdif/include/pqdif_id.h
|
||||
// ------------------------------
|
||||
enum class TriggerMethodId : uint32_t
|
||||
{
|
||||
None = ID_TRIGGER_METH_NONE,
|
||||
Channel = ID_TRIGGER_METH_CHANNEL,
|
||||
Periodic = ID_TRIGGER_METH_PERIODIC,
|
||||
External = ID_TRIGGER_METH_EXTERNAL,
|
||||
PeriodicStats = ID_TRIGGER_METH_PERIODIC_STATS
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
// ============================================================================
|
||||
|
||||
struct UIntSemanticEntry
|
||||
{
|
||||
uint32_t raw_value; // ԭʼ UINT4 ֵ
|
||||
const char* standard_name; // <20><><EFBFBD><D7BC>/ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID_PHASE_AN
|
||||
const char* display_name; // <20><><EFBFBD><EFBFBD>չʾ<D5B9><CABE>
|
||||
const char* source_tag; // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD> tagPhaseID
|
||||
const char* comment; // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// <20><><EFBFBD><EFBFBD>GUID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GUID ֵ<><D6B5><EFBFBD>ֳ<EFBFBD><D6B3><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> pqdif_id.h <20><><EFBFBD><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><EFBFBD>ܻ<EFBFBD><DCBB>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD> pqdif ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>塣
|
||||
// ============================================================================
|
||||
|
||||
enum class GuidSemanticField
|
||||
{
|
||||
QuantityType, // tagQuantityTypeID
|
||||
ValueType, // tagValueTypeID
|
||||
QuantityCharacteristic, // tagQuantityCharacteristicID
|
||||
DisturbanceCategory // tagDisturbanceCategoryID
|
||||
};
|
||||
|
||||
struct GuidSemanticEntry
|
||||
{
|
||||
GUID raw_guid; // ԭʼ GUID ֵ
|
||||
GuidSemanticField field; // <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
const char* standard_name; // <20><><EFBFBD><D7BC>/ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID_QT_VALUELOG
|
||||
const char* display_name; // <20><><EFBFBD><EFBFBD>չʾ<D5B9><CABE>
|
||||
const char* source_tag; // <20><>Ӧ<EFBFBD>ı<EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD>
|
||||
const char* comment; // <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>
|
||||
};
|
||||
|
||||
// ============================================================================
|
||||
// <20>ġ<EFBFBD><C4A1>̶<EFBFBD><CCB6><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݹ̶<DDB9><CCB6><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD>̶<EFBFBD><CCB6><EFBFBD>registry ֻ<>Dz<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ============================================================================
|
||||
|
||||
extern const UIntSemanticEntry kPhaseTable[];
|
||||
extern const std::size_t kPhaseTableSize;
|
||||
|
||||
extern const UIntSemanticEntry kQuantityMeasuredTable[];
|
||||
extern const std::size_t kQuantityMeasuredTableSize;
|
||||
|
||||
extern const UIntSemanticEntry kQuantityUnitsTable[];
|
||||
extern const std::size_t kQuantityUnitsTableSize;
|
||||
|
||||
extern const UIntSemanticEntry kStorageMethodTable[];
|
||||
extern const std::size_t kStorageMethodTableSize;
|
||||
|
||||
extern const UIntSemanticEntry kTriggerMethodTable[];
|
||||
extern const std::size_t kTriggerMethodTableSize;
|
||||
|
||||
extern const GuidSemanticEntry kQuantityTypeTable[];
|
||||
extern const std::size_t kQuantityTypeTableSize;
|
||||
|
||||
extern const GuidSemanticEntry kValueTypeTable[];
|
||||
extern const std::size_t kValueTypeTableSize;
|
||||
|
||||
extern const GuidSemanticEntry kQuantityCharacteristicTable[];
|
||||
extern const std::size_t kQuantityCharacteristicTableSize;
|
||||
|
||||
extern const GuidSemanticEntry kDisturbanceCategoryTable[];
|
||||
extern const std::size_t kDisturbanceCategoryTableSize;
|
||||
|
||||
// ============================================================================
|
||||
// <20>塢<EFBFBD><E5A1A2>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
|
||||
// ============================================================================
|
||||
|
||||
const UIntSemanticEntry* FindUIntSemantic(
|
||||
const UIntSemanticEntry* table,
|
||||
std::size_t table_size,
|
||||
uint32_t raw_value);
|
||||
|
||||
const UIntSemanticEntry* FindPhase(uint32_t raw_value);
|
||||
const UIntSemanticEntry* FindQuantityMeasured(uint32_t raw_value);
|
||||
const UIntSemanticEntry* FindQuantityUnits(uint32_t raw_value);
|
||||
const UIntSemanticEntry* FindStorageMethod(uint32_t raw_value);
|
||||
const UIntSemanticEntry* FindTriggerMethod(uint32_t raw_value);
|
||||
|
||||
std::string FindPhaseName(uint32_t raw_value);
|
||||
std::string FindQuantityMeasuredName(uint32_t raw_value);
|
||||
std::string FindQuantityUnitsName(uint32_t raw_value);
|
||||
std::string FindStorageMethodName(uint32_t raw_value);
|
||||
std::string FindStorageMethodFlagsName(uint32_t raw_value);
|
||||
std::string FindTriggerMethodName(uint32_t raw_value);
|
||||
|
||||
// ============================================================================
|
||||
// <20><><EFBFBD><EFBFBD>GUID ע<><D7A2><EFBFBD><EFBFBD>
|
||||
// ----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ݹ̶<DDB9><CCB6><EFBFBD>registry ֻ<>ǰѹ̶<D1B9><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF>ٲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ============================================================================
|
||||
|
||||
class GuidSemanticRegistry
|
||||
{
|
||||
public:
|
||||
GuidSemanticRegistry();
|
||||
|
||||
const GuidSemanticEntry* Find(GuidSemanticField field, const GUID& raw_guid) const;
|
||||
std::string FindName(GuidSemanticField field, const GUID& raw_guid, const char* fallback = "UNKNOWN_GUID") const;
|
||||
|
||||
private:
|
||||
struct Key
|
||||
{
|
||||
GuidSemanticField field;
|
||||
GUID guid;
|
||||
};
|
||||
|
||||
struct KeyHash
|
||||
{
|
||||
std::size_t operator()(const Key& k) const noexcept
|
||||
{
|
||||
std::size_t h1 = std::hash<int>{}(static_cast<int>(k.field));
|
||||
std::size_t h2 = GuidHash{}(k.guid);
|
||||
return h1 ^ (h2 << 1);
|
||||
}
|
||||
};
|
||||
|
||||
struct KeyEq
|
||||
{
|
||||
bool operator()(const Key& a, const Key& b) const noexcept
|
||||
{
|
||||
return a.field == b.field && GuidEqual(a.guid, b.guid);
|
||||
}
|
||||
};
|
||||
|
||||
std::unordered_map<Key, const GuidSemanticEntry*, KeyHash, KeyEq> map_;
|
||||
};
|
||||
|
||||
const GuidSemanticRegistry& GetGuidSemanticRegistry();
|
||||
|
||||
// ============================================================================
|
||||
// <20>ߡ<EFBFBD>ͳ<EFBFBD><CDB3>ӳ<EFBFBD>䳣<EFBFBD><E4B3A3> helper
|
||||
// ----------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD>ֻ<EFBFBD>š<EFBFBD><C5A1><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>Դ<EFBFBD>Ҷ<EFBFBD>ͳ<EFBFBD><CDB3>ӳ<EFBFBD>䳣<EFBFBD>á<EFBFBD><C3A1><EFBFBD><EFBFBD>жϡ<D0B6>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD> helper<65><72>
|
||||
// ============================================================================
|
||||
|
||||
bool IsQuantityTypeValueLog(const GUID& raw_guid);
|
||||
bool IsValueTypeTime(const GUID& raw_guid);
|
||||
bool IsValueTypeVal(const GUID& raw_guid);
|
||||
bool IsValueTypeMin(const GUID& raw_guid);
|
||||
bool IsValueTypeMax(const GUID& raw_guid);
|
||||
bool IsValueTypeAvg(const GUID& raw_guid);
|
||||
bool IsValueTypeInterval(const GUID& raw_guid);
|
||||
bool IsCharacteristicFrequency(const GUID& raw_guid);
|
||||
bool IsCharacteristicRms(const GUID& raw_guid);
|
||||
bool IsCharacteristicTotalThd(const GUID& raw_guid);
|
||||
bool IsUnitHertz(uint32_t raw_value);
|
||||
bool IsTriggerPeriodicStats(uint32_t raw_value);
|
||||
|
||||
} // namespace pqdif_sem#pragma once
|
||||
Reference in New Issue
Block a user