Commit bae371454503efbf3f27faaecc81b37b08cd66c5
1 parent
81b55e0463
Exists in
master
and in
2 other branches
485 통신 오류 검출 루틴
- 10초 동안 UDP를 받지 못하면 통신 오류 시그널 출력 - 통신 오류 시그널 출력 후 UDP를 받으면 통신 복구 시그널 출력
Showing
2 changed files
with
27 additions
and
0 deletions
Show diff stats
app/gui/oven_control/udphandler.cpp
... | ... | @@ -17,6 +17,13 @@ UdpHandler::UdpHandler(QObject *parent) : QObject(parent) |
17 | 17 | { |
18 | 18 | bzero(&control, sizeof(control)); |
19 | 19 | bzero(&state, sizeof(state)); |
20 | + | |
21 | + emitted = false; | |
22 | + emitTimeoutTimer.setSingleShot(true); | |
23 | + emitTimeoutTimer.setInterval(10 * 1000); | |
24 | + connect(&emitTimeoutTimer, SIGNAL(timeout()), SLOT(emitTimeout())); | |
25 | + | |
26 | + emitTimeoutTimer.start(); | |
20 | 27 | } |
21 | 28 | |
22 | 29 | bool UdpHandler::init() |
... | ... | @@ -48,6 +55,12 @@ void UdpHandler::processDatagram(QByteArray &datagram) |
48 | 55 | { |
49 | 56 | sock->writeDatagram(datagram, QHostAddress("localhost"), 40001); |
50 | 57 | |
58 | + if (emitted) | |
59 | + { | |
60 | + emitted = false; | |
61 | + emit recovered(); | |
62 | + } | |
63 | + | |
51 | 64 | packet_t *packet = (packet_t *) datagram.data(); |
52 | 65 | switch (packet->header) |
53 | 66 | { |
... | ... | @@ -63,6 +76,8 @@ void UdpHandler::processDatagram(QByteArray &datagram) |
63 | 76 | qDebug() << "Received Error"; |
64 | 77 | break; |
65 | 78 | } |
79 | + | |
80 | + emitTimeoutTimer.start(); | |
66 | 81 | } |
67 | 82 | |
68 | 83 | void UdpHandler::processControl(oven_control_t *control) |
... | ... | @@ -105,6 +120,12 @@ void UdpHandler::sendCommand(int cmd, int target, int value) |
105 | 120 | sock->writeDatagram((const char *) &command, sizeof(command), QHostAddress(IPC_UDP_SYS_HOST), IPC_UDP_SYS_PORT); |
106 | 121 | } |
107 | 122 | |
123 | +void UdpHandler::emitTimeout() | |
124 | +{ | |
125 | + emitted = true; | |
126 | + emit timeout(); | |
127 | +} | |
128 | + | |
108 | 129 | void UdpHandler::fillControl(oven_control_t &container) |
109 | 130 | { |
110 | 131 | memcpy(&container, &control, sizeof(control)); | ... | ... |
app/gui/oven_control/udphandler.h
... | ... | @@ -4,6 +4,7 @@ |
4 | 4 | #include <QObject> |
5 | 5 | #include <QUdpSocket> |
6 | 6 | #include <QByteArray> |
7 | +#include <QTimer> | |
7 | 8 | |
8 | 9 | #include "../../app-prime-modbus/include/all_share.h" |
9 | 10 | |
... | ... | @@ -55,6 +56,8 @@ public: |
55 | 56 | |
56 | 57 | signals: |
57 | 58 | void changed(); |
59 | + void timeout(); | |
60 | + void recovered(); | |
58 | 61 | |
59 | 62 | public slots: |
60 | 63 | void turnOn(int target); |
... | ... | @@ -71,11 +74,14 @@ private: |
71 | 74 | void processState(oven_state_t *state); |
72 | 75 | |
73 | 76 | QUdpSocket *sock; |
77 | + QTimer emitTimeoutTimer; | |
78 | + bool emitted; | |
74 | 79 | |
75 | 80 | private slots: |
76 | 81 | void readPendingDatagrams(); |
77 | 82 | void sendCommand(int cmd, int target, int value); |
78 | 83 | |
84 | + void emitTimeout(); | |
79 | 85 | }; |
80 | 86 | |
81 | 87 | #endif // UDPHANDLER_H | ... | ... |