feat: 实现状态机的基本功能 #2

Merged
7iwind merged 8 commits from develop into main 2026-04-21 15:08:14 +08:00
2 changed files with 39 additions and 3 deletions
Showing only changes of commit 80e4dd2fc5 - Show all commits

28
fsm.c
View File

@@ -1,4 +1,30 @@
// //
// Created by Hydro on 2026/4/21. // Created by Hydro on 2026/4/21.
// //
#include "fsm.h" #include "fsm.h"
fsm_result_e
fsm_init_with_queue (fsm_handle_t *handle_ptr,
const fsm_event_queue_init event_queue_init,
const fsm_event_queue_put event_queue_put,
const fsm_event_queue_get event_queue_get)
{
fsm_result_e result = FSM_OK;
do
{
if (!(handle_ptr && event_queue_init && event_queue_put
&& event_queue_get))
{
result = FSM_FAIL;
break;
}
handle_ptr->event_queue_get = event_queue_get;
handle_ptr->event_queue_put = event_queue_put;
handle_ptr->event_queue_init = event_queue_init;
result = handle_ptr->event_queue_init(handle_ptr->event_queue_handle,
handle_ptr->event_queue,
EVENT_QUEUE_LEN
* sizeof(fsm_event_t));
} while (0);
return result;
}

14
fsm.h
View File

@@ -7,6 +7,7 @@
#include <stdint.h> #include <stdint.h>
#define EVENT_QUEUE_LEN 16 #define EVENT_QUEUE_LEN 16
#define EVENT_QUEUE_HANDLE_MAX_SIZE 32 #define EVENT_QUEUE_HANDLE_MAX_SIZE 32
typedef enum typedef enum
{ {
FSM_OK, FSM_OK,
@@ -16,7 +17,7 @@ typedef struct qf_fsm_event fsm_event_t;
typedef struct qf_fsm fsm_handle_t; typedef struct qf_fsm fsm_handle_t;
typedef struct qf_fsm_transition fsm_transition_t; typedef struct qf_fsm_transition fsm_transition_t;
typedef fsm_result_e (*fsm_cb)(void *userdata); typedef fsm_result_e (*fsm_cb)(void *userdata);
typedef fsm_result_e (*fsm_event_queue_init)(void *handle_ptr, typedef fsm_result_e (*fsm_event_queue_init)(void *queue_handle,
void *data_ptr, void *data_ptr,
size_t size); size_t size);
typedef fsm_result_e (*fsm_event_queue_get)(void *handle_ptr, typedef fsm_result_e (*fsm_event_queue_get)(void *handle_ptr,
@@ -47,6 +48,7 @@ struct qf_fsm
{ {
uint16_t current_state; uint16_t current_state;
uint16_t num_states; uint16_t num_states;
char *name;
fsm_state_t *p_state_list; fsm_state_t *p_state_list;
uint32_t num_trans; uint32_t num_trans;
fsm_transition_t *p_trans_list; fsm_transition_t *p_trans_list;
@@ -57,5 +59,13 @@ struct qf_fsm
fsm_event_queue_put event_queue_put; fsm_event_queue_put event_queue_put;
fsm_event_queue_get event_queue_get; fsm_event_queue_get event_queue_get;
}; };
fsm_result_e fsm_init(fsm_handle_t *handle_ptr);
fsm_result_e fsm_init_with_queue(fsm_handle_t *handle_ptr,
fsm_event_queue_init event_queue_init,
fsm_event_queue_put event_queue_put,
fsm_event_queue_get event_queue_get);
fsm_result_e fsm_event_put(fsm_handle_t *handle_ptr, fsm_event_t *event);
fsm_result_e fsm_process_queue(fsm_handle_t *handle_ptr);
fsm_result_e fsm_dispatch(fsm_handle_t *handle_ptr, fsm_event_t *event);
uint16_t fsm_get_state(fsm_handle_t *h);
#endif // QF_FSM_FSM_H #endif // QF_FSM_FSM_H