Files
front_linux/LFtid1056/pqdif_thread_processor.h

84 lines
2.3 KiB
C
Raw Normal View History

#pragma once
#pragma once
#include <ctime>
#include <cstddef>
#include <map>
#include <string>
#include <vector>
#include "pqdif/include/pqdif_ph.h"
// ============================
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ
// ============================
struct RawChannelTagMeta
{
std::string raw_channel_name; // ԭʼ tagChannelName
std::string normalized_channel_name; // <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2>õĹ淶<C4B9><E6B7B6> key
long phase_id = -1; // tagPhaseID
GUID quantity_type_id{}; // tagQuantityTypeID
long quantity_measured_id = -1; // tagQuantityMeasuredID
double channel_frequency = 0.0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int group_id = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6>г<EFBFBD><D0B3><EFBFBD><EFBFBD>
};
// ============================
// ϵ<>м<EFBFBD><D0BC><EFBFBD>ǩ
// ============================
struct RawSeriesTagMeta
{
long quantity_units_id = -1; // tagQuantityUnitsID
GUID quantity_characteristic_id{}; // tagQuantityCharacteristicID
GUID value_type_id{}; // tagValueTypeID
long series_base_type = -1; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9A9><EFBFBD><EFBFBD>Ϣ
double series_scale = 1.0; // <20><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
double series_offset = 0.0; // ƫ<><C6AB>
};
// ============================
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ԭʼͳ<CABC><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ǰ<EFBFBD>׶<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ + ԭʼֵ
// ============================
struct RawChannelSeries
{
RawChannelTagMeta channel_tag;
RawSeriesTagMeta time_meta;
RawSeriesTagMeta max_meta;
RawSeriesTagMeta min_meta;
RawSeriesTagMeta avg_meta;
RawSeriesTagMeta cp95_meta;
RawSeriesTagMeta val_meta;
std::vector<time_t> times;
std::vector<double> max_values;
std::vector<double> min_values;
std::vector<double> avg_values;
std::vector<double> cp95_values;
std::vector<double> val_values;
};
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
using RawChannelMap = std::map<std::string, RawChannelSeries>;
// һ<><D2BB> PQDIF <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
struct ParsedPqdifFile
{
std::string mac; // <20>豸Ŀ¼<C4BF><C2BC>
std::string source_file; // ԭʼ<D4AD>ļ<EFBFBD>·<EFBFBD><C2B7>
time_t parsed_at = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
RawChannelMap channels; // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// <20><><EFBFBD><EFBFBD> PQDIF ɨ<><C9A8><EFBFBD>߳<EFBFBD>
void RunPqdifScanLoop();
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽӿ<CABD>
bool PopOldestParsedPqdifFile(ParsedPqdifFile& out);
bool PeekOldestParsedPqdifFile(ParsedPqdifFile& out);
size_t GetParsedPqdifCacheSize();
void ClearParsedPqdifCache();