#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; 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