You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.8 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <stdint.h>
  4. #include <stdlib.h>
  5. /**
  6. * @brief
  7. *
  8. * @Usage:
  9. *
  10. *
  11. */
  12. typedef struct state_machine_state_s state_machine_state_t;
  13. typedef struct state_machine_s state_machine_t;
  14. typedef state_machine_state_t* (*state_machine_process_event_t)(state_machine_t* machine, state_machine_state_t* nowstate, int event);
  15. struct state_machine_state_s {
  16. char const* name; // name
  17. int stateId; // stateID
  18. int duration; //当前这个状态持续了多久
  19. };
  20. struct state_machine_s {
  21. state_machine_state_t* states; //
  22. int nstate; //
  23. state_machine_state_t* nowstate; //
  24. state_machine_process_event_t process_event; //
  25. state_machine_state_t* nextstate; //
  26. state_machine_state_t* laststate; //
  27. };
  28. /**
  29. * @brief
  30. * 0->1000
  31. */
  32. #define TIME_EVENT 0x01 //
  33. #define ENTER_STATE 0x02 //
  34. #define EXIT_STATE 0x03 //
  35. #define STATE_MACHINE_PUBLIC_EVENT 1000 //
  36. /**
  37. * @brief
  38. *
  39. * @param machine
  40. * @param statetable
  41. * @param len
  42. */
  43. void state_machine_init(state_machine_t* machine, state_machine_state_t* statetable, size_t len, state_machine_process_event_t process_event);
  44. /**
  45. * @brief
  46. *
  47. * @param machine
  48. * @param event
  49. */
  50. void state_machine_trigger_event(state_machine_t* machine, int event);
  51. state_machine_state_t* state_machine_get_now_state(state_machine_t* machine);
  52. /**
  53. * @brief 10ms调用一次
  54. *
  55. * @param machine
  56. */
  57. void state_machine_schedule_each10ms(state_machine_t* machine);
  58. /**
  59. * @brief
  60. *
  61. * @param state
  62. * @return uint32_t
  63. */
  64. uint32_t state_machine_get_state_duration_ms(state_machine_state_t* state);