#include "FreqReplicatorProtocolTX.h" FreqReplicatorProtocolTX::FreqReplicatorProtocolTX(QObject *parent) : DeviceStatusProtocolBase(parent) { } FreqReplicatorProtocolTX::~FreqReplicatorProtocolTX() { } DeviceFrameBaseDto * FreqReplicatorProtocolTX::frameFactory(int frameType) { DeviceFrameBaseDto * frameData = new FreqReplicatorStatusDto(); return frameData; } bool FreqReplicatorProtocolTX::parseDeviceFrameData(QByteArray rawData, DeviceFrameBaseDto * frameData, int frameType) { if (frameType != 1) return false; QByteArray content = rawData.mid(4, rawData.size() - 5); QByteArray inputACByte = content.mid(1, 2); QByteArray inputBDByte = content.mid(3, 2); QByteArray outputACByte = content.mid(5, 8); QByteArray outputBDByte = content.mid(13, 8); QString inputAC = ""; QString inputBD = ""; QString outputAC = ""; QString outputBD = ""; if (content.at(0) == 0x01) { ((FreqReplicatorStatusDto *) frameData)->abOrCd = "AB"; if (inputACByte.at(0) == 0x01) { inputAC += "10MHz,"; } if (inputACByte.at(1) == 0x01) { inputAC += "5MHz,"; } if (inputBDByte.at(0) == 0x01) { inputBD += "10MHz,"; } if (inputBDByte.at(1) == 0x01) { inputBD += "5MHz,"; } ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC.mid(0, inputAC.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD.mid(0, inputBD.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); for (int i = 0; i < 8; i++) { outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; } ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); } else { ((FreqReplicatorStatusDto *) frameData)->abOrCd = "CD"; if (inputACByte.at(0) == 0x01) { inputAC += "10MHz,"; } if (inputACByte.at(1) == 0x01) { inputAC += "5MHz,"; } if (inputBDByte.at(0) == 0x01) { inputBD += "10MHz,"; } if (inputBDByte.at(1) == 0x01) { inputBD += "5MHz,"; } ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); ((FreqReplicatorStatusDto *) frameData)->inValid.append(""); ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputAC.mid(0, inputAC.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->inValid.append(inputBD.mid(0, inputBD.size() - 1)); for (int i = 0; i < 8; i++) { outputAC += outputACByte.at(i) == 0x01 ? "1," : "0,"; outputBD += outputBDByte.at(i) == 0x01 ? "1," : "0,"; } ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); ((FreqReplicatorStatusDto *) frameData)->outValid.append(""); ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputAC.mid(0, outputAC.size() - 1)); ((FreqReplicatorStatusDto *) frameData)->outValid.append(outputBD.mid(0, outputBD.size() - 1)); } ((FreqReplicatorStatusDto *)frameData)->frameType = FREQ_REPLICATOR_STATUS_FRAME_TYPE; return true; } QList<QByteArray> FreqReplicatorProtocolTX::extractFrameList(QByteArray rawData) { QList<QByteArray> resultList; while (QByteUtil::binToHexString(rawData.mid(0, 3)) == "AA5500") { QByteArray ba; qint8 length = rawData.mid(3, 1).toHex().toInt(0, 16); if (rawData.length() >= length + 5) { ba.append(rawData.mid(0, length + 5)); resultList.append(ba); ba.clear(); rawData = rawData.mid(length + 5, rawData.length() - length - 5); } else { break; } } return resultList; } int FreqReplicatorProtocolTX::checkFrame(QByteArray rawData) { if (rawData.size() == 26) return 1; return 0; }