buffer.c

来自「藍芽電話簿範本」· C语言 代码 · 共 94 行

C
94
字号
/****************************************************************************
Copyright (C) Cambridge Silicon Radio Limited 2006-2009
Part of BlueLab 4.1-Release

DESCRIPTION
	Implementation for handling buffer functionality

	
FILE
	buffer.c
*/

#include <print.h>
#include <stdlib.h>

#include "main.h"
#include "buffer.h"

/*
	Allocate a buffer of at least minSize words
*/
bool allocBuffer(applicationTaskData *pTask, uint16 minSize)
{
	bool lRet = FALSE;
	
	PRINT(("allocBuffer : MinSize %d\n",minSize));
	
	if (!pTask->buffer.buffer)
	{
		uint16 size = PBAPS_BUFFER_START_SIZE;
		uint8 *buffer = malloc(size);
		
		while ((!buffer) && (size>minSize))
		{
			size -= 5;
			buffer = malloc(size);
		}
		if (buffer)
		{
			if (size >= minSize)
			{
				PRINT(("    Buffer allocated. Size %d\n",size));
				pTask->buffer.buffer = buffer;
				pTask->buffer.sizeBuffer = size;
				pTask->buffer.freeSpace = size;
				pTask->buffer.nextPos = 0;
				pTask->buffer.used = 0;
				lRet = TRUE;
			}
			else
			{
				PRINT(("    Unable to allocate a big enough buffer.  Size %d\n",size));
				free(buffer);
			}
		}
		else
		{
			PRINT(("    Unable to allocate buffer.  Size %d\n",size));
		}
	}
	else
	{
		PRINT(("    Buffer already in use\n"));
	}
	
	return lRet;
}

/*
	freeBuffer created using allocBuffer
*/
void freeBuffer(applicationTaskData *pTask)
{
	if (pTask->buffer.buffer)
	{
		free(pTask->buffer.buffer);
		pTask->buffer.buffer = NULL;
		pTask->buffer.sizeBuffer = 0;
		pTask->buffer.freeSpace = 0;
		pTask->buffer.nextPos = 0;
		pTask->buffer.used = 0;
	}
}

/*
	reset buffer
*/
void resetBuffer(applicationTaskData *pTask)
{
	pTask->buffer.freeSpace = pTask->buffer.sizeBuffer;
	pTask->buffer.nextPos = 0;
	pTask->buffer.used = 0;
}

⌨️ 快捷键说明

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