2 * Hyper Operating System Application Framework
5 * @brief %jp{デバイスドライバオブジェクトの基本クラス}
7 * Copyright (C) 2006-2007 by Project HOS
8 * http://sourceforge.jp/projects/hos/
12 #ifndef __HOS__drvobj_h__
13 #define __HOS__drvobj_h__
22 /* デバイスドライバオブジェクト基本クラス メソッドテーブル */
23 typedef struct t_drvobj_methods
25 void (*pfncDelete)(struct c_drvobj *self);
26 HANDLE (*pfncOpen)(struct c_drvobj *self, const char *pszPath, int iMode);
27 FILE_ERR (*pfncClose)(struct c_drvobj *self, struct c_fileobj *pFileObj);
28 FILE_ERR (*pfncIoControl)(struct c_drvobj *self, struct c_fileobj *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize);
29 FILE_POS (*pfncSeek)(struct c_drvobj *self, struct c_fileobj *pFileObj, FILE_POS Offset, int iOrign);
30 FILE_SIZE (*pfncRead)(struct c_drvobj *self, struct c_fileobj *pFileObj, void *pBuf, FILE_SIZE Size);
31 FILE_SIZE (*pfncWrite)(struct c_drvobj *self, struct c_fileobj *pFileObj, const void *pData, FILE_SIZE Size);
32 FILE_ERR (*pfncFlush)(struct c_drvobj *self, struct c_fileobj *pFileObj);
36 /* デバイスドライバオブジェクト基本クラス */
37 typedef struct c_drvobj
39 const T_DRVOBJ_METHODS *pMethods;
43 #include "system/file/fileobj.h"
50 void DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods); /**< コンストラクタ */
51 void DrvObj_Delete(C_DRVOBJ *self); /**< デストラクタ */
53 #define DrvObj_Open(self, pszPath, iMode) ((self)->pMethods->pfncOpen((self), (pszPath), (iMode)))
54 #define DrvObj_Close(self, pFileObj) ((self)->pMethods->pfncClose((self), (pFileObj)))
55 #define DrvObj_IoControl(self, pFileObj, iFunc, pInBuf, InSize, pOutBuf, OutSize) \
56 ((self)->pMethods->pfncIoControl((self), (pFileObj), (iFunc), (pInBuf), (InSize), (pOutBuf), (OutSize)))
57 #define DrvObj_Seek(self, pFileObj, Offset, iOrign) ((self)->pMethods->pfncSeek((self), (pFileObj), (Offset), (iOrign)))
58 #define DrvObj_Read(self, pFileObj, pBuf, Size) ((self)->pMethods->pfncRead((self), (pFileObj), (pBuf), (Size)))
59 #define DrvObj_Write(self, pFileObj, pData, Size) ((self)->pMethods->pfncWrite((self), (pFileObj), (pData), (Size)))
60 #define DrvObj_Flush(self, pFileObj) ((self)->pMethods->pfncFlush((self), (pFileObj)))
67 #endif /* __HOS__drvobj_h__ */