Commit ea536cd1d3cecfd2e9eccbc225b305b838b9d9eb

Authored by 김태훈
1 parent 7c415d2f71
Exists in master and in 2 other branches fhd, fhd-demo

적재 / 조리 중 문 열림 시간 모니터링 기능 추가

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 };