2 * Hyper Operating System Application Framework
5 * @brief %jp{Renesas H8/SH用 SCIデバイスドライバ}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #include "scidrv_local.h"
16 FILE_SIZE SciDrv_Read(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, void *pBuf, FILE_SIZE Size)
20 unsigned char *pubBuf;
26 self = (C_SCIDRV *)pDrvObj;
27 pFile = (C_SYNCFILE *)pFileObj;
29 pubBuf = (unsigned char *)pBuf;
32 if ( (ErrCode = SyncDrv_StartProcess(&self->SyncDrv, pFile, SYNCDRV_FACTOR_READ)) != FILE_ERR_OK )
34 return (FILE_SIZE)ErrCode;
38 SyncFile_ClearSignal(pFile, SYNCDRV_FACTOR_READ);
40 for ( i = 0; i < Size; i++ )
43 while ( (c = StreamBuf_RecvChar(&self->StmBufRecv)) < 0 )
45 /* ブロッキングモードでなければ抜ける */
46 if ( SyncFile_GetSyncMode(pFile, SYNCDRV_FACTOR_READ) != FILE_SYNCMODE_BLOCKING )
48 SyncDrv_EndProcess(&self->SyncDrv, SYNCDRV_FACTOR_READ, i);
53 SyncFile_WaitSignal(pFile, SYNCDRV_FACTOR_READ);
55 /* 読込みシグナルをクリアしてリトライ */
56 SyncFile_ClearSignal(pFile, SYNCDRV_FACTOR_READ);
60 *pubBuf++ = (unsigned char)c;
64 SyncDrv_EndProcess(&self->SyncDrv, SYNCDRV_FACTOR_READ, (VPARAM)i);