| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #include "buttonclickthread.h"
- #include <unistd.h>
- #include <linux/input.h>
- #include "pdu_ctrl.h"
- typedef enum { KEY_CODE_NONE = 0, KEY_CODE_USER0, KEY_CODE_USER1 } KeyCode;
- ButtonClickThread::ButtonClickThread(QObject *parent)
- :QThread(parent)
- {
- isRunning=true;
- nButtonSave[0]=0;nButtonSave[1]=0;nButtonSave[2]=0;nButtonSave[3]=0;nButtonSave[4]=0;
- bButtonSend[0]=0;bButtonSend[1]=0;bButtonSend[2]=0;
- nButtonTime[0]=0;nButtonTime[1]=0;nButtonTime[2]=0;
- qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
- qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
- pTimeAngle=QTime::currentTime();
- }
- ButtonClickThread::~ButtonClickThread()
- {
- isRunning=false;
- }
- void ButtonClickThread::InitConnect()
- {
- bool ret=connect(this,SIGNAL(signal_ButtonClick(int)),pdu_Ctrl::instance(),SLOT(slot_ClickBtn(int)));
- qDebug()<<"slot_ClickBtn ="<<ret;
- ret= connect(this,SIGNAL(signal_ButtonDoubleClick(int)),pdu_Ctrl::instance(),SLOT(slot_DClickBtn(int)));
- qDebug()<<"slot_DClickBtn ="<<ret;
- ret= connect(this,SIGNAL(signal_ButtonLongPressed(int)),pdu_Ctrl::instance(),SLOT(slot_LClickBtn(int)));
- qDebug()<<"slot_LClickBtn ="<<ret;
- ret= connect(this,SIGNAL(signal_ButtonClear(int)),pdu_Ctrl::instance(),SLOT(slot_BtnClear(int)));
- qDebug()<<"slot_BtnClear ="<<ret;
- ret= connect(this,SIGNAL(signal_AngleSet(int)),pdu_Ctrl::instance(),SLOT(slot_setAngel(int)));
- qDebug()<<"slot_setAngel ="<<ret;
- }
- void ButtonClickThread::run()
- {
- qDebug() <<"Start BtnThread";
- while (isRunning) {
- checkBtnStatus(GPIO_KEY1);
- checkBtnStatus(GPIO_KEY2);
- checkBtnStatus(GPIO_KEY3);
- checkBtnStatus(GPIO_KEY4);
- #ifdef hightSmartPDU
- checkBtnStatus(GPIO_X);
- checkBtnStatus(GPIO_Y);
- #endif
- if(!nButtonSave[1]&&!nButtonSave[2]&&!nButtonSave[0])
- {
- msleep(2000);
- }else
- {
- //qDebug()<<"SaveDAta"<<nButtonSave[1]<<nButtonSave[2]<<nButtonSave[3];
- for(int i=0;i<5;i++)
- {
- ButtonDownTime(i,nButtonSave[i]);
- }
- }
- msleep(100);
- }
- }
- void ButtonClickThread::checkBtnStatus(int KeyID)
- {
- QString gpioPath=QString("/sys/class/gpio/gpio%1/value").arg(KeyID);
- QFile file(gpioPath);
- if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- QTextStream in(&file);
- QString value = in.readLine();
- switch (KeyID) {
- case GPIO_KEY1:
- nButtonSave[0]=value.toInt();
- break;
- case GPIO_KEY2:
- nButtonSave[1]=value.toInt();
- break;
- case GPIO_KEY3:
- nButtonSave[2]=value.toInt();
- break;
- #ifdef hightSmartPDU
- case GPIO_X:
- nButtonSave[3]=value.toInt();
- break;
- case GPIO_Y:
- nButtonSave[4]=value.toInt();
- break;
- #endif
- default:
- break;
- }
- //ButtonDownTime(KeyID,value.toInt());
- file.close();
- }
- }
- void ButtonClickThread::ButtonDownTime(int KeyID,int nValue)
- {
- switch (KeyID) {
- case 0:
- TimeSet(GPIO_KEY1,0,nValue);
- break;
- case 1:
- TimeSet(GPIO_KEY2,1,nValue);
- break;
- case 2:
- TimeSet(GPIO_KEY3,2,nValue);
- break;
- #ifdef hightSmartPDU
- case 3:
- SaveSataus(nValue,m_nY);
- break;
- case 4:
- SaveSataus(m_nX,nValue);
- break;
- #endif
- default:
- break;
- }
- }
- void ButtonClickThread::TimeSet(int KeyID,int nIndex, int nValue)
- {
- //qDebug()<<"TimeSetStart:Key"<<KeyID<<"_Time:"<<nButtonTime[nIndex]<<"Send:"<<bButtonSend[nIndex];
- int* pTime=nButtonTime;
- //负数记录松开时长正数记录按下时长
- if(nValue==0)
- {//按下
- if(bButtonSend[nIndex])
- {//已发送不响应
- pTime[nIndex]=1;
- bButtonSend[nIndex]=true;
- }else
- {
- if(pTime[nIndex]<0)
- {//当前已松开此时判断为双击
- pTime[nIndex]=1;
- emit signal_ButtonDoubleClick(KeyID);
- qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
- qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
- bButtonSend[nIndex]=true;
- }else
- {
- pTime[nIndex]+=1;
- if(pTime[nIndex]>20)
- {
- //超过3秒判断为长按
- emit signal_ButtonLongPressed(KeyID);
- qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
- qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
- bButtonSend[nIndex]=true;
- }
- }
- }
- }else
- {//松开
- if(bButtonSend[nIndex])
- { //已发送过了松开重置
- pTime[nIndex]=0;
- bButtonSend[nIndex]=false;
- emit signal_ButtonClear(KeyID);
- qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
- qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
- }
- else
- {
- if(pTime[nIndex]>0)
- {//当前已点击此时松开可能为双击
- pTime[nIndex]=-1;
- }else if(pTime[nIndex]<-2)
- {//超过400毫秒未点击则判断无双击此时为单单击
- pTime[nIndex]=0;
- emit signal_ButtonClick(KeyID);
- qDebug()<<"bButtonSend"<<bButtonSend[0]<<bButtonSend[1]<<bButtonSend[2];
- qDebug()<<"nButtonTime"<<nButtonTime[0]<<nButtonTime[1]<<nButtonTime[2];
- bButtonSend[nIndex]=true;
- }else if(pTime[nIndex]<0)
- {//松开计时
- pTime[nIndex]-=1;
- }else
- {
- pTime[nIndex]=0;
- }
- }
- }
- //qDebug()<<"TimeSetEnd:Key"<<KeyID<<"_Time:"<<nButtonTime[nIndex]<<"Send:"<<bButtonSend[nIndex];
- }
- void ButtonClickThread::SaveSataus(int nX, int nY)
- {
- int nAngle=0;
- m_nX=nX;
- m_nY=nY;
- #ifdef JY242
- if(m_nX&&m_nY)nAngle=180;
- if(m_nX&&!m_nY)nAngle=0;
- if(!m_nX&&m_nY)nAngle=0;
- if(!m_nX&&!m_nY)nAngle=180;
- #else
- if(m_nX&&m_nY)nAngle=90;
- if(m_nX&&!m_nY)nAngle=0;
- if(!m_nX&&m_nY)nAngle=270;
- if(!m_nX&&!m_nY)nAngle=180;
- #endif
- if(m_nSaveAngle!=nAngle)
- {
- QTime pNew=QTime::currentTime();
- int nSecTo=pTimeAngle.secsTo(pNew);
- if(nSecTo>=2)
- {
- m_nSaveAngle=nAngle;
- emit signal_AngleSet(m_nSaveAngle);
- pTimeAngle=pNew;
- }
- qDebug()<<"Check Angle:"<<nAngle<<" X="<<m_nX<<" Y="<<m_nY<<"SecTo:"<<nSecTo;
- }
- }
|