OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / system / file / drvobj.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  drvobj.h
5  * @brief %jp{デバイスドライバオブジェクトの基本クラス}
6  *
7  * Copyright (C) 2006 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #ifndef __HOS__drvobj_h__
13 #define __HOS__drvobj_h__
14
15
16 #include "system/file/fileobj.h"
17
18 struct c_drvobj;
19
20 /* デバイスドライバオブジェクト基本クラス メソッドテーブル */
21 typedef struct t_drvobj_methods
22 {
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);
31 } T_DRVOBJ_METHODS;
32
33
34 /* デバイスドライバオブジェクト基本クラス */
35 typedef struct c_drvobj
36 {
37         const T_DRVOBJ_METHODS *pMethods;
38 } C_DRVOBJ;
39
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44
45 void     DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods);               /**< コンストラクタ */
46 void     DrvObj_Delete(C_DRVOBJ *self);                                                                                 /**< デストラクタ */
47
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)))
56
57 #ifdef __cplusplus
58 }
59 #endif
60
61
62 #endif  /* __HOS__drvobj_h__ */
63
64
65 /* end of file */