From 04b95840e106182266f71a549b85bcfff083deb1 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 23 五月 2025 18:07:48 +0800 Subject: [PATCH] 成功测试完毕新的蓝牙和MK的传输协议,并实现读写功能 --- keil/include/components/hido/Include/HIDO_FSM.h | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 206 insertions(+), 0 deletions(-) diff --git a/keil/include/components/hido/Include/HIDO_FSM.h b/keil/include/components/hido/Include/HIDO_FSM.h new file mode 100644 index 0000000..73c5ab5 --- /dev/null +++ b/keil/include/components/hido/Include/HIDO_FSM.h @@ -0,0 +1,206 @@ +/******************************************************************************* + * File Name : PointTable.h + * Description : + * Created on : 2019年5月12日 + * Author : www.hido-studio.com + *******************************************************************************/ +#ifndef _HIDO_FSM_H_ +#define _HIDO_FSM_H_ + +/******************************************************************************* + * Include Files * + *******************************************************************************/ +#include "HIDO_TypeDef.h" +#include "stdarg.h" + +/******************************************************************************* + * Macro * + *******************************************************************************/ +#define HIDO_FSM_DECLARE(name) \ + extern HIDO_FSMStruct g_stFSM##name /* 声明一个状态机 */ + +#define HIDO_FSM_STATE_EXTERN(name) \ + extern const HIDO_StateStruct g_stState##name /* 声明一个状态 */ + +#define HIDO_FSM_DECLARE_IMPLEMENT(name) \ + HIDO_FSMStruct g_stFSM##name = { HIDO_NULL }; /* 实现一个状态机 */ + +#define HIDO_FSM_STATE_DECLARE(name) \ + extern const HIDO_StateStruct g_stState##name; \ + HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg); + /* 声明状态机的一个状态,[name]状态的名字 */ + +#define HIDO_FSM_DETACHED_STATE(name) \ + extern HIDO_StateStruct g_stState##name; \ + HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg); + /* 声明状态机的一个状态,[name]状态的名字 */ + +#define HIDO_FSM_STATE_FULL_DECLARE(parent, name) HIDO_FSM_STATE_DECLARE(name) + +#define HIDO_FSM_STATE_IMPLEMENT(name, parent, init) \ + const HIDO_StateStruct g_stState##name = { #name, parent, init, name##Proc }; \ + HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg) + /* 实现一个状态 */ + +#define HIDO_FSM_DETACHED_STATE_IMPLEMENT(name, parent, init) \ + HIDO_StateStruct g_stState##name = { #name, parent, init, name##Proc }; \ + HIDO_INT32 name##Proc(HIDO_FSMStruct *_pstFSM, HIDO_UINT32 _u32Event, void *_pArg) + /* 实现一个状态 */ +#define HIDO_FSM_DETACHED_STATE_SETTLE(name, parent, init) \ + g_stState##name.m_pstParent = (parent);\ + g_stState##name.m_pstInit = (init); + /* 动态修改状态的关联关系,修改它的夫状态和子状态 */ +#define HIDO_FSM(name) (&g_stFSM##name) +#define HIDO_FSM_STATE(name) (&g_stState##name) + +#define HIDO_EVENT_ENTRY 0 /* 进入状态的事件 */ +#define HIDO_EVENT_EXIT 1 /* 退出状态的事件 */ +#define HIDO_EVENT_ENTRY_NAME "EVENT_ENTRY" /* 进入状态的事件名字 */ +#define HIDO_EVENT_EXIT_NAME "EVENT_EXIT" /* 退出状态的事件名字 */ + +#define HIDO_EVENT_OK 0 /* 事件执行OK */ +#define HIDO_EVENT_NO_PROC 1 /* 当前状态不能处理目标事件,需要由父状态完成 */ +#define HIDO_STATE_MAX_DEPTH 10 /* 状态机状态嵌套的最大深度 */ + +/******************************************************************************* + * Type Definition * + *******************************************************************************/ +typedef struct HIDO_StateStruct HIDO_StateStruct; +typedef struct HIDO_StateListStruct HIDO_StateListStruct; +typedef struct HIDO_FSMStruct HIDO_FSMStruct; +typedef struct HIDO_FSMQueueStruct HIDO_FSMQueueStruct; +typedef struct HIDO_FSMQueueDataStruct HIDO_FSMQueueDataStruct; + +/* 状态参数 */ +typedef struct +{ + HIDO_VOID *m_pArg; /* 用户参数指针 */ + const HIDO_StateStruct *m_pstAfterState; /* 事件执行完进入的下一个状态 */ +} HIDO_StateArgStruct; + +/* 状态的实现 */ +typedef HIDO_INT32 (* HIDO_DebugFunc)(HIDO_FSMStruct *_pstStateMachine, HIDO_INT32 _i32Level, HIDO_CHAR *_pcFmt, va_list _ap); +typedef HIDO_INT32 (* HIDO_StateFunc)(HIDO_FSMStruct *, HIDO_UINT32, void *); +struct HIDO_StateStruct +{ + const char *m_pcName; + const HIDO_StateStruct *m_pstParent; + const HIDO_StateStruct *m_pstInit; + HIDO_StateFunc m_fnProc; +}; + +/* 未使用 */ +struct HIDO_FSMQueueDataStruct +{ + HIDO_UINT32 m_u32Event; + void *m_pArg; +}; + +/* 未使用 */ +struct HIDO_FSMQueueStruct +{ + HIDO_UINT32 m_u32Cnt; + HIDO_UINT32 m_u32Rear; + HIDO_UINT32 m_u32Front; + HIDO_UINT32 m_u32Size; + HIDO_FSMQueueDataStruct *m_pstBuff; +}; + +/* 状态机的实现结构体 */ +struct HIDO_FSMStruct +{ +#define HIDO_FSM_DBG_FLAG_OFF 0 /* 开日志 */ +#define HIDO_FSM_DBG_FLAG_ON 1 /* 关日志 */ + + HIDO_UINT16 m_u16ID; /* 状态机ID 未使用 */ + HIDO_UINT16 m_u16DbgFlag; /* 状态机调试打印开关 */ + const HIDO_StateStruct *m_pstCurrentState; /* 状态机当前的状态 */ + void *m_pPrivateData; /* 状态机私有数据 */ + const char *m_pcName; /* 状态机名字 */ + const char * const*m_ppcEventName; /* 状态机事件名字名字 */ + HIDO_FSMStruct *m_pstNext; /* 未使用 */ + HIDO_FSMQueueStruct m_stEventQueue; /* 未使用 */ + HIDO_DebugFunc m_fnDebugFunc; +}; + +/* 未使用 */ +struct HIDO_StateListStruct +{ + const HIDO_StateStruct *m_pstState; + HIDO_StateListStruct *m_pstNext; +}; + +/******************************************************************************* + * Global Function * + *******************************************************************************/ +/******************************************************************************* + * Function Name : HIDO_FSMEventExecute + * Description : 状态机执行一个事件 + * Input : _ptStatMachine 状态机结构体指针 + * _uEvent 状态机的事件 + * _pArg 状态机执行事件时传递的参数 + * Output : None + * Return : None + * Author : www.hido-studio.com + * Modified Date: : 2019年07月15日 + *******************************************************************************/ +void HIDO_FSMEventExecute(HIDO_FSMStruct *_ptStateMachine, HIDO_UINT32 _uEvent, void *_pArg); + +/******************************************************************************* + * Function Name : HIDO_FSMRegister + * Description : 状态机注册 + * Input : _ptStatMachine 状态机结构体指针 + * _ptInitState 状态机的初始状态 + * _pcName 状态机的名字(用于调试打印) + * _ppcEventName 状态机时间的名字(用于调试打印) + * _pPrivateData 状态机私有数据,可以给状态机关联一个私有数据 + * _u16DbgFlag 调试开关 HIDO_FSM_DBG_FLAG_OFF=关 HIDO_FSM_DBG_FLAG_ON=开 + * Output : None + * Return : None + * Author : www.hido-studio.com + * Modified Date: : 2019年07月15日 + *******************************************************************************/ +void HIDO_FSMRegister(HIDO_FSMStruct *_ptStatMachine, const HIDO_StateStruct *_ptInitState, const char *_pcName, const char * const*_ppcEventName, + void *_pPrivateData, HIDO_UINT16 _u16DbgFlag); + +/******************************************************************************* + * Function Name : DB_FSMRegisterDebugFunc + * Description : + * Input : + * Output : + * Return : + * Author : DuJian + * Modified Date: : 2019年11月18日 + *******************************************************************************/ +HIDO_INT32 HIDO_FSMRegisterDebugFunc(HIDO_FSMStruct *_pstStatMachine, HIDO_DebugFunc _fnDebugFunc); + +/******************************************************************************* + * Function Name : HIDO_FSMStateChange + * Description : 状态机状态迁移接口 + * Input : _ptStateMachine 状态机结构体指针 + * _ptNewState 新的状态(状态迁移的目标状态) + * _pData 状态迁移时携带的数据 + * Output : None + * Return : None + * Author : www.hido-studio.com + * Modified Date: : 2019年07月15日 + *******************************************************************************/ +void HIDO_FSMStateChange(HIDO_FSMStruct *_ptStateMachine, const HIDO_StateStruct *_ptNewState, void *_pData); + +/******************************************************************************* + * Function Name : HIDO_FSMStartTimer + * Description : 状态机启动定时器接口 + * Input : _eTimerID 定时器的ID + * _u8Type 定时器的类型(同HIDO_Timer。h中的类型) + * _uTick 定时器的定时tick(单位ms) + * _ptStatMachine 状态机结构体指针 + * _uEvent 定时器超时后,向状态机发送的事件 + * Output : None + * Return : None + * Author : www.hido-studio.com + * Modified Date: : 2019年07月15日 + *******************************************************************************/ +void HIDO_FSMStartTimer(HIDO_UINT32 _eTimerID, HIDO_UINT8 _u8Type, HIDO_UINT32 _uTick, HIDO_FSMStruct *_ptStatMachine, HIDO_UINT32 _uEvent); + +#endif + -- Gitblit v1.9.3