Newer
Older
ZXSSCJ / DevStatusAcq / protocol / FreqReplicatorProtocolTX.cpp
#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;
}