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