Commit ea536cd1d3cecfd2e9eccbc225b305b838b9d9eb
1 parent
7c415d2f71
Exists in
master
and in
2 other branches
적재 / 조리 중 문 열림 시간 모니터링 기능 추가
Showing
4 changed files
with
251 additions
and
3 deletions
Show diff stats
app/gui/oven_control/autocookwindow.cpp
| @@ -10,6 +10,8 @@ | @@ -10,6 +10,8 @@ | ||
| 10 | #include "configwindow.h" | 10 | #include "configwindow.h" |
| 11 | #include "washwindow.h" | 11 | #include "washwindow.h" |
| 12 | #include "mainwindow.h" | 12 | #include "mainwindow.h" |
| 13 | +#include "config.h" | ||
| 14 | +#include "errorpopupdlg.h" | ||
| 13 | 15 | ||
| 14 | AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : | 16 | AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : |
| 15 | QMainWindow(parent), | 17 | QMainWindow(parent), |
| @@ -27,6 +29,36 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : | @@ -27,6 +29,36 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : | ||
| 27 | autocook = AutoCook(this->cook); | 29 | autocook = AutoCook(this->cook); |
| 28 | processSelected = false; | 30 | processSelected = false; |
| 29 | 31 | ||
| 32 | + config_item item = Config::getInstance()->getConfigValue(Define::config_loading_door_monitoring); | ||
| 33 | + if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4) | ||
| 34 | + { | ||
| 35 | + loadingMonitorLevel = item.d8.d8_0; | ||
| 36 | + loadingMonitor1 = item.d8.d8_1 * 1000; | ||
| 37 | + loadingMonitor2 = item.d8.d8_2 * 1000; | ||
| 38 | + loadingMonitor3 = item.d8.d8_3 * 1000; | ||
| 39 | + currentLoadingMonitorLevel = 0; | ||
| 40 | + } | ||
| 41 | + else | ||
| 42 | + loadingMonitorLevel = 0; | ||
| 43 | + | ||
| 44 | + item = Config::getInstance()->getConfigValue(Define::config_cooking_door_monitoring); | ||
| 45 | + if (item.d8.d8_0 > 0 && item.d8.d8_0 < 4) | ||
| 46 | + { | ||
| 47 | + cookingMonitorLevel = item.d8.d8_0; | ||
| 48 | + cookingMonitor1 = item.d8.d8_1 * 1000; | ||
| 49 | + cookingMonitor2 = item.d8.d8_2 * 1000; | ||
| 50 | + cookingMonitor3 = item.d8.d8_3 * 1000; | ||
| 51 | + currentCookingMonitorLevel = 0; | ||
| 52 | + } | ||
| 53 | + else | ||
| 54 | + cookingMonitorLevel = 0; | ||
| 55 | + | ||
| 56 | + if (loadingMonitorLevel > 0 || cookingMonitorLevel > 0) | ||
| 57 | + { | ||
| 58 | + connect(&monitorTimer, SIGNAL(timeout()), SLOT(monitor())); | ||
| 59 | + monitorTimer.start(100); | ||
| 60 | + } | ||
| 61 | + | ||
| 30 | setupUi(); | 62 | setupUi(); |
| 31 | 63 | ||
| 32 | Oven *oven = Oven::getInstance(); | 64 | Oven *oven = Oven::getInstance(); |
| @@ -70,6 +102,8 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : | @@ -70,6 +102,8 @@ AutoCookWindow::AutoCookWindow(QWidget *parent, Cook cook) : | ||
| 70 | 102 | ||
| 71 | AutoCookWindow::~AutoCookWindow() | 103 | AutoCookWindow::~AutoCookWindow() |
| 72 | { | 104 | { |
| 105 | + Oven::getInstance()->stop(); | ||
| 106 | + | ||
| 73 | delete ui; | 107 | delete ui; |
| 74 | } | 108 | } |
| 75 | 109 | ||
| @@ -704,6 +738,114 @@ void AutoCookWindow::jumpWash() | @@ -704,6 +738,114 @@ void AutoCookWindow::jumpWash() | ||
| 704 | MainWindow::jump(w); | 738 | MainWindow::jump(w); |
| 705 | } | 739 | } |
| 706 | 740 | ||
| 741 | +void AutoCookWindow::monitor() | ||
| 742 | +{ | ||
| 743 | + Define::StepClass step = Define::classify(autocook.cook.steps[autocook.currentStepIndex].type); | ||
| 744 | + | ||
| 745 | + if (step == Define::PreheatClass || step == Define::CookClass) | ||
| 746 | + { | ||
| 747 | + if (Oven::getInstance()->door()) | ||
| 748 | + { | ||
| 749 | + switch (currentCookingMonitorLevel) | ||
| 750 | + { | ||
| 751 | + case 0: | ||
| 752 | + cookingMonitorTime1.start(); | ||
| 753 | + currentCookingMonitorLevel = 1; | ||
| 754 | + break; | ||
| 755 | + case 1: | ||
| 756 | + if (cookingMonitorLevel >= 1 && cookingMonitorTime1.elapsed() > cookingMonitor1) | ||
| 757 | + { | ||
| 758 | + SoundPlayer::playError2(); | ||
| 759 | + | ||
| 760 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 1단계"); | ||
| 761 | + d->showFullScreen(); | ||
| 762 | + | ||
| 763 | + cookingMonitorTime2.start(); | ||
| 764 | + currentCookingMonitorLevel = 2; | ||
| 765 | + } | ||
| 766 | + break; | ||
| 767 | + case 2: | ||
| 768 | + if (cookingMonitorLevel >= 2 && cookingMonitorTime2.elapsed() > cookingMonitor2) | ||
| 769 | + { | ||
| 770 | + SoundPlayer::playError2(); | ||
| 771 | + | ||
| 772 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 2단계"); | ||
| 773 | + d->showFullScreen(); | ||
| 774 | + | ||
| 775 | + cookingMonitorTime3.start(); | ||
| 776 | + currentCookingMonitorLevel = 3; | ||
| 777 | + } | ||
| 778 | + break; | ||
| 779 | + case 3: | ||
| 780 | + if (cookingMonitorLevel >= 3 && cookingMonitorTime3.elapsed() > cookingMonitor3) | ||
| 781 | + { | ||
| 782 | + SoundPlayer::playError2(); | ||
| 783 | + | ||
| 784 | + ErrorPopupDlg *d = new ErrorPopupDlg(MainWindow::getInstance(), "문이 오래 열려있어 조리가 취소되었습니다", "조리 중 문 열림 시간 모니터링 3단계"); | ||
| 785 | + d->showFullScreen(); | ||
| 786 | + | ||
| 787 | + MainWindow::killChild(); | ||
| 788 | + } | ||
| 789 | + } | ||
| 790 | + } | ||
| 791 | + else if (currentCookingMonitorLevel > 0) | ||
| 792 | + { | ||
| 793 | + currentCookingMonitorLevel = 0; | ||
| 794 | + } | ||
| 795 | + } | ||
| 796 | + else if (step == Define::DoorClass) | ||
| 797 | + { | ||
| 798 | + if (Oven::getInstance()->door()) | ||
| 799 | + { | ||
| 800 | + switch (currentLoadingMonitorLevel) | ||
| 801 | + { | ||
| 802 | + case 0: | ||
| 803 | + loadingMonitorTime1.start(); | ||
| 804 | + currentLoadingMonitorLevel = 1; | ||
| 805 | + break; | ||
| 806 | + case 1: | ||
| 807 | + if (loadingMonitorLevel >= 1 && loadingMonitorTime1.elapsed() > loadingMonitor1) | ||
| 808 | + { | ||
| 809 | + SoundPlayer::playError2(); | ||
| 810 | + | ||
| 811 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 1단계"); | ||
| 812 | + d->showFullScreen(); | ||
| 813 | + | ||
| 814 | + loadingMonitorTime2.start(); | ||
| 815 | + currentLoadingMonitorLevel = 2; | ||
| 816 | + } | ||
| 817 | + break; | ||
| 818 | + case 2: | ||
| 819 | + if (loadingMonitorLevel >= 2 && loadingMonitorTime2.elapsed() > loadingMonitor2) | ||
| 820 | + { | ||
| 821 | + SoundPlayer::playError2(); | ||
| 822 | + | ||
| 823 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 2단계"); | ||
| 824 | + d->showFullScreen(); | ||
| 825 | + | ||
| 826 | + loadingMonitorTime3.start(); | ||
| 827 | + currentLoadingMonitorLevel = 3; | ||
| 828 | + } | ||
| 829 | + break; | ||
| 830 | + case 3: | ||
| 831 | + if (loadingMonitorLevel >= 3 && loadingMonitorTime3.elapsed() > loadingMonitor3) | ||
| 832 | + { | ||
| 833 | + SoundPlayer::playError2(); | ||
| 834 | + | ||
| 835 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "적재 중 문 열림 시간 모니터링 3단계"); | ||
| 836 | + d->showFullScreen(); | ||
| 837 | + | ||
| 838 | + MainWindow::killChild(); | ||
| 839 | + } | ||
| 840 | + } | ||
| 841 | + } | ||
| 842 | + else if (currentLoadingMonitorLevel > 0) | ||
| 843 | + { | ||
| 844 | + currentLoadingMonitorLevel = 0; | ||
| 845 | + } | ||
| 846 | + } | ||
| 847 | +} | ||
| 848 | + | ||
| 707 | void AutoCookWindow::on_selectCookButton_clicked() | 849 | void AutoCookWindow::on_selectCookButton_clicked() |
| 708 | { | 850 | { |
| 709 | 851 |
app/gui/oven_control/autocookwindow.h
| @@ -55,6 +55,26 @@ private: | @@ -55,6 +55,26 @@ private: | ||
| 55 | 55 | ||
| 56 | QTimer updateViewTimer; | 56 | QTimer updateViewTimer; |
| 57 | 57 | ||
| 58 | + int loadingMonitorLevel; | ||
| 59 | + int loadingMonitor1; | ||
| 60 | + int loadingMonitor2; | ||
| 61 | + int loadingMonitor3; | ||
| 62 | + QTime loadingMonitorTime1; | ||
| 63 | + QTime loadingMonitorTime2; | ||
| 64 | + QTime loadingMonitorTime3; | ||
| 65 | + int currentLoadingMonitorLevel; | ||
| 66 | + | ||
| 67 | + int cookingMonitorLevel; | ||
| 68 | + int cookingMonitor1; | ||
| 69 | + int cookingMonitor2; | ||
| 70 | + int cookingMonitor3; | ||
| 71 | + QTime cookingMonitorTime1; | ||
| 72 | + QTime cookingMonitorTime2; | ||
| 73 | + QTime cookingMonitorTime3; | ||
| 74 | + int currentCookingMonitorLevel; | ||
| 75 | + | ||
| 76 | + QTimer monitorTimer; | ||
| 77 | + | ||
| 58 | void setupUi(); | 78 | void setupUi(); |
| 59 | 79 | ||
| 60 | private slots: | 80 | private slots: |
| @@ -71,6 +91,8 @@ private slots: | @@ -71,6 +91,8 @@ private slots: | ||
| 71 | void jumpConfig(); | 91 | void jumpConfig(); |
| 72 | void jumpWash(); | 92 | void jumpWash(); |
| 73 | 93 | ||
| 94 | + void monitor(); | ||
| 95 | + | ||
| 74 | void on_selectCookButton_clicked(); | 96 | void on_selectCookButton_clicked(); |
| 75 | void on_homeButton_clicked(); | 97 | void on_homeButton_clicked(); |
| 76 | void on_configCookButton_clicked(); | 98 | void on_configCookButton_clicked(); |
app/gui/oven_control/manualcookwindow.cpp
| @@ -20,6 +20,7 @@ | @@ -20,6 +20,7 @@ | ||
| 20 | #include "configwindow.h" | 20 | #include "configwindow.h" |
| 21 | #include "primewindow.h" | 21 | #include "primewindow.h" |
| 22 | #include "washwindow.h" | 22 | #include "washwindow.h" |
| 23 | +#include "errorpopupdlg.h" | ||
| 23 | 24 | ||
| 24 | #include <QTime> | 25 | #include <QTime> |
| 25 | 26 | ||
| @@ -47,6 +48,25 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : | @@ -47,6 +48,25 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, Define::Mode mode) : | ||
| 47 | lastViewHumidification = false; | 48 | lastViewHumidification = false; |
| 48 | lastViewFan = -1; | 49 | lastViewFan = -1; |
| 49 | 50 | ||
| 51 | + Config *config = Config::getInstance(); | ||
| 52 | + config_item item = config->getConfigValue(Define::config_cooking_door_monitoring); | ||
| 53 | + | ||
| 54 | + monitorLevel = item.d8.d8_0; | ||
| 55 | + if (monitorLevel > 0 && monitorLevel < 4) | ||
| 56 | + { | ||
| 57 | + monitor1.setSingleShot(true); | ||
| 58 | + monitor2.setSingleShot(true); | ||
| 59 | + monitor3.setSingleShot(true); | ||
| 60 | + monitor1.setInterval(item.d8.d8_1 * 1000); | ||
| 61 | + monitor2.setInterval(item.d8.d8_2 * 1000); | ||
| 62 | + monitor3.setInterval(item.d8.d8_3 * 1000); | ||
| 63 | + connect(&monitor1, SIGNAL(timeout()), SLOT(onMonitor1Timeout())); | ||
| 64 | + connect(&monitor2, SIGNAL(timeout()), SLOT(onMonitor2Timeout())); | ||
| 65 | + connect(&monitor3, SIGNAL(timeout()), SLOT(onMonitor3Timeout())); | ||
| 66 | + } | ||
| 67 | + else | ||
| 68 | + monitorLevel = 0; | ||
| 69 | + | ||
| 50 | connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); | 70 | connect(oven, SIGNAL(changed(Oven*)), this, SLOT(onOvenUpdated(Oven*))); |
| 51 | 71 | ||
| 52 | connect(ui->humiditySlider, SIGNAL(valueChanged(int)), oven, SLOT(setHumidity(int))); | 72 | connect(ui->humiditySlider, SIGNAL(valueChanged(int)), oven, SLOT(setHumidity(int))); |
| @@ -101,6 +121,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, ManualCookSetting setting) | @@ -101,6 +121,8 @@ ManualCookWindow::ManualCookWindow(QWidget *parent, ManualCookSetting setting) | ||
| 101 | 121 | ||
| 102 | ManualCookWindow::~ManualCookWindow() | 122 | ManualCookWindow::~ManualCookWindow() |
| 103 | { | 123 | { |
| 124 | + stop(); | ||
| 125 | + | ||
| 104 | delete ui; | 126 | delete ui; |
| 105 | } | 127 | } |
| 106 | 128 | ||
| @@ -364,9 +386,7 @@ void ManualCookWindow::onOvenUpdated(Oven *oven) | @@ -364,9 +386,7 @@ void ManualCookWindow::onOvenUpdated(Oven *oven) | ||
| 364 | updateView(); | 386 | updateView(); |
| 365 | 387 | ||
| 366 | if (oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) | 388 | if (oven->interTempEnabled() && oven->currentInterTemp() >= oven->interTemp()) |
| 367 | - { | ||
| 368 | - oven->stopCooking(); | ||
| 369 | - } | 389 | + stop(); |
| 370 | 390 | ||
| 371 | if (repeat && !oven->cooking()) | 391 | if (repeat && !oven->cooking()) |
| 372 | { | 392 | { |
| @@ -383,6 +403,23 @@ QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png | @@ -383,6 +403,23 @@ QPushButton:pressed { background-image: url(:/images/manual_button/repeat_ov.png | ||
| 383 | oven->setInterTempEnabled(repeatSetting.coreTempEnabled); | 403 | oven->setInterTempEnabled(repeatSetting.coreTempEnabled); |
| 384 | oven->setInterTemp(repeatSetting.coreTemp); | 404 | oven->setInterTemp(repeatSetting.coreTemp); |
| 385 | } | 405 | } |
| 406 | + | ||
| 407 | + if (oven->paused() && oven->door()) | ||
| 408 | + { | ||
| 409 | + if (monitorLevel > 0 && !monitorTriggered) | ||
| 410 | + { | ||
| 411 | + monitorTriggered = true; | ||
| 412 | + monitor1.start(); | ||
| 413 | + } | ||
| 414 | + } | ||
| 415 | + | ||
| 416 | + if (monitorTriggered && !oven->door()) | ||
| 417 | + { | ||
| 418 | + monitorTriggered = false; | ||
| 419 | + monitor1.stop(); | ||
| 420 | + monitor2.stop(); | ||
| 421 | + monitor3.stop(); | ||
| 422 | + } | ||
| 386 | } | 423 | } |
| 387 | 424 | ||
| 388 | void ManualCookWindow::setOvenDefault(Define::Mode mode) | 425 | void ManualCookWindow::setOvenDefault(Define::Mode mode) |
| @@ -416,6 +453,14 @@ void ManualCookWindow::start() | @@ -416,6 +453,14 @@ void ManualCookWindow::start() | ||
| 416 | s.coreTemp = oven->interTemp(); | 453 | s.coreTemp = oven->interTemp(); |
| 417 | 454 | ||
| 418 | CookHistory::record(s); | 455 | CookHistory::record(s); |
| 456 | + | ||
| 457 | + if (monitorLevel > 0 && oven->door()) | ||
| 458 | + { | ||
| 459 | + monitorTriggered = true; | ||
| 460 | + monitor1.start(); | ||
| 461 | + } | ||
| 462 | + else | ||
| 463 | + monitorTriggered = false; | ||
| 419 | } | 464 | } |
| 420 | } | 465 | } |
| 421 | 466 | ||
| @@ -480,6 +525,34 @@ void ManualCookWindow::jumpWash() | @@ -480,6 +525,34 @@ void ManualCookWindow::jumpWash() | ||
| 480 | MainWindow::jump(w); | 525 | MainWindow::jump(w); |
| 481 | } | 526 | } |
| 482 | 527 | ||
| 528 | +void ManualCookWindow::onMonitor1Timeout() | ||
| 529 | +{ | ||
| 530 | + SoundPlayer::playError1(); | ||
| 531 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 1단계"); | ||
| 532 | + d->showFullScreen(); | ||
| 533 | + | ||
| 534 | + if (monitorLevel > 1) | ||
| 535 | + monitor2.start(); | ||
| 536 | +} | ||
| 537 | + | ||
| 538 | +void ManualCookWindow::onMonitor2Timeout() | ||
| 539 | +{ | ||
| 540 | + SoundPlayer::playError1(); | ||
| 541 | + ErrorPopupDlg *d = new ErrorPopupDlg(this, "문을 닫아주세요", "조리 중 문 열림 시간 모니터링 2단계"); | ||
| 542 | + d->showFullScreen(); | ||
| 543 | + | ||
| 544 | + if (monitorLevel > 2) | ||
| 545 | + monitor3.start(); | ||
| 546 | +} | ||
| 547 | + | ||
| 548 | +void ManualCookWindow::onMonitor3Timeout() | ||
| 549 | +{ | ||
| 550 | + SoundPlayer::playError1(); | ||
| 551 | + ErrorPopupDlg *d = new ErrorPopupDlg(MainWindow::getInstance(), "문이 오래 열려있어 조리가 취소되었습니다", "조리 중 문 열림 시간 모니터링 3단계"); | ||
| 552 | + d->showFullScreen(); | ||
| 553 | + close(); | ||
| 554 | +} | ||
| 555 | + | ||
| 483 | void ManualCookWindow::on_steamButton_clicked() | 556 | void ManualCookWindow::on_steamButton_clicked() |
| 484 | { | 557 | { |
| 485 | setOvenDefault(Define::SteamMode); | 558 | setOvenDefault(Define::SteamMode); |
app/gui/oven_control/manualcookwindow.h
| @@ -43,6 +43,10 @@ private slots: | @@ -43,6 +43,10 @@ private slots: | ||
| 43 | void jumpFavorites(); | 43 | void jumpFavorites(); |
| 44 | void jumpWash(); | 44 | void jumpWash(); |
| 45 | 45 | ||
| 46 | + void onMonitor1Timeout(); | ||
| 47 | + void onMonitor2Timeout(); | ||
| 48 | + void onMonitor3Timeout(); | ||
| 49 | + | ||
| 46 | void on_steamButton_clicked(); | 50 | void on_steamButton_clicked(); |
| 47 | void on_combiButton_clicked(); | 51 | void on_combiButton_clicked(); |
| 48 | void on_dryheatButton_clicked(); | 52 | void on_dryheatButton_clicked(); |
| @@ -99,6 +103,13 @@ private: | @@ -99,6 +103,13 @@ private: | ||
| 99 | bool lastViewHumidification; | 103 | bool lastViewHumidification; |
| 100 | int lastViewFan; | 104 | int lastViewFan; |
| 101 | 105 | ||
| 106 | + int monitorLevel; | ||
| 107 | + QTimer monitor1; | ||
| 108 | + QTimer monitor2; | ||
| 109 | + QTimer monitor3; | ||
| 110 | + bool monitorTriggered; | ||
| 111 | + | ||
| 112 | + | ||
| 102 | ManualCookSetting repeatSetting; | 113 | ManualCookSetting repeatSetting; |
| 103 | bool repeat; | 114 | bool repeat; |
| 104 | }; | 115 | }; |