2 * Hyper Operating System Application Framework
5 * @brief %jp{同期機能付きデバイスドライバ用ファイルディスクリプタ}
7 * %jp{ファイルディスクリプタとして機能するクラス}
9 * Copyright (C) 2006-2007 by Project HOS
10 * http://sourceforge.jp/projects/hos/
14 #ifndef __HOS__syncfile_h__
15 #define __HOS__syncfile_h__
18 #include "system/sysapi/sysapi.h"
19 #include "system/handle/handleobj.h"
20 #include "system/file/fileobj.h"
26 typedef struct t_syncfile_syncobj
28 int Mode; /**< 同期モード */
29 VPARAM ErrCode; /**< エラーコード */
30 SYSEVT_HANDLE hEvt; /**< 同期イベント */
31 T_FILE_SYNCINF Inf; /**< 同期情報 */
35 /* ファイルブジェクト基本クラス定義 */
36 typedef struct c_syncfile
38 C_FILEOBJ FileObj; /**< ファイルオブジェクトを継承 */
40 struct c_syncfile *pNext; /**< イベント監視リスト連結用 */
41 struct c_syncfile *pPrev; /**< イベント監視リスト連結用 */
43 T_SYNCFILE_SYNCOBJ *pSyncObj; /**< 同期オブジェクト */
51 HANDLE SyncFile_Create(struct c_syncdrv *pSyncDrv);
52 void SyncFile_Delete(HANDLE hFile);
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)) /**< シグナルの状態参照 */
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) /**< 同期モード取得 */
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) /**< 同期情報取得 */
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) /**< エラーコード取得 */
74 #endif /* __HOS__syncfile_h__ */