Blame view

app/gui/oven_control/udphandler.h 3.29 KB
8c2952457   김태훈   응용 프로그램 추가
1
2
3
4
5
6
  #ifndef UDPHANDLER_H
  #define UDPHANDLER_H
  
  #include <QObject>
  #include <QUdpSocket>
  #include <QByteArray>
bae371454   김태훈   485 통신 오류 검출 루틴
7
  #include <QTimer>
8c2952457   김태훈   응용 프로그램 추가
8
cf0ca80f6   김태훈   app_oven_control를...
9
  #include "../../app-prime-modbus/include/all_share.h"
8c2952457   김태훈   응용 프로그램 추가
10
11
12
13
14
15
16
  
  class UdpHandler : public QObject
  {
      Q_OBJECT
  
      oven_control_t control;
      oven_state_t state;
538041ab9   김태훈   소스 코드 구조 개선
17
      static UdpHandler *instance;
8c2952457   김태훈   응용 프로그램 추가
18
  public:
538041ab9   김태훈   소스 코드 구조 개선
19
20
21
22
23
24
25
26
27
28
      static UdpHandler *getInstance() {
          if (instance == 0)
          {
              UdpHandler *u = new UdpHandler;
              if (u->init())
                  instance = u;
          }
  
          return instance;
      }
8c2952457   김태훈   응용 프로그램 추가
29
      bool init();
27e821e2e   고영탁   version 1.6.8 Rel...
30
      void set_steam_high_sv_onoff(bool onoff);
8c2952457   김태훈   응용 프로그램 추가
31
6e338d03f   김태훈   연소가스동작 추가
32
33
      const oven_control_t &getControl() { return control; }
      const oven_state_t &getData() { return state; }
8c2952457   김태훈   응용 프로그램 추가
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  
      bool burner1() { return (state.onoff_state1 & 0x0001) != 0; }
      bool burner2() { return (state.onoff_state1 & 0x0002) != 0; }
      bool burner3() { return (state.onoff_state1 & 0x0004) != 0; }
      bool burnerFan1() { return (state.onoff_state1 & 0x0008) != 0; }
      bool burnerFan2() { return (state.onoff_state1 & 0x0010) != 0; }
      bool burnerFan3() { return (state.onoff_state1 & 0x0020) != 0; }
      bool convection1() { return (state.onoff_state1 & 0x0040) != 0; }
      bool convection2() { return (state.onoff_state1 & 0x0080) != 0; }
  
      bool dv() { return (state.onoff_state2 & 0x0001) != 0; }
      bool cfan() { return (state.onoff_state2 & 0x0002) != 0; }
      bool wsv() { return (state.onoff_state2 & 0x0004) != 0; }
      bool qnv() { return (state.onoff_state2 & 0x0008) != 0; }
      bool ssv() { return (state.onoff_state2 & 0x0010) != 0; }
      bool snv() { return (state.onoff_state2 & 0x0020) != 0; }
      bool hl() { return (state.onoff_state2 & 0x0040) != 0; }
      bool dp() { return (state.onoff_state2 & 0x0080) != 0; }
      bool ssp() { return (state.onoff_state2 & 0x0100) != 0; }
      bool unp() { return (state.onoff_state2 & 0x0200) != 0; }
      bool hdm() { return (state.onoff_state2 & 0x0400) != 0; }
418839ec6   김태훈   프로토콜에서 추가된 부분 반영
55
      bool sgnv() { return (state.onoff_state2 & 0x0800) != 0; }
39fec1254   김태훈   요청 사항 반영
56
57
58
59
60
61
62
63
64
      bool inv() { return (state.onoff_state2 & 0x1000) !=0; }
  
      // 3: H, 2: Error, 1: C, 0: L
      int waterLevel() {
          return ((state.water_level & 0x08) >> 2)
                  | ((state.water_level & 0x10) >> 4);
      }
  
      int heater() { return (state.onoff_relay_load2 & 0x0F); }
8c2952457   김태훈   응용 프로그램 추가
65
5f017a9d7   김태훈   요청 사항 반영
66
67
68
69
      bool burnerState(int num) {
          switch (num)
          {
          case 1:
89f2ce87a   김태훈   버그 수정
70
              return (state.burner1_state & 0x08) != 0;
5f017a9d7   김태훈   요청 사항 반영
71
          case 2:
89f2ce87a   김태훈   버그 수정
72
              return (state.burner2_state & 0x08) != 0;
5f017a9d7   김태훈   요청 사항 반영
73
          case 3:
89f2ce87a   김태훈   버그 수정
74
              return (state.burner3_state & 0x08) != 0;
5f017a9d7   김태훈   요청 사항 반영
75
76
77
78
          default:
              return false;
          }
      }
8c2952457   김태훈   응용 프로그램 추가
79
80
  signals:
      void changed();
bae371454   김태훈   485 통신 오류 검출 루틴
81
82
      void timeout();
      void recovered();
8c2952457   김태훈   응용 프로그램 추가
83
84
85
86
87
88
89
90
91
  
  public slots:
      void turnOn(int target);
      void turnOff(int target);
      void set(int target, int value);
      void fillControl(oven_control_t &container);
      void fillData(oven_state_t &container);
  
  private:
538041ab9   김태훈   소스 코드 구조 개선
92
      explicit UdpHandler(QObject *parent = 0);
8c2952457   김태훈   응용 프로그램 추가
93
94
95
96
97
      void processDatagram(QByteArray &datagram);
      void processControl(oven_control_t *control);
      void processState(oven_state_t *state);
  
      QUdpSocket *sock;
bae371454   김태훈   485 통신 오류 검출 루틴
98
99
      QTimer emitTimeoutTimer;
      bool emitted;
27e821e2e   고영탁   version 1.6.8 Rel...
100
      bool m_steamhighctr_enabled;
8c2952457   김태훈   응용 프로그램 추가
101
102
103
104
  
  private slots:
      void readPendingDatagrams();
      void sendCommand(int cmd, int target, int value);
8c2952457   김태훈   응용 프로그램 추가
105
bae371454   김태훈   485 통신 오류 검출 루틴
106
      void emitTimeout();
8c2952457   김태훈   응용 프로그램 추가
107
108
109
  };
  
  #endif // UDPHANDLER_H