chen
2025-05-15 67ca69985af9109a0603a1cde71f21b940c059ff
keil/include/components/hido/Include/HIDO_FIFO.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
/*******************************************************************************
 * File Name         : HIDO_FIFO.h
 * Description       :
 * Created on        : 2018å¹´4月26日
 * Author            : www.hido-studio.com
 *******************************************************************************/
#ifndef HIDOLIBRARY_FIFO_HIDO_FIFO_H_
#define HIDOLIBRARY_FIFO_HIDO_FIFO_H_
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "HIDO_TypeDef.h"
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
typedef struct
{
#define FIFO_DATA_DEL_FLAG_UNDEL           0xFF
#define FIFO_DATA_DEL_FLAG_DEL             0xDE
    HIDO_UINT8 m_u8DelFlag;
#define FIFO_DATA_FLAG_USED                0xAB
#define FIFO_DATA_FLAG_UNUSED              0xFF
    HIDO_UINT8 m_u8Flag;                                                        /* æ ‡è®°ï¼Œå›ºå®šä¸º0xAB,标识已使用 */
    HIDO_UINT8 m_u8DataLen;                                                     /* æ•°æ®é•¿åº¦,数据的最大长度=m_u32MemberSize-sizeof(ST_FIFOHeader) */
#define FIFO_DATA_TYPE_MID                 0xAC
#define FIFO_DATA_TYPE_END                 0xED
    HIDO_UINT8 m_u8Type;                                                        /* æ ‡è¯†æ˜¯éƒ½æ˜¯ä¸€æ®µæ•°æ®çš„结束 */
}HIDO_FIFOHeaderStruct;
typedef struct FIFOStruct HIDO_FIFOStruct;
typedef struct FIFOInitStruct HIDO_FIFOInitStruct;
typedef HIDO_INT32 (*HIDO_FIFOReadFunc)(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32Addr, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len);
typedef HIDO_INT32 (*HIDO_FIFOWriteFunc)(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32Addr, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len);
typedef HIDO_INT32 (*HIDO_FIFOEraseFunc)(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32Addr);
typedef HIDO_INT32 (*HIDO_FIFOForEachFunc)(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32Index, HIDO_VOID *_pArg);
struct FIFOStruct
{
    HIDO_UINT16 m_u16Reserve;
    HIDO_UINT32 m_u32SectorSize;                                                  /* å­˜å‚¨ä»‹è´¨çš„sector大小 */
    HIDO_UINT32 m_u32MemberSize;                                                  /* æˆå‘˜å¤§å° */
    HIDO_UINT32 m_u32ColCount;                                                    /* æœ‰å¤šå°‘列,也就是一个sector可以容纳成员的总个数 */
    HIDO_UINT32 m_u32RowCount;                                                    /* æœ‰å¤šå°‘行,也就是有多少个sector */
    HIDO_UINT32 m_u32CurIndex;                                                    /* å½“前索引,记录当前保存到了哪里 */
    HIDO_UINT32 m_u32TotalCount;                                                  /* å¯ä»¥å­˜å‚¨æ•°æ®çš„æ€»ä¸ªæ•°ï¼Œ= m_u32ColCount*m_u32RowCount */
    HIDO_UINT32 m_u32StartAddr;                                                   /* æ•°æ®ä¿å­˜çš„起始位置 */
    HIDO_UINT32 m_u32TotalSize;                                                   /* FIFO的总大小 */
    HIDO_FIFOReadFunc m_fnRead;                                                   /* ä»‹è´¨è¯»å–方法 */
    HIDO_FIFOWriteFunc m_fnWrite;                                                 /* ä»‹è´¨å†™å…¥æ–¹æ³• */
    HIDO_FIFOEraseFunc m_fnErase;                                                 /* ä»‹è´¨æ“¦é™¤æ–¹æ³• */
};
struct FIFOInitStruct
{
    HIDO_UINT32 m_u32SectorSize;                                                  /* å­˜å‚¨ä»‹è´¨çš„sector大小 */
    HIDO_UINT32 m_u32MemberSize;                                                  /* æˆå‘˜å¤§å° */
    HIDO_UINT32 m_u32TotalSize;                                                   /* FIFO的总大小 */
    HIDO_UINT32 m_u32StartAddr;                                                   /* æ•°æ®ä¿å­˜çš„起始位置 */
    HIDO_FIFOReadFunc m_fnRead;                                                   /* ä»‹è´¨è¯»å–方法 */
    HIDO_FIFOWriteFunc m_fnWrite;                                                 /* ä»‹è´¨å†™å…¥æ–¹æ³• */
    HIDO_FIFOEraseFunc m_fnErase;                                                 /* ä»‹è´¨æ“¦é™¤æ–¹æ³• */
};
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
HIDO_INT32 HIDO_FIFOInit(HIDO_FIFOStruct *_pstFIFO, HIDO_FIFOInitStruct *_pstInit);
HIDO_INT32 HIDO_FIFOReadForEach(HIDO_FIFOStruct *_pstFIFO, HIDO_FIFOForEachFunc _fnForEach, HIDO_BOOL _bAsc, HIDO_VOID *_pArg);
HIDO_INT32 HIDO_FIFOReadMember(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32ReadIndex, HIDO_FIFOHeaderStruct *_pstDataHeader, HIDO_UINT8 *_pu8Data, HIDO_UINT32 *_pu32Len);
HIDO_INT32 HIDO_FIFODelFrontData(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 _u32FrontIndex);
HIDO_INT32 HIDO_FIFOGetFrontData(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT32 *_pu32FrontIndex, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32DataSize, HIDO_UINT32 *_pu32Len);
HIDO_INT32 HIDO_FIFOWrite(HIDO_FIFOStruct *_pstFIFO, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len);
HIDO_INT32 HIDO_FIFOClean(HIDO_FIFOStruct *_pstFIFO);
#endif /* HIDOLIBRARY_FIFO_HIDO_FIFO_H_ */