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