上28377测试吧
This commit is contained in:
parent
1743321fab
commit
3fe745f71b
|
@ -10,14 +10,17 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static Event selectEvent(KeyFSMData *data){ // 必须重新实现
|
static Event selectEvent(KeyFSMData *data){ // 必须重新实现
|
||||||
if(data->countDelay == 2){
|
if(data->countDelay == 4){
|
||||||
return HoldCount2;
|
return HoldCount4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data->countDelay == 3){
|
if(data->countDelay == 3){
|
||||||
if(data->countMultiDown && data->lastState == MultiDownWaiting){
|
if(data->countMultiDown && data->lastState == MultiDownWaiting){
|
||||||
return MultiDown;
|
return MultiDown;
|
||||||
}
|
}
|
||||||
|
if(data->lastState == Holding){
|
||||||
|
return UpDebouncing2Waiting;
|
||||||
|
}
|
||||||
return DelayCount3;
|
return DelayCount3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +28,9 @@ static Event selectEvent(KeyFSMData *data){ // 必须重新实现
|
||||||
return PhsicalUp;
|
return PhsicalUp;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
if(data->lastState == Holding){
|
||||||
|
return UpDebouncing2Holding;
|
||||||
|
}
|
||||||
return PhsicalDown;
|
return PhsicalDown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,6 +66,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
fcns->exitActionTable[Downing] = (Avoid_WARNING_void_FSM)actionFcn(exit, Downing);
|
fcns->exitActionTable[Downing] = (Avoid_WARNING_void_FSM)actionFcn(exit, Downing);
|
||||||
|
|
||||||
fcns->duringActionTable[UpDebouncing] = (Avoid_WARNING_void_FSM)actionFcn(during, UpDebouncing);
|
fcns->duringActionTable[UpDebouncing] = (Avoid_WARNING_void_FSM)actionFcn(during, UpDebouncing);
|
||||||
|
fcns->exitActionTable[UpDebouncing] = (Avoid_WARNING_void_FSM)actionFcn(exit, UpDebouncing);
|
||||||
|
|
||||||
fcns->duringActionTable[Holding] = (Avoid_WARNING_void_FSM)actionFcn(during, Holding);
|
fcns->duringActionTable[Holding] = (Avoid_WARNING_void_FSM)actionFcn(during, Holding);
|
||||||
fcns->exitActionTable[Holding] = (Avoid_WARNING_void_FSM)actionFcn(exit, Holding);
|
fcns->exitActionTable[Holding] = (Avoid_WARNING_void_FSM)actionFcn(exit, Holding);
|
||||||
|
@ -77,10 +84,12 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
|
||||||
fcns->transitionTable[index(DownDebouncing, MultiDown)] = (Avoid_WARNING_int_FSM)transitionHandler(MultiDown);
|
fcns->transitionTable[index(DownDebouncing, MultiDown)] = (Avoid_WARNING_int_FSM)transitionHandler(MultiDown);
|
||||||
|
|
||||||
fcns->transitionTable[index(Downing, PhsicalUp)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalUp);
|
fcns->transitionTable[index(Downing, PhsicalUp)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalUp);
|
||||||
fcns->transitionTable[index(Downing, HoldCount2)] = (Avoid_WARNING_int_FSM)transitionHandler(HoldCount2);
|
fcns->transitionTable[index(Downing, HoldCount4)] = (Avoid_WARNING_int_FSM)transitionHandler(HoldCount4);
|
||||||
|
|
||||||
fcns->transitionTable[index(UpDebouncing, PhsicalDown)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalDown);
|
fcns->transitionTable[index(UpDebouncing, PhsicalDown)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalDown);
|
||||||
fcns->transitionTable[index(UpDebouncing, DelayCount3)] = (Avoid_WARNING_int_FSM)transitionHandler(DelayCount3);
|
fcns->transitionTable[index(UpDebouncing, DelayCount3)] = (Avoid_WARNING_int_FSM)transitionHandler(DelayCount3);
|
||||||
|
fcns->transitionTable[index(UpDebouncing, UpDebouncing2Holding)] = (Avoid_WARNING_int_FSM)transitionHandler(UpDebouncing2Holding);
|
||||||
|
fcns->transitionTable[index(UpDebouncing, UpDebouncing2Waiting)] = (Avoid_WARNING_int_FSM)transitionHandler(UpDebouncing2Waiting);
|
||||||
|
|
||||||
fcns->transitionTable[index(Holding, PhsicalUp)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalUp);
|
fcns->transitionTable[index(Holding, PhsicalUp)] = (Avoid_WARNING_int_FSM)transitionHandler(PhsicalUp);
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,10 @@ static void actionFcn(during, UpDebouncing)(KeyFSM *pFSM){
|
||||||
data->countDelay++;
|
data->countDelay++;
|
||||||
printf(" during松开消抖 ");
|
printf(" during松开消抖 ");
|
||||||
}
|
}
|
||||||
|
static void actionFcn(exit, UpDebouncing)(KeyFSM *pFSM){
|
||||||
|
KeyFSMData * data = pFSM->base.data;
|
||||||
|
data->lastState = Idle_State;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -132,8 +136,10 @@ typedef enum _Event{
|
||||||
PhsicalUp,
|
PhsicalUp,
|
||||||
DelayCount3,
|
DelayCount3,
|
||||||
|
|
||||||
HoldCount2,
|
HoldCount4,
|
||||||
MultiDown,
|
MultiDown,
|
||||||
|
UpDebouncing2Holding,
|
||||||
|
UpDebouncing2Waiting,
|
||||||
|
|
||||||
Count_Event,
|
Count_Event,
|
||||||
}Event;
|
}Event;
|
||||||
|
@ -150,7 +156,7 @@ static State transitionHandler(PhsicalDown)(KeyFSM *pFSM)
|
||||||
|
|
||||||
case UpDebouncing:
|
case UpDebouncing:
|
||||||
if(data->countMultiDown){
|
if(data->countMultiDown){
|
||||||
return MultiDown;
|
return MultiDowning;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(data->lastState == Holding){
|
if(data->lastState == Holding){
|
||||||
|
@ -231,7 +237,7 @@ static State transitionHandler(DelayCount3)(KeyFSM *pFSM){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static State transitionHandler(HoldCount2)(KeyFSM *pFSM){
|
static State transitionHandler(HoldCount4)(KeyFSM *pFSM){
|
||||||
printf(" 计数到2进入长按模式 ");
|
printf(" 计数到2进入长按模式 ");
|
||||||
KeyFSMData * data = pFSM->base.data;
|
KeyFSMData * data = pFSM->base.data;
|
||||||
data->countDelay = 0;
|
data->countDelay = 0;
|
||||||
|
@ -240,6 +246,7 @@ static State transitionHandler(HoldCount2)(KeyFSM *pFSM){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static State transitionHandler(MultiDown)(KeyFSM *pFSM){
|
static State transitionHandler(MultiDown)(KeyFSM *pFSM){
|
||||||
printf(" 多击 ");
|
printf(" 多击 ");
|
||||||
KeyFSMData * data = pFSM->base.data;
|
KeyFSMData * data = pFSM->base.data;
|
||||||
|
@ -263,8 +270,21 @@ static State transitionHandler(MultiDown)(KeyFSM *pFSM){
|
||||||
return MultiDowning;
|
return MultiDowning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static State transitionHandler(UpDebouncing2Holding)(KeyFSM *pFSM){
|
||||||
|
printf(" 回到长按 ");
|
||||||
|
KeyFSMData * data = pFSM->base.data;
|
||||||
|
data->countDelay = 0;
|
||||||
|
data->out = Idle;
|
||||||
|
return Holding;
|
||||||
|
}
|
||||||
|
|
||||||
|
static State transitionHandler(UpDebouncing2Waiting)(KeyFSM *pFSM){
|
||||||
|
printf(" 关闭消抖到等待 ");
|
||||||
|
KeyFSMData * data = pFSM->base.data;
|
||||||
|
data->countDelay = 0;
|
||||||
|
data->out = Idle;
|
||||||
|
return Waiting;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -285,8 +305,10 @@ const static char *eventStr[] = {
|
||||||
"PhsicalDown",
|
"PhsicalDown",
|
||||||
"PhsicalUp",
|
"PhsicalUp",
|
||||||
"DelayCount3",
|
"DelayCount3",
|
||||||
"HoldCount2",
|
"HoldCount4",
|
||||||
"MultiDown",
|
"MultiDown",
|
||||||
|
"UpDebouncing2Holding",
|
||||||
|
"UpDebouncing2Waiting"
|
||||||
};
|
};
|
||||||
static void printFSM(KeyFSM* pFSM){
|
static void printFSM(KeyFSM* pFSM){
|
||||||
printf("\tKeyFSM: ");
|
printf("\tKeyFSM: ");
|
||||||
|
|
6
main.c
6
main.c
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#define NUM 60
|
#define NUM 60
|
||||||
|
|
||||||
|
|
||||||
KeyIn testin[NUM] = {
|
KeyIn testin[NUM] = {
|
||||||
Up,Up,pDown,pDown,Up,
|
Up,Up,pDown,pDown,Up,
|
||||||
pDown,pDown,pDown,pDown,pDown,
|
pDown,pDown,pDown,pDown,pDown,
|
||||||
|
@ -31,6 +32,11 @@ int main(){
|
||||||
setEvent((FSM_Ptr)keyFSM);
|
setEvent((FSM_Ptr)keyFSM);
|
||||||
vptrFSM((FSM_Ptr)keyFSM)->step((FSM_Ptr)keyFSM);
|
vptrFSM((FSM_Ptr)keyFSM)->step((FSM_Ptr)keyFSM);
|
||||||
|
|
||||||
|
if(data->out){
|
||||||
|
printf("\t\t\t\t%d", data->out);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue