⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialq.c

📁 关于zigbee厂家jennic的zigbee通信模块JN5139的一些示例程序。
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************************** * * NAME: u8SerialQ_RemoveItem *//*! *\DESCRIPTION  Remove a byte from a serial queue * * If the receive queue and it begins to empty enable receive on the UART. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint8 u8SerialQ_RemoveItem(teQueueRef eQueue) /**< Queue to operate on. */{    uint8 u8Item = 0;    tsCircBuff *psQueue;    uint16 u16Head;    uint16 u16Free;    psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */	/* Get local copy of the head - the add function updates it */	u16Head = psQueue->u16Head;    if (psQueue->u16Tail != u16Head)    {        /* Data available on queue so remove a single item */        u8Item = psQueue->u8Buff[psQueue->u16Tail];        psQueue->u16Tail = (psQueue->u16Tail + 1) & SERIALQ_MASK;        psQueue->u16Out++;		/* Receive queue ? */		if (eQueue == RX_QUEUE)		{			/* Calculate the free characters */			if (psQueue->u16Tail > u16Head) u16Free = psQueue->u16Tail - u16Head;			else				   			u16Free = SERIALQ_SIZE + psQueue->u16Tail - u16Head;			/* Did we just get a high amount of free space ? */			if (u16Free == SERIALQ_FREE_HIGH)			{				/* If UART Rx currently disabled - enable UART Rx */				if (! bUart_GetRxEnable()) vUart_SetRxEnable(TRUE);			}		}    }    return(u8Item);}/**************************************************************************** * * NAME: bSerialQ_Empty *//*! *\DESCRIPTION  Test for empty queue *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bSerialQ_Empty(teQueueRef eQueue)	/**< Queue to operate on. */{    bool_t bResult = FALSE;    tsCircBuff *psQueue;    psQueue = (tsCircBuff *)apsQueueList[eQueue];    if (psQueue->u16Tail == psQueue->u16Head)    {        bResult = TRUE;    }    return(bResult);	/** \retval TRUE  queue is empty    						\retval FALSE queue has data */}/**************************************************************************** * * NAME: bSerialQ_Full *//*! *\DESCRIPTION  Test for full queue *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bSerialQ_Full(teQueueRef eQueue)	 /**< Queue to operate on. */{    bool_t bResult = FALSE;    tsCircBuff *psQueue;    uint16 u16NextLocation;    psQueue = (tsCircBuff *)apsQueueList[eQueue];    u16NextLocation = (psQueue->u16Head + 1) & SERIALQ_MASK;    if (u16NextLocation == psQueue->u16Tail)    {	    bResult = TRUE;    }    return(bResult); /** \retval TRUE  queue is full    					 \retval FALSE queue has space */}/**************************************************************************** * * NAME: u16SerialQ_Count *//*! *\DESCRIPTION  Number of characters in queue. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint16 u16SerialQ_Count(teQueueRef eQueue)  /**< Queue to operate on. */{    uint16 u16Head;    uint16 u16Tail;    tsCircBuff *psQueue = (tsCircBuff *)apsQueueList[eQueue];	/* Get local tail and head values, we don't want them changing under us	   while we calculate the count */	u16Tail = psQueue->u16Tail;	u16Head = psQueue->u16Head;	/* Calculate the used characters into the head value */	if (u16Head >= u16Tail) u16Head -= u16Tail;	else					u16Head =  SERIALQ_SIZE + u16Head - u16Tail;    return(u16Head); /** \return Number of characters in queue */}/**************************************************************************** * * NAME: u16SerialQ_Free *//*! *\DESCRIPTION  Amount of free space in queue. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint16 u16SerialQ_Free(teQueueRef eQueue)   /**< Queue to operate on. */{    uint16 u16Head;    uint16 u16Free;    tsCircBuff *psQueue = (tsCircBuff *)apsQueueList[eQueue];	/* Get local tail and head values, we don't want them changing under us	   while we calculate the count */	u16Free = psQueue->u16Tail;	u16Head = psQueue->u16Head;	/* Calculate the used characters into the head value */	if (u16Free > u16Head) u16Free -= u16Head;	else				   u16Free =  SERIALQ_SIZE + u16Free - u16Head;    return(u16Free); /** \return Amount of free space in queue */}/**************************************************************************** * * NAME: u16SerialQ_GetInCount *//*! *\DESCRIPTION  Get number of characters added to queue *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint16 u16SerialQ_GetInCount(teQueueRef eQueue)	/**< Queue to operate on. */{    tsCircBuff *psQueue = (tsCircBuff *)apsQueueList[eQueue];    return(psQueue->u16In);	/** \return Count of characters added to queue */}/**************************************************************************** * * NAME: u16SerialQ_GetOutCount *//*! *\DESCRIPTION  Get number of characters removed from queue *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint16 u16SerialQ_GetOutCount(teQueueRef eQueue)	/**< Queue to operate on. */{    tsCircBuff *psQueue = (tsCircBuff *)apsQueueList[eQueue];    return(psQueue->u16Out); /** \return Count of characters removed from queue */}/**************************************************************************** * * NAME: vSerialQ_Flush *//*! *\DESCRIPTION  Flush queue so it is effectively empty. *//* PARAMETERS       Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PRIVATE void vSerialQ_Flush(teQueueRef eQueue)	/**< Queue to operate on. */{    tsCircBuff *psQueue;    psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */    psQueue->u16Head     = 0;    psQueue->u16Tail     = 0;    psQueue->u16In       = 0;    psQueue->u16Out      = 0;}/****************************************************************************//***        END OF FILE                                                   ***//****************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -