/// @file FILE            : INATIVE.h
///
/// @brief SERVICES        : INATIVE Interface 
///
/// @brief DESCRIPTION     : INATIVE Interface  Header
///
/// @brief Brew制御部アプリ管理下の子アプリ(Adaptor)に対しイベントを通知するサービスを提供します。
///
///【INATIVEからKCPBRIGEに配信しているイベント】
///
///	KPADP_CREATE_Req,         // INATIVE_Init()
///	KPADP_RELEASE_Req,        // INATIVE_Release()	
///	KPADP_START_Req,          // INATIVE_Start()
///	KPADP_SUSPENReq,          // INATIVE_Suspend()
///	KPADP_RESUME_Req,         // INATIVE_Resume()
///	KPADP_ENDKEY_Req,         // INATIVE_EndKey()
///	KPADP_STOP_Req,           // INATIVE_Stop()
///	KPADP_SHUTDOWN_Req,       // INATIVE_Shutdown()
///	KPADP_TERMSTATUSNOTIFY,   // INATIVE_TermStatusNotify()
///	KPADP_SYNCEVENT,          // INATIVE_SendEvent()
///	KPADP_ASYNCEVENT,         // INATIVE_PostEvent()
///	KPADP_RESULT              // INATIVE_Result()
///
///     (C) Copyright 2005 Sony Ericsson Mobile Communications Japan, Inc.
///

#ifndef INATIVE_H
#define INATIVE_H

#include "AEEComdef.h"
#include "AEE.h"
#include "INATIVE.bid"



//インスタンスのタイプ名宣言
typedef struct _INATIVE INATIVE;

QINTERFACE(INATIVE)
{
	//AddRefとReleaseを宣言
	DECLARE_IBASE(INATIVE)

	//以下拡張APIを定義
	int (*init)( INATIVE *po, AEECLSID cls, uint16 wParam, uint32 dwParam );
	int (*start)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*suspend)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*resume)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*stop)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*endkey)( INATIVE *po );
	int (*shutdown)( INATIVE *po );
	int (*termstatusnotify)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*sendevent)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*postevent)( INATIVE *po, uint16 wParam, uint32 dwParam );
	int (*result)( INATIVE *po, boolean beSuccess, uint32 Reason );
	
};

#if !defined DOCUMENTATION

#define INATIVE_AddRef(p) GET_PVTBL(p,INATIVE)->AddRef(p)
#define INATIVE_Release(p) GET_PVTBL(p,INATIVE)->Release(p)
#define INATIVE_Init(p,cls,wParam,dwParam) GET_PVTBL(p,INATIVE)->init(p,cls,wParam,dwParam)
#define INATIVE_Start(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->start(p,wParam,dwParam)
#define INATIVE_Suspend(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->suspend(p,wParam,dwParam)
#define INATIVE_Resume(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->resume(p,wParam,dwParam)
#define INATIVE_Stop(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->stop(p,wParam,dwParam)
#define INATIVE_EndKey(p) GET_PVTBL(p,INATIVE)->endkey(p)
#define INATIVE_Shutdown(p) GET_PVTBL(p,INATIVE)->shutdown(p)
#define INATIVE_TermStatusNotify(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->termstatusnotify(p,wParam,dwParam)
#define INATIVE_SendEvent(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->sendevent(p,wParam,dwParam)
#define INATIVE_PostEvent(p,wParam,dwParam) GET_PVTBL(p,INATIVE)->postevent(p,wParam,dwParam)
#define INATIVE_Result(p,beSuccess,Reason) GET_PVTBL(p,INATIVE)->result(p,beSuccess,Reason)



#else

uint32 INATIVE_AddRef(INATIVE* po);
uint32 INATIVE_Release(INATIVE* po);

