/***************************************************************************
 *
 *	CRI Middleware SDK
 *
 *	Copyright (c) 2005 CRI-MW
 *
 *	Library	: ADX Library
 *	Module	: Environmentally-dependent header for PS3 PPU
 *	File	: adx_ps3ppu.h
 *	Create	: 2005-08-05
 *	Version	: Refer "ADXPS3PPU_VER_NUM"
 *
 ***************************************************************************/

/* 多重定義防止					*/
/* Prevention of redefinition	*/
#ifndef _ADXPS3PPU_H_INCLUDED
#define _ADXPS3PPU_H_INCLUDED

/***************************************************************************
 *       バージョン情報
 *       Version
 ***************************************************************************/
#define ADXPS3PPU_VER_NAME		"ADXPS3PPU"
#define ADXPS3PPU_VER_NUM		"0.81"
#define ADXPS3PPU_VER_OPTION	

/***************************************************************************
 *      インクルードファイル
 *      Include files
 ***************************************************************************/
#include <stdio.h>
#include <cell/mixer.h>
#include "cri_xpt.h"

/***************************************************************************
 *      定数
 *      Constants
 ***************************************************************************/
/* フレームワーク種別（PS3 PPU） */
/* Framework type for PS3 PPU */
typedef enum {
	ADXM_FRAMEWORK_DEFAULT				= 0,	/* デフォルト				*/
												/* Default					*/
	ADXM_FRAMEWORK_PS3PPU_SINGLE_THREAD	= 1,	/* シングルスレッド			*/
												/* Single thread			*/
	ADXM_FRAMEWORK_PS3PPU_MULTI_THREAD	= 2,	/* マルチスレッド			*/
												/* Multi thread				*/
} AdxmFramework;
/* ■フレームワーク種別（PS3 PPU）についての補足 */
/* (a) ADXM_FRAMEWORK_DEFAULTはプラットフォーム共通の定義であり、そのプ		*/
/* 　　ラットフォームでお勧めのフレームワークが選択されます。				*/
/* 　　PS3 PPUではマルチスレッド（ADXM_FRAMEWORK_PS3PPU_MULTI_THREAD）が	*/
/* 　　選択されます。														*/

/* デフォルトプライオリティ */
/* Default priority */
#define ADXM_PS3PPU_PRIO_VV			(100)		/* 仮想Vsync				*/
												/* Virtual Vsync			*/
#define ADXM_PS3PPU_PRIO_VSYNC		(500)		/* Vsyncスレッド			*/
												/* Vsync thread				*/
#define ADXM_PS3PPU_PRIO_FS			(600)		/* ファイル処理スレッド		*/
												/* File processing thread	*/
#define ADXM_PS3PPU_PRIO_MAIN		(1001)		/* メインスレッド			*/
												/* Main thread				*/
#define ADXM_PS3PPU_PRIO_IDLE		(1500)		/* アイドルスレッド			*/
												/* Idle thread				*/

/* デフォルトスタックサイズ */
/* Default stack size */
#define ADXM_PS3PPU_STACK_SIZE		(8192)		/* 8k byte */

/***************************************************************************
 *      処理マクロ
 *      Macro Functions
 ***************************************************************************/

/***************************************************************************
 *      データ型宣言
 *      Data Type Declarations
 ***************************************************************************/
/* スレッドセットアップパラメータ（PS3 PPU） */
/* Thread setup parameter for PS3 PPU */
typedef struct {
	/* プライオリティ */
	Sint32	priority_vv;		/* 仮想Vsync				*/
								/* Virtual Vsync			*/
	Sint32	priority_vsync;		/* Vsyncスレッド			*/
								/* Vsync thread				*/
	Sint32	priority_fs;		/* ファイル処理スレッド		*/
								/* File processing thread	*/
	Sint32	priority_main;		/* メインスレッド			*/
								/* Main thread				*/
	Sint32	priority_idle;		/* アイドルスレッド			*/
								/* Idle thread				*/
} AdxmThreadSprm_PS3PPU;
/* ■スレッドのセットアップを行う際の注意点									*/
/* (a) セットアップパラメータは、ADXM_SetupFramework関数に引数prmとして		*/
/* 　　渡します。NULLを指定するとデフォルト設定が使用されます。				*/
/* (b) セットアップパラメータは、フレームワークとして						*/
/* 　　ADXM_FRAMEWORK_PS3PPU_MULTI_THREADを選んだ場合のみ有効です。			*/
/* (c) プライオリティは数値が低いほど優先度が高いです。						*/


