CustomerBeingFSM.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef CUSTOMERBEINGFSM_H
  2. #define CUSTOMERBEINGFSM_H
  3. #pragma once
  4. #include "SpHelper.h"
  5. #include "SpFSM.h"
  6. #define USER_EVT_APPROACH EVT_USER+1
  7. #define USER_EVT_LEAVE EVT_USER+2
  8. #define USER_EVT_FRONT EVT_USER+3
  9. #define USER_EVT_LEAVE_APPROACH EVT_USER+4
  10. #define USER_EVT_LOCK EVT_USER+5
  11. #define USER_EVT_UNLOCK EVT_USER+6
  12. #define USER_EVT_EXIT EVT_USER+50
  13. class CCustomerBeingFSM : public FSMImpl<CCustomerBeingFSM>, public IFSMStateHooker
  14. {
  15. public:
  16. enum {s0, s1, s2, s3, s4};
  17. BEGIN_FSM_STATE(CCustomerBeingFSM)
  18. FSM_STATE_ENTRY(s0,"None",s0_on_entry,s0_on_exit,s0_on_event)
  19. FSM_STATE_ENTRY(s1,"Approach",s1_on_entry,s1_on_exit,s1_on_event)
  20. FSM_STATE_ENTRY(s2,"Front",s2_on_entry,s2_on_exit,s2_on_event)
  21. FSM_STATE_ENTRY(s3,"Lock",s3_on_entry,s3_on_exit,s3_on_event)
  22. FSM_STATE_ENTRY(s4,"Sleep",s4_on_entry,s4_on_exit,s4_on_event)
  23. END_FSM_STATE()
  24. BEGIN_FSM_RULE(CCustomerBeingFSM, s0)
  25. FSM_RULE_ENTRY_ANY(s0, s1, USER_EVT_APPROACH)
  26. FSM_RULE_ENTRY_ANY(s0, s2, USER_EVT_FRONT)
  27. FSM_RULE_ENTRY_ANY(s0, s4, EVT_TIMER)
  28. FSM_RULE_ENTRY_ANY(s0, FSM_STATE_EXIT, USER_EVT_EXIT)
  29. FSM_RULE_ENTRY_ANY(s1, s0, USER_EVT_LEAVE)
  30. FSM_RULE_ENTRY_ANY(s1, s2, USER_EVT_FRONT)
  31. FSM_RULE_ENTRY_ANY(s2, s1, USER_EVT_LEAVE_APPROACH)
  32. FSM_RULE_ENTRY_ANY(s2, s0, USER_EVT_LEAVE)
  33. FSM_RULE_ENTRY_ANY(s2, s3, USER_EVT_LOCK)
  34. FSM_RULE_ENTRY_ANY(s3, s2, USER_EVT_UNLOCK)
  35. FSM_RULE_ENTRY_ANY(s3, s0, USER_EVT_LEAVE)
  36. FSM_RULE_ENTRY_ANY(s3, s1, USER_EVT_APPROACH)
  37. FSM_RULE_ENTRY_ANY(s4, s1, USER_EVT_APPROACH)
  38. FSM_RULE_ENTRY_ANY(s4, s2, USER_EVT_FRONT)
  39. END_FSM_RULE()
  40. CCustomerBeingFSM();
  41. ~CCustomerBeingFSM();
  42. virtual void OnStateTrans(int iSrcState, int iDstState);
  43. virtual ErrorCodeEnum OnInit();
  44. virtual ErrorCodeEnum OnExit();
  45. void s0_on_entry();
  46. void s0_on_exit();
  47. unsigned int s0_on_event(FSMEvent* event);
  48. void s1_on_entry();
  49. void s1_on_exit();
  50. unsigned int s1_on_event(FSMEvent* event);
  51. void s2_on_entry();
  52. void s2_on_exit();
  53. unsigned int s2_on_event(FSMEvent* event);
  54. void s3_on_entry();
  55. void s3_on_exit();
  56. unsigned int s3_on_event(FSMEvent* event);
  57. void s4_on_entry();
  58. void s4_on_exit();
  59. unsigned int s4_on_event(FSMEvent* event);
  60. private:
  61. ErrorCodeEnum SetSysState(int state);
  62. };
  63. #endif // CUSTOMERBEINGFSM_H