|
|
@ -8,16 +8,16 @@ |
|
|
|
#define WIRING_PIN_LED 4 //GPIO.4
|
|
|
|
#define WIRING_PIN_KEY 3 //GPIO.3
|
|
|
|
#define Click_Overtime 50 |
|
|
|
#define Press_Overtime 150 |
|
|
|
#define Press_Overtime 1500 |
|
|
|
#define DblClick_Difftime 800 |
|
|
|
|
|
|
|
DeviceService::DeviceService(QObject *parent) : QObject(parent) |
|
|
|
{ |
|
|
|
key.flag = None; |
|
|
|
key.lastFlag = None; |
|
|
|
key.lastState = KEY_Up; |
|
|
|
key.state = KEY_Up; |
|
|
|
m_ledStatus = 0; |
|
|
|
m_keyStatus = 0; |
|
|
|
lastStateTime = QTime::currentTime(); |
|
|
|
|
|
|
|
#ifdef Q_OS_LINUX |
|
|
|
wiringPiSetup(); |
|
|
@ -54,11 +54,7 @@ DeviceService::DeviceService(QObject *parent) : QObject(parent) |
|
|
|
// emit keyClicked();
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
key.flag = (KeyFlag)keyDetection(); |
|
|
|
if(key.flag != None){ |
|
|
|
emit keyWorked(key.flag); |
|
|
|
qDebug()<<"keyWorked is "<<key.flag; |
|
|
|
} |
|
|
|
keyDetection(); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
@ -104,63 +100,63 @@ quint8 DeviceService::keyDetection() |
|
|
|
return key.flag; |
|
|
|
|
|
|
|
#else |
|
|
|
key.flag = None; //清空按键标志(行为)
|
|
|
|
KeyFlag flag = None; //清空按键标志(行为)
|
|
|
|
|
|
|
|
//获取当前按键状态
|
|
|
|
quint8 status = getbtnstatus();//获取当前按键状态********注意替换为防抖后的按键函数getbtnstatus()
|
|
|
|
// quint8 status = getbtnstatus();//获取当前按键状态********注意替换为防抖后的按键函数getbtnstatus()
|
|
|
|
quint8 status = keyReadOnce(); |
|
|
|
|
|
|
|
//判定标志行为
|
|
|
|
if(status == KEY_Up) |
|
|
|
{ |
|
|
|
if(key.lastState == KEY_Up) |
|
|
|
{ |
|
|
|
//无意义
|
|
|
|
}else if(key.lastState == KEY_Down) |
|
|
|
if(key.state == KEY_Down) |
|
|
|
{ |
|
|
|
int difftime = QTime::currentTime().secsTo(lastStateTime); |
|
|
|
int difftime = lastStateTime.msecsTo(QTime::currentTime()); |
|
|
|
if(difftime >= Press_Overtime) |
|
|
|
{ |
|
|
|
key.flag = Press; |
|
|
|
flag = Press; |
|
|
|
}else if(difftime >= Click_Overtime) |
|
|
|
{ |
|
|
|
key.flag = Click; |
|
|
|
}else |
|
|
|
{ |
|
|
|
//按键时间过短,无效
|
|
|
|
flag = Click; |
|
|
|
} |
|
|
|
}else |
|
|
|
{ |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//判定组合行为
|
|
|
|
if(key.flag != None) |
|
|
|
{ |
|
|
|
if(key.flag == Click) |
|
|
|
{ |
|
|
|
if(key.lastFlag == Click && (QTime::currentTime().secsTo(lastFlagTime)) >= DblClick_Difftime) |
|
|
|
{ |
|
|
|
key.flag = Dbl_Click; |
|
|
|
}else if(key.lastFlag == Dbl_Click && (QTime::currentTime().secsTo(lastFlagTime)) >= DblClick_Difftime) |
|
|
|
{ |
|
|
|
key.flag = Tri_Click; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// if(flag != None)
|
|
|
|
// {
|
|
|
|
// if(flag == Click)
|
|
|
|
// {
|
|
|
|
// if(key.flag == Click && (lastFlagTime.msecsTo(QTime::currentTime())) >= DblClick_Difftime)
|
|
|
|
// {
|
|
|
|
// flag = Dbl_Click;
|
|
|
|
// }else if(key.flag == Dbl_Click && (lastFlagTime.msecsTo(QTime::currentTime())) >= DblClick_Difftime)
|
|
|
|
// {
|
|
|
|
// flag = Tri_Click;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
if(key.flag != key.lastFlag) |
|
|
|
//记录上一行为及时间
|
|
|
|
if(flag != key.flag) |
|
|
|
{ |
|
|
|
key.lastFlag = key.flag; |
|
|
|
key.flag = flag; |
|
|
|
lastFlagTime = QTime::currentTime(); |
|
|
|
if(key.flag != None){ |
|
|
|
// emit keyWorked(key.flag);
|
|
|
|
qDebug() << "keyWorked = " << key.flag; |
|
|
|
} |
|
|
|
} |
|
|
|
if(status != key.lastState) |
|
|
|
|
|
|
|
//记录按键按下时间
|
|
|
|
if(status != key.state) |
|
|
|
{ |
|
|
|
key.lastState = status; |
|
|
|
key.state = status; |
|
|
|
lastStateTime = QTime::currentTime(); |
|
|
|
if(status == KEY_Down) |
|
|
|
if(key.state != KEY_Up) |
|
|
|
{ |
|
|
|
emit keyDown();//发送至mainwidget,用于记录按下时操作的患者是哪个
|
|
|
|
// emit keyDown();//发送至mainwidget,用于记录按下时操作的患者是哪个
|
|
|
|
qDebug() << "key.state = " << key.state; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|