chen
2025-05-15 67ca69985af9109a0603a1cde71f21b940c059ff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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_ */