From 67ca69985af9109a0603a1cde71f21b940c059ff Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期四, 15 五月 2025 09:12:53 +0800
Subject: [PATCH] 完全将免布线标签代码移植过来版本

---
 keil/include/components/hido/Include/HIDO_Modbus.h |  128 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 128 insertions(+), 0 deletions(-)

diff --git a/keil/include/components/hido/Include/HIDO_Modbus.h b/keil/include/components/hido/Include/HIDO_Modbus.h
new file mode 100644
index 0000000..d529d5c
--- /dev/null
+++ b/keil/include/components/hido/Include/HIDO_Modbus.h
@@ -0,0 +1,128 @@
+#ifndef _HIDO_MODBUS_H_
+#define _HIDO_MODBUS_H_
+
+#include "HIDO_TypeDef.h"
+#include "HIDO_FSM.h"
+#include "HIDO_VLQueue.h"
+
+#define MODBUS_RTU_MIN_SIZE                              (   4 )
+#define MODBUS_RTU_FUNC_CODE_OFFSET                      (   1 )
+#define MODBUS_RTU_ADDR_OFFSET                           (   0 )
+#define MODBUS_RTU_DATA_OFFSET                           (   2 )
+
+#define MODBUS_RTU_ADDR_SIZE                             (   1 )
+#define MODBUS_RTU_FUNC_CODE_SIZE                        (   1 )
+#define MODBUS_RTU_REGISTER_SIZE                         (   2 )
+#define MODBUS_RTU_REGISTER_COUNT_SIZE                   (   2 )
+#define MODBUS_RTU_COUNT_SIZE                            (   1 )
+#define MODBUS_RTU_CRC16_SIZE                            (   2 )
+
+#define MODBUS_RTU_READ_HOLDING_REGISTER_SIZE            ( \
+                                                           MODBUS_RTU_ADDR_SIZE \
+                                                           + MODBUS_RTU_FUNC_CODE_SIZE \
+                                                           + MODBUS_RTU_REGISTER_SIZE \
+                                                           + MODBUS_RTU_REGISTER_COUNT_SIZE \
+                                                           + MODBUS_RTU_CRC16_SIZE)
+
+#define MODBUS_RTU_WRITE_MULTIPLE_REGISTERS_SIZE(cnt)    ( \
+                                                           MODBUS_RTU_ADDR_SIZE \
+                                                           + MODBUS_RTU_FUNC_CODE_SIZE \
+                                                           + MODBUS_RTU_REGISTER_SIZE \
+                                                           + MODBUS_RTU_COUNT_SIZE \
+                                                           + MODBUS_RTU_REGISTER_COUNT_SIZE \
+                                                           + (MODBUS_RTU_REGISTER_SIZE * (cnt)) \
+                                                           + MODBUS_RTU_CRC16_SIZE)
+
+#define MODBUS_ADDRESS_BROADCAST                         ( 255 ) /*! Modbus broadcast address. */
+#define MODBUS_ADDRESS_MIN                               (   1 ) /*! Smallest possible slave address. */
+#define MODBUS_ADDRESS_MAX                               ( 247 ) /*! Biggest possible slave address. */
+#define MODBUS_FUNC_NONE                                 (   0 )
+#define MODBUS_FUNC_READ_COILS                           (   1 )
+#define MODBUS_FUNC_READ_DISCRETE_INPUTS                 (   2 )
+#define MODBUS_FUNC_WRITE_SINGLE_COIL                    (   5 )
+#define MODBUS_FUNC_WRITE_MULTIPLE_COILS                 (  15 )
+#define MODBUS_FUNC_READ_HOLDING_REGISTER                (   3 )
+#define MODBUS_FUNC_READ_INPUT_REGISTER                  (   4 )
+#define MODBUS_FUNC_WRITE_REGISTER                       (   6 )
+#define MODBUS_FUNC_WRITE_MULTIPLE_REGISTERS             (  16 )
+#define MODBUS_FUNC_READWRITE_MULTIPLE_REGISTERS         (  23 )
+#define MODBUS_FUNC_DIAG_READ_EXCEPTION                  (   7 )
+#define MODBUS_FUNC_DIAG_DIAGNOSTIC                      (   8 )
+#define MODBUS_FUNC_DIAG_GET_COM_EVENT_CNT               (  11 )
+#define MODBUS_FUNC_DIAG_GET_COM_EVENT_LOG               (  12 )
+#define MODBUS_FUNC_OTHER_REPORT_SLAVEID                 (  17 )
+#define MODBUS_FUNC_ERROR                                ( 128 )
+
+typedef enum
+{
+    HIDO_MODBUS_MODE_MASTER,
+    HIDO_MODBUS_MODE_SLAVE,
+} HIDO_ModbusModeEnum;
+
+typedef enum
+{
+    HIDO_MODBUS_RESULT_NONE,
+    HIDO_MODBUS_RESULT_WAIT,
+    HIDO_MODBUS_RESULT_RESPONSE,
+} HIDO_ModbusResultEnum;
+
+typedef struct
+{
+    HIDO_VOID *m_pData;
+    HIDO_UINT32 m_u32Len;
+    HIDO_UINT32 m_u32SerialNumber;
+}HIDO_ModbusDataStruct;
+
+typedef struct HIDO_ModbusStruct HIDO_ModbusStruct;
+typedef HIDO_ModbusResultEnum (* HIDO_ModbusOnRecvFunc)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 _u8Addr, HIDO_UINT8 _u8FuncCode, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len, HIDO_UINT32 _u32SerialNumber);
+typedef HIDO_VOID (* HIDO_ModbusSerialEvent)(HIDO_ModbusStruct *_pstModbus);
+
+struct HIDO_ModbusStruct
+{
+    HIDO_UINT32 m_u32TimerID;
+    HIDO_UINT32 m_u32SerialTXOver;
+    HIDO_UINT32 m_u32SerialRXOver;
+    HIDO_UINT32 m_u32SerialRXReady;
+    HIDO_FSMStruct m_stFSM;
+
+    HIDO_UINT32 m_u32NextSerialNumber;
+    HIDO_UINT32 m_u32CurrentSerialNumber;
+
+    /* 以下用户实现 */
+    HIDO_UINT32 m_u32DelayUs;
+
+    HIDO_VLQStruct m_stSendQueue;
+
+    HIDO_UINT8 *m_pu8SendBuff;
+    HIDO_UINT32 m_u32SendBuffSize;
+
+    HIDO_UINT32 m_u32TransferIndex;
+    HIDO_UINT32 m_u32TransferLen;
+    HIDO_UINT8 *m_pu8TransferBuff;
+    HIDO_UINT32 m_u32TransferBuffSize;
+
+    HIDO_VOID (* m_fnTimerStart)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT32 _u32Us);
+    HIDO_VOID (* m_fnTimerStop)(HIDO_ModbusStruct *_pstModbus);
+
+    HIDO_VOID (* m_fnSerialEnable)(HIDO_ModbusStruct* _pstModbus, HIDO_BOOL _bRxEnable, HIDO_BOOL _bTxEnable);
+    HIDO_INT32 (* m_fnSerialPutByte)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 _u8Byte);
+    HIDO_INT32 (* m_fnSerialGetByte)(HIDO_ModbusStruct *_pstModbus, HIDO_UINT8 *_pu8Byte);
+
+    HIDO_VOID *m_pPrivateData;
+
+    HIDO_ModbusOnRecvFunc m_fnOnRecv;
+    HIDO_ModbusSerialEvent m_fnSerialTXOver;
+    HIDO_ModbusSerialEvent m_fnSerialRXOver;
+};
+
+HIDO_VOID HIDO_ModbusEnterCriticalSection(void);
+HIDO_VOID HIDO_ModbusExitCriticalSection(void);
+
+HIDO_INT32 HIDO_ModbusInit(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusModeEnum _eMode);
+HIDO_INT32 HIDO_ModbusSetOnRecvCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusOnRecvFunc _fnOnRecv);
+HIDO_INT32 HIDO_ModbusSetSerialTXOverCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusSerialEvent _fnSerialEvent);
+HIDO_INT32 HIDO_ModbusSetSerialRXOverCallback(HIDO_ModbusStruct *_pstModbus, HIDO_ModbusSerialEvent _fnSerialEvent);
+HIDO_INT32 HIDO_ModbusFramePack(HIDO_UINT8 *_pu8FrameBuf, HIDO_UINT32 _u32FrameBufSize, HIDO_UINT8 _u8Addr, HIDO_UINT8 _u8FuncCode, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32DataLen, HIDO_UINT32 *_pu32FrameLen);
+
+#endif /* _HIDO_MODBUS_H_ */
+

--
Gitblit v1.9.3