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