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> | ... | ... |