ovenstatics.h 10.4 KB
#ifndef OVENSTATICS_H
#define OVENSTATICS_H

#include <QObject>
#include <time.h>
#include <qmap.h>
#include "../../app-prime-modbus/include/all_share.h"
#include "udphandler.h"
#include "oven.h"
#include "servicedata.h"

#define SYS_STATE_MAX 4


#define SYS_ERR_MAX     10

#define SYS_ERR_MASK_ERR_CLEAR_COOKING          0x00ff
#define SYS_ERR_MASK_ERR_CLEAR_NONCOOKING  0x00ff
#define SYS_ERR_MASK_COOKING             0x00ff
#define SYS_ERR_MASK_NONCOOKING     (SYS_ERR_OVNE_TEMP_ALARM)


#define COMM_ERR_MAX    5


#define COMM_ERR_MASK_ERR_CLEAR_COOKING              0x0000
#define COMM_ERR_MASK_ERR_CLEAR_NONCOOKING      0x0000

#define COMM_ERR_MASK_COOKING         0x0000
#define COMM_ERR_MASK_NONCOOKING 0x0000


#define SENSOR_ERR_MAX      10


#define SENSOR_ERR_MASK_ERR_CLEAR       0x0000
#define SENSOR_ERR_MASK_COOKING          0x0000
#define SENSOR_ERR_MASK_NONCOOKING  0x0000

#define MAKE_MASK(MASK)             (1<<MASK)

#define LOAD_STATE1_UPPER_BUNNER             0x0001
#define LOAD_STATE1_LOWER_BUNNER           0x0002
#define LOAD_STATE1_STEAM_BUNNER            0x0004
#define LOAD_STATE1_UPPER_FAN                     0x0008
#define LOAD_STATE1_LOWER_FAN                   0x0010
#define LOAD_STATE1_STEAM_FAN                    0x0020
#define LOAD_STATE1_CONVEC_FAN1                            0x0040
#define LOAD_STATE1_CONVEC_FAN2                            0x0080

/*#define LOAD_STATE2_DV                                  0x0001
#define LOAD_STATE2_CFAN                              0x0002
#define LOAD_STATE2_WSV                               0x0004
#define LOAD_STATE2_QNV                               0x0008
#define LOAD_STATE2_SSV                                 0x0010
#define LOAD_STATE2_SNV                                 0x0020
#define LOAD_STATE2_ERRLED                           0x0040
#define LOAD_STATE2_ATVLED                           0x0080
#define LOAD_STATE2_HL                                    0x0100
#define LOAD_STATE2_DP                                   0x0200
#define LOAD_STATE2_SSP                                  0x0400
#define LOAD_STATE2_UNP                                 0x0800
#define LOAD_STATE2_HT1                                  0x1000
#define LOAD_STATE2_HT2                                  0x2000
#define LOAD_STATE2_HDM                                0x4000
#define LOAD_STATE2_ST1                                   0x8000*/



#define LOAD_STATE2_DV                                  0x0001
#define LOAD_STATE2_CFAN                              0x0002
#define LOAD_STATE2_WSV                               0x0004
#define LOAD_STATE2_QNV                               0x0008
#define LOAD_STATE2_SSV                                 0x0010
#define LOAD_STATE2_SNV                                 0x0020
#define LOAD_STATE2_HL                                    0x0040
#define LOAD_STATE2_DP                                   0x0080
#define LOAD_STATE2_SSP                                  0x0100
#define LOAD_STATE2_UNP                                 0x0200
#define LOAD_STATE2_HDM                                0x0400
#define LOAD_STATE2_SGNV                               0x0800

enum sys_state_type{
    SYS_OFF_COOK_OFF=0,
    SYS_ON_COOK_OFF=1,
    SYS_ON_COOK_ON=2,
    SYS_OFF_COOK_ON=3 //unnormal state
};

enum sys_error_id{
    SYS_ERR_FIRE_TRIGGER1               =0,
    SYS_ERR_FIRE_TRIGGER2               ,
    SYS_ERR_FIRE_TRIGGER3               ,
    SYS_ERR_OVNE_TEMP_ALARM     ,
    SYS_ERR_QUN_TEMP_ALARM       ,
    SYS_ERR_CENTER_TEMP_ALARM  ,
    SYS_ERR_WALL_TEMP_ALARM      ,
    SYS_ERR_STAM_TEMP_ALARM      ,
    SYS_ERR_WATER_LEVEL_FAIL         ,
    SYS_ERR_WATER_SPLY_FAIL
};

enum comm_err_id{
    COMM_ERR_BUNNER1                    =0,
    COMM_ERR_BUNNER2                    ,
    COMM_ERR_BUNNER3                    ,
    COMM_ERR_UPPERFAN                   ,
    COMM_ERR_LOWERFAN
};

enum sensor_err_id{
    SENSOR_ERR_SENSOR_1                     =0,
    SENSOR_ERR_SENSOR_2                     ,
    SENSOR_ERR_SENSOR_3                     ,
    SENSOR_ERR_SENSOR_4                     ,
    SENSOR_ERR_SENSOR_5                     ,
    SENSOR_ERR_SENSOR_6                     ,
    SENSOR_ERR_SENSOR_7                     ,
    SENSOR_ERR_SENSOR_8                     ,
    SENSOR_ERR_SENSOR_9                     ,
    SENSOR_ERR_SENSOR_10
};

enum error_exe_type{
    error_type_allnone=0,
    error_type_onlypop,
    error_type_onlyeng,
    error_type_onlychk,
    error_type_popnonclr,
    error_type_engnonclr,
    error_type_clrsplit,
    error_type_chkclr,
    error_type_popclr,
    error_type_engclr,
};