//**********************************************************************
//  int INATIVE_Init( CNATIVE *po, AEECLSID cls, uint16 wParam, uint32 dwParam )
//
//	Inputs
/// @param   cls :クラスID
/// @param    wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   EFAILED: 失敗した場合 等
///	Description
///	@brief ADPにADPインスタンス生成を要求します。
///	この関数はINATIVEインスタンス生成後必ずコールする必要があります。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Init( CNATIVE *po, AEECLSID cls, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_Start( INATIVE *po,uint16 wParam, uint32 dwParam )
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにStart処理を要求します。
///	この関数はEVT_APP_START受信後、必ずADPに通知してください。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Start( INATIVE *po, AEECLSID cls, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_Suspend( INATIVE *po, uint16 wParam, uint32 dwParam )
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにSuspend処理を要求します。
///	この関数はEVT_APP_SUSPEND受信後、必ずADPに通知してください。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Suspend( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_Resume( INATIVE *po, uint16 wParam, uint32 dwParam )
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにResume処理を要求します。
///	この関数はEVT_APP_RESUME受信後、必ずADPに通知してください。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Resume( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_Stop( INATIVE *po, uint16 wParam, uint32 dwParam )
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにStop処理を要求します。
///	この関数はEVT_APP_STOP受信後、必ずADPに通知してください。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Stop( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_EndKey( INATIVE *po)
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにEndKeyイベントを通知します。
///	この関数はEndKeyイベント受信後、必ずADPに通知してください。
///	現状のシステムでは基本的に、EndKeyイベントをBrew側のみに通知します。
///	よって、このイベントによりNative側へのEndKeyの通知を実現します。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_EndKey( INATIVE *po);

//**********************************************************************
//  int INATIVE_Shutdown( INATIVE *po)
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにShutDownイベントを通知します。
///	この関数はShutDownイベント受信後、必ずADPに通知してください。
///	現状のシステムでは基本的に、ShutDownイベントをBrew側のみに通知します。
///	よって、このイベントによりNative側へのShutDownの通知を実現します。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_Shutdown( INATIVE *po);

//**********************************************************************
//  int INATIVE_TermStatusNotify( INATIVE *po, uint16 wParam, uint32 dwParam );
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
///	@brief ADPにステータス変更があったことを通知します。
///	使用用途はステータス変更通知を受けとった場合でかつ、
///	そのステータス変更をADPに通知する必要がある場合に使用します。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_TermStatusNotify( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_SendEvent( INATIVE *po, uint16 wParam, uint32 dwParam );
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
/// @retval   その他: 失敗した場合 等(ADPでのリターン値)
///	Description
/// @brief	ADPに同期的にEventを通知します。
///	汎用的名イベント通知関数です。ADPに対しISHELL_SendEvent()と同じ用に使用できます。
///	このイベント送信は同期処理です。
//**********************************************************************

int INATIVE_SendEvent( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_PostEvent( INATIVE *po, uint16 wParam, uint32 dwParam );
//
//	Inputs
/// @param   wParam: ユーザーデータ
/// @param   dwParam: ユーザーデータ
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
///	Description
/// @brief	ADPに非同期的にEventを通知します。
///	汎用的名イベント通知関数です。ADPに対しISHELL_PostEvent()と同じ用に使用できます。
///	このイベント送信は非同期処理です。
//**********************************************************************

int INATIVE_PostEvent( INATIVE *po, uint16 wParam, uint32 dwParam );

//**********************************************************************
//  int INATIVE_Result( INATIVE *po, boolean beSuccess, uint32 Reason );
//
//	Inputs
/// @param   beSuccess: Adpからの要求に対する結果
/// @param   Reason: 詳細情報(ユーザーにて自由に定義可能)
///	Outputs
/// @retval   SUCCESS : 正常終了した場合
/// @retval   EBADSTATE :INATIVE_Init()未実行
/// @retval   ENOMEMORY :メモリ獲得失敗
///	Description
/// @brief	ADPの要求に対する結果をADPに通知します。(汎用的な結果通知)
///	使用用途はNativeからのイベントに対してのアクションの結果を通知する場合に使用します。
///	このイベント送信は非同期処理です。
//**********************************************************************
int INATIVE_Result( INATIVE *po, boolean beSuccess, uint32 Reason );

#endif
#endif //INATIVE_H
