OSDN Git Service

e8b680004ffbaff5bdc78ffca0fa998652fbd5b8
[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-2007 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 "file.h"
17
18
19 struct c_drvobj;
20 struct c_fileobj;
21
22 /* デバイスドライバオブジェクト基本クラス メソッドテーブル */
23 typedef struct t_drvobj_methods
24 {
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);
33 } T_DRVOBJ_METHODS;
34
35
36 /* デバイスドライバオブジェクト基本クラス */
37 typedef struct c_drvobj
38 {
39         const T_DRVOBJ_METHODS *pMethods;
40 } C_DRVOBJ;
41
42
43 #include "system/file/fileobj.h"
44
45
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49
50 void     DrvObj_Create(C_DRVOBJ *self, const T_DRVOBJ_METHODS *pMethods);               /**< コンストラクタ */
51 void     DrvObj_Delete(C_DRVOBJ *self);                                                                                 /**< デストラクタ */
52
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)))
61
62 #ifdef __cplusplus
63 }
64 #endif
65
66
67 #endif  /* __HOS__drvobj_h__ */
68
69
70 /* end of file */