xref: /OK3568_Linux_fs/app/forlinx/flapp/src/plugins/watchdog/watchdogwidgt.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun #include "watchdogwidgt.h"
2*4882a593Smuzhiyun #include "ui_watchdogwidgt.h"
3*4882a593Smuzhiyun #include "iwatchdog.h"
4*4882a593Smuzhiyun #include <QValidator>
5*4882a593Smuzhiyun #include "messagebox.h"
6*4882a593Smuzhiyun #include <QTimer>
7*4882a593Smuzhiyun #include <QDoubleValidator>
8*4882a593Smuzhiyun #include <QIntValidator>
9*4882a593Smuzhiyun #include <QCoreApplication>
10*4882a593Smuzhiyun 
WatchDogWidgt(QWidget * parent)11*4882a593Smuzhiyun WatchDogWidgt::WatchDogWidgt(QWidget *parent) :
12*4882a593Smuzhiyun     IWidget(parent),
13*4882a593Smuzhiyun     ui(new Ui::WatchDogWidgt),
14*4882a593Smuzhiyun     m_wathcdog(Q_NULLPTR)
15*4882a593Smuzhiyun {
16*4882a593Smuzhiyun     ui->setupUi(this);
17*4882a593Smuzhiyun     ui->checkBox->setEnabled(false);
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun     QIntValidator *pIntV = new QIntValidator;
20*4882a593Smuzhiyun     pIntV->setRange(1, 10);
21*4882a593Smuzhiyun     ui->timeoutEdt->setValidator(pIntV);
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun     QDoubleValidator *pDoubleV = new QDoubleValidator;
24*4882a593Smuzhiyun     pDoubleV->setRange(0.1, 10.0);
25*4882a593Smuzhiyun     ui->feedEdt->setValidator(pDoubleV);
26*4882a593Smuzhiyun }
27*4882a593Smuzhiyun 
~WatchDogWidgt()28*4882a593Smuzhiyun WatchDogWidgt::~WatchDogWidgt()
29*4882a593Smuzhiyun {
30*4882a593Smuzhiyun     if(m_wathcdog->isOpen())
31*4882a593Smuzhiyun     {
32*4882a593Smuzhiyun         ui->openBtn->click();
33*4882a593Smuzhiyun     }
34*4882a593Smuzhiyun     delete ui;
35*4882a593Smuzhiyun }
36*4882a593Smuzhiyun 
id()37*4882a593Smuzhiyun QString WatchDogWidgt::id()
38*4882a593Smuzhiyun {
39*4882a593Smuzhiyun     return "watchdog";
40*4882a593Smuzhiyun }
41*4882a593Smuzhiyun 
loadData(const QDomElement & head,const QDomElement & body)42*4882a593Smuzhiyun void WatchDogWidgt::loadData(const QDomElement &head, const QDomElement &body)
43*4882a593Smuzhiyun {
44*4882a593Smuzhiyun     Q_UNUSED(body)
45*4882a593Smuzhiyun     QString devName;
46*4882a593Smuzhiyun     QString type;
47*4882a593Smuzhiyun     QDomElement e = head.toElement();
48*4882a593Smuzhiyun     devName = e.attribute("devName");
49*4882a593Smuzhiyun     type = e.attribute("type");
50*4882a593Smuzhiyun     m_wathcdog = new IWatchDog(devName, this);
51*4882a593Smuzhiyun     connect(m_wathcdog, &IWatchDog::feedCount, this, [=](int count){
52*4882a593Smuzhiyun         ui->widget->setValue(QString::number(count));
53*4882a593Smuzhiyun     });
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun     if(devName.isEmpty())
56*4882a593Smuzhiyun     {
57*4882a593Smuzhiyun         ui->widget->setTips("watchdog not config!");
58*4882a593Smuzhiyun     }
59*4882a593Smuzhiyun     qDebug() << QString("dveName=%1, type=%2").arg(devName).arg(type);
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun     ui->setBtn->setEnabled(false);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun     connect(qApp, &QCoreApplication::aboutToQuit, this, [=](){
64*4882a593Smuzhiyun         if(ui->openBtn->isChecked())
65*4882a593Smuzhiyun         {
66*4882a593Smuzhiyun             ui->openBtn->click();
67*4882a593Smuzhiyun         }
68*4882a593Smuzhiyun     });
69*4882a593Smuzhiyun }
70*4882a593Smuzhiyun 
on_openBtn_clicked()71*4882a593Smuzhiyun void WatchDogWidgt::on_openBtn_clicked()
72*4882a593Smuzhiyun {
73*4882a593Smuzhiyun     auto  setCheck = [=](bool bCheck){
74*4882a593Smuzhiyun         ui->checkBox->setEnabled(bCheck);
75*4882a593Smuzhiyun         ui->checkBox->blockSignals(true);
76*4882a593Smuzhiyun         ui->checkBox->setChecked(bCheck);
77*4882a593Smuzhiyun         ui->checkBox->blockSignals(false);
78*4882a593Smuzhiyun     };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun     int timeoutTime = ui->timeoutEdt->text().toInt();
81*4882a593Smuzhiyun     float feedtime = ui->feedEdt->text().toFloat();
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun     if(!m_wathcdog->isOpen()&&  checkoutInput() && m_wathcdog->open(timeoutTime, feedtime))
84*4882a593Smuzhiyun     {
85*4882a593Smuzhiyun         setCheck(true);
86*4882a593Smuzhiyun         ui->openBtn->setText("stop");
87*4882a593Smuzhiyun         ui->setBtn->setEnabled(true);
88*4882a593Smuzhiyun     }else{
89*4882a593Smuzhiyun         ui->setBtn->setEnabled(false);
90*4882a593Smuzhiyun         m_wathcdog->close();
91*4882a593Smuzhiyun         ui->openBtn->setText("start");
92*4882a593Smuzhiyun         setCheck(false);
93*4882a593Smuzhiyun         ui->widget->setValue("0");
94*4882a593Smuzhiyun     }
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun 
on_checkBox_clicked()97*4882a593Smuzhiyun void WatchDogWidgt::on_checkBox_clicked()
98*4882a593Smuzhiyun {
99*4882a593Smuzhiyun     qDebug() <<"start time wathcgod";
100*4882a593Smuzhiyun     if(m_wathcdog->isOpen())
101*4882a593Smuzhiyun     {
102*4882a593Smuzhiyun         if(!ui->checkBox->isChecked())
103*4882a593Smuzhiyun         {
104*4882a593Smuzhiyun             ui->widget->startDownTime(ui->timeoutEdt->text().toInt());
105*4882a593Smuzhiyun         }else{
106*4882a593Smuzhiyun             ui->widget->startDownTime(0);
107*4882a593Smuzhiyun         }
108*4882a593Smuzhiyun         m_wathcdog->setFeed(ui->checkBox->isChecked());
109*4882a593Smuzhiyun     }
110*4882a593Smuzhiyun }
111*4882a593Smuzhiyun 
on_setBtn_clicked()112*4882a593Smuzhiyun void WatchDogWidgt::on_setBtn_clicked()
113*4882a593Smuzhiyun {
114*4882a593Smuzhiyun     if(!checkoutInput())
115*4882a593Smuzhiyun     {
116*4882a593Smuzhiyun         return;
117*4882a593Smuzhiyun     }
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun     m_wathcdog->setTimeoutTime(ui->timeoutEdt->text().toInt());
120*4882a593Smuzhiyun     m_wathcdog->setFeedTime(ui->feedEdt->text().toFloat());
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun 
checkoutInput()123*4882a593Smuzhiyun bool WatchDogWidgt::checkoutInput()
124*4882a593Smuzhiyun {
125*4882a593Smuzhiyun     QString timeoutSeconds = ui->timeoutEdt->text();
126*4882a593Smuzhiyun     if(timeoutSeconds.isEmpty() || timeoutSeconds.toInt()>10 || timeoutSeconds.toInt()<1)
127*4882a593Smuzhiyun     {
128*4882a593Smuzhiyun         MessageBox::showMessage(this, "Input Timeount is Invalid!");
129*4882a593Smuzhiyun         return false;;
130*4882a593Smuzhiyun     }
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun     QString feedSeconds = ui->feedEdt->text();
133*4882a593Smuzhiyun     if(feedSeconds.isEmpty() || timeoutSeconds.toFloat()<0.1 || timeoutSeconds.toFloat()> 10)
134*4882a593Smuzhiyun     {
135*4882a593Smuzhiyun         MessageBox::showMessage(this, "Input Feed is Invalid!");
136*4882a593Smuzhiyun         return false;
137*4882a593Smuzhiyun     }
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun     return true;
140*4882a593Smuzhiyun }
141