2 * Hyper Operating System Application Framework
5 * @brief %jp{WinSockでシリアルを擬似するドライバ}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
13 #include "winsockdrv_local.h"
18 const T_DRVOBJ_METHODS WinSockDrv_Methods =
20 { WinSockDrv_Delete },
32 FILE_ERR WinSockDrv_Constructor(C_WINSOCKDRV *self, const T_DRVOBJ_METHODS *pMethods, int iPortNum, int iIntNum, int iBufSize)
40 if ( pMethods == NULL )
42 pMethods = &WinSockDrv_Methods;
46 if ( (pRecvMem = SysMem_Alloc(iBufSize)) == NULL )
50 if ( (pSendMem = SysMem_Alloc(iBufSize)) == NULL )
52 SysMem_Free(pRecvMem);
58 if ( (ErrCode = SyncDrv_Constructor(&self->SyncDrv, pMethods, SYNCDRV_FACTOR_NUM)) != FILE_ERR_OK )
60 SysMem_Free(pRecvMem);
61 SysMem_Free(pSendMem);
67 self->iPortNum = iPortNum;
68 self->iIntNum = iIntNum;
69 self->iConnection = FALSE;
72 StreamBuf_Create(&self->StmBufRecv, iBufSize, pRecvMem);
73 StreamBuf_Create(&self->StmBufSend, iBufSize, pSendMem);
76 self->hIsr = SysIsr_Create(self->iIntNum, WinSockDrv_Isr, (VPARAM)self);
79 self->hConnectEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
80 self->hDisconnectEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
81 self->hSendEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
84 self->hRecvThread = CreateThread(NULL, 0, WinSockDrv_Recv, (LPVOID)self, 0, &dwThreadId);
85 self->hSendThread = CreateThread(NULL, 0, WinSockDrv_Send, (LPVOID)self, 0, &dwThreadId);