OSDN Git Service

e37a601451f9499758f21007f2a33f4d6f5371bd
[hos/hos-v4a.git] / aplfw / system / file / syncfile.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  chrfile.h
5  * @brief %jp{同期機能付きデバイスドライバ用ファイルディスクリプタ}
6  *
7  * %jp{ファイルディスクリプタとして機能するクラス}
8  *
9  * Copyright (C) 2006-2007 by Project HOS
10  * http://sourceforge.jp/projects/hos/
11  */
12
13
14 #ifndef __HOS__syncfile_h__
15 #define __HOS__syncfile_h__
16
17
18 #include "system/sysapi/sysapi.h"
19 #include "system/handle/handleobj.h"
20 #include "system/file/fileobj.h"
21
22
23 struct c_syncdrv;
24
25 /* 同期オブジェクト */
26 typedef struct t_syncfile_syncobj
27 {
28         int                                     Mode;                   /**< 同期モード */
29         VPARAM                          ErrCode;                /**< エラーコード */
30         SYSEVT_HANDLE           hEvt;                   /**< 同期イベント */
31         T_FILE_SYNCINF          Inf;                    /**< 同期情報 */
32 } T_SYNCFILE_SYNCOBJ;
33
34
35 /* ファイルブジェクト基本クラス定義 */
36 typedef struct c_syncfile
37 {
38         C_FILEOBJ                       FileObj;                /**< ファイルオブジェクトを継承 */
39         
40         struct c_syncfile       *pNext;                 /**< イベント監視リスト連結用 */
41         struct c_syncfile       *pPrev;                 /**< イベント監視リスト連結用 */
42
43         T_SYNCFILE_SYNCOBJ      *pSyncObj;              /**< 同期オブジェクト */
44 } C_SYNCFILE;
45
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 HANDLE   SyncFile_Create(struct c_syncdrv *pSyncDrv);
52 void     SyncFile_Delete(HANDLE hFile);
53
54 void     SyncFile_SetSignal(C_SYNCFILE *self, int iFactor);                                                                                                                     /**< シグナルのセット */
55 #define  SyncFile_ClearSignal(self, iFactor)            do { SysEvt_Clear((self)->pSyncObj[iFactor].hEvt); } while(0)   /**< シグナルのクリア */
56 #define  SyncFile_WaitSignal(self, iFactor)                     do { SysEvt_Wait((self)->pSyncObj[iFactor].hEvt); } while(0)    /**< シグナルを待つ */
57 #define  SyncFile_RefSignal(self, iFactor)                      (SysEvt_RefStatus((self)->pSyncObj[iFactor].hEvt))                              /**< シグナルの状態参照 */
58
59 #define  SyncFile_SetSyncMode(self, iFactor, x)         do { ((self)->pSyncObj[iFactor].Mode) = (x); } while(0)                 /**< 同期モード設定 */
60 #define  SyncFile_GetSyncMode(self, iFactor)            ((self)->pSyncObj[iFactor].Mode)                                                                /**< 同期モード取得 */
61
62 #define  SyncFile_SetSyncInf(self, iFactor, x)          do { ((self)->pSyncObj[iFactor].Inf) = (x); } while(0)                  /**< 同期情報設定 */
63 #define  SyncFile_GetSyncInf(self, iFactor)                     ((self)->pSyncObj[iFactor].Inf)                                                                 /**< 同期情報取得 */
64
65 #define  SyncFile_SetErrCode(self, iFactor, x)          do { ((self)->pSyncObj[iFactor].ErrCode) = (x); } while(0)              /**< エラーコード設定 */
66 #define  SyncFile_GetErrCode(self, iFactor)                     ((self)->pSyncObj[iFactor].ErrCode)                                                             /**< エラーコード取得 */
67
68
69 #ifdef __cplusplus
70 }
71 #endif
72
73
74 #endif  /* __HOS__syncfile_h__ */
75
76
77 /* end of file */