/* サウンドシステムの設定構造体		*/
/* Configuration of sound system	*/
typedef struct {
	CellAANHandle	mixer_handle;			/* サラウンドミキサのハンドル	*/
											/* Handle of Surround Mixer		*/
	Sint32			num_output_channels;	/* 出力チャンネル数				*/
											/* Number of output channels	*/
	Sint32			num_max_voices;			/* 最大ボイス数					*/
											/* Maximum number of voices		*/
	Uint8			*work;					/* ワーク領域					*/
											/* Working area					*/
	Sint32			work_size;				/* ワーク領域サイズ				*/
											/* Size of working area			*/
} Adxps3SoundConfig;
/* ■サウンドシステムの設定構造体についての補足								*/
/* (a) ワーク領域サイズはADXPS3_CalcSoundWorkSize関数により計算してくだ		*/
/* 　　さい。また、計算したワーク領域サイズ分のメモリを確保し、ワーク領		*/
/* 　　域として設定してください。											*/
/*	【例】																	*/
/*		Adxps3SoundConfig config;											*/
/*		memset(&config, 0, sizeof(config));									*/
/*		config.mixer_handle			= sur_mixer_handle;						*/
/*		config.num_output_channels	= NUM_OUTPUT_CHANNELS;					*/
/*		config.num_voices			= NUM_MAX_VOICES;						*/
/*		config.work_size			= ADXPS3_CalcSoundWorkSize(&config);	*/
/*		config.work					= malloc(config.work_size);				*/
/* (b) mixer_handleにNULLを設定することで、音声を出力しない（サラウンド		*/
/* 　　ミキサを作成しない）環境にも対応できます。							*/


/*	PS3ファイルシステムのセットアップパラメータ構造体	*/
/*	Parameter structure for setup of PS3 file system	*/
typedef struct {
	const Char8 *rtdir;				/* ルートディレクトリ	*/
									/* Root directory		*/
} Adxps3SprmPs3Fs;

/***************************************************************************
 *      変数宣言
 *      Variable Declarations
 ***************************************************************************/

/***************************************************************************
 *      関数宣言
 *      Function Prototypes
 ***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif

/***
*			フレームワーク設定関数
*			Framework setting functions
***/
/* CRIミドルウェアのフレームワークセットアップ */
/* Setup the framework of CRI Middleware */
Bool CRIAPI ADXM_SetupFramework(AdxmFramework framework, void *prm);
/* CRIミドルウェアのフレームワークの終了 */
/* Shutdown the framework of CRI Middleware */
Bool CRIAPI ADXM_ShutdownFramework(void);

/***
*			サウンドシステム関数
*			Sound system functions
***/
/* サウンドシステムに必要なワークサイズの計算 */
/* Calculate working area size for sound system */
Sint32 CRIAPI ADXPS3_CalcSoundWorkSize(const Adxps3SoundConfig *config);

/* サウンドシステムのセットアップ */
/* Setup sound system */
Bool CRIAPI ADXPS3_SetupSound(const Adxps3SoundConfig *config);
/* サウンドシステムのシャットダウン */
/* Shutdown sound system */
void CRIAPI ADXPS3_ShutdownSound(void);

/* サラウンドミキサにオーディオデータを入力するための通知コールバック関数 */
/* Callback function for notification of audio data input from surround mixer */
Sint32 CRIAPI ADXPS3_SoundNotifyCallback(void *arg, Uint32 counter, Uint32 num_samples);

/***
*			ファイルシステム設定関数
*			File system setting functions
***/
/* PS3ファイルシステムのセットアップ */
/* Setup file system for PS3 */
void CRIAPI ADXPS3_SetupPs3Fs(const Adxps3SprmPs3Fs *sprm);
/* PS3ファイルシステムのシャットダウン */
/* Shutdown file system for PS3 */
void CRIAPI ADXPS3_ShutdownPs3Fs(void);


#ifdef __cplusplus
}
#endif

#endif	/* #ifndef _ADXPS3_H_INCLUDED */

/* end of file */
