From e0ca05678ad1546722f9a2a6b5d09af552f7b7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=A4=A9=E6=B5=A9?= Date: Tue, 21 Apr 2026 03:30:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fsm.h | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/fsm.h b/fsm.h index 3851344..587d73a 100644 --- a/fsm.h +++ b/fsm.h @@ -3,36 +3,59 @@ // #ifndef QF_FSM_FSM_H #define QF_FSM_FSM_H +#include #include +#define EVENT_QUEUE_LEN 16 +#define EVENT_QUEUE_HANDLE_MAX_SIZE 32 typedef enum { FSM_OK, FSM_FAIL } fsm_result_e; - +typedef struct qf_fsm_event fsm_event_t; +typedef struct qf_fsm fsm_handle_t; +typedef struct qf_fsm_transition fsm_transition_t; typedef fsm_result_e (*fsm_cb)(void *userdata); +typedef fsm_result_e (*fsm_event_queue_init)(void *handle_ptr, + void *data_ptr, + size_t size); +typedef fsm_result_e (*fsm_event_queue_get)(void *handle_ptr, + fsm_event_t *event); +typedef fsm_result_e (*fsm_event_queue_put)(void *handle_ptr, + fsm_event_t *event); typedef struct qf_fsm_state { uint16_t state; fsm_cb on_exit; + fsm_cb on_event; fsm_cb on_entry; void *user_data; } fsm_state_t; -typedef struct qf_fsm_transition +struct qf_fsm_transition { uint16_t state; uint16_t event; + uint16_t next_state; fsm_cb on_action; -} fsm_transition_t; +}; struct qf_fsm_event { uint16_t event; void *user_data; }; -typedef struct qf_fsm +struct qf_fsm { - uint16_t current_state; - fsm_state_t *p_state_list; - -} fsm_handle_t; + uint16_t current_state; + uint16_t num_states; + fsm_state_t *p_state_list; + uint32_t num_trans; + fsm_transition_t *p_trans_list; + uint8_t event_queue_handle[EVENT_QUEUE_HANDLE_MAX_SIZE]; + fsm_event_t event_queue[EVENT_QUEUE_LEN]; + bool custom_queue; + fsm_event_queue_init event_queue_init; + fsm_event_queue_put event_queue_put; + fsm_event_queue_get event_queue_get; +}; + #endif // QF_FSM_FSM_H