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