Newer
Older
ZXSSCJ / DevStatusAcq / protocol / FrequencyTuningProtocolBM.h
TAN YUE on 26 Oct 2021 2 KB 20211026 add commet
#ifndef FREQUENCYTUNINGPROTOCOLBM_H
#define FREQUENCYTUNINGPROTOCOLBM_H

#include <QObject>
#include <QList>

#include "dto/FrequencyTuningStatusFreqDto.h"
#include "dto/FrequencyTuningStatusPulseDto.h"

static const QString FREQUENCY_TUNING_FREQ_FRAME_HEAD = "$GLF"; // 帧头
static const QString FREQUENCY_TUNING_PULSE_FRAME_HEAD = "$GLP"; // 帧头
static const QString FREQUENCY_TUNING_FRAME_TAIL = "\r\n"; // 帧尾
static const QString FREQUENCY_TUNING_FRAME_CONTENT_SEP = ","; // 帧内分隔符
static const QString FREQUENCY_TUNING_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符

static const int FREQUENCY_TUNING_FRAME_SUM_LENGTH = 2;
static const int FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT = 26;
static const int FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT = 5;
static const int FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE = 2;

static const int FREQUENCY_TUNING_FREQ_FRAME_MIN_LENGTH = FREQUENCY_TUNING_FREQ_FRAME_HEAD.length() +
        FREQUENCY_TUNING_FRAME_TAIL.length() +
        FREQUENCY_TUNING_FREQ_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
        1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;
static const int FREQUENCY_TUNING_PULSE_FRAME_MIN_LENGTH = FREQUENCY_TUNING_PULSE_FRAME_HEAD.length() +
        FREQUENCY_TUNING_FRAME_TAIL.length() +
        FREQUENCY_TUNING_PULSE_FRAME_SUB_COUNT * FREQUENCY_TUNING_FRAME_SUB_MIN_SIZE +
        1 + FREQUENCY_TUNING_FRAME_SUM_LENGTH;

static const QString FREQUENCY_TUNING_FREQ_FRAME_TYPE = "0301";
static const QString FREQUENCY_TUNING_PULSE_FRAME_TYPE = "0302";

class FrequencyTuningProtocolBM : public QObject
{
    Q_OBJECT
public:
    explicit FrequencyTuningProtocolBM(QObject *parent = nullptr);
    ~FrequencyTuningProtocolBM();

    // 解析数据
    static bool parseFrequencyTuningData(QByteArray rawData, FrequencyTuningStatusDto * ftFrameData, int frameType);
    static FrequencyTuningStatusDto * ftFrameFactory(int frameType);

    //
    static QList<QByteArray> extractFrameList(QByteArray rawData);

    // 检测帧格式,帧头帧尾
    static int checkFrame(QByteArray rawData);

    enum FREQUENCY_TUNING_FRAME_TYPE
    {
        UNKNOW_FRAME = 0,
        FREQ_FRAME = 1,
        PULSE_FRAME = 2,
        NETWORK_FRAME = 3
    };
};

#endif // FREQUENCYTUNINGPROTOCOLBM_H