#include "PhaseProtocolBM.h" #include <iostream> #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif PhaseProtocolBM::PhaseProtocolBM(QObject *parent) : QObject(parent) { } PhaseProtocolBM::~PhaseProtocolBM() { } bool PhaseProtocolBM::parseMessureData(QByteArray rawData, PhaseDataDto * dataObj) { // 获取帧头——帧计数 QByteArray head = rawData.left(PHASE_FRAME_ID_LENGTH); dataObj->frameId = QByteUtil::binToHexString(head); int j = 0; // 用于转换通道顺序 // 获取每个通道的测量数据 for (int i = 1; i <= PHASE_MESSURE_CHANNEL; i++) { if (i <= 8) { j = 2 * i - 1; } else { j = 2 * (i - 8); } QByteArray channelRaw = rawData.left(PHASE_MESSURE_SIZE * j + PHASE_FRAME_ID_LENGTH).right(PHASE_MESSURE_SIZE); qulonglong channelRawData = QByteUtil::binToULong(channelRaw, 8); if (channelRawData == CALCULATE_OFFSET) { dataObj->channelActive.append("0"); dataObj->channelData.append(0.00); } else { dataObj->channelActive.append("1"); dataObj->channelData.append((channelRawData - CALCULATE_OFFSET) * CALCULATE_FACTOR); } } return true; } QString PhaseProtocolBM::startMessure() { return "$START*"; } QString PhaseProtocolBM::stopMessure() { return "$$STOP*"; } bool PhaseProtocolBM::checkFrame(QByteArray rawData) { // 帧长度小于最小的长度 if (rawData.length() != PHASE_FRAM_LENGTH) { return false; } // 帧尾不是0xEEEEEEEE if (rawData.mid(rawData.length() - PHASE_FRAME_TAIL.size()) != PHASE_FRAME_TAIL) { return false; } return true; }