#ifndef IKDDINAVI_H
#define IKDDINAVI_H /* #ifndef IKDDINAVI_H */
/*============================================================================

FILE:  IKDDINAVI.h

SERVICES:


GENERAL DESCRIPTION:


REVISION HISTORY:

============================================================================

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

============================================================================*/
/*===============================================================================
    INCLUDES AND VARIABLE DEFINITIONS
===============================================================================*/

/*-------------------------------------------------------------------
      Include Files
-------------------------------------------------------------------*/
#include "AEE.h"
#include "KDDINAVI.bid"

/*-------------------------------------------------------------------
      Type Declarations
-------------------------------------------------------------------*/

//
// GPS Restriction
//
#define AEEKDDI_GPS_ALLOWED         0              // 許可（確認無し）
#define AEEKDDI_GPS_VERIFY          1              // 確認
#define AEEKDDI_GPS_RESTRICTED      2              // 不許可

//
// Postion Information
//
#define AEEKDDI_MAX_TITLE_LENGTH    80             // 最大タイトル長
#define AEEKDDI_MAX_LAT_LENGTH      12             // 最大経度長
#define AEEKDDI_MAX_LON_LENGTH      13             // 最大緯度長

typedef struct _KDDI_POSITION_INFO {
   uint32 dwResult;                                // 処理結果
   char   szTitle[AEEKDDI_MAX_TITLE_LENGTH+1];     // タイトル
   byte   datum;                                   // 測位系
   byte   unit;                                    // 要求フォーマット
   char   szLat[AEEKDDI_MAX_LAT_LENGTH +1];        // 経度
   char   szLon[AEEKDDI_MAX_LON_LENGTH +1];        // 緯度
   byte   fm;                                      // 測位モード
} KDDI_POSITION_INFO;

// Postion Information Result
#define KDDINAVI_RESULT_SUCCESS     0              // 成功
#define KDDINAVI_RESULT_FAILED      1              // 失敗


//-------------------------------------------------------------------
// Interface Definitions
//-------------------------------------------------------------------

typedef struct IKDDINAVI IKDDINAVI;

//********************************************************************************************************************************
//
// IKddiNavi Interface
//
//********************************************************************************************************************************

AEEINTERFACE(IKDDINAVI) {
   DECLARE_IBASE(IKDDINAVI)
   int (*GetGpsRestriction)(IKDDINAVI *pIKddiNavi, uint16 *pwRestriction);
   int (*GetTargetInfo)    (IKDDINAVI *pIKddiNavi, void **ppTargetInfo);
   int (*WritePositionData)(IKDDINAVI *pIKddiNavi, AEEEvent EventCode, KDDI_POSITION_INFO *pPositionInfo, void *pTargetInfo, boolean bClose);
   int (*ReadPositionData) (IKDDINAVI *pIKddiNavi, AEEEvent EventCode, KDDI_POSITION_INFO *pPositionInfo, void **ppTargetInfo);
   int (*WriteMySpot)      (IKDDINAVI *pIKddiNavi, AEEEvent EventCode, KDDI_POSITION_INFO *pPositionInfo, void **ppTargetInfo);
};

// Access Macros for IKddiNavi interface

#define IKDDINAVI_AddRef(p)                              AEEGETPVTBL((p),IKDDINAVI)->AddRef((p))
#define IKDDINAVI_Release(p)                             AEEGETPVTBL((p),IKDDINAVI)->Release((p))
#define IKDDINAVI_GetGpsRestriction(p, pw)               AEEGETPVTBL((p),IKDDINAVI)->GetGpsRestriction(p, pw)
#define IKDDINAVI_GetTargetInfo(p, ppTI)                 AEEGETPVTBL((p),IKDDINAVI)->GetTargetInfo((p), (ppTI))
#define IKDDINAVI_WritePositionData(p, e, pPI, pTI, b)   AEEGETPVTBL((p),IKDDINAVI)->WritePositionData(p, e, pPI, pTI, b)
#define IKDDINAVI_ReadPositionData(p, e, pPI, ppTI)      AEEGETPVTBL((p),IKDDINAVI)->ReadPositionData(p, e, pPI, ppTI)
#define IKDDINAVI_WriteMySpot(p, e, pPI, ppTI)           AEEGETPVTBL((p),IKDDINAVI)->WriteMySpot(p, e, pPI, ppTI)



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

KDDI_POSITION_INFO

Description:
   IKDDINAVIインタフェイスのAPIがネイティブと交換する位置情報は、下記の
   構造体を用いる。
   本構造体は、処理結果およびtitle情報が含まれる。

Definition:

typedef struct _KDDI_POSITION_INFO {
   uint32 dwResult;                                // 処理結果
   char   szTitle[AEEKDDI_MAX_TITLE_LENGTH+1];     // タイトル
   byte   datum;                                   // 測位系
   byte   unit;                                    // 要求フォーマット
   char   szLat[AEEKDDI_MAX_LAT_LENGTH +1];        // 経度
   char   szLon[AEEKDDI_MAX_LON_LENGTH +1];        // 緯度
   byte   fm;                                      // 測位モード
} KDDI_POSITION_INFO;

Members:
   dwResult: 処理結果
   szAdd   : 0x00終端のadd情報(情報が存在しない場合は、先頭のバイトで0x00終端とする)
   datum   :“0” WSG-84測位系
            “1” Tokyo(日本)測位系
   unit    :“0” dms(度・分・秒)
            “1” degree
   szLat   : 0x00終端の緯度情報  +35.12.34.56/+135.12345
   szLon   : 0x00終端の経度情報  +135.12.34.56/+135.123456
   fm      : 測位モード
            “0”GPS-Fix
            “1”Hybrid-Fix
            “2”AFLT-Fix
            “3”BS Region
            “4”Call Sector Center
            “5”Pre-Fix

Comments:
   None

Side Effects:
   None
=======================================================================

=======================================================================
INTERFACES   DOCUMENTATION
=======================================================================
Interface Name: IKddiNavi

Description:
   IKDDINAVIインタフェイスは、BREW2.1のKDDIカスタマイズとして追加される。
   
   このインタフェイスを使用するには「Posdet」もしくは全ての特権レベルを
   設定する必要があります。
   
List of functions
   このインタフェイスには以下の関数が含まれる。
   IKDDINAVI_AddRef
   IKDDINAVI_ReadPositionData
   IKDDINAVI_Release

===========================================================================

Function: IKDDINAVI_AddRef()

Description:
   この関数は IKDDINAVIインタフェースオブジェクトの参照カウントを増やす。
   これは呼び出し元が複数の場合にオブジェクトを共有することを許容する。

Prototype:
   uint32 IKDDINAVI_AddRef(IKDDINAVI *pIKddiNavi)

Parameters:
   pIKddiNavi: Pointer to the IKDDINAVI Interface object.

Return Value:
   増加後のオブジェクトに対する参照カウント

Comments:
   オブジェクトが有効であれば正の値が返る.

Side Effects:
   None

See Also:
   IKDDINAVI_Release()
===========================================================================

Function: IKDDINAVI_ReadPositionData()

Description:
   ネイティブに遷移して位置データを取得する。

Prototype:
   int IKDDINAVI_ReadPositionData(IKDDINAVI *pIKddiNavi,
                                  AEEEvent EventCode,
                                  KDDI_POSITION_INFO *pPositionInfo,
                                  void **ppTargetInfo)

Parameters:
   pIKddiNavi   : IKDDINAVIオブジェクトへのポインタ
   EventCode    : 処理完了後に通知されるイベント(EVT_APP_USER以上の値を指定)
   pPositionInfo: 取得結果が格納される領域
   ppTargetInfo : 取得対象情報が格納されているポインタを格納する領域へのポインタ

Return Value:
   KDDI_SUCCESS    - 成功
   KDDI_EFAILED    - 失敗
   KDDI_EBADPARAM  - 不正なパラメータ
   KDDI_EPRIVLEVEL - 特権レベルが不正

Comments:
   本APIを呼び出した場合、アプレットはサスペントされる。
   結果は"pPositionInfo"が示す領域に返却される。
   ここにデータが返却されるのは、指定したイベントが通知されたときである。
   サスペンド後は、ネイティブのUIに遷移し、下記の場所から位置データを取得することができる。
   マイスポットリスト
   アドレス帳
   プロフィール
   データフォルダ

   ネイティブのUIに遷移し、その処理の終了を示すイベントが通知された場合、KDDI_POSITION_INFO
   のメンバであるdwResultに処理結果が格納されている。
   KDDINAVI_RESULT_SUCCESS  取得成功
   KDDINAVI_RESULT_FAILED   取得失敗


Side Effects:
   None

See Also:
   None
===========================================================================

Function: IKDDINAVI_Release()

Description:
   この関数はIKDDINAVIインタフェースオブジェクトの参照カウントを減らす。
   参照カウントが０（ゼロ）に達したら、オブジェクトはメモリから解放され、無効となる。

Prototype:
   uint32 IKDDINAVI_Release(IKDDINAVI *pIKddiNavi)

Parameters:
   pIKddiNavi: Pointer to the IKDDINAVI Interface object.

Return Value:
   参照カウント: 減少後のオブジェクトに対する参照カウント
   ０（ゼロ）  : オブジェクトが既に解放され無効となっていた場合

Comments:
   None

Side Effects:
   None

See Also:
   IKDDINAVI_AddRef()
===========================================================================*/


#endif /* #ifndef IKDDINAVI_H */



