/*******************************************************************************
|
* 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_ */
|