#ifndef UNITSIMULATOR_H
#define UNITSIMULATOR_H

#include <QObject>


class UnitSimulator : public QObject
{
    Q_OBJECT
public:
    explicit UnitSimulator(QObject *parent = 0);

    enum deviceID
    {
        u_error=-1,
        u_none=0,
        u_psm,
        u_pps,
        u_lcu
    };

    int checkMessage(const QByteArray& data);
    int get_type_mess(const QByteArray& data);
    int checkResponse(const QByteArray& data);


    QByteArray psmStatus() const;
    QByteArray ppsStatus() const;
    QByteArray lcuStatus() const;
    QByteArray lcuEti() const;

    QByteArray genPSMStatus() const;
    QByteArray genPPSStatus() const;
    QByteArray genLCUStatus() const;
    QByteArray genLCUEti() const;


signals:
    void psmCommand(const QString& cmd);

public slots:
    void pmsGo(bool go);

    //LCU
    void cdLCUModeStatus(const QString &t);
    void cdLCUProgress(const QString &t);
    void cdLCUHealth(const QString &t);
    void cdLCUByPass(const QString &t);
    void cdLCUHazard(const QString &t);
    void cdLCUOverride(const QString &t);
    void dsbTS1(int t);
    void dsbTS2(int t);
    void dsbTS3(int t);
    void dsbTS4(int t);
    void dsbTS5(int t);
    void dsbTS6(int t);
    void dsbBoardTemp(int t);
    void dsbMTS(int t);
    void dsbMFS(int t);
    void dsbFS1(int t);
    void dsbFS2(int t);
    void dsbPS(double t);
    void sbLCURelease(int t);
    void sbLCUVersion(int t);
    void cbLCU11(int t);
    void cbLCU12(int t);
    void cbLCU13(int t);
    void cbLCU14(int t);
    void cbLCU17(int t);
    void cbLCU21(int t);
    void cbLCU22(int t);
    void cbLCU23(int t);
    void cbLCU24(int t);
    void cbLCU25(int t);
    void cbLCU31(int t);
    void cbLCU32(int t);
    void cbLCU33(int t);
    void cbLCU34(int t);
    void cbLCU38(int t);
    void cbLCU41(int t);
    void cbLCU42(int t);
    void cbLCU43(int t);
    void cbLCU44(int t);
    void cbLCU45(int t);
    void cbLCU46(int t);
    void cbLCU47(int t);
    void cbLCU48(int t);
    void cbLCU51(int t);
    void cbLCU52(int t);
    void cbLCU53(int t);
    void cbLCU55(int t);
    void cbLCU56(int t);
    void cbLCU57(int t);
    void cbLCU58(int t);

    void sbLCUETI(int t);

    //PSM
    void cdPSMModeStatus(const QString &t);
    void cbPSMHazard(const QString &t);
    void cbPSM3Sec(const QString &t);
    void cbPSMWow(const QString &t);
    void cbPSMAc(const QString &t);
    void cbPSMbs(const QString &t);
    void cbPSMdc(const QString &t);
    void cbPSMpfc(const QString &t);
    void cbPSMvolt3v3(const QString &t);
    void cbPSMvolt5(const QString &t);
    void cbPSMvolt12(const QString &t);
    void cbPSMvoltneg12(const QString &t);

    void sbPSMInAmp(double t);
    void sbPSMOutVolt3v3(double t);
    void sbPSMOutVolt5v(double t);
    void sbPSMOutVolt15v(double t);
    void sbPSMOutVoltm15v(double t);
    void sbPSMTemp(int t);
    void sbPSMETI(int t);
    void sbPSMOnCount(int t);
    void sbPSMUncCount(int t);
    void sbPSMVer(int t);
    void sbPSMRel(int t);

    void cbPSM11(int t);
    void cbPSM12(int t);
    void cbPSM13(int t);
    void cbPSM14(int t);
    void cbPSM15(int t);
    void cbPSM16(int t);
    void cbPSM17(int t);
    void cbPSM18(int t);

    void cbPSM21(int t);
    void cbPSM22(int t);
    void cbPSM23(int t);
    void cbPSM24(int t);
    void cbPSM25(int t);
    void cbPSM26(int t);
    void cbPSM27(int t);
    void cbPSM28(int t);

    void cbPSM31(int t);
    void cbPSM32(int t);
    void cbPSM33(int t);
    void cbPSM34(int t);
    void cbPSM35(int t);
    void cbPSM36(int t);
    void cbPSM37(int t);
    void cbPSM38(int t);

    void cbPSM41(int t);
    void cbPSM42(int t);
    void cbPSM43(int t);
    void cbPSM44(int t);
    void cbPSM45(int t);
    void cbPSM46(int t);
    void cbPSM47(int t);
    void cbPSM48(int t);

    //PPS
    void cbPPSModeStatus(const QString &t);
    void cbPPShazard(const QString &t);
    void cbPPShealth(const QString &t);
    void cbPPSwow(const QString &t);
    void cbPPSlimit(const QString &t);

    void cbPPS11(int t);
    void cbPPS12(int t);
    void cbPPS13(int t);
    void cbPPS14(int t);
    void cbPPS16(int t);
    void cbPPS17(int t);
    void cbPPS18(int t);

    void cbPPS21(int t);
    void cbPPS22(int t);
    void cbPPS23(int t);
    void cbPPS25(int t);
    void cbPPS26(int t);
    void cbPPS27(int t);
    void cbPPS28(int t);

    void cbPPS31(int t);
    void cbPPS32(int t);
    void cbPPS33(int t);
    void cbPPS34(int t);
    void cbPPS35(int t);
    void cbPPS36(int t);
    void cbPPS37(int t);
    void cbPPS38(int t);

    void cbPPS41(int t);
    void cbPPS42(int t);
    void cbPPS43(int t);
    void cbPPS44(int t);
    void cbPPS45(int t);
    void cbPPS46(int t);
    void cbPPS47(int t);
    void cbPPS48(int t);

    void cbPPS51(int t);
    void cbPPS52(int t);
    void cbPPS53(int t);
    void cbPPS54(int t);
    void cbPPS55(int t);
    void cbPPS56(int t);
    void cbPPS57(int t);
    void cbPPS58(int t);

    void cbPPS61(int t);
    void cbPPS62(int t);
    void cbPPS63(int t);

    void sbPPSRXver(int t);
    void sbPPSRXrel(int t);
    void sbPPSTX1rel(int t);
    void sbPPSTX2rel(int t);
    void sbPPSTX3rel(int t);
    void sbPPSTX1ver(int t);
    void sbPPSTX2ver(int t);
    void sbPPSTX3ver(int t);
    void sbPPSRXtemp(int t);
    void sbPPSTX1temp(int t);
    void sbPPSTX2temp(int t);
    void sbPPSTX3temp(int t);
    void sbPPSInletTemp(int t);
    void sbPPSOutletTemp(int t);
    void sbPPSCurr(double t);
    void sbPPSTX1current(double t);
    void sbPPSTX2current(double t);
    void sbPPSTX3current(double t);


    void sbPPSTX1currentMAX_2(double t);
    void sbPPSTX2currentMAX_2(double t);
    void sbPPSTX3currentMAX_2(double t);

    void sbPPSTX1currentAVG_2(double t);
    void sbPPSTX2currentAVG_2(double t);
    void sbPPSTX3currentAVG_2(double t);

    void sbPPSRXPhaseRmin_2(double t);
    void sbPPSRXPhaseSmin_2(double t);
    void sbPPSRXPhaseTmin_2(double t);

    void sbPPSRXPhaseRmax_2(double t);
    void sbPPSRXPhaseSmax_2(double t);
    void sbPPSRXPhaseTmax_2(double t);


public:
    QByteArray pendingMessage;
};

#endif // UNITSIMULATOR_H
