?? pipev.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 + -