/** ****************************************************************************** * @file : MyQueue.h * @brief : Header for MyQueue.c file. * This file contains the common defines of the application. ****************************************************************************** */ #ifndef __MYQUEUE_H__ #define __MYQUEUE_H__ #pragma anon_unions typedef struct { unsigned char * buf1; short Caps; volatile short wp; //Write Pointor volatile short rp; //Read Pointor // volatile int DataSize; // volatile short RecvBytes; union{ volatile unsigned char state; struct{ volatile unsigned char bFull:1; volatile unsigned char bEmpty:1; }; }; }stMyQueue,* pMyQueue; int initQueue(pMyQueue theQueue, void * pBuf, int nSize); int EmptyQueue(stMyQueue * theQueue); static __inline int GetCap(pMyQueue theQueue) { return theQueue->Caps; } static __inline int GetDataLen(pMyQueue theQueue) { int size=theQueue->wp - theQueue->rp; if (theQueue->bFull) { return theQueue->Caps; }else if (theQueue->bEmpty) { return 0; }else if (size >0 ) { return size; }else if (size < 0) { return size + theQueue->Caps; } else { return 0; } } static __inline int GetLeftRoom(pMyQueue theQueue) { return (theQueue->Caps - GetDataLen(theQueue)); } static __inline int IsFull(pMyQueue theQueue) { return (theQueue->bFull); } static __inline int IsEmpty(pMyQueue theQueue) { return (theQueue->bEmpty); } int GetContinueEmptyRoom(pMyQueue theQueue); int GetContinueData(pMyQueue theQueue); static __inline unsigned char * GetReadBuffer(pMyQueue theQueue) { return theQueue->buf1+theQueue->rp; } static __inline unsigned char * GetWriteBuffer(pMyQueue theQueue) { return theQueue->buf1+theQueue->wp; } int AddSpace(pMyQueue theQueue, int nSize); int DelData(pMyQueue theQueue, int nSize); int CopyData(pMyQueue theQueue, void * pData, int nSize); int PushIn(pMyQueue theQueue, void * pData, int nSize); int PopOut(pMyQueue theQueue, void * pData, int nSize); int PushOne(pMyQueue theQueue, unsigned char ch); int PopOne(pMyQueue theQueue); #endif /* __MYQUEUE_H__ */