OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / driver / tcpip / ipether / ipether_constructor.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  ipether.h
5  * @brief %jp{Ether上にIPプロトコルを実装(つまりMAC層近辺)}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <string.h>
13 #include "ipether_local.h"
14
15
16 /** コンストラクタ */
17 FILE_ERR IpEther_Constructor(C_IPETHER *self, const T_DRVOBJ_METHODS *pMethods, const char *pszEther, const T_IPETHER_INF *pInf)
18 {
19         /* Etherポートオープン */
20         self->hEther = File_Open(pszEther, FILE_OPEN_READ | FILE_OPEN_WRITE | FILE_OPEN_EXIST);
21         if ( self->hEther == HANDLE_NULL )
22         {
23                 return FILE_ERR_NG;
24         }
25         
26         /* 親クラスコンストラクタ呼び出し */
27         SyncDrv_Constructor(&self->SyncDrv, pMethods, SYNCDRV_FACTOR_NUM);
28         
29         /* メンバ変数初期化 */
30         self->iOpenCount = 0;
31         self->iRecvHead  = 0;
32         self->iRecvNum   = 0;
33         
34         memcpy(self->ubMyIpAddr,      pInf->ubIpAddr, 4);
35         memcpy(self->ubSubNetMask,    pInf->ubSubNetMask, 4);
36         memcpy(self->ubGateWayIpAddr, pInf->ubGateWayIpAddr, 4);
37         
38         /* イベント生成 */
39         self->hEvtRecv = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
40         self->hEvtArp  = SysEvt_Create(SYSEVT_ATTR_AUTOCLEAR);
41
42         /* ミューテックス生成 */
43         self->hMtxSend = SysMtx_Create(SYSMTX_ATTR_NORMAL);
44         self->hMtxRecv = SysMtx_Create(SYSMTX_ATTR_NORMAL);
45         self->hMtxArp  = SysMtx_Create(SYSMTX_ATTR_NORMAL);
46
47         /* 受信プロセス生成 */
48         self->hPrcRecv = SysPrc_Create(IpEther_Recv, (VPARAM)self, NULL, 1024, 2, SYSPRC_ATTR_NORMAL);
49
50         return FILE_ERR_OK;
51 }
52
53
54 /* endof file */