#ifndef IDATAFOLDER_H
#define IDATAFOLDER_H
/*===========================================================================================

FILE            : IDataFolder.h

SERVICES        : Data Folder Access Interface

DESCRIPTION     :

PUBLIC CLASSES  :

INITIALIZATION AND SEQUENCING REQUIREMENTS :

      Copyright ｩ 1999-2004 QUALCOMM Incorporated.
               All Rights Reserved.
            QUALCOMM Proprietary/GTDR

===========================================================================================*/

/*===========================================================================================

                        EDIT HISTORY FOR MODULE

When        Who    Keyword             what, where, why
----------  -----  ------------------  ------------------------------------------------------
10/18/04                               Create file
12/08/04                               Added IDATAFOLDER_Delete()
03/02/05                               1.0.7版対応
                                     ・構造体『KDDIDFFileInfoEx』メンバ名称変更
                                      「nbExternalMemory」→「nExternalMemory」
                                     ・表示用ファイル名に拡張子ありのケースでは、実ファイル名
                                       にも拡張子を付与する対応
                                     ・デバイス『DF_DEV_KDFCPC』削除対応。
04/15/05                               1.1.0-02版対応
                                     ・デバイス『DF_DEV_KDFCTAR』追加対応。
                                     ・デバイス『DF_DEV_KDFCPC』復活対応（定義のみ）。
06/20/05                               1.1.1版対応
                                     ・デバイス『DF_DEV_KDFCTARCIPHER』追加対応。
                                     ・デバイス『DF_DEV_KDFCKDR』追加対応（定義のみ）。
                                     ・デバイス『DF_DEV_KDFJPEG』追加対応（定義のみ）。
                                     ・デバイス『DF_DEV_KDFCJPEG』追加対応（定義のみ）。
11/30/05                               1.2.0版対応
                                     ・デバイス『DF_DEV_KDFCKDRTAR』追加対応。（定義のみ）。 [SPEC120-08]
                                     ・デバイス『DF_DEV_APPCUSTOM08』追加対応。（定義のみ）。[SPEC120-08]
                                     ・デバイス『DF_DEV_APPCUSTOM09』追加対応。（定義のみ）。[SPEC120-08]
                                     ・デバイス『DF_DEV_APPCUSTOM10』追加対応。（定義のみ）。[SPEC120-08]
                                     ・デバイス『DF_DEV_APPCUSTOM11』追加対応。（定義のみ）。[SPEC120-08]
12/07/05                               1.2.0-02版対応
                                     ・デバイス名変更
                                       『DF_DEV_KDFCCAM』      => 『DF_DEV_KDFCAM』
                                       『DF_DEV_KDFCCIPHER』   => 『DF_DEV_KDFCIPHER』
                                       『DF_DEV_KDFCTARCIPHER』=> 『DF_DEV_KDFCIPHERTAR』

===========================================================================================*/

/*===========================================================================================
 INCLUDES AND VARIABLE DEFINITIONS
===========================================================================================*/
/*-------------------------------------------------------------------------------------------
   Defines
-------------------------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------------------------
   Include Files
-------------------------------------------------------------------------------------------*/
#include "AEE.h"
#include "AEEInterface.h"
#include "AEEFile.h"


/*-------------------------------------------------------------------------------------------
   Constant Declarations
-------------------------------------------------------------------------------------------*/

/*===========================================================================================
 Macros
===========================================================================================*/

/*-------------------------------------------------------------------------------------------
   Type Declarations
-------------------------------------------------------------------------------------------*/
/* KDDIDFDEVICE                              */
   /* obsoleted macro: available until end of 2006 */
#define   DF_DEV_KDFCCAM        3
#define   DF_DEV_KDFCCIPHER     6
#define   DF_DEV_KDFCTARCIPHER  8

   /* ver1.0.0 */
#define   DF_DEV_KDF            0      /* 移動機内のデータフォルダ                  */
#define   DF_DEV_KDFTAR         1      /* 本体tarアーカイブ内                       */
#define   DF_DEV_KDFC           2      /* 外部メモリデータフォルダ                  */
#define   DF_DEV_KDFCAM         3      /* 外部メモリデジカメフォルダ                */
#define   DF_DEV_KDFCMAIL       4      /* 外部メモリメール領域(未使用)              */
#define   DF_DEV_KDFCPC         5      /* 外部メモリPC領域(未使用)                  */
#define   DF_DEV_KDFCIPHER      6      /* 外部メモリ暗号化領域(CPRM対応移動機のみ)  */
#define   DF_DEV_KDFCTAR        7      /* 外部メモリ暗号化領域内TARアーカイブ内     */
   /* ver1.1.1 */
#define   DF_DEV_KDFCIPHERTAR   8      /* 外部メモリ暗号化領域内部のtarアーカイブ内 */

   /* custom application area */
#define   DF_DEV_APPCUSTOM     64
   /* for IMP */
#define   DF_DEV_KDFCKDR        (DF_DEV_APPCUSTOM)    /* KDDI暗号化領域                            */
#define   DF_DEV_KDFJPEG        (DF_DEV_APPCUSTOM+1)  /* 移動機内の著作権無しJPEG選択(IMP用)       */
#define   DF_DEV_KDFCJPEG       (DF_DEV_APPCUSTOM+2)  /* 外部メモリの著作権無しJPEG(IMP用)         */

   /* for E-Books */
#define   DF_DEV_KDFCKDRTAR     (DF_DEV_APPCUSTOM+3)  /* KDDI暗号化領域内TARアーカイブ内           */

   /* for IPVT */
#define   DF_DEV_APPCUSTOM08    (DF_DEV_APPCUSTOM+8)
#define   DF_DEV_APPCUSTOM09    (DF_DEV_APPCUSTOM+9)
#define   DF_DEV_APPCUSTOM10    (DF_DEV_APPCUSTOM+10)
#define   DF_DEV_APPCUSTOM11    (DF_DEV_APPCUSTOM+11)

#define   DF_DEV_OEMCUSTOM    128      /* OEMカスタム領域 */

#ifdef WIN32
typedef unsigned KDDIDFDEVICE;
#else
typedef byte KDDIDFDEVICE;
#endif


enum {                                 /* GPSfm               */
   GPS_FIX_MODE = 0,                   /* GPS-Fixモード       */
   HYBRID_FIX_MODE,                    /* Hybrid-Fixモード    */
   AFLT_FIX_MODE,                      /* AFLT-Fixモード      */
   BS_REGION_MODE,                     /* BS Regionモード     */
   CELL_SECTOR_CENTER_MODE,            /* Cell Sector Centerモード */
   PRE_FIX_MODE                        /* Pre-Fixモード       */
};

#ifdef WIN32
typedef unsigned GPSfm;
#else
typedef byte GPSfm;
#endif


enum {                                 /* GPSdatum             */
   WGS84_SOKUTIKEI = 0,                /* WGS-84 測地系        */
   TOKYO_JAPAN_SOKUTIKEI               /* Tokyo（日本）測地系  */
};

#ifdef WIN32
typedef unsigned GPSdatum;
#else
typedef byte GPSdatum;
#endif


enum {                                 /* GPSunit                     */
   DMS_FORMAT = 0,                     /* dms(度・分・秒)フォーマット */
   DEGREE_FORMAT                       /* degree(度)フォーマット      */
};

#ifdef WIN32
typedef unsigned GPSunit;
#else
typedef byte GPSunit;
#endif

typedef struct _GPSParam {
   char     szUrl[255+1];              /* GPS情報URL                           */
   GPSfm    fm;                        /* 確認レベル (測位モード)              */
   GPSdatum datum;                     /* 測地系                               */
   GPSunit  unit;                      /* 要求フォーマット                     */
   int32    dwLat;                     /* 算出された位置情報の緯度情報         */
   int32    dwLon;                     /* 算出された位置情報の経度情報         */
} GPSParam;

typedef struct _KDDIDFFileInfo {
   uint32      dwSize;                 /* sizeof(KDDIDFFileInfo) or sizeof(KDDIDFFileInfoEx) */
   const char  szTitle[63+1];          /* 表示用タイトル名(SJIS ASCIIZ)        */
   const char  szName[255+1];          /* 実ファイル名(SJIS ASCIIZ)            */
   uint32      dwCreationDate;         /* データフォルダ格納時の時間(1980/1/6 0時（UTC）からの秒数) */
   uint32      dwFileSize;             /* ファイルサイズ(byte)                 */
} KDDIDFFileInfo;

typedef struct _KDDIDFFileInfoEx {
   /* ver1.0.0 */
   KDDIDFFileInfo dfFileInfo;          /* 基本ファイル情報                     */
   uint32         dwPlayTime;          /* データ再生時間(msec)                 */
   boolean        bRelatedState;       /* データが利用されているかどうかのステータス */
   int            nGPSInfo;            /* GPS情報編集可否                      */
   GPSParam       param;               /* GPS情報構造体                        */
   boolean        bHasCopyWrite;       /* 著作権の有無                         */
   char           szAuthorAtom[80+2];  /* 著作者名(販売元等) (SJIS ASCIIZ)     */
   char           szRightAtom[80+2];   /* 権利者名(SJIS ASCIIZ)                */
   boolean        bEmailAttach;        /* Eメール添付可否                      */
   boolean        bSerialOut;          /* シリアルによる外部送信可否           */
   int            nExternalMemory;     /* 外部メモリ保存可否                   */
   int            nSoundEditable;      /* アフレコ編集可否                     */
   int            nTelopEditable;      /* テロップ編集可否                     */
   int            nUseOtherHS;         /* 機種変更後での利用可否(外メモ用)     */
   /* ver1.1.1 */
   boolean        bUrlAuth;            /* URL認証済みはTRUE、無関係、未認証はFALSE */
   char           szAuthURL[64+2];     /* URL認証済みのファイルでは認証したURL */
} KDDIDFFileInfoEx;

typedef void (* PFNDFFILECB)(void * pUser, KDDIDFFileInfo * pDFFI, int nError);
typedef void (* PFNDFCB)    (void * pUser, int nError);

typedef struct IDataFolder IDataFolder;

/*-------------------------------------------------------------------------------------------
   Macros Declarations
-------------------------------------------------------------------------------------------*/

/*===========================================================================================
 FUNCTION DECLARATIONS AND INLINE FUNCTION DEFINITIONS
===========================================================================================*/
/*-------------------------------------------------------------------------------------------
   Interface Definitions
-------------------------------------------------------------------------------------------*/
AEEINTERFACE(IDataFolder)
{
   INHERIT_IBase(IDataFolder);
   uint32  (* GetFreeSpace) (IDataFolder * pDF, KDDIDFDEVICE dev, uint32 * pdwFree, uint32 * pdwTotal, uint32 * pdwFileSize, uint32 * pdwFileNum);
   int32   (* RegisterEvent)(IDataFolder * pDF, int16 nCardNo, AEECLSID clsid, AEEEvent evt);
   uint32  (* Open)         (IDataFolder * pDF, KDDIDFDEVICE dev, const char * pszFileName, uint32 dwTotalWriteSize, AEEOpenFileMode mode, const char * szOption);
   uint32  (* Seek)         (IDataFolder * pDF, FileSeekType seekType, int32 moveDistance);
   int     (* Read)         (IDataFolder * pDF, int32 * pdwBufferSize, void * pBuffer);
   int     (* Write)        (IDataFolder * pDF, int32 * pdwWriteSize, void * pBuffer);
   void    (* Close)        (IDataFolder * pDF, KDDIDFFileInfo * pFileInfo, boolean bCommit);
   uint32  (* SelectUI)     (IDataFolder * pDF, KDDIDFDEVICE dev, uint16 wSelectNum, uint32 dwMaxFileSize, boolean bDir, PFNDFFILECB pfn, KDDIDFFileInfo * pFInfo, void * pUser);
   uint32  (* DeleteUI)     (IDataFolder * pDF, KDDIDFDEVICE dev, uint32 dwDeleteSize, PFNDFCB pfn, void * pUser);
   uint32  (* Delete)       (IDataFolder * pDF, const char* pszFilePath);
   uint32  (* EnumInit)     (IDataFolder * pDF, KDDIDFDEVICE dev, const char * pszSubDir);
   uint32  (* EnumNext)     (IDataFolder * pDF, KDDIDFFileInfo * pFInfo);
   uint32  (* GetFileInfoEx)(IDataFolder * pDF, const char * pszFilePath, KDDIDFFileInfoEx * pFileInfoEx);
   boolean (* HandleEvent)  (IDataFolder * pDF, AEEEvent evt, uint16 wp, uint32 dwp);
};

/*-------------------------------------------------------------------------------------------
   Access Macros
-------------------------------------------------------------------------------------------*/
#define IDATAFOLDER_AddRef(p)                                        AEEGETPVTBL((p),IDataFolder)->AddRef((p))
#define IDATAFOLDER_Release(p)                                       AEEGETPVTBL((p),IDataFolder)->Release((p))
#define IDATAFOLDER_GetFreeSpace(p, dev, pF, pT, pFS, pdwF)          AEEGETPVTBL((p),IDataFolder)->GetFreeSpace(p, dev, pF, pT, pFS, pdwF)
#define IDATAFOLDER_RegisterEvent(p, n, cls, evt)                    AEEGETPVTBL((p),IDataFolder)->RegisterEvent(p, n, cls, evt)
#define IDATAFOLDER_Open(p, dev, pF, dw, m, szO)                     AEEGETPVTBL((p),IDataFolder)->Open(p, dev, pF, dw, m,szO)
#define IDATAFOLDER_Seek(p, s, n)                                    AEEGETPVTBL((p),IDataFolder)->Seek(p, s, n)
#define IDATAFOLDER_Read(p, pdwB, pB)                                AEEGETPVTBL((p),IDataFolder)->Read(p, pdwB, pB)
#define IDATAFOLDER_Write(p, pS, pB)                                 AEEGETPVTBL((p),IDataFolder)->Write(p, pS, pB)
#define IDATAFOLDER_Close(p, pFI, bC)                                AEEGETPVTBL((p),IDataFolder)->Close(p, pFI, bC)
#define IDATAFOLDER_SelectUI(p, dev, wSN, dwFS, bD, pfn, pFI, pU)    AEEGETPVTBL((p),IDataFolder)->SelectUI(p, dev, wSN, dwFS, bD, pfn, pFI, pU)
#define IDATAFOLDER_DeleteUI(p, dev, dwDS, pfn, pU)                  AEEGETPVTBL((p),IDataFolder)->DeleteUI(p, dev, dwDS, pfn, pU)
#define IDATAFOLDER_Delete(p, pF)                                    AEEGETPVTBL((p),IDataFolder)->Delete(p, pF)
#define IDATAFOLDER_EnumInit(p, dev, pSD)                            AEEGETPVTBL((p),IDataFolder)->EnumInit(p, dev, pSD)
#define IDATAFOLDER_EnumNext(p, pFI)                                 AEEGETPVTBL((p),IDataFolder)->EnumNext(p, pFI)
#define IDATAFOLDER_GetFileInfoEx(p, pFP, pFIEx)                     AEEGETPVTBL((p),IDataFolder)->GetFileInfoEx(p, pFP, pFIEx)
#define IDATAFOLDER_HandleEvent(p, evt, wp, dwp)                     AEEGETPVTBL((p),IDataFolder)->HandleEvent(p, evt, wp, dwp)


/*===========================================================================================
   DATA STRUCTURE DOCUMENTATION
=============================================================================================
=============================================================================================
PFNDFFILECB

Description:
   PFNDFFILECBは、IDATAFOLDER_SelectUI()渡されるコールバック関数の型。

Definition:

   typedef void(* PFNDFFILECB)(void * pUser, KDDIDFFileInfo * pDFFI, int nError)

Members:
   pUser  : ユーザーデータ
   pDFFI  : ファイル情報
   nError : エラーコード

Comments:
   nErrorにて返却されるエラー値は下記の通り。
   SUSCEESS  : 正常終了
   EFAILED   : SelectUIにてファイルが選択されなかった。
   ENOMEMORY : 関数を実行するだけのメモリがなかった。

Version:
   KDDI BREW3.1 搭載移動機より

See Also:
   KDDIDFFileInfo
   IDATAFOLDER_SelectUI

=============================================================================================
PFNDFCB

Description:
   PFNDFCBは、IDATAFOLDER_DeleteUI()に渡されるコールバック関数の型。

Definition:

   typedef void(* PFNDFCB)(void * pUser, int nError)

Members:
   pUser  : ユーザーデータ
   nError : エラーコード

Comments:
   nErrorにて返却されるエラー値は下記の通り。
   SUCCESS   : 正常に処理が行われた。
   EFAILED   : DeleteUIにて必要な数もしくはサイズのファイルが削除できなかった
               若しくはキャンセルされた。
   ENOMEMORY : 関数を実行するだけのメモリがなかった。


Version:
   KDDI BREW3.1 搭載移動機より

See Also:
   IDATAFOLDER_DeleteUI

=============================================================================================
KDDIDFFileInfoEx

Description:
   このデータ構造はデータフォルダファイル詳細情報を取得する。
   詳細情報に関しては、「データフォルダ仕様書」「cdma2000 1x／1xWINeznavigation 機能／操作表
   示仕様書」を合わせて参照のこと。
   取得できる情報は、移動機が採用した「データフォルダ仕様書」のバージョンに依存する。

Definition:

   typedef struct _KDDIDFFileInfoEx {
      // ver1.0.0
      KDDIDFFileInfo dfFileInfo;          // 基本ファイル情報
      uint32         dwPlayTime;          // データ再生時間(msec)
      boolean        bRelatedState;       // データが利用されているかどうかのステータス
      int            nGPSInfo;            // GPS情報編集可否
      GPSParam       param;               // GPS情報構造体
      boolean        bHasCopyWrite;       // 著作権の有無
      char           szAuthorAtom[80+2];  // 著作者名(販売元等) (SJIS ASCIIZ)
      char           szRightAtom[80+2];   // 権利者名(SJIS ASCIIZ)
      boolean        bEmailAttach;        // Eメール添付可否
      boolean        bSerialOut;          // シリアルによる外部送信可否
      int            nExternalMemory;     // 外部メモリ保存可否
      int            nSoundEditable;      // アフレコ編集可否
      int            nTelopEditable;      // テロップ編集可否
      int            nUseOtherHS;         // 機種変更後での利用可否(外メモ用)
      // ver1.1.1
      boolean        bUrlAuth;            // URL認証済みはTRUE、無関係、未認証はFALSE
      char           szAuthURL[64+2]      // URL認証済みのファイルでは認証したURL
   } KDDIDFFileInfoEx;

   GPS情報パラメータの構造体

   typedef struct _GPSParam
   {
      char     szUrl[255+1];  // GPS情報URL
      GPSfm    fm;            // 確認レベル (測位モード)
      GPSdatum datum;         // 測地系
      GPSunit  unit;          // 要求フォーマット
      int32    dwLat;         // 算出された位置情報の緯度情報
      int32    dwLon;         // 算出された位置情報の経度情報
   } GPSParam;

   GPS情報パラメータの定義

   enum
   {
      WGS84_SOKUTIKEI = 0,    // WGS-84 測地系
      TOKYO_JAPAN_SOKUTIKEI   // Tokyo（日本）測地系
   };
   #ifdef WIN32
   typedef unsigned GPSdatum;
   #else
   typedef byte GPSdatum;
   #endif


   enum
   {
      DMS_FORMAT= 0,       // dms(度・分・秒)フォーマット
      DEGREE_FORMAT        // degree(度)フォーマット
   };
   #ifdef WIN32
   typedef unsigned GPSunit;
   #else
   typedef byte GPSunit;
   #endif


   enum
   {
      GPS_FIX _MODE= 0,          // GPS-Fixモード
      HYBRID_FIX_MODE,           // Hybrid-Fixモード
      AFLT_FIX_MODE,             // AFLT-Fixモード
      BS_REGION_MODE,            // BS Regionモード
      CELL_ SECTOR_CENTER_MODE,  // Cell Sector Centerモード
      PRE_FIX_MODE               // Pre-Fixモード
   };
   #ifdef WIN32
   typedef unsigned GPSfm;
   #else
   typedef byte GPSfm;
   #endif


Members:
   メンバ   説明    外メモ
   dfFileInfo      : 基本ファイル情報
                     呼び出し側は必ずdfFileInfo. dfFileInfo .deSize = sizeof(KDDIDFFileInfoEx)を設定すること   ○
   bEmailAttach    : Eメールへの添付可否                                                                       ○
                     TRUE ：  Emailへ添付可
                     FALSE ： Emailへ添付不可
   bSerialOut      : シリアルによる外部への送信可否                                                            ○
                     TRUE ： シリアルによる外部への送信可
                     FALSE ： シリアルによる外部への送信不可
   nUseOtherHS     : 機種変更後での利用可否(外部メモリのみ)                                                    ○
                     0 ： 情報なし
                     1 ： 利用可
                     2 ： 利用不可
   dwPlayTime      : データの再生時間(ms)
                     再生時間がない場合は0
   bRelatedState   : TRUE ： データが移動機で利用されている
                     FALSE ： データが移動機で利用されていない
   nGPSInfo        : 0 ： GPS情報なし
                     1 ： GPS情報編集可
                     2 ： GPS情報編集不可
   GPSParam        : GPS情報パラメータの構造体。「eznavigation 機能／操作表示仕様書」参照
   bHasCopyWrite   : TRUE  ： 著作権あり
                     FALSE ： 著作権なし
   szAuthorAtom    : AuthorAtom に格納されている文字列。
                     ’80Byteの文字列’＋”\0”存在しない場合は”\0”
   szRightAtom     : 権利者RightAtom に格納されている文字列。
                     ’80Byteの文字列’＋”\0”存在しない場合は”\0”
   nExternalMemory : 外部メモリへの保存可否
                     0 ： 情報無なし、もしくは外部メモリにある場合
                     1 ： 外部メモリへの保存可
                     2 ： 外部メモリへの保存不可
   nSoundEditable  : アフレコ編集可否
                     0 ： 情報なし
                     1 ： アフレコ編集可
                     2 ： アフレコ編集不可
   nTelopEditable  : テロップ編集可否
                     0 ： 情報なし
                     1 ： テロップ編集可
                     2 ： テロップ編集不可
   nUseOtherHS     : 0 ： 情報なし
                     1 ： 機種変後の利用可
                     2 ： 機種変後の利用不可
   bUrlAuth        : TRUE  ： ファイルがURL認証済み状態
                     FALSE ： 不明、それ以外の状態の場合
   szAuthURL       : ファイルがURL認証済みである場合は、認証を行ったURL


Comments:
   なし

See Also:
   IDATAFOLDER_GetFileInfoEx

=============================================================================================
KDDIDFDEVICE

Description:
   このENUMは、BREWフォルダとファイルのやり取りを行う相手のデバイスを指定する。

Definition:

#define   DF_DEV_KDF            0      // 移動機内のデータフォルダ
#define   DF_DEV_KDFTAR         1      // 本体tarアーカイブ内
#define   DF_DEV_KDFC           2      // 外部メモリデータフォルダ
#define   DF_DEV_KDFCAM         3      // 外部メモリデジカメフォルダ
#define   DF_DEV_KDFCMAIL       4      // 外部メモリメール領域(未使用)
#define   DF_DEV_KDFCPC         5      // 外部メモリPC領域(未使用)
#define   DF_DEV_KDFCIPHER      6      // 外部メモリ暗号化領域(CPRM対応移動機のみ)
#define   DF_DEV_KDFCTAR        7      // 外部メモリ暗号化領域内TARアーカイブ内
#define   DF_DEV_KDFCIPHERTAR   8      // 外部メモリ暗号化領域内部のtarアーカイブ内

#define   DF_DEV_APPCUSTOM     64      // 個別アプリケーション領域
#define   DF_DEV_KDFCKDR       (DF_DEV_APPCUSTOM)    // 外部メモリKDR暗号化領域(KDR対応端末のみ)
#define   DF_DEV_KDFJPEG       (DF_DEV_APPCUSTOM+1)  // 移動機内のJPEG選択用デバイス
#define   DF_DEV_KDFCJPEG      (DF_DEV_APPCUSTOM+2)  // 外部メモリ内のJPEG選択用デバイス
#define   DF_DEV_OEMCUSTOM    128      // OEMカスタム領域

// obsoleted macro: available until end of 2006
#define   DF_DEV_KDFCCAM        3      // 外部メモリデジカメフォルダ
#define   DF_DEV_KDFCCIPHER     6      // 将来的に削除される
#define   DF_DEV_KDFCTARCIPHER  8      // 将来的に削除される

Comments:
   なし

See Also:
   なし

=============================================================================================
=============================================================================================
   INTERFACE DOCUMENTATION
=============================================================================================
*/
#endif // __IDATAFOLDER_H__