enum wash_mode_type{
    wash_mode_nocleanser=1,
    wash_mode_simple,
    wash_mode_standard,
    wash_mode_strong,
    wash_mode_highspeed
};

enum water_level_state{
    water_level_normal = 0,
    water_level_low,
    water_level_high
};


typedef union
{
  uint32_t d32;
  struct
  {
    uint32_t reserved         : 9;
    uint32_t door_open          : 1;
    uint32_t wsv_open     : 1;
    uint32_t dv_open           : 1;
    uint32_t sgnv_open         : 1;
    uint32_t water_level    : 16;
    uint32_t snv_open    : 1;
    uint32_t qnv_open         : 1;
    uint32_t ssv_open       : 1;
  }b;
}realtime_data;

typedef struct _popup_list_item{
    QString strTitle;
    QString strDesc;
    bool bNeedClear;
}popup_list_item;

class OvenStatistics : public QObject
{
    Q_OBJECT
public:
    ServiceData* srvdata;

    static OvenStatistics* getInstance(QObject* parent = 0);
    static void destroy();
    bool getNeedErrorClear();
    void clearNeedErrorClear();
    realtime_data getPartsRealtimeData(void);
    uint8_t getSensorTypeByIdx(uint16_t idx);
    type_temp getCurSensorValueByIdx(uint16_t idx);

private:

    const error_exe_type sys_err_type_def[SYS_STATE_MAX][SYS_ERR_MAX]={
                                                        {error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,
                                                        error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr}, // SYS_OFF_COOK_OFF state
                                                        {error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,
                                                        error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr}, // SYS_ON_COOK_OFF state
                                                        {error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,
                                                        error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr}, // SYS_ON_COOK_ON state
                                                        {error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,
                                                        error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr,error_type_popclr}, // SYS_OFF_COOK_ON state
                                                        };

    const error_exe_type comm_err_type_def[SYS_STATE_MAX][COMM_ERR_MAX] ={\
                                                       {error_type_popnonclr,error_type_popnonclr,error_type_popnonclr,error_type_engnonclr,error_type_engnonclr}, //SYS_OFF_COO_OFF
                                                       {error_type_popnonclr,error_type_popnonclr,error_type_popnonclr,error_type_engnonclr,error_type_engnonclr}, //SYS_ON_COO_OFF
                                                       {error_type_popnonclr,error_type_popnonclr,error_type_popnonclr,error_type_popnonclr,error_type_popnonclr}, //SYS_ON_COO_ON
                                                       {error_type_popnonclr,error_type_popnonclr,error_type_popnonclr,error_type_engnonclr,error_type_engnonclr}, //SYS_OFF_COO_ON
    };

    const error_exe_type sensor_err_type_def[SYS_STATE_MAX][SENSOR_ERR_MAX]={
                                                        {error_type_engnonclr,error_type_popnonclr,error_type_allnone,error_type_popnonclr,error_type_onlychk,
                                                        error_type_popnonclr,error_type_allnone,error_type_allnone,error_type_allnone,error_type_popnonclr}, // SYS_OFF_COOK_OFF state
                                                        {error_type_engnonclr,error_type_popnonclr,error_type_allnone,error_type_popnonclr,error_type_onlychk,
                                                        error_type_popnonclr,error_type_allnone,error_type_allnone,error_type_allnone,error_type_popnonclr}, // SYS_ON_COOK_OFF state
                                                        {error_type_onlychk,error_type_onlychk,error_type_allnone,error_type_popnonclr,error_type_popnonclr,
                                                        error_type_popnonclr,error_type_allnone,error_type_allnone,error_type_allnone,error_type_popnonclr}, // SYS_ON_COOK_ON state
                                                        {error_type_engnonclr,error_type_popnonclr,error_type_allnone,error_type_popnonclr,error_type_onlychk,
                                                        error_type_popnonclr,error_type_allnone,error_type_allnone,error_type_allnone,error_type_popnonclr}, // SYS_OFF_COOK_ON state same with SYS_OFF_COOK_OFF
    };

    const uint8_t sensorTypeInfo[MAX_LOG_SENSOR] = {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        1, 1, 2, 0, 1, 1
    }; //Type 2 is /10 value;

    type_temp curSensorValue[MAX_LOG_SENSOR];


    static OvenStatistics* p_singletonInstance;
    UdpHandler *udp;
    Oven* oven;
    oven_control_t control;
    oven_state_t state;
    error_item* m_pLastErrItem;
    QMap<uint32_t, popup_list_item> m_mapPopupList;
    uint32_t m_nLastPopupidx;
    bool m_bPopupShow;




    bool curdoorstate;
    uint16_t curSysErrorState;
    uint16_t curCommErrorState;
    uint16_t curSensorErrorState;
    bool bNeedErrorClear;
    bool bDataRefreshed;
    realtime_data realdata;

    explicit OvenStatistics(QObject* parent);
    ~OvenStatistics();
    void processSystemError(uint16_t errflag,time_t ltime);
    void processCommError(uint16_t errflag,time_t ltime);
    void processSensorError(uint16_t errflag, time_t ltime);
    void processErrorItems(error_item *item, error_exe_type errtype, const QString &MsgDesc,const QString &MsgTitle,  time_t ltime);


public slots:
    void onDataChanged();
    void oneSecTimerFired(void);
    void onErrorPopupClosed(QWidget* parent);
};

#endif // OVENSTATICS_H