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

📄 pipev.c

📁 samsung 9908DVD源代码,
💻 C
字号:
/**********************************************************************************
 * pipeV.c
 * coded by hspark@ce.cnu.ac.kr
 * date : 2001/06/23
 * modified by hjahn@ce.cnu.ac.kr
 * date : 2003/03/03
 **********************************************************************************/

#include "kernel\\mk_sys.h"
#include "kernel\\mk_pipeV.h"

#if (defined(_MK_PIPE) && defined(_MK_DDI))

static INT MK_OpenVariablePipeFunction(VOID *pFd);
static INT MK_CloseVariablePipeFunction(VOID *pFd);
static INT MK_ReadVariablePipeFunction(VOID *pFd, VOID *pAddr, INT Length);
static INT MK_WriteVariablePipeFunction(VOID *pFd, VOID *pAddr, INT Length);
static INT MK_IOControlVariablePipeFunction(VOID *pFd, INT Function, INT Arg);

VOID
MK_VariablePipeInitialize(VOID)
{
}

STATUS
MK_CreateVariablePipe(MK_VARIABLE_PIPE *pPipe, CHAR *pName, VOID *pAddr, 
					  UINT MemorySize, UINT MaxSize)
{
	//CHAR pTemp[MK_NAME_MAX + 8];
	STATUS Status;

	if(pPipe->vp_Magic == MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_CreateVariablePipe() - Magic error!\n");
#endif
		return MK_ERROR;
	}
	
	//MK_BlockCopy(pTemp, pName, MK_NAME_MAX);
	//MK_Strcat(pTemp, "_V");
	//Status = MK_CreateDDI((MK_DDI *)pPipe, pTemp, MK_OpenVariablePipeFunction, 
	Status = MK_CreateDDI((MK_DDI *)pPipe, MK_NULL, MK_OpenVariablePipeFunction, 
		MK_CloseVariablePipeFunction, MK_ReadVariablePipeFunction, 
		MK_WriteVariablePipeFunction, MK_IOControlVariablePipeFunction);
	if( Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_CreateVariablePipe() - DDI is not created! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return Status;
	}
	Status = MK_CreateVariableMsgQueue(&pPipe->vp_MsgQF, MK_NULL, pAddr, MemorySize, 
		MaxSize, MK_SERVICE_FIFO);
	//Status = MK_CreateVariableMsgQueue(&pPipe->vp_MsgQF, pTemp, pAddr, MemorySize, 
	//	MaxSize, MK_SERVICE_FIFO);
	if( Status < 0)
	{
		MK_DeleteDDI(&pPipe->vp_DDI);

#if MK_DEBUG_PRINT		
		MK_InfoPrintf(MK_TASK_WARNING, "MK_CreatVariablePipe() - VariableMsgQueue is not created! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return Status;
	}

	pPipe->vp_Magic = MK_PIPEV_MAGIC;

	return MK_NO_ERROR;
}

STATUS
MK_DeleteVariablePipe(MK_VARIABLE_PIPE *pPipe)
{
	if(pPipe->vp_Magic != MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_DeleteVariablePipe() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	pPipe->vp_Magic = 0;

	MK_DeleteDDI(&pPipe->vp_DDI);
	MK_DeleteVariableMsgQueue(&pPipe->vp_MsgQF);

	return MK_NO_ERROR;
}

BOOLEAN
MK_IsVariablePipeOpened(MK_VARIABLE_PIPE *pPipe)
{
	if(pPipe->vp_Magic == MK_PIPEV_MAGIC)
		return TRUE;
	return FALSE;
}

static INT
MK_OpenVariablePipeFunction(VOID *pFd)
{
	MK_VARIABLE_PIPE *pPipe;

	pPipe = (MK_VARIABLE_PIPE *)pFd;
	pPipe->vp_Magic = MK_PIPEV_MAGIC;
	return MK_Open(&pPipe->vp_DDI);
}

static INT
MK_CloseVariablePipeFunction(VOID *pFd)
{
	MK_VARIABLE_PIPE *pPipe;

	pPipe = (MK_VARIABLE_PIPE *)pFd;

	if(pPipe->vp_Magic != MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_CloseVariablePipeFunction() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	pPipe->vp_Magic = 0;

	return MK_Close(&pPipe->vp_DDI);
}

static INT
MK_ReadVariablePipeFunction(VOID *pFd, VOID *pBuf, INT BufSize)
{
	MK_VARIABLE_PIPE *pPipe;
	UINT Length;
	STATUS Status;

	pPipe = (MK_VARIABLE_PIPE *)pFd;
	if(pPipe->vp_Magic != MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_ReadVariablePipeFunction() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	Status = MK_VariableMsgQueuePend(&pPipe->vp_MsgQF, (CHAR **)pBuf, BufSize, 
		&Length, MK_WAIT_FOREVER);
	if( Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_ERROR, "MK_ReadVariablePipeFunction() - VaribleMsgQueuePend is magic error or timeout! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		 return Status;
	}
	return Length;
}

static INT
MK_WriteVariablePipeFunction(VOID *pFd, VOID *pAddr, INT Length)
{
	MK_VARIABLE_PIPE *pPipe;
	STATUS Status;

	pPipe = (MK_VARIABLE_PIPE *)pFd;
	if(pPipe->vp_Magic != MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT
		MK_Panic("MK_WriteVariablePipeFunction() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	Status = MK_VariableMsgQueuePost(&pPipe->vp_MsgQF, (CHAR *)pAddr, Length,
		MK_WAIT_FOREVER);
	if( Status < 0)
	{
#if MK_DEBUG_PRINT
		MK_InfoPrintf(MK_TASK_WARNING, "MK_WriteVariblePipeFunction() - VariableMsgQueuePost is magic error or timeout! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return Status;
	}
	return Length;
}

static INT
MK_IOControlVariablePipeFunction(VOID *pFd, INT Function, INT Arg)
{
	MK_VARIABLE_PIPE *pPipe;

	pPipe = (MK_VARIABLE_PIPE *)pFd;
	if(pPipe->vp_Magic != MK_PIPEV_MAGIC)
	{
#if MK_DEBUG_PRINT		
		MK_Panic("MK_IOControlVariablePipeFunction() - Magic error! Task(%s)\n", MK_GetCurrentTask()->t_pName);
#endif
		return MK_RESOURCE_ERROR;
	}

	return MK_NO_ERROR;
}

#endif	/* #if (defined(_MK_PIPE) && defined(_MK_DDI)) */

⌨️ 快捷键说明

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