fix: 优化数据结构
This commit is contained in:
39
fsm.h
39
fsm.h
@@ -3,36 +3,59 @@
|
|||||||
//
|
//
|
||||||
#ifndef QF_FSM_FSM_H
|
#ifndef QF_FSM_FSM_H
|
||||||
#define QF_FSM_FSM_H
|
#define QF_FSM_FSM_H
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#define EVENT_QUEUE_LEN 16
|
||||||
|
#define EVENT_QUEUE_HANDLE_MAX_SIZE 32
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
FSM_OK,
|
FSM_OK,
|
||||||
FSM_FAIL
|
FSM_FAIL
|
||||||
} fsm_result_e;
|
} 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_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
|
typedef struct qf_fsm_state
|
||||||
{
|
{
|
||||||
uint16_t state;
|
uint16_t state;
|
||||||
fsm_cb on_exit;
|
fsm_cb on_exit;
|
||||||
|
fsm_cb on_event;
|
||||||
fsm_cb on_entry;
|
fsm_cb on_entry;
|
||||||
void *user_data;
|
void *user_data;
|
||||||
} fsm_state_t;
|
} fsm_state_t;
|
||||||
typedef struct qf_fsm_transition
|
struct qf_fsm_transition
|
||||||
{
|
{
|
||||||
uint16_t state;
|
uint16_t state;
|
||||||
uint16_t event;
|
uint16_t event;
|
||||||
|
uint16_t next_state;
|
||||||
fsm_cb on_action;
|
fsm_cb on_action;
|
||||||
} fsm_transition_t;
|
};
|
||||||
struct qf_fsm_event
|
struct qf_fsm_event
|
||||||
{
|
{
|
||||||
uint16_t event;
|
uint16_t event;
|
||||||
void *user_data;
|
void *user_data;
|
||||||
};
|
};
|
||||||
typedef struct qf_fsm
|
struct qf_fsm
|
||||||
{
|
{
|
||||||
uint16_t current_state;
|
uint16_t current_state;
|
||||||
fsm_state_t *p_state_list;
|
uint16_t num_states;
|
||||||
|
fsm_state_t *p_state_list;
|
||||||
} fsm_handle_t;
|
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
|
#endif // QF_FSM_FSM_H
|
||||||
|
|||||||
Reference in New Issue
Block a user