OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / driver / volume / fat / fatvol.h
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  fatvol.h
5  * @brief %jp{FATボリューム用デバイスドライバ}
6  *
7  * Copyright (C) 2006-2007 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #ifndef __HOS__fatvol_h__
13 #define __HOS__fatvol_h__
14
15
16 #include "system/sysapi/sysapi.h"
17 #include "system/file/volumeobj.h"
18
19
20 #define FATVOL_ERR_OK           0
21 #define FATVOL_ERR_NG           (-1)
22
23
24 /* 型定義 */
25 typedef long                    FATVOL_INT;
26 typedef unsigned long   FATVOL_UINT;
27
28 struct t_fatvol_clusterbuf;
29
30 /* クラスタバッファ */
31 typedef struct c_fatvol
32 {
33         C_VOLUMEOBJ                     VolumeObj;                                      /* ボリュームオブジェクトを継承 */
34
35         HANDLE                          hBlockFile;                                     /**< ブロックデバイスドライバのハンドル */
36         
37         SYSMTX_HANDLE           hMtx;                                           /**< ロック用ミューテックス */
38         
39         int                                     iOpenCount;                                     /**< オープンカウンタ */
40         
41         int                                     iFatType;                                       /**< FATのタイプ */
42         FILE_POS                        Offset;                                         /**< ディスクのオフセット */
43         FILE_POS                        DriveSize;                                      /**< ドライブの総サイズ */
44         FATVOL_UINT                     BytesPerSector;                         /**< セクタサイズ */
45         FATVOL_UINT                     SectorsPerCluster;                      /**< クラスタあたりのセクタ数 */
46         FATVOL_UINT                     BytesPerCluster;                        /**< クラスタサイズ */
47         FATVOL_UINT                     FatStartSector;                         /**< FATの開始セクタ番号 */
48         FATVOL_UINT                     SectorNum;                                      /**< 総セクタ数 */
49         FATVOL_UINT                     SectorPerFat;                           /**< FATあたりのセクタ数 */
50         FATVOL_UINT                     FatNum;                                         /**< FATの個数 */
51         FATVOL_UINT                     RootDirEntryNum;                        /**< ルートディレクトリのエントリ数 */
52         FATVOL_UINT                     RootDirSector;                          /**< ルートディレクトリのセクタ */
53         FATVOL_UINT                     Cluster0Sector;                         /**< クラスタ0のセクタ番号 */
54         FATVOL_UINT                     ClusterNum;                                     /**< 総クラスタ数 */
55         FATVOL_UINT                     RootDirCluster;                         /**< ルートディレクトリのクラスタ番号 */
56         
57         unsigned char           *pubFatBuf;                                     /**< FATのバッファリングメモリ */
58         unsigned char           *pubFatDirty;                           /**< FATの更新フラグ */
59         
60         struct t_fatvol_clusterbuf      *pClusterBuf;
61         int                                                     iClusterBufNum;
62 //      int                                                     iClusterBufIndex;
63 } C_FATVOL;
64
65
66 #ifdef __cplusplus
67 extern "C" {
68 #endif
69
70 int    FatVol_Create(C_FATVOL *self, const char *pszPath);
71 void   FatVol_Delete(C_DRVOBJ *self);
72
73 HANDLE FatVol_CreateFile(C_FATVOL *self, FATVOL_UINT uiCluster, HANDLE hDir, int iDirEntry, int iMode);
74
75 #ifdef __cplusplus
76 }
77 #endif
78
79
80 #endif  /* __HOS__fatdrive_h__ */
81