📄 serialq.c
字号:
/**************************************************************************** * * MODULE: uart.c * * COMPONENT: serialq.c,v * * VERSION: * * REVISION: 1.2 * * DATED: 2006/09/05 13:45:53 * * STATUS: Exp * * AUTHOR: Ian Morris * * DESCRIPTION * * CHANGE HISTORY: * * serialq.c,v * Revision 1.2 2006/09/05 13:45:53 gpfef * New Copyright notice added * * Revision 1.1 2006/04/21 10:14:26 gpfef * Initial Version * * * * LAST MODIFIED BY: gpfef * $Modtime: $ * * **************************************************************************** * * This software is owned by Jennic and/or its supplier and is protected * under applicable copyright laws. All rights are reserved. We grant You, * and any third parties, a license to use this software solely and * exclusively on Jennic products. You, and any third parties must reproduce * the copyright and warranty notice and any other legend of ownership on each * copy or partial copy of the software. * * THIS SOFTWARE IS PROVIDED "AS IS". JENNIC MAKES NO WARRANTIES, WHETHER * EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, * ACCURACY OR LACK OF NEGLIGENCE. JENNIC SHALL NOT, IN ANY CIRCUMSTANCES, * BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, SPECIAL, * INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER. * * Copyright Jennic Ltd 2005, 2006. All rights reserved * ****************************************************************************//****************************************************************************//*** Include files ***//****************************************************************************/#include <jendefs.h>#include <AppHardwareApi.h>#include "serialq.h"/****************************************************************************//*** Macro Definitions ***//****************************************************************************/#define MAX_CIRCBUFF_SIZE 1024#define NBR_QUEUES 2/****************************************************************************//*** Type Definitions ***//****************************************************************************/typedef struct{ uint16 u16Head; uint16 u16Tail; uint16 u16Count; uint8 u8Buff[MAX_CIRCBUFF_SIZE];} tsCircBuff;/****************************************************************************//*** Local Function Prototypes ***//****************************************************************************//****************************************************************************//*** Exported Variables ***//****************************************************************************//****************************************************************************//*** Local Variables ***//****************************************************************************/PRIVATE tsCircBuff sRxQueue, sTxQueue;PRIVATE const tsCircBuff *apsQueueList[NBR_QUEUES] = { &sRxQueue, &sTxQueue };extern PUBLIC uint32 u32ItemAdded;extern PUBLIC uint32 u32AddItemCalled;/****************************************************************************//*** Exported Functions ***//****************************************************************************//****************************************************************************//*** Local Functions ***//****************************************************************************/PRIVATE void vSerialQ_Flush(eQueueRef eQueue);/**************************************************************************** * * NAME: vSerialQ_Init * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vSerialQ_Init(void){ vSerialQ_Flush(RX_QUEUE); vSerialQ_Flush(TX_QUEUE);}/**************************************************************************** * * NAME: vSerialQ_AddItem * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * TRUE if buffer full; FALSE otherwise * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bSerialQ_AddItem(eQueueRef eQueue, uint8 u8Item){ tsCircBuff *psQueue; psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */ if(!bSerialQ_Full(eQueue)) { psQueue->u8Buff[psQueue->u16Head] = u8Item; psQueue->u16Head = (psQueue->u16Head + 1) % MAX_CIRCBUFF_SIZE; psQueue->u16Count++; return FALSE; } else { return TRUE; }}/**************************************************************************** * * NAME: u8SerialQ_RemoveItem * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC uint8 u8SerialQ_RemoveItem(eQueueRef eQueue){ uint8 u8Item = 0; tsCircBuff *psQueue; psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */ if(!bSerialQ_Empty(eQueue)) { u8Item = psQueue->u8Buff[psQueue->u16Tail]; psQueue->u16Tail = (psQueue->u16Tail + 1) % MAX_CIRCBUFF_SIZE; psQueue->u16Count--; } return(u8Item);}/**************************************************************************** * * NAME: bSerialQ_Empty * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bSerialQ_Empty(eQueueRef eQueue){ bool_t bResult = FALSE; tsCircBuff *psQueue; psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */ if(psQueue->u16Count == 0U) { bResult = TRUE; } return(bResult);}/**************************************************************************** * * NAME: bSerialQ_Full * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC bool_t bSerialQ_Full(eQueueRef eQueue){ bool_t bResult = FALSE; tsCircBuff *psQueue; psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */ if(psQueue->u16Count == MAX_CIRCBUFF_SIZE) { bResult = TRUE; } return(bResult);}/**************************************************************************** * * NAME: vSerialQ_Flush * * DESCRIPTION: * * PARAMETERS: Name RW Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PRIVATE void vSerialQ_Flush(eQueueRef eQueue){ tsCircBuff *psQueue; psQueue = (tsCircBuff *)apsQueueList[eQueue]; /* Set pointer to the requested queue */ psQueue->u16Head = 0; psQueue->u16Tail = 0; psQueue->u16Count = 0;}/****************************************************************************//*** END OF FILE ***//****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -