81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
1
2
3
4
5
6
|
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableWidgetItem>
#include "tablevalue.h"
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
7
8
9
10
11
12
|
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
sock = new QUdpSocket(this);
|
d7c3a65b4
김태훈
- 디버깅 포트 변경(4000 ...
|
13
|
if (!sock->bind(40001))
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
14
|
exit(EXIT_FAILURE);
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
15
16
|
bzero(&control, sizeof(control));
bzero(&state, sizeof(state));
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
17
|
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
18
19
20
|
connect(sock, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
ui->controlTable->setRowCount(sizeof(oven_control_t) / sizeof(U16));
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
21
|
ui->controlTable->setColumnCount(5);
|
26fa00c5f
김태훈
출력 형식 변경
|
22
|
ui->controlTable->setHorizontalHeaderLabels(QString("Addr,Value,Value,Description").split(","));
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
23
24
25
|
for (int row = 0; row < ui->controlTable->rowCount(); row++)
{
|
26fa00c5f
김태훈
출력 형식 변경
|
26
27
28
29
|
QTableWidgetItem *witem = new QTableWidgetItem(QString("").sprintf("0x%04X", row));
witem->setTextAlignment(Qt::AlignCenter);
ui->controlTable->setItem(row, 0, witem);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
30
31
32
|
TableValue *item = new TableValue;
item->setText("0x0000");
|
26fa00c5f
김태훈
출력 형식 변경
|
33
34
|
item->setMargin(3);
item->setAlignment(Qt::AlignCenter);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
35
|
ui->controlTable->setCellWidget(row, 1, item);
|
26fa00c5f
김태훈
출력 형식 변경
|
36
37
38
39
40
41
|
item = new TableValue;
item->setText("0");
item->setMargin(3);
item->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
ui->controlTable->setCellWidget(row, 2, item);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
42
|
}
|
26fa00c5f
김태훈
출력 형식 변경
|
43
44
|
ui->controlTable->resizeColumnToContents(0);
ui->controlTable->resizeColumnToContents(1);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
45
|
ui->stateTable->setRowCount(sizeof(oven_state_t) / sizeof(U16));
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
46
|
ui->stateTable->setColumnCount(5);
|
26fa00c5f
김태훈
출력 형식 변경
|
47
|
ui->stateTable->setHorizontalHeaderLabels(QString("Addr,Value,Value,Description").split(","));
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
48
49
50
|
for (int row = 0; row < ui->stateTable->rowCount(); row++)
{
|
26fa00c5f
김태훈
출력 형식 변경
|
51
52
53
|
QTableWidgetItem *witem = new QTableWidgetItem(QString("").sprintf("0x%04X", row));
witem->setTextAlignment(Qt::AlignCenter);
ui->stateTable->setItem(row, 0, witem);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
54
55
56
|
TableValue *item = new TableValue;
item->setText("0x0000");
|
26fa00c5f
김태훈
출력 형식 변경
|
57
58
|
item->setMargin(3);
item->setAlignment(Qt::AlignCenter);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
59
|
ui->stateTable->setCellWidget(row, 1, item);
|
26fa00c5f
김태훈
출력 형식 변경
|
60
61
62
63
64
65
|
item = new TableValue;
item->setText("0");
item->setMargin(3);
item->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
ui->stateTable->setCellWidget(row, 2, item);
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
66
|
}
|
26fa00c5f
김태훈
출력 형식 변경
|
67
68
69
|
ui->stateTable->resizeColumnToContents(0);
ui->stateTable->resizeColumnToContents(1);
|
02f864212
김태훈
출력 번지 별 설명 추가
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
ui->controlTable->setItem(0x05, 3, new QTableWidgetItem("Oven Mode"));
ui->controlTable->setItem(0x06, 3, new QTableWidgetItem("Cook On/Off"));
ui->controlTable->setItem(0x07, 3, new QTableWidgetItem("Wash On/Off"));
ui->controlTable->setItem(0x08, 3, new QTableWidgetItem("System On/Off"));
ui->controlTable->setItem(0x09, 3, new QTableWidgetItem("Temp"));
ui->controlTable->setItem(0x0A, 3, new QTableWidgetItem("Humidity"));
ui->controlTable->setItem(0x0B, 3, new QTableWidgetItem("Time"));
ui->controlTable->setItem(0x0C, 3, new QTableWidgetItem("Preheat On/Off"));
// ui->controlTable->setItem(0x0D, 3, new QTableWidgetItem(""));
// ui->controlTable->setItem(0x0E, 3, new QTableWidgetItem(""));
ui->controlTable->setItem(0x0F, 3, new QTableWidgetItem("Convection RPM"));
ui->controlTable->setItem(0x10, 3, new QTableWidgetItem("Cool Down On/Off"));
ui->controlTable->setItem(0x11, 3, new QTableWidgetItem("InterTemp"));
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
84
85
86
87
88
89
|
// ui->controlTable->setItem(0x12, 3, new QTableWidgetItem("InterTemp"));
// ui->controlTable->setItem(0x13, 3, new QTableWidgetItem("InterTemp"));
ui->controlTable->setItem(0x14, 3, new QTableWidgetItem("Wash Type"));
ui->controlTable->setItem(0x15, 3, new QTableWidgetItem("Wash Total"));
ui->controlTable->setItem(0x16, 3, new QTableWidgetItem("Wash Steps"));
ui->controlTable->setItem(0x17, 3, new QTableWidgetItem("Wash Step Type"));
|
02f864212
김태훈
출력 번지 별 설명 추가
|
90
91
92
93
94
95
96
97
98
99
100
101
102
|
ui->stateTable->setItem(0x00, 3, new QTableWidgetItem("Firmware V"));
ui->stateTable->setItem(0x01, 3, new QTableWidgetItem("Firmware Y"));
ui->stateTable->setItem(0x02, 3, new QTableWidgetItem("Firmware M"));
ui->stateTable->setItem(0x03, 3, new QTableWidgetItem("Firmware D"));
ui->stateTable->setItem(0x04, 3, new QTableWidgetItem("Cook State"));
ui->stateTable->setItem(0x05, 3, new QTableWidgetItem("Setting Temp"));
ui->stateTable->setItem(0x06, 3, new QTableWidgetItem("Setting Humidity"));
ui->stateTable->setItem(0x07, 3, new QTableWidgetItem("Setting Time"));
ui->stateTable->setItem(0x08, 3, new QTableWidgetItem("Current Temp"));
ui->stateTable->setItem(0x09, 3, new QTableWidgetItem("Current Humidity"));
ui->stateTable->setItem(0x0A, 3, new QTableWidgetItem("Current Time"));
ui->stateTable->setItem(0x0B, 3, new QTableWidgetItem("Wash State"));
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
103
104
|
ui->stateTable->setItem(0x0C, 3, new QTableWidgetItem("Wash Type"));
ui->stateTable->setItem(0x0D, 3, new QTableWidgetItem("Wash Steps"));
|
02f864212
김태훈
출력 번지 별 설명 추가
|
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
// ui->stateTable->setItem(0x0E, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x0F, 3, new QTableWidgetItem("Oven Mode"));
ui->stateTable->setItem(0x10, 3, new QTableWidgetItem("Door Open/Close"));
// ui->stateTable->setItem(0x11, 3, new QTableWidgetItem("Oven Mode"));
ui->stateTable->setItem(0x12, 3, new QTableWidgetItem("Burner 1"));
ui->stateTable->setItem(0x13, 3, new QTableWidgetItem("Burner 2"));
ui->stateTable->setItem(0x14, 3, new QTableWidgetItem("Burner 3"));
// ui->stateTable->setItem(0x15, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x16, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x17, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x18, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x19, 3, new QTableWidgetItem("Oven Mode"));
// ui->stateTable->setItem(0x1A, 3, new QTableWidgetItem("Burner 3"));
ui->stateTable->setItem(0x1B, 3, new QTableWidgetItem("Sensor 1 Cab"));
ui->stateTable->setItem(0x1C, 3, new QTableWidgetItem("Sensor 2"));
ui->stateTable->setItem(0x1D, 3, new QTableWidgetItem("Sensor 3"));
ui->stateTable->setItem(0x1E, 3, new QTableWidgetItem("Sensor 4"));
ui->stateTable->setItem(0x1F, 3, new QTableWidgetItem("Sensor 5"));
ui->stateTable->setItem(0x20, 3, new QTableWidgetItem("Sensor 6 Food 1"));
ui->stateTable->setItem(0x21, 3, new QTableWidgetItem("Sensor 7 Food 2"));
ui->stateTable->setItem(0x22, 3, new QTableWidgetItem("Sensor 8 Food 3"));
ui->stateTable->setItem(0x23, 3, new QTableWidgetItem("Sensor 9 Food 4"));
ui->stateTable->setItem(0x24, 3, new QTableWidgetItem("Sensor 10"));
ui->stateTable->setItem(0x25, 3, new QTableWidgetItem("Sensor 11 mbar"));
ui->stateTable->setItem(0x26, 3, new QTableWidgetItem("Sensor 12 mbar"));
ui->stateTable->setItem(0x27, 3, new QTableWidgetItem("Sensor 13 PCB"));
ui->stateTable->setItem(0x28, 3, new QTableWidgetItem("Sensor 14 ADC"));
ui->stateTable->setItem(0x29, 3, new QTableWidgetItem("Sensor 15 Conv 1 RPM"));
ui->stateTable->setItem(0x2A, 3, new QTableWidgetItem("Sensor 16 Burner 1 RPM"));
ui->controlTable->resizeColumnToContents(3);
ui->stateTable->resizeColumnToContents(3);
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
138
|
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readPendingDatagrams()
{
while (sock->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(sock->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
sock->readDatagram(datagram.data(), datagram.size(), &sender, &senderPort);
processDatagram(datagram);
}
}
void MainWindow::processDatagram(QByteArray &datagram)
{
packet_t *packet = (packet_t *) datagram.data();
switch (packet->header)
{
case HDR_OVEN_CONTROL:
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
166
|
qDebug() << "Received Control";
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
167
168
169
|
processControl((oven_control_t *) packet->body);
break;
case HDR_OVEN_STATE:
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
170
|
qDebug() << "Received State";
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
171
172
173
|
processState((oven_state_t *) packet->body);
break;
case HDR_ERROR_CODE:
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
174
|
qDebug() << "Received Error";
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
break;
}
}
void MainWindow::processControl(oven_control_t *control)
{
if (memcmp(&this->control, control, sizeof(this->control)))
updateControl(control);
}
void MainWindow::processState(oven_state_t *state)
{
if (memcmp(&this->state, state, sizeof(this->state)))
updateState(state);
}
void MainWindow::updateControl(oven_control_t *control)
{
U16 *base = (U16 *) &this->control;
U16 *operand = (U16 *) control;
for (int row = 0; row < ui->controlTable->rowCount(); row++)
{
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
197
|
qDebug() << "Diff";
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
198
199
200
201
202
203
|
U16 b = *(base + row);
U16 o = *(operand + row);
if (b != o)
{
*(base + row) = o;
TableValue *val = (TableValue *) ui->controlTable->cellWidget(row, 1);
|
a75fc5aca
김태훈
출력 형식 변경
|
204
205
206
207
|
val->setText(QString().sprintf("0x%04X", o));
val = (TableValue *) ui->controlTable->cellWidget(row, 2);
val->setText(QString::number(o));
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
}
}
}
void MainWindow::updateState(oven_state_t *state)
{
U16 *base = (U16 *) &this->state;
U16 *operand = (U16 *) state;
for (int row = 0; row < ui->stateTable->rowCount(); row++)
{
U16 b = *(base + row);
U16 o = *(operand + row);
if (b != o)
{
*(base + row) = o;
TableValue *val = (TableValue *) ui->stateTable->cellWidget(row, 1);
|
a75fc5aca
김태훈
출력 형식 변경
|
224
225
226
227
|
val->setText(QString().sprintf("0x%04X", o));
val = (TableValue *) ui->stateTable->cellWidget(row, 2);
val->setText(QString::number(o));
|
81bee1ec4
김태훈
원격 패킷 출력 프로그램 추가
|
228
229
230
|
}
}
}
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
231
232
233
|
void MainWindow::on_pushControlButton_clicked()
{
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
234
235
|
oven_control_t control = this->control;
U16 *base = (U16 *) &control;
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
236
237
238
239
240
241
242
243
244
|
for (int row = 0; row < ui->controlTable->rowCount(); row++)
{
QTableWidgetItem *val = (QTableWidgetItem *) ui->controlTable->item(row, 4);
if (val)
*(base + row) = val->text().toUShort(nullptr, 10);
}
gui_oven_control_t c;
c.header = HDR_OVEN_CONTROL;
|
e77a367ac
김태훈
모드버스 주소 설명 추가
|
245
|
memcpy(&c.control, &control, sizeof(this->control));
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
246
247
|
QByteArray datagram = QByteArray::fromRawData((char *) &c, sizeof(c));
|
d7c3a65b4
김태훈
- 디버깅 포트 변경(4000 ...
|
248
|
sock->writeDatagram(datagram, QHostAddress(ui->lineEdit->text()), 4000);
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
|
}
void MainWindow::on_pushStateButton_clicked()
{
oven_state_t state = this->state;
U16 *base = (U16 *) &state;
for (int row = 0; row < ui->stateTable->rowCount(); row++)
{
QTableWidgetItem *val = (QTableWidgetItem *) ui->stateTable->item(row, 4);
if (val)
*(base + row) = val->text().toUShort(nullptr, 10);
}
gui_oven_state_t c;
c.header = HDR_OVEN_STATE;
memcpy(&c.state, &state, sizeof(state));
QByteArray datagram = QByteArray::fromRawData((char *) &c, sizeof(c));
|
d7c3a65b4
김태훈
- 디버깅 포트 변경(4000 ...
|
267
|
sock->writeDatagram(datagram, QHostAddress(ui->lineEdit->text()), 4000);
|
f97982552
김태훈
가상 UDP 패킷 전송 기능 추가
|
268
|
}
|