Commit f97982552ebf448c99e0236e7f38c8f46cbd60fa
1 parent
d43c6c1724
Exists in
master
and in
2 other branches
가상 UDP 패킷 전송 기능 추가
Showing
3 changed files
with
74 additions
and
10 deletions
Show diff stats
app/gui/packet/mainwindow.cpp
... | ... | @@ -5,11 +5,6 @@ |
5 | 5 | |
6 | 6 | #include "tablevalue.h" |
7 | 7 | |
8 | -typedef struct { | |
9 | - int header; | |
10 | - char body[]; | |
11 | -} STRUCT_PACK packet_t; | |
12 | - | |
13 | 8 | MainWindow::MainWindow(QWidget *parent) : |
14 | 9 | QMainWindow(parent), |
15 | 10 | ui(new Ui::MainWindow) |
... | ... | @@ -19,10 +14,11 @@ MainWindow::MainWindow(QWidget *parent) : |
19 | 14 | if (!sock->bind(4000)) |
20 | 15 | exit(EXIT_FAILURE); |
21 | 16 | |
17 | + | |
22 | 18 | connect(sock, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams())); |
23 | 19 | |
24 | 20 | ui->controlTable->setRowCount(sizeof(oven_control_t) / sizeof(U16)); |
25 | - ui->controlTable->setColumnCount(4); | |
21 | + ui->controlTable->setColumnCount(5); | |
26 | 22 | ui->controlTable->setHorizontalHeaderLabels(QString("Addr,Value,Value,Description").split(",")); |
27 | 23 | |
28 | 24 | for (int row = 0; row < ui->controlTable->rowCount(); row++) |
... | ... | @@ -50,7 +46,7 @@ MainWindow::MainWindow(QWidget *parent) : |
50 | 46 | ui->controlTable->resizeColumnToContents(1); |
51 | 47 | |
52 | 48 | ui->stateTable->setRowCount(sizeof(oven_state_t) / sizeof(U16)); |
53 | - ui->stateTable->setColumnCount(4); | |
49 | + ui->stateTable->setColumnCount(5); | |
54 | 50 | ui->stateTable->setHorizontalHeaderLabels(QString("Addr,Value,Value,Description").split(",")); |
55 | 51 | |
56 | 52 | for (int row = 0; row < ui->stateTable->rowCount(); row++) |
... | ... | @@ -136,6 +132,8 @@ MainWindow::MainWindow(QWidget *parent) : |
136 | 132 | |
137 | 133 | ui->controlTable->resizeColumnToContents(3); |
138 | 134 | ui->stateTable->resizeColumnToContents(3); |
135 | + | |
136 | + | |
139 | 137 | } |
140 | 138 | |
141 | 139 | MainWindow::~MainWindow() |
... | ... | @@ -224,3 +222,40 @@ void MainWindow::updateState(oven_state_t *state) |
224 | 222 | } |
225 | 223 | } |
226 | 224 | } |
225 | + | |
226 | +void MainWindow::on_pushControlButton_clicked() | |
227 | +{ | |
228 | + U16 *base = (U16 *) &this->control; | |
229 | + for (int row = 0; row < ui->controlTable->rowCount(); row++) | |
230 | + { | |
231 | + QTableWidgetItem *val = (QTableWidgetItem *) ui->controlTable->item(row, 4); | |
232 | + if (val) | |
233 | + *(base + row) = val->text().toUShort(nullptr, 10); | |
234 | + } | |
235 | + | |
236 | + gui_oven_control_t c; | |
237 | + c.header = HDR_OVEN_CONTROL; | |
238 | + memcpy(&c.control, &this->control, sizeof(this->control)); | |
239 | + | |
240 | + QByteArray datagram = QByteArray::fromRawData((char *) &c, sizeof(c)); | |
241 | + sock->writeDatagram(datagram, QHostAddress("192.168.10.139"), 4000); | |
242 | +} | |
243 | + | |
244 | +void MainWindow::on_pushStateButton_clicked() | |
245 | +{ | |
246 | + oven_state_t state = this->state; | |
247 | + U16 *base = (U16 *) &state; | |
248 | + for (int row = 0; row < ui->stateTable->rowCount(); row++) | |
249 | + { | |
250 | + QTableWidgetItem *val = (QTableWidgetItem *) ui->stateTable->item(row, 4); | |
251 | + if (val) | |
252 | + *(base + row) = val->text().toUShort(nullptr, 10); | |
253 | + } | |
254 | + | |
255 | + gui_oven_state_t c; | |
256 | + c.header = HDR_OVEN_STATE; | |
257 | + memcpy(&c.state, &state, sizeof(state)); | |
258 | + | |
259 | + QByteArray datagram = QByteArray::fromRawData((char *) &c, sizeof(c)); | |
260 | + sock->writeDatagram(datagram, QHostAddress("192.168.10.139"), 4000); | |
261 | +} | ... | ... |
app/gui/packet/mainwindow.h
... | ... | @@ -10,6 +10,11 @@ namespace Ui { |
10 | 10 | class MainWindow; |
11 | 11 | } |
12 | 12 | |
13 | +typedef struct { | |
14 | + int header; | |
15 | + char body[]; | |
16 | +} STRUCT_PACK packet_t; | |
17 | + | |
13 | 18 | class MainWindow : public QMainWindow |
14 | 19 | { |
15 | 20 | Q_OBJECT |
... | ... | @@ -31,6 +36,8 @@ private slots: |
31 | 36 | void processState(oven_state_t *state); |
32 | 37 | void updateControl(oven_control_t *control); |
33 | 38 | void updateState(oven_state_t *state); |
39 | + void on_pushControlButton_clicked(); | |
40 | + void on_pushStateButton_clicked(); | |
34 | 41 | }; |
35 | 42 | |
36 | 43 | #endif // MAINWINDOW_H | ... | ... |
app/gui/packet/mainwindow.ui
... | ... | @@ -7,7 +7,7 @@ |
7 | 7 | <x>0</x> |
8 | 8 | <y>0</y> |
9 | 9 | <width>818</width> |
10 | - <height>300</height> | |
10 | + <height>403</height> | |
11 | 11 | </rect> |
12 | 12 | </property> |
13 | 13 | <property name="windowTitle"> |
... | ... | @@ -16,10 +16,32 @@ |
16 | 16 | <widget class="QWidget" name="centralWidget"> |
17 | 17 | <layout class="QHBoxLayout" name="horizontalLayout"> |
18 | 18 | <item> |
19 | - <widget class="QTableWidget" name="controlTable"/> | |
19 | + <layout class="QVBoxLayout" name="verticalLayout"> | |
20 | + <item> | |
21 | + <widget class="QTableWidget" name="controlTable"/> | |
22 | + </item> | |
23 | + <item> | |
24 | + <widget class="QPushButton" name="pushControlButton"> | |
25 | + <property name="text"> | |
26 | + <string>Push</string> | |
27 | + </property> | |
28 | + </widget> | |
29 | + </item> | |
30 | + </layout> | |
20 | 31 | </item> |
21 | 32 | <item> |
22 | - <widget class="QTableWidget" name="stateTable"/> | |
33 | + <layout class="QVBoxLayout" name="verticalLayout_2"> | |
34 | + <item> | |
35 | + <widget class="QTableWidget" name="stateTable"/> | |
36 | + </item> | |
37 | + <item> | |
38 | + <widget class="QPushButton" name="pushStateButton"> | |
39 | + <property name="text"> | |
40 | + <string>Push</string> | |
41 | + </property> | |
42 | + </widget> | |
43 | + </item> | |
44 | + </layout> | |
23 | 45 | </item> |
24 | 46 | </layout> |
25 | 47 | </widget> | ... | ... |