上28377测试吧

This commit is contained in:
godcreator 2024-01-24 10:20:05 +08:00
parent 1743321fab
commit 3fe745f71b
3 changed files with 45 additions and 8 deletions

View File

@ -10,14 +10,17 @@
*/
static Event selectEvent(KeyFSMData *data){ // 必须重新实现
if(data->countDelay == 2){
return HoldCount2;
if(data->countDelay == 4){
return HoldCount4;
}
if(data->countDelay == 3){
if(data->countMultiDown && data->lastState == MultiDownWaiting){
return MultiDown;
}
if(data->lastState == Holding){
return UpDebouncing2Waiting;
}
return DelayCount3;
}
@ -25,6 +28,9 @@ static Event selectEvent(KeyFSMData *data){ // 必须重新实现
return PhsicalUp;
}
else{
if(data->lastState == Holding){
return UpDebouncing2Holding;
}
return PhsicalDown;
}
}
@ -60,6 +66,7 @@ static void setupHandler(FSMHandler* fcns){ // 必须重新实现
fcns->exitActionTable[Downing] = (Avoid_WARNING_void_FSM)actionFcn(exit, Downing);
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->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(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, 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);

View File

@ -79,6 +79,10 @@ static void actionFcn(during, UpDebouncing)(KeyFSM *pFSM){
data->countDelay++;
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,
DelayCount3,
HoldCount2,
HoldCount4,
MultiDown,
UpDebouncing2Holding,
UpDebouncing2Waiting,
Count_Event,
}Event;
@ -150,7 +156,7 @@ static State transitionHandler(PhsicalDown)(KeyFSM *pFSM)
case UpDebouncing:
if(data->countMultiDown){
return MultiDown;
return MultiDowning;
}
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进入长按模式 ");
KeyFSMData * data = pFSM->base.data;
data->countDelay = 0;
@ -240,6 +246,7 @@ static State transitionHandler(HoldCount2)(KeyFSM *pFSM){
}
static State transitionHandler(MultiDown)(KeyFSM *pFSM){
printf(" 多击 ");
KeyFSMData * data = pFSM->base.data;
@ -263,8 +270,21 @@ static State transitionHandler(MultiDown)(KeyFSM *pFSM){
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",
"PhsicalUp",
"DelayCount3",
"HoldCount2",
"HoldCount4",
"MultiDown",
"UpDebouncing2Holding",
"UpDebouncing2Waiting"
};
static void printFSM(KeyFSM* pFSM){
printf("\tKeyFSM: ");

6
main.c
View File

@ -5,6 +5,7 @@
#define NUM 60
KeyIn testin[NUM] = {
Up,Up,pDown,pDown,Up,
pDown,pDown,pDown,pDown,pDown,
@ -31,6 +32,11 @@ int main(){
setEvent((FSM_Ptr)keyFSM);
vptrFSM((FSM_Ptr)keyFSM)->step((FSM_Ptr)keyFSM);
if(data->out){
printf("\t\t\t\t%d", data->out);
}
printf("\n");
}