Newer
Older
ZXSSCJ / DevStatusAcq / protocol / SignalGeneratorProtocolBM.h
TAN YUE on 26 Oct 2021 3 KB 20211026 add commet
#ifndef SIGNALGENERATORPROTOCOLBM_H
#define SIGNALGENERATORPROTOCOLBM_H

#include <QObject>
#include <QList>

#include "dto/SignalGeneratorInterfaceDto.h"
#include "dto/SignalGeneratorStatusDto.h"
#include "dto/SignalGeneratorMJDTimeDto.h"
#include "dto/SignalGeneratorZDATimeDto.h"

static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD = "$GLC"; // 帧头
static const QString SIGNAL_GENERATOR_STATUS_FRAME_HEAD = "$GLF"; // 帧头
static const QString SIGNAL_GENERATOR_MJD_FRAME_HEAD = "$GPMJD"; // 帧头
static const QString SIGNAL_GENERATOR_ZDA_FRAME_HEAD = "$GPZDA"; // 帧头
static const QString SIGNAL_GENERATOR_FRAME_TAIL = "\r\n"; // 帧尾
static const QString SIGNAL_GENERATOR_FRAME_CONTENT_SEP = ","; // 帧内分隔符
static const QString SIGNAL_GENERATOR_FRAME_SUM_SEP = "*"; // 异或和字段的分隔符

static const int SIGNAL_GENERATOR_FRAME_SUM_LENGTH = 2;
static const int SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT = 2;
static const int SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT = 11;
static const int SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT = 6;
static const int SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT = 4;
static const int SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE = 2;

static const int SIGNAL_GENERATOR_INTERFACE_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_INTERFACE_FRAME_HEAD.length() +
        SIGNAL_GENERATOR_FRAME_TAIL.length() +
        SIGNAL_GENERATOR_INTERFACE_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
        1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
static const int SIGNAL_GENERATOR_STATUS_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_STATUS_FRAME_HEAD.length() +
        SIGNAL_GENERATOR_FRAME_TAIL.length() +
        SIGNAL_GENERATOR_STATUS_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
        1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
static const int SIGNAL_GENERATOR_ZDA_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_ZDA_FRAME_HEAD.length() +
        SIGNAL_GENERATOR_FRAME_TAIL.length() +
        SIGNAL_GENERATOR_ZDA_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
        1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;
static const int SIGNAL_GENERATOR_MJD_FRAME_MIN_LENGTH = SIGNAL_GENERATOR_MJD_FRAME_HEAD.length() +
        SIGNAL_GENERATOR_FRAME_TAIL.length() +
        SIGNAL_GENERATOR_MJD_FRAME_SUB_COUNT * SIGNAL_GENERATOR_FRAME_SUB_MIN_SIZE +
        1 + SIGNAL_GENERATOR_FRAME_SUM_LENGTH;

static const QString SIGNAL_GENERATOR_INTERFACE_FRAME_TYPE = "0401";
static const QString SIGNAL_GENERATOR_STATUS_FRAME_TYPE = "0402";
static const QString SIGNAL_GENERATOR_MJD_FRAME_TYPE = "0403";
static const QString SIGNAL_GENERATOR_ZDA_FRAME_TYPE = "0404";

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

    // 解析数据
    static bool parseSignalGeneratorData(QByteArray rawData, SignalGeneratorFrameDto * sgFrameData, int frameType);
    static SignalGeneratorFrameDto * sgFrameFactory(int frameType);

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

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

    enum SIGNAL_GENERATOR_FRAME_TYPE
    {
        UNKNOW_FRAME = 0,
        INTERFACE_FRAME = 1,
        STATUS_FRAME = 2,
        ZDA_FRAME = 3,
        MJD_FRAME = 4,
        NETWORK_FRAME = 5
    };
};

#endif // SIGNALGENERATORPROTOCOLBM_